自制智能WIFI空气净化器(ARDUINO)

本文介绍了如何使用Arduino自制一款智能WIFI空气净化器。项目包括DH11温湿度传感器的读取,PM25监测,显示屏的控制,电机转速调节以及WIFI模块的集成,实现远程web控制。代码中利用了DHT11库和U8G库,并提供了相关资源链接。

自制智能WIFI空气净化器(ARDUINO)

转载请注明出处http://blog.youkuaiyun.com/cuijiyue/article/details/78824768

简介

  • 成品图片
    这里写图片描述这里写图片描述
  • web控制端
    这里写图片描述

  • 参考资料

模块 参考资料
单片机 mega2560 硬件 https://wenku.baidu.com/view/0c37156065ce050877321320.html
编程入门 http://www.51hei.com/bbs/dpj-41336-1.html
https://pan.baidu.com/s/1jIf8IxS
多线程 https://www.cnblogs.com/xiaowuyi/p/4319720.html
温湿度 DHT11,单总线
http://www.arduino.cn/thread-1429-1-2.html
https://pan.baidu.com/s/1kVaMRzD
PM25 PMS500, 串口
https://pan.baidu.com/s/1eS5zosE
WIFI ESP-12N,串口,内置MCU,LUA编程
https://pan.baidu.com/s/1kVvLCzX
屏幕 12864 OLED, i2c
http://www.arduino.cn/forum.php?mod=viewthread&tid=20080
https://pan.baidu.com/s/1micMO1y
PMW电机调速 L298N,gpio PWM调速
https://pan.baidu.com/s/1eSwBMLk
箱体及电机硬件 https://post.smzdm.com/p/41272/

DH11温湿度

加载DHT11的lib,就可以读取温湿度,每5s读取一次

dht11 DHT11;
void getTemperature(int pin) {
    int ret = DHT11.read(pin);
    switch (ret)
    {
      case DHTLIB_OK: 
        //log("DHT11 OK");
        temperature = DHT11.temperature;
        humidity = DHT11.humidity;
        PT_SEM_SIGNAL(&screenSem);
        break;
      case DHTLIB_ERROR_CHECKSUM: 
        log("DHT11 Checksum error"); 
        break;
      case DHTLIB_ERROR_TIMEOUT: 
        log("DHT11 Time out error"); 
        break;
      default: 
        log("DHT11 Unknown error"); 
        break;
    }
}
static int temperatureMission(struct pt *pt)
{
  PT_BEGIN(pt);//线程开始
  while(1)
  {
    getTemperature(2);//接入2号管脚
    //dhtDelay.setTimer(5000);//设定5秒
    PT_TIMER_DELAY(pt, 5000);
  }
  PT_END(pt);//线程结束
}

PM25

读取时需要注意检查数据帧结构,防止信息错误
PM25会存储上一次读取的数值,每5s会通过信号量通知屏幕更新,
读取PM25和电机控制在 pm25PowerMission 中

class PM25 {
private:
  int pm_cf_10 = -1;
  int pm_cf_25 = -1;
  int pm_cf_100 = -1;
  int pm_at_10 = -1;
  int pm_at_25 = -1;
  int pm_at_100 = -1;
  int particulate03 = -1;
  int particulate05 = -1;
  int particulate10 = -1;
  int particulate25 = -1;
  int particulate50 = -1;
  int particulate100 = -1;
  int setGpio = -1;
  int resetGpio = -1;
  int serialNum;


  int prePM25[10] = {0};
  int sleepLevel[4][2] = {
  
  {10, 20}, {50, 30}, {100, 1}, {200, 0}}; //pm_val, sleep minutes
  int powerLevel[4][2] = {
  
  {10, 0}, {50, 2}, {100, 10}, {200, 24}}; //pm_val, powerlevel
  int beginIndex = 0;
  int endIndex = 0;
  bool pmHighPower = true;
  bool pmRun = true;

  unsigned char rxBuffer[3
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值