完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、温度和湿度的测量
二、光强的测量 光强的检测通过光敏电阻完成,方法是将光敏电阻与一个固定电阻串联,然后将光敏电阻与固定电阻之间的电压输入到Arduino的模拟输入管脚中,通过电压的幅值变化反映出当前光照强度的变化。 光敏电阻的阻值很大,因此为了让光照强度变化时,电压幅值变化更明显,需要接一个阻值较大的电阻,这里选用了1千欧的电阻。 另外,由于光敏电阻的阻值与环境光照强度成反比,即光照越强,光敏电阻越小,因此,将VCC连接在光敏电阻的一侧,而将固定电阻一侧接地,这样光照强度和测量的电压变化趋势也就是一样的了,即模拟输入口(这里选用了A0口)的度数越大,光照越强。 三、网页服务器的搭建 为了让Arduino能够联网,这里用到了W5500以太网模块。 Arduino与W5500的接线方式参看下表
注意,用的是3.3V的供电,一开始我用的5V供电,W5500不工作(W5500也提供了5V的供电口,至于为什么不工作,需要往后再研究一下O.O) 接着,需要安装Ethernet2的库,在Arduino IDE中安装Ethernet2的步骤为:工具>管理库...>(搜索W5500,找到Ethernet2库,然后再选择安装即可) (这里顺便提一下,陌生芯片快速上手的方法,就是直接在Arduino库中搜索响应的芯片型号即可,一般相应的库都会提供一些例程,通过运行例程可以比较方便的了解芯片的使用方法) 编程部分,我的程序是在Ethernet2库中WebServer、Simple DHT库中的DHT11Default和LiquidCrystal库中的HelloWorld的基础上改的,俗称代码的搬运工o( ̄▽ ̄)d 下面是我的程序源码: // include the library code: #include #include // 导入W5500所需要的包 #include #include int pinDHT11 = 6; SimpleDHT11 dht11(pinDHT11); // 设置物理地址和IP byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 177); // 建立服务器 EthernetServer server(80); // initialize the library by associating any needed LCD interface pin // with the arduino pin number it is connected to const int rs = 8, en = 7, d4 = 5, d5 = 4, d6 = 3, d7 = 2; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // start the Ethernet connection and the server: Ethernet.begin(mac, ip); server.begin(); } void loop() { int time0=0; int time1=0; byte temperature = 0; byte humidity = 0; int err = SimpleDHTErrSuccess; while(1){ time0 = millis()/2000;//隔2000ms测一次温度湿度信息 if (time0!=time1){ time1=time0; lcd.setCursor(0, 0); dht11.read(&temperature, &humidity, NULL); lcd.print(temperature); lcd.print("C"); lcd.setCursor(0, 1); lcd.print(humidity); lcd.print("H"); } EthernetClient client = server.available(); if (client) { boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); if (c == 'n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); client.println(); client.println(""); client.println(""); client.print("Temperature:"); client.print(temperature); client.print("C"); client.println(" "); client.print("Humidity:"); client.print(humidity); client.print("%"); client.println(" "); client.print("Light intensity:"); client.print(analogRead(0)); client.println(" "); client.println(""); break; } if (c == 'n') { // you're starting a new line currentLineIsBlank = true; } else if (c != 'r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); } } } 注意:在使用W5500联网时IP地址需要设置与路由器同一个网段的,不然无法进行通信。 程序中为了避免读取DHT11温度、湿度信息出错的情况(DHT11的温度、湿度读取间隔需大于1s),设置了一个while循环,让程序只有在Arduino运行时间与开机时间或上一次读取时间超过2000ms后才读取一次温度和湿度数据和更新LCD的显示。 以上程序包含了LCD显示(点击蓝字,查看LCD显示的实现方法)部分的内容,如果不需要LCD显示,可以删除对应部分的代码段即可。 程序编译下载到Arduino后,在浏览器输入Arduino的IP,即可查看到环境的温度、湿度、光强信息。 |
|
|
|
只有小组成员才能发言,加入小组>>
3310 浏览 9 评论
2991 浏览 16 评论
3492 浏览 1 评论
9057 浏览 16 评论
4086 浏览 18 评论
1176浏览 3评论
604浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
597浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2334浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1895浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:25 , Processed in 1.201232 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号