目录
硬件:电脑、bh1750、Arduino
bh1750模块在Arduino上的使用
实现效果
详细说明
使用的BH1750有五个引脚,分别是VCC,GND,SCL,SDA和ADDR。五个引脚分别接上Arduino UNO的3.3V,GND,A5与A4接口,ADDR引脚悬空不接。
在使用IDE烧录程序之后,要先进入设备管理器查看UNO板的串口,那么我自己的两台设备都默认为串口COM3.,要先选择串口,然后打开工具中的串口监视器,检查设备运行情况。
代码
#include <Wire.h> //IIC
#include <math.h>
int BH1750address = 0x23;
byte buff[2];
void setup()
{
Wire.begin();
Serial.begin(9600);
}
void loop()
{
int i;
uint16_t val=0;
BH1750_Init(BH1750address);
delay(1000);
if(2==BH1750_Read(BH1750address))
{
val=((buff[0]<<8)|buff[1])/1.2;
Serial.print(val,DEC);
Serial.println("[lx]");
}
delay(150);
}
int BH1750_Read(int address) //
{
int i=0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while(Wire.available()) //
{
buff[i] = Wire.read(); // receive one byte
i++;
}
Wire.endTransmission();
return i;
}
void BH1750_Init(int address)
{
Wire.beginTransmission(address);
Wire.write(0x10);
//1lx reolution 120ms
Wire.endTransmission();
}
ros和arduino通信
#include<ros.h>
#include <std_msgs/UInt16.h>
std_msgs::UInt16 temp_msg;
ros::Publisher light("light", &temp_msg);
ros::NodeHandle nh;
#include <Wire.h> //IIC
#include <math.h>
int BH1750address = 0x23;
byte buff[2];
void setup()
{
Wire.begin();
Serial.begin(57600);
nh.initNode();
nh.advertise(light);
}
void loop()
{
int i;
uint16_t val=0;
BH1750_Init(BH1750address);
delay(1000);
if(2==BH1750_Read(BH1750address))
{
val=((buff[0]<<8)|buff[1])/1.2;
Serial.print(val,DEC);
Serial.println("[lx]");
}
temp_msg.data=val;
light.publish(&temp_msg);
nh.spinOnce();
delay(150);
}
int BH1750_Read(int address) //
{
int i=0;
Wire.beginTransmission(address);
Wire.requestFrom(address, 2);
while(Wire.available()) //
{
buff[i] = Wire.read(); // receive one byte
i++;
}
Wire.endTransmission();
return i;
}
void BH1750_Init(int address)
{
Wire.beginTransmission(address);
Wire.write(0x10);
//1lx reolution 120ms
Wire.endTransmission();
}
程序下载和运行
首先:roscore
其次:rosrun rosserial_python serial_node.py /dev/ttyACM0
/dev/ttyACM0 这个是自己的端口号
最后:rostopic echo light