查看: 19588|回复: 34

【教程】LCD5110实时显示温度、湿度、光照度、颗粒物

[复制链接]

该用户从未签到

发表于 2013-6-5 16:15 | 显示全部楼层 |阅读模式
本帖最后由 疯子。 于 2013-6-7 18:31 编辑

YP20130605034944 - 副本.jpeg

从上到下分别是 温度、湿度、光照度、颗粒物

首先先感谢一下乐联网友情提供的颗粒物传感器。
然后感谢@stanleyhuangyc 的MultiLCD显示库。

上接线图:(画的不好大家不要嘲笑)

温度湿度.jpg

上代码。

代码中所需库文件已打包至附件。

要注意至少1.0.4下编译

[C] 纯文本查看 复制代码
/*
BH1750光照强度传感器接法:
VCC-5v
GND-GND
SCL-SCL(A5)
SDA-SDA(A4)

DHT11接法:
VCC-->5V
GND-->GND
DATA-->D9

PPD42NS接法:
针脚冲下,从右至左为1-5接口
Pin 1  => GND
Pin 3  => 5VDC
Pin 4  => D8

LCD5110接法:
clk  = D7     //clock
din  = D6,   // data-in 
dc    = D5,   // data select
reset = D2,   //reset
sce   = D3);  // enable
*/

#include <SPI.h>
#include <Wire.h>
#include <Arduino.h>
#include <MultiLCD.h>//LCD5110库
#include <dht11.h>//dht11库

//定义DHT11引脚为9
dht11 DHT11;
#define DHT11PIN 9

//bh1750相关
int BH1750address = 0x23;
byte buff[2];

//lcd5110相关
LCD_PCD8544 lcd;

//PPD42NS颗粒物传感器相关
int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
double concentration = 0;

void setup() {
  Serial.begin(9600);
//初始化LCD
  lcd.begin();
  lcd.clear();
  lcd.setCursor(0, 0);//在第一行打印出  Environment 字符串
  lcd.print("  Environment ");
  lcd.setCursor(0, 1);//光标移至第2行(从0开始数算起) 第1个像素(下同)
  lcd.print("Temp :");//显示出温度提示(下同)
  lcd.setCursor(73, 1);//光标移至第2行(从0开始数算起) 第72个像素
  lcd.print("oC");//显示出温度单位(下同)
  lcd.setCursor(0, 2);
  lcd.print("Humi :");
  lcd.setCursor(79, 2);
  lcd.print("%");
  lcd.setCursor(0, 3);
  lcd.print("Light:");
  lcd.setCursor(73,3);
  lcd.print("lx");
  lcd.setCursor(0, 4);
  lcd.print("PM   :");
  lcd.setCursor(0, 5);//光标移至第6行(从0开始数算起) 第37个像素
  lcd.print(" Best wishes");//显示出 Best wishes

  pinMode(pin,INPUT);
  starttime = millis();
}

void loop() {
   //计算颗粒物
    duration = pulseIn(pin, LOW);
    lowpulseoccupancy = lowpulseoccupancy+duration;
    

    if ((millis()-starttime) > sampletime_ms)
    {
      ratio = lowpulseoccupancy/(sampletime_ms*10.0);
      concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62;
    //串口打印出颗粒物数据
      Serial.print(lowpulseoccupancy);
      Serial.print(",");
      Serial.print(ratio);
      Serial.print(",");
      Serial.println(concentration);
      lowpulseoccupancy = 0;

//串口打印出DHT11测出的温湿度数据
    DHT11.read(DHT11PIN);
    int dht11temp = DHT11.temperature;
    Serial.print("temperature:");
    Serial.println(dht11temp);
    int dht11hum = DHT11.humidity;
    Serial.print("humidity:");
    Serial.println(dht11hum);

//串口打印出BH750光照度数据
    double light = BH1750();
    Serial.print("light:");
    Serial.println(light);

//lcd上显示数据
    lcd.setCursor(37, 1);//光标移至第2行(从0开始数,1就是第二个) 第37个像素(下同)
    lcd.print(dht11temp);//显示出温度(下同)
    lcd.setCursor(37, 2);
    lcd.print(dht11hum);
    lcd.setCursor(37, 3);
    lcd.print(light);
    lcd.setCursor(37, 4);
    lcd.print(concentration);

    starttime=millis();
    }
}

//BH1750相关函数
double BH1750()
{
  int i=0;
  double  val=0;
  Wire.beginTransmission(BH1750address);
  Wire.write(0x10);//1lx reolution 120ms
  Wire.endTransmission();  
  delay(200);
  Wire.beginTransmission(BH1750address);
  Wire.requestFrom(BH1750address, 2);
  while(Wire.available()) //
  {
    buff[i] = Wire.read();  // receive one byte
    i++;
  }
  Wire.endTransmission();
  if(2==i)
  {
    val=((buff[0]<<8)|buff[1])/1.2;
  }
  return val;
}

libraries.rar

25.09 KB, 下载次数: 1227

  • TA的每日心情
    奋斗
    2018-7-3 21:30
  • 签到天数: 46 天

    [LV.5]常住居民I

    发表于 2013-6-5 17:34 | 显示全部楼层
    5100和5110都是spi的器件,要切换选择使用
    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

     楼主| 发表于 2013-6-5 17:35 | 显示全部楼层
    奈何col 发表于 2013-6-5 17:34
    5100和5110都是spi的器件,要切换选择使用

    原来如此。。。哎。

    点评

    仔细看了下,你图上用的不是硬件SPI,所以应该不是这个问题,具体怎么回事,不清楚了  详情 回复 发表于 2013-6-5 17:51
  • TA的每日心情
    奋斗
    2018-7-3 21:30
  • 签到天数: 46 天

    [LV.5]常住居民I

    发表于 2013-6-5 17:51 | 显示全部楼层
    疯子。 发表于 2013-6-5 17:35
    原来如此。。。哎。

    仔细看了下,你图上用的不是硬件SPI,所以应该不是这个问题,具体怎么回事,不清楚了

    点评

    都不加个精么?想发帖骗点贡献好难哦{{{(>_<)}}}  发表于 2013-6-5 19:40
    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

     楼主| 发表于 2013-6-5 17:53 | 显示全部楼层
    奈何col 发表于 2013-6-5 17:51
    仔细看了下,你图上用的不是硬件SPI,所以应该不是这个问题,具体怎么回事,不清楚了 ...

    好吧,那就更不知道了。。。

    貌似是神马指针怎么着了。。

    对C语言不怎么会
  • TA的每日心情
    奋斗
    2018-7-3 21:30
  • 签到天数: 46 天

    [LV.5]常住居民I

    发表于 2013-6-5 20:16 | 显示全部楼层
    写得有点简单啦~加精找海神和奔跑额
    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

     楼主| 发表于 2013-6-5 23:20 | 显示全部楼层
    奈何col 发表于 2013-6-5 20:16
    写得有点简单啦~加精找海神和奔跑额

    哦,那我再补充点。

    上次海神说只有两个管理员才能。。可能是说的后台什么的。

    该用户从未签到

    发表于 2013-6-6 00:53 | 显示全部楼层
    哪天我也试试,还从没把这么多个东西连一起做过

    该用户从未签到

     楼主| 发表于 2013-6-6 01:10 | 显示全部楼层
    啷哩个铛 发表于 2013-6-6 00:53
    哪天我也试试,还从没把这么多个东西连一起做过

                
  • TA的每日心情
    开心
    2015-12-30 11:43
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2013-6-7 15:40 | 显示全部楼层
    东西挺好的~加精~~
    有个视频最好了~~
    高级模式  
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino Uno 电机无法正常工作问题
    Arduino Uno 电机无法正常
    如图,请问代码有什么不对的地方吗 #include #include #include double angle_r
    顔色傳感器
    顔色傳感器
    有會使用顔色傳感器的朋友嗎?請問怎樣識別紅色和藍色,當然能來段代碼就更好了
    Blink——Arduino的Hello World!
    Blink——Arduino的Hello
    本教程节选自《Arduino程序设计基础》 Arduino编程基础(零)——Blink,Arduino的He
    创客集结号项目:太阳能陀螺仪机器人
    创客集结号项目:太阳能陀
    这是一只最简单的全自动机器人,它不像居家电器一样需要电源开关,也不需要人来维护,
    关于蓝牙4.0的问题
    关于蓝牙4.0的问题
    蓝牙4.0始终进不来AT,用的是JDY08 代码 #include SoftwareSerial BT(10, 11); // 接
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表