基于Arduino的部分常用传感器嵌入式开发代码总结(一)

             基于Arduino的部分常用传感器嵌入式开发代码总结(一)

                                                                                                                                                                                     作者:田超凡

                                                                                                                                                                       时间:2019年8月20日

目录

1.DHT11 温湿度传感器

2.PT550 亮度传感器

3.PIR光敏运动传感器

更多传感器后面会抽时间持续更新,更多对Arduino物联网开发感兴趣可以去Arduino中文社区官网查找资料:https://www.arduino.cn/

注意:

1.本总结文档为本人经常使用的一些传感器硬件Arduino代码总结,传感器和端口通信只提供连接图,其他相关的非程序代码问题(如端口占用、硬件连接错误)可以到Arduino开源官网查找解决方案。硬件连接一定要正确,否则在有些传感器电压比较高的情况下可能会烧坏传感器、UNO主板。如果程序发布运行后发现UNO开发板长时间红灯常亮或温度升高请立即断开UNO开发板和电脑的连接。

2.Arduino开发环境有很多,目前官方推荐的是Arduino IDE,也可以使用一些其他的图形化IDE进行嵌入式开发。

1.一个UNO开发板只能对应一个COM端口,可以在Arduino IDE设置COM端口,默认COM3

2.Arduino程序是基于C语言开发的,很多传感器例程代码需要#include 第三方类库。

3.编写ino程序之后先checked编译,如果有异常会有相应提示,最常见的checked异常就是有语法错误、路径不对无法引用类库

4.编译通过之后可以发布运行,发布之后当前COM端口处于占用状态,如果需要重启必须先关闭对应端口停止运行,否则可能出现端口占用异常

5.发布运行之后,对于运行的结果可以在控制台监视,波率必须和setup入口函数的Serial.open()参数保持一致,

如Serial.open(9600) 表示控制台监视的波率必须是9600,否则可能出现监测结果不准确或乱码情况。

GND - GND

VCC - 输入电压5V

OUT - 输出端口定义域A0-A5最佳

 

1.DHT11 温湿度传感器

工作电压 :3.3V~5v

尺寸大小:40mm x 28mm

重量大小:3g

信号类型:数字信号

供电电流:最大2.5mA

温度范围:0-50℃,误差±2℃

湿度范围:当环境温度在 0 ℃时为30~90%RH;当环境温度在25℃时为20~90%RH ;当环境温度在50℃时为20~80%RH

响应时间:1/e(63%) 6-30s

测量分辨率分别为:温度(8bit)湿度(8bit)

采样周期间隔:<1s

接口定义

S:输出信号

+:电源(VCC)

-:地(GND)

UNO开发板接线原理图:

dht11å·¥ä½åç


Arduino代码

double Fahrenheit(double celsius) 
{
        return 1.8 * celsius + 32;
}    //摄氏温度度转化为华氏温度

double Kelvin(double celsius)
{
        return celsius + 273.15;
}     //摄氏温度转化为开氏温度

// 露点(点在此温度时,空气饱和并产生露珠)
// 参考: http://wahiduddin.net/calc/density_algorithms.htm 
double dewPoint(double celsius, double humidity)
{
        double A0= 373.15/(273.15 + celsius);
        double SUM = -7.90298 * (A0-1);
        SUM += 5.02808 * log10(A0);
        SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
        SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
        SUM += log10(1013.246);
        double VP = pow(10, SUM-3) * humidity;
        double T = log(VP/0.61078);   // temp var
        return (241.88 * T) / (17.558-T);
}

// 快速计算露点,速度是5倍dewPoint()
// 参考: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
        double a = 17.271;
        double b = 237.7;
        double temp = (a * celsius) / (b + celsius) + log(humidity/100);
        double Td = (b * temp) / (a - temp);
        return Td;
}

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 10

//TODO TCF PT550
#define PIN_A 1
#define PIN_D 2

void setup()
{
  //TODO 启动串口UNO开发板COM3
  Serial.begin(9600);
  
//  Serial.println("DHT11 TEST PROGRAM ");
//  Serial.print("LIBRARY VERSION: ");
//  Serial.println(DHT11LIB_VERSION);
//  Serial.println();
}

void loop()
{
  //TODO TCF DHT11
  //Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

//  Serial.print("DHT11 温度: ");
   Serial.println((int)DHT11.temperature);
//   Serial.println(analogRead(PIN_A),DEC);
   
//  int nums[]={(int)DHT11.temperature,(int)Fahrenheit(DHT11.temperature)};
//  Serial.println((String)nums[0]+","+(String)nums[1]);

//  Serial.print("DHT11 湿度: ");
  
//  Serial.print("\t");

  //TODO TCF PT550
//  int val;
//  val=analogRead(PIN_A);
 Serial.print("PT550 亮度:");
//  Serial.println(val,DEC);
  
  delay(200);
}

 

2.PT550 亮度传感器

  • 检测环境光密度
  • 环保光敏二极管
  • 模拟输出电压:0~5 VDC
  • 适用电源电压:+3~5VDC
  • 模拟传感器
  • 使用PH-2.0插座
  • 传感器匹配Arduino扩展板

UNO开发板和传感器接线图

è¿æ¥1

Arduino代码

#define PIN_A 1
#define PIN_D 2
 
void setup() 
{
  Serial.begin(9600);
}
 
void loop() 
{
  int val;
  val=analogRead(PIN_A);
  //Serial.print("a:");
  Serial.print(val,DEC);
  Serial.println();
  //Serial.print(",d:");
  //val=digitalRead(PIN_D);
  //Serial.println(val+"\n");
  delay(500);
}

3.PIR光敏运动传感器

UNO开发板传感器接线示意图:

å¯åçµé»å¨

çµè·¯å¾

Arduino代码:

#define pirPin 2
int calibrationTime = 30;
long unsigned int lowIn;
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int PIRValue = 0;

void setup() {
   Serial.begin(9600);
   pinMode(pirPin, INPUT);
}

void loop() {
   PIRSensor();
}

void PIRSensor() {
   if(digitalRead(pirPin) == HIGH) {
      if(lockLow) {
         PIRValue = 1;
         lockLow = false;
         Serial.println("Motion detected.");
         delay(50);
      }
      takeLowTime = true;
   }
   if(digitalRead(pirPin) == LOW) {
      if(takeLowTime){
         lowIn = millis();takeLowTime = false;
      }
      if(!lockLow && millis() - lowIn > pause) {
         PIRValue = 0;
         lockLow = true;
         Serial.println("Motion ended.");
         delay(50);
      }
   }
}
Arduino程序设计基础实验说明文档Arduino编程学习例程40个合集: 实验一 Hello World.docx 实验七 自动补光实验.docx 实验三 按键控制LED.docx 实验三十 红外接收.docx 实验三十一 遥控家电.docx 实验三十三 电位器控制舵机角度.docx 实验三十二 认识舵机.docx 实验三十五 自动降温.docx 实验三十四 可调速小风扇.docx 实验九 声控灯.docx 实验二 流水灯.docx 实验二十 学会使用MQ2烟雾传感器.docx 实验二十一 烟雾报警.docx 实验二十七 距离检测.docx 实验二十三 温度报警.docx 实验二十九 红外发射.docx 实验二十二 闯入报警.docx 实验二十五 串口控制RGBled调光.docx 实验二十八 74HC595.docx 实验二十六 超声波测距.docx 实验二十四 认识RGBled.docx 实验五 电位器控制呼吸灯频率.docx 实验八 检测声音大小.docx 实验六 光敏电阻检测光亮度.docx 实验十 触摸传感器的使用.docx 实验十七 简易电子琴.docx 实验十三 人体感应灯.docx 实验十九 外部中断触发蜂鸣器报警.docx 实验十二 人体感应模块的应用.docx 实验十五 蜂鸣器的使用.docx 实验十八 红外避障传感器的应用.docx 实验十六 播放音乐.docx 实验十四 电子温度计.docx 实验四 呼吸灯.docx 拓展实验 12864.docx 拓展实验 1602显示串口数据.docx 拓展实验 DHT11温湿度检测模块的使用.docx 拓展实验 使用数字电位器AD5206.docx 拓展实验 制作电子时钟.docx 拓展实验1602 LCD的使用.docx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值