搜索

[活动] 温控灯

[复制链接]
69|4
 楼主 | 2020-10-29 22:07 | 显示全部楼层 |阅读模式
本帖最后由 hejiahui123 于 2020-11-4 14:37 编辑

项目方案:用DHT11测环境温度湿度,用OLED显示当前的温湿度,led灯根据环境的温度高低自动调节灯的亮度。灯随着温度的升高而变亮,随着温度的降低变暗。实现步骤:1、查找资料,搭建环境
                2、硬件接线
                3、传感器收集数据
                4、实现灯的亮度随温度的变化而变化

搭建环境:第一次使用microchip的芯片,首先要去官网下载开发环境MPLAB X IDE,不过在安装MPLAB X IDE前需要装Java的运行环境,最后还要安装C编译器,因为我的程序是用C语言。
官网网址:https://www.microchip.com/microchip

硬件接线:接线方式如下,因核心板的电源引脚不够,外设是接在外部5V电源上的。
733205f9ac3c7f3aab.png


传感器收集数据:我遇到最大的问题是DHT11读不出数据,我用示波器测DHT11的时序发现不对,最后看手册,根据示波器测出的时序和手册上的相对比,把时序调好,最后就能读出数据了。
DHT11时序如下图:
66755fa249fd669cf.png
[color=rgba(0, 0, 0, 0.75)]先是主机发送开始信号
[color=rgba(0, 0, 0, 0.75)]然后就是DHT11响应
[color=rgba(0, 0, 0, 0.75)]DHT11发送数据
[color=rgba(0, 0, 0, 0.75)]最后要把数据线拉高,释放总线

DHT11读取数据代码如下:
  1. //读取一个字节   
  2. uint8_t DHT11_Read_Byte(void)
  3. {
  4.     uint8_t i,data;
  5.     for(i=0;i<8;i++)
  6.     {
  7.         if(DHT11_READ==0)
  8.         {
  9.             while(DHT11_READ==0);
  10.         }
  11.         DELAY_us (40);   //40us
  12.         if(DHT11_READ==1)
  13.         {
  14.             while(DHT11_READ==1);//这里要等待高电平结束,否者读取下一位的时候会因为高电平没有结束而跳过上一个if
  15.             data|=(uint8_t)0x01<<(7-i);
  16.         }
  17.         else
  18.             data&=(uint8_t)~0x01<<(7-i);
  19.                      
  20.     }
  21.     return data;
  22. }

  23. //读五个字节
  24. uint8_t DHT11_ReadData(uint8_t *temp,uint8_t *humi)
  25. {
  26.     uint8_t buf[5];
  27.     uint8_t i;
  28.     for(i=0;i<5;i++)
  29.     {
  30.         buf[i]=DHT11_Read_Byte();
  31.         
  32.     }
  33.     if(buf[0]+buf[1]+buf[2]+buf[3]==buf[4])
  34.     {
  35.         *temp=buf[2];
  36.         *humi=buf[0];
  37.         return 1;
  38.     }
  39.     else
  40.         return 0;   
  41. }
复制代码

最后根据温度,去调节输出的pwm,使灯的亮度随着温度的变化而变化

以下是成品照片:
211885f9acc57edf3f.png
总结:经过这次项目,发现自己的基础不是很牢固,应该多实践。



586255f9acb190a0cb.png

使用特权

评论回复
| 2020-11-6 14:32 | 显示全部楼层
lz加油,以后可以多去microchip的论坛混一混,哈哈

使用特权

评论回复
| 2020-11-9 20:33 | 显示全部楼层
谢谢分享【温控灯】

使用特权

评论回复
| 2020-11-13 07:10 | 显示全部楼层
赞一下

使用特权

评论回复
| 2020-11-13 08:38 | 显示全部楼层
用于学习是好的,只是没啥实用价值。
不如直接显示温度好了。
或者LED二进制长短闪烁显示温度,更加锻炼人的观察理解能力,比如20度=10100=长短长短短

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

热门推荐上一条 /6 下一条

在线客服 快速回复 返回顶部 返回列表