cooska

前人种树,后人乘凉
posts - 24, comments - 0, trackbacks - 0, articles - 10

导航

公告

arduino与传感器

Posted on 2011-01-20 22:01 cooska 阅读(...) 评论(...) 编辑 收藏

这几天一口气解决了多个传感器与arduino的连接于访问。

dht11温湿度传感器,超声波、火焰、环境光线、人体热释电这几个。

温湿度传感器是从机器人基地购买的,因为他们提供了积木式的链接针脚和连接线,只要对应插好就行,十分方便,相关代码也在前篇文章介绍的有,直接复制就能用。

因为火焰和环境光传感器能输出0~255的值,我把它们接到模拟口上面了,以便实时发送数据出来。人体感应的传感器由于只输出高低电平,所以接到了数字口。

对于这三个传感器的数据读取,我采用了统一的函数,因为他们的读取方式一样,直接read输入口的针脚就行。

函数如下:

int GetData(int pinnum,String pmod){
  int datastr;
if(pmod=="analog"){
datastr=analogRead(pinnum);
}
else
{
datastr=digitalRead(pinnum);
}
return datastr;
}

 其中 函数括号里 pinnum是要输入针脚号码,pinmod是输入数字口还是模拟口,模拟口就写 analog,数字口就写digital。

先定义好每个传感器的针脚号码,在setup里定义好输出,然后在loop里需要读出数据的地方使用该函数。

比如:

int lightpin=1;//环境光线脚 analog
int anmpin=50;//人体接近脚 digital
int firepin=3;//火焰脚 analog

String OutStr;

void setup(){
Serial.begin(9600);
pinMode(anmpin,INPUT);
pinMode(firepin,INPUT);
pinMode(lightpin,INPUT);
}

void loop(){
  OutStr =GetData(anmpin,"digital");

  Serial.print(OutStr);
  OutStr =GetData(firepin,"analog");

  Serial.print(OutStr);
  OutStr =GetData(lightpin,"analog");
  Serial.print(OutStr);

}

这样便能方便的输出需要的数据了,对于接了多个类似只负责输出数据的传感器的arduino很适用。

关于超声波传感器,我也弄了个函数

int GetCSB(){
 digitalWrite(csboutputPin, LOW); // 使发出发出超声波信号接口低电平2μs
  delayMicroseconds(2);
  digitalWrite(csboutputPin, HIGH); // 使发出发出超声波信号接口高电平10μs,这里是至少10μs
  delayMicroseconds(10);
  digitalWrite(csboutputPin, LOW);    // 保持发出超声波信号接口低电平
  int distance = pulseIn(csbinputPin, HIGH);  // 读出脉冲时间
  distance= distance * 0.017;   // 将脉冲时间转化为距离(单位:厘米)
  return distance;   //输出距离值               
}

要注意的是,我适用的传感器是4个针脚,2个分别接vcc和gnd,另外2个接数字口,分别负责电平信号的输入与输出。

要读出数据的话   只要写 int s=GetCSB(); 就完事了,很方便吧   呵呵