IoTベースのスマート街路灯システム
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
問題の定義
先に述べたように、街灯は都市の莫大な費用の1つであることが多くの都市で見られます。すべてのナトリウムランプがより多くの電力を消費するために費やされるコストは莫大です。街灯に費やした費用は、他の発展のために使うことができます。現在、手動システムを使用して、ライトをオン/オフに切り替えます。つまり、ライトを夕方にオンにし、オフにします。朝。したがって、オン/オフの間に多くのエネルギーの浪費があります。これは、電力の浪費が少なく、したがって多くの金銭的費用を節約できるため、自動システムに移行する主な原因の1つです。これとは別に、既存のシステムのその他の欠点を以下に説明します。
既存のシステムのデメリット
- 街路灯の手動スイッチオフ/オン
- より多くのエネルギー消費
- 高額な費用
- より多くの人員
エネルギーの節約と安全性の確保だけでなく、光センサーを使用して自動化された提案されたシステムに移行することで、次のようないくつかの利点も確認できます。
提案されたシステムの利点
- 街路灯の自動切り替え
- メンテナンスコストの削減
- CO2排出量の削減
- 光害の削減
- 無線通信
- 省エネ
- 人員の削減
A.LDR入力
フォトレジスタとも呼ばれる光依存抵抗(LDR) は、抵抗率が電磁放射の関数であるデバイスであるため、人間の目と同様の感光性デバイスです。それらは、光伝導体、導電性セル、または単に光セルとも呼ばれます。それらは高抵抗の半導体材料でできています。LDRは光伝導の原理に基づいて動作します。光伝導率は、光が実際に材料に吸収されると、材料の導電率が低下する光学現象です。ただし、光がLDRに当たると、その抵抗が低下し、電流が最初のトランジスタのベースに流れ、次に2番目のトランジスタに流れます。プリセット抵抗を上下させて抵抗を増減させることができます。これにより、回路の感度を上げることができます。 LDRはArduinoに応答を送信します。
<図>
<図>
<図>
B.IRセンサー
赤外線センサーは、赤外線を放射および/または検出することにより、周囲の特定の特性を感知するために使用される電子機器です。また、物体の熱を測定し、動きを検出することもできます。赤外線は人間の目には見えません。電磁スペクトルでは、赤外線は可視光の波長よりも長いがマイクロ波よりも短い波長を持つ領域です。赤外線領域は、およそ0.75〜1000µmの境界になっています。 IR(赤外線)センサーは赤外線を検出します。 IR光は電流に変換され、これは電圧またはアンペア数の検出器によって検出されます。 IRセンサーはarduinoに応答を送信します。
C。 LED
発光ダイオード(LED)は接合ダイオードであり、起動すると発光します。リード線に電圧を印加すると、電子はLED内の正孔と再結合し、光を与える光子の形でエネルギーを放出することができます。したがって、2ピンの半導体光源です。
発光ダイオードは私たちの照明システムを表しており、それによって放出される光の量は、外光がLEDSによって与えられる光よりも少ない場合の環境内の光の量に直接関係し、その逆も同様です。
D。 ESP8266
ESP8266は、Espressifシステムによって開発されたWi-Fi対応システムオンチップ(SoC)モジュールです。これは主に、IoT(モノのインターネット)組み込みアプリケーションの開発に使用されます。
ESP8266には
の機能が付属しています- 2.4 GHz Wi-Fi(802.11 b / g / n、WPA / WPA2をサポート)
- 汎用入出力(16 GPIO)
- Inter-itegrated Circuit(I²C)シリアル通信プロトコル
- アナログ-デジタル変換(10ビットADC)
- シリアルペリフェラルインターフェイス(SPI)シリアル通信プロトコル
- I²S(IC間サウンド)はDMA(ダイレクトメモリアクセス)とインターフェースします(GPIOとピンを共有します)
- UART(専用ピンで、さらに送信専用UARTをGPIO2で有効にできます)
- パルス幅変調(PWM)
80 MHz(または160 MHzにオーバークロック)で動作するTensilica XtensaL106をベースにした32ビットRISCCPUを採用しています。 64 KBのブートROM、64 KBの命令RAM、および96KBのデータRAMがあります。外部フラッシュメモリには、SPIを介してアクセスできます。
ESP8266モジュールは、エンドポイントIoT開発に使用できる低コストのスタンドアロンワイヤレストランシーバーです。
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.3V電源ピン。
GND :-アースピン。
RST :-アクティブローリセットピン。
EN :-アクティブハイイネーブルピン。
TX :-UARTのシリアル送信ピン。
RX :-UARTのシリアル受信ピン。
コード
- IOTスマートライト
- コードパート2
IOTスマートライト Arduino
int Smooth; int LDR; int threshold =40; //太陽の強度intbrightness =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(){//セットアップコードをここに配置して、1回実行します:Serial.begin(115200); pinMode(sensor1、INPUT); pinMode(sensor2、INPUT); pinMode(sensor3、INPUT); pinMode(led、OUTPUT); pinMode(led1、OUTPUT); pinMode(led2、OUTPUT);} void loop(){スムーズ=スムーズ-(ベータ*(スムーズ-analogRead(A0))); delay(1); LDR =round(((float)smooth / 1023)* 100); if(LDR <=40)明るさ=0; else {明るさ=map(LDR、40、100、0、255); } checkSensors(); if(carPresent ==1){ledState =1; digitalWrite(led、HIGH); digitalWrite(led1、HIGH); analogWrite(led、brightness); analogWrite(led1、brightness); } else if(carPresent ==0){ledState =0; digitalWrite(led、HIGH); // digitalWrite(led1、HIGH); analogWrite(led、ledState); // analogWrite(led1、ledState); if(carPresent1 ==1){ledState =1; if(ledState ==1){analogWrite(led1、brightness); analogWrite(led2、brightness); }} else if(carPresent1 ==0){ledState =0; digitalWrite(led1、HIGH); digitalWrite(led2、HIGH); analogWrite(led1、ledState); analogWrite(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)/ / 1番目のセンサーでキャプチャされた車{if(digitalRead(sensor2)==1)//車がまだ2番目のセンサーに到達しなかったcarPresent =1; } else if(digitalRead(sensor2)==0)//車が2番目のセンサーに到達した{//最初の車の後ろに車が検出されなかったif(digitalRead(sensor1)==1){carPresent =0; carPresent1 =1; } else if(digitalRead(sensor1)==0){analogWrite(led、brightness); analogWrite(led1、brightness); analogWrite(led2、brightness); digitalWrite(led、HIGH); digitalWrite(led1、HIGH); digitalWrite(led2、HIGH); }} else if(digitalRead(sensor3)==0)//車が3番目のセンサーに到達しました{//最初の車の後ろに車が検出されませんif(digitalRead(sensor2)==1){carPresent =0; carPresent1 =0; } else if(digitalRead(sensor2)==0){carPresent =0; carPresent1 =1; }}}
コードパート2 Arduino
#include//ネットワーク情報constchar * ssid ="ardent"; const char * password ="12345678"; String ledState =""; String bright =""; char thingsSpeakAddress [] ="api .thingspeak.com "; String writeAPIKey =" NUEBLW9OA58DLL4N "; //これを必ずチャネルに変更してくださいWriteAPI keyWiFiClient client; void setup(){Serial.begin(115200); //ハードウェアによっては速度の調整が必要になる場合があります。 connectWifi();} void loop(){filterData(); HTTPPost(); delay(15000); //スリープを解除する場合は、ThingSpeakに頻繁に投稿しないように、必ず遅延を追加してください。} int connectWifi(){WiFi.begin(ssid、password); while(WiFi.status()!=WL_CONNECTED){// Serial.println( "Connecting to WiFi"); delay(2500); } //Serial.println( "Connected"); //シリアルモニターに通知} void HTTPPost(){//この関数は、ThingSpeakに投稿するためのデータ文字列を作成し、wifiクライアントがThingSpeakと通信するための正しい形式を提供します。 //「numFields」に相当するデータエントリを投稿し、渡されたfieldDataパラメータからデータを取得します。 // numFieldsを必要な数のフィールドに増やし、チャネルビューでフィールドをアクティブ化してください。 if(client.connect(thingSpeakAddress、80)){//投稿データ文字列を作成します。複数のフィールドがある場合は、刺し傷が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( "Content-Type:application / x-www-form-urlencoded"); client.println( "Content-Length:" + String(PostData.length())); client.println(); client.println(PostData); client.stop(); }} void filterData(){if(Serial.available()){String buffer =""; buffer =Serial.readStringUntil( ';'); int i1 =buffer.indexOf( '、'); ledState =buffer [0]; buffer.remove(0、i1 + 1);明るさ=バッファ; }}
回路図
製造プロセス