基于物联网的智能路灯系统
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要的工具和机器
|
应用和在线服务
| ||||
|
关于这个项目
问题定义
正如前面所说,在许多城市中都看到路灯是一个城市的巨额开支之一。花费的成本是巨大的,所有的钠蒸气灯都消耗更多的功率。花在路灯上的费用可用于国家的其他发展。目前使用手动系统,其中灯将被打开/关闭,即灯将在晚上打开并在晚上关闭早上。因此,在开/关之间存在大量能量浪费。这是转向自动系统的主要原因之一,因为电力浪费更少,从而节省了大量金钱开支。除此之外,现有系统的其他缺点描述如下。
现有系统的缺点
- 手动关闭/打开路灯
- 更多的能源消耗
- 费用高
- 更多的人力
现在转向使用光传感器自动化的建议系统,不仅可以节省能源和确保安全,我们还可以看到以下更多优势。
拟议系统的优点
- 路灯自动切换
- 降低维护成本
- 减少二氧化碳排放
- 减少光污染
- 无线通讯
- 节能
- 减少人力
A.LDR 输入
光敏电阻 (LDR) 也称为 光敏电阻 是一种电阻系数是电磁辐射的函数的设备。因此,它们是类似于人眼的光敏设备。它们也被称为光电导体、导电电池或简称为光电管。它们由具有高电阻的半导体材料组成。 LDR 根据光导原理工作。光导率是一种光学现象,当光被材料实际吸收时,材料的电导率会降低。然而,当光线照射到 LDR 时,它的电阻下降,电流流入第一个晶体管的基极,然后流入第二个晶体管。可以调高或调低预设电阻来增加或减少电阻,这样可以使电路更灵敏或更灵敏。 LDR 向 Arduino 发送响应。
B.IR 传感器
红外传感器是一种电子仪器,用于通过发射和/或检测红外辐射来感知周围环境的某些特征。它还能够测量物体的热量并检测运动。人眼看不到红外线。在电磁光谱中,红外辐射是波长比可见光波长长但比微波短的区域。红外区域的范围大约为 0.75 至 1000 微米。 IR(红外线)传感器检测红外线。红外光转化为电流,并由电压或电流检测器检测。 IR Sensorsends response to arduino.
C. LED
发光二极管 (LED) 是一种结型二极管,在激活时会发光。当我们在其引线上施加电压时,电子能够与 LED 内的空穴复合,以光子的形式释放能量,从而发出光。因此,它是一种双引线半导体光源。
发光二极管代表我们的照明系统,它发出的光量与环境中的光量直接相关,即当外界光线小于 LED 发出的光强度时,反之亦然。
D. ESP8266
ESP8266 是乐鑫开发的支持 Wi-Fi 的片上系统 (SoC) 模块。主要用于IoT(物联网)嵌入式应用的开发。
ESP8266 具有以下功能
- 2.4 GHz Wi-Fi (802.11 b/g/n,支持 WPA/WPA2)
- 通用输入/输出(16 个 GPIO)
- 集成电路间 (I²C) 串行通信协议
- 模数转换(10 位 ADC)
- 串行外设接口 (SPI) 串行通信协议
- I²S(IC 间声音)与 DMA(直接内存访问)接口(与 GPIO 共享引脚)
- UART(在专用引脚上,加上可以在 GPIO2 上启用仅传输的 UART)
- 脉宽调制 (PWM)
它采用基于 Tensilica Xtensa L106 的 32 位 RISC CPU,运行频率为 80 MHz(或超频至 160 MHz)。它具有 64 KB 引导 ROM、64 KB 指令 RAM 和 96 KB 数据 RAM。可以通过SPI访问外部闪存。
ESP8266 模块是低成本的独立无线收发器,可用于端点物联网开发。
与 ESP8266 模块通信,微控制器需要使用一组 AT 命令。微控制器使用指定波特率的UART与ESP8266-01模块通信。
有许多第三方制造商基于该芯片生产不同的模块。因此,该模块具有不同的引脚可用性选项,例如:
- ESP-01 带有 8 个引脚(2 个 GPIO 引脚)——PCB 走线天线。 (如上图所示)
- ESP-02 带有 8 个引脚(3 个 GPIO 引脚)——U-FL 天线连接器。
- ESP-03 带有 14 个引脚,(7 个 GPIO 引脚)– 陶瓷天线。
- ESP-04 带有 14 个引脚,(7 个 GPIO 引脚)——没有蚂蚁。
等
例如,下图显示了 ESP-01 模块引脚。
ESP8266-01 模块管脚说明
3V3 :- 3.3 V 电源引脚。
地 :- 接地引脚。
RST :- 低电平有效复位引脚。
中文 :- 高电平有效使能引脚。
发送 :- UART的串行发送引脚。
接收 :- UART的串行接收引脚。
代码
- 物联网智能灯
- 代码第 2 部分
物联网智能灯Arduino
int smooth;int LDR;int threshold =40;//太阳的强度int亮度 =0;int ledState =0;int sensor1 =11;int sensor2 =8;int sensor3 =9;int led1=5;int led =6;int led2=2;int carPresent =0;int carPresent1 =0;float beta =0.65;void setup() { // 把你的设置代码放在这里,运行一次:Serial.begin(115200); pinMode(传感器1,输入); pinMode(传感器2,输入); pinMode(sensor3, INPUT); pinMode(led,输出); pinMode(led1,输出); pinMode(led2,OUTPUT);}void loop() { smooth =smooth - (beta * (smooth - analogRead(A0)));延迟(1); LDR =round(((float)smooth / 1023) * 100);如果(LDR <=40)亮度=0; else { 亮度 =地图(LDR, 40, 100, 0, 255); } checkSensors();如果(carPresent ==1){ ledState =1;数字写入(led,高);数字写入(led1,高);模拟写入(LED,亮度);模拟写入(led1,亮度); } else if (carPresent ==0) { ledState =0;数字写入(led,高); //digitalWrite(led1,HIGH);模拟写入(led,ledState); //analogWrite(led1,ledState);如果(carPresent1 ==1){ ledState =1; if(ledState ==1) {analogWrite(led1,brightness);模拟写入(led2,亮度); } } else if (carPresent1 ==0) { ledState =0;数字写入(led1,高);数字写入(led2,高);模拟写入(led1,ledState);模拟写入(led2,ledState); } } String data =(String)ledState+","+(String)brightness+";";Serial.print(data); // Serial.print(digitalRead(sensor1));// Serial.print("\t");// Serial.print(digitalRead(sensor2));// Serial.print("\t");// Serial.print(ledState);// Serial.print("\t");// Serial.println(brightness);delay(100);}void checkSensors(){ if (digitalRead(sensor1) ==0)/ /汽车在第一个传感器中捕获 { if (digitalRead(sensor2) ==1)//汽车仍然没有到达第二个传感器 carPresent =1; } else if (digitalRead(sensor2) ==0)//汽车到达第二个传感器{ //在第一辆车后面没有检测到汽车 if (digitalRead(sensor1) ==1) { carPresent =0; carPresent1 =1; } else if (digitalRead(sensor1) ==0 ) {analogWrite(led,brightness);模拟写入(led1,亮度);模拟写入(led2,亮度);数字写入(led,高);数字写入(led1,高);数字写入(led2,高); } } else if(digitalRead(sensor3) ==0)//汽车到达第三个传感器{ //在第一辆车后面没有检测到汽车 if (digitalRead(sensor2) ==1) { carPresent =0; carPresent1 =0; } else if (digitalRead(sensor2) ==0) { carPresent =0; carPresent1 =1; } } }
代码第 2 部分Arduino
#include// 网络信息const char* ssid ="ardent";const char* password ="12345678";String ledState ="";String Brightness ="";char thingSpeakAddress[] ="api .thingspeak.com";String writeAPIKey ="NUEBLW9OA58DLL4N"; // 请务必将其更改为您的频道 Write API keyWiFiClient client;void setup(){ Serial.begin(115200); // 您可能需要根据您的硬件调整速度。 connectWifi();}void loop(){ filterData(); HTTPPost();延迟(15000); // 如果您移除睡眠,请确保添加更多延迟,以免过于频繁地向 ThingSpeak 发帖。}int connectWifi(){ WiFi.begin( ssid , password ); while (WiFi.status() !=WL_CONNECTED) { //Serial.println("连接到WiFi");延迟(2500); } //Serial.println("已连接"); // 通知串行监视器}void HTTPPost() { // 此函数构建用于发布到 ThingSpeak 的数据字符串,并为 wifi 客户端与 ThingSpeak 通信提供正确的格式。 // 它将发布“numFields”个数据条目,并从传递给它的 fieldData 参数中获取数据。 // 请务必将 numFields 增加到您需要的字段数,并在您的频道视图中激活这些字段。 if (client.connect( thingSpeakAddress , 80 )) { // 构建 Posting 数据字符串。如果您有多个字段,请确保字符串不超过 1440 个字符。 String PostData ="api_key=" + writeAPIKey; PostData +="&field1=" + ledState; PostData +="&field2=" + 亮度; // 通过 HTTP POST 数据 client.println( "POST /update HTTP/1.1" ); client.println("主机:api.thingspeak.com"); client.println("连接:关闭"); client.println("内容类型:应用程序/x-www-form-urlencoded"); client.println("内容长度:" + String( PostData.length() ) );客户端打印(); client.println( PostData );客户端停止(); }}void filterData() { if (Serial.available()) { String buffer ="";缓冲区 =Serial.readStringUntil(';'); int i1 =buffer.indexOf(','); ledState =缓冲区[0]; buffer.remove(0, i1 + 1);亮度 =缓冲区; }}
示意图
制造工艺