スマートシティの人気が高まるにつれ、すべてのドメインにスマートソリューションが常に求められています。IoTは、インターネット制御機能を介してスマートシティの可能性を可能にしました。スマートフォンやインターネットに接続されたデバイスを使用するだけで、世界中のどこからでも自宅やオフィスに設置されているデバイスを制御できます。スマートシティには複数のドメインがあり、スマートパーキングはスマートシティで人気のあるドメインの1つです。
スマートパーキング業界では、スマートパーキング管理システム、スマートゲート制御、車両の種類を検出できるスマートカメラ、ANPR(自動ナンバープレート認識)、スマート決済システム、スマートエントリーシステムなど、多くの革新が見られます。今日、同様のアプローチが採用され、超音波センサーを使用して車両の存在を検出し、ゲートを自動的に開閉するスマートパーキングソリューションが構築されます。ここでは、ESP8266 NodeMCUをメインコントローラーとして使用して、接続されているすべての周辺機器を制御します。
ESP8266は、インターネットに接続するためのWi-Fiのサポートが組み込まれているため、IoTベースのアプリケーションを構築するための最も人気のあるコントローラーです。以前は、次のような多くのIoTプロジェクトを構築するために使用していました。
- IOTベースのセキュリティシステム
- ホームオートメーション用のスマートジャンクションボックス
- IOTベースの大気汚染監視システム
- ThingSpeakにデータを送信する
ここですべてのESP8266ベースのプロジェクトを確認してください。
このIoTスマートパーキングシステムでは、車両駐車スペースの空き状況を調べるためにデータをWebサーバーに送信します。ここでは、FirebaseをIotデータベースとして使用して、駐車場の空き状況データを取得しています。このために、Firebaseのホストアドレスと認証用の秘密鍵を見つける必要があります。NodeMCUでfirebaseを使用することをすでに知っている場合は、先に進むことができます。それ以外の場合は、最初にESP8266NodeMCUでGoogleFirebaseConsoleを使用してホストアドレスと秘密鍵を取得する方法を学ぶ必要があります。
必要なコンポーネント
- ESP8266 NodeMCU
- 超音波センサー
- DCサーボモーター
- IRセンサー
- 16x2 i2cLCDディスプレイ
- ジャンパー
回路図
このIoTベースの駐車システムの回路図を以下に示します。これには、2つのIRセンサー、2つのサーボモーター、1つの超音波センサーおよび1つの16x2LCDが含まれます。
ここで、ESP8266は完全なプロセスを制御し、駐車場の空き状況情報をGoogle Firebaseに送信して、インターネットを介して世界中のどこからでも監視できるようにします。入口と出口のゲートで2つのIRセンサーを使用して、車の存在を検出し、ゲートを自動的に開閉します。IRセンサーは、IR光線を送受信することで物体を検出するために使用されます。IRセンサーについて詳しくは、こちらをご覧ください。
2つのサーボが入口ゲートと出口ゲートとして機能し、回転してゲートを開閉します。最後に、超音波センサーを使用して、パーキングスロットが使用可能か占有されているかを検出し、それに応じてデータをESP8266に送信します。プロジェクトの完全な動作を理解するには、このチュートリアルの最後にあるビデオを確認してください。
これは、この完全なスマートパーキングシステムのプロトタイプがどのように見えるかです。
スマートパーキングソリューションのためのESP8266NodeMCUのプログラミング
このチュートリアルの最後に、動作するビデオを含む完全なコードがあります。ここでは、プロジェクトの動作を理解するための完全なプログラムについて説明します。
NodeMCUをプログラミングするには、NodeMCUをマイクロUSBケーブルでコンピューターに接続し、ArduinoIDEを開きます。ライブラリは、I2Cディスプレイとサーボモーターに必要です。LCDに駐車スペースの空き状況が表示され、サーボモーターを使用して入口ゲートと出口ゲートが開閉します。 Wire.hの ライブラリは、I2CプロトコルにLCDをインタフェースするために使用されます。ESP8266 NodeMCUのI2Cのピンは、D1(SCL)とD2(SDA)です。ここで使用するデータベースはFirebaseであるため、ここには同じライブラリ (FirebaseArduino.h) も含まれています。
#include
次に、GoogleFirebaseから取得したFirebase認証情報を含めます。これらには、プロジェクト名と秘密鍵を含むホスト名が含まれます。これらの値を見つけるには、Firebaseの前のチュートリアルに従ってください。
#define FIREBASE_HOST "smart-parking-7f5b6.firebaseio.com" #define FIREBASE_AUTH "suAkUQ4wXRPW7nA0zJQVsx3H2LmeBDPGmfTMBHCT"
WiFiSSIDやパスワードなどのWi-Fi資格情報を含めます。
#define WIFI_SSID "CircuitDigest" #define WIFI_PASSWORD "circuitdigest101"
デバイスアドレス(ここでは0x27)とLCDのタイプを使用してI2CLCDを初期化します。入口および出口ゲート用のサーボモーターも含めます。
LiquidCrystal_I2C lcd(0x27、16、2); サーボmyservo; サーボmyservo1;
I2CLCDのI2C通信を開始します。
Wire.begin(D2、D1);
入口および出口サーボモーターをNodeMCUのD5、D6ピンに接続します。
myservo.attach(D6); myservos.attach(D5);
超音波センサーのトリガーピンを出力として選択し、エコーピンを入力として選択します。超音波センサーは、駐車場の空き状況を検出するために使用されます。車がスペースを占有している場合は光りますが、そうでない場合は光りません。
pinMode(TRIG、OUTPUT); pinMode(ECHO、INPUT);
NodeMCUの2つのピンD0とD4は、IRセンサーの読み取り値を取得するために使用されます。IRセンサーは、入口および出口ゲートセンサーとして機能します。これにより、車の存在が検出されます。
pinMode(carExited、INPUT); pinMode(carEnter、INPUT);
WiFiに接続し、接続されるまでしばらく待ちます。
WiFi.begin(WIFI_SSID、WIFI_PASSWORD); Serial.print( "接続中"); Serial.print(WIFI_SSID); while(WiFi.status()!= WL_CONNECTED){ Serial.print( "。"); delay(500); }
資格情報としてホストとシークレットキーを使用してFirebaseとの接続を開始します。
Firebase.begin(FIREBASE_HOST、FIREBASE_AUTH);
0 I2C 16×2液晶とセットカーソル位置を開始番目行0番目の列が。
lcd.begin(); lcd.setCursor(0、0);
超音波センサーからの距離を取ります。これは、特定の場所での車両の存在を検出するために使用されます。最初に2マイクロ秒のパルスを送信し、次に受信したパルスを読み取ります。次に、それを「cm」に変換します。超音波センサーを使用した距離の測定について詳しくは、こちらをご覧ください。
digitalWrite(TRIG、LOW); delayMicroseconds(2); digitalWrite(TRIG、HIGH); delayMicroseconds(10); digitalWrite(TRIG、LOW); 期間= pulseIn(ECHO、HIGH); 距離=(期間/ 2)/ 29.1;
IRセンサーピンをエントリーセンサーとしてデジタルで読み取り、ハイかどうかを確認します。高い場合は、エントリ数を増やして、16x2LCDディスプレイとシリアルモニターに印刷します。
int carEntry = digitalRead(carEnter); if(carEntry == HIGH){ countYes ++; Serial.print( "Car Entered ="); Serial.println(countYes); lcd.setCursor(0、1); lcd.print( "車が入った");
また、サーボモーターの角度を動かして入口ゲートを開きます。ユースケースに応じて角度を変更してください。
for(pos = 140; pos> = 45; pos- = 1){ myservos.write(pos); delay(5); } delay(2000); for(pos = 45; pos <= 140; pos + = 1){ // 1 度刻みmyservos.write(pos); delay(5); }
そして、Firebaseライブラリの pushString 関数を使用して、読み取り値をFirebaseに送信します。
Firebase.pushString( "/ Parking Status /"、fireAvailable);
出口IRセンサーと出口サーボモーターについて、上記と同様の手順を実行します。
int carExit = digitalRead(carExited); if(carExit == HIGH){ countYes--; Serial.print( "Car Exited ="); Serial.println(countYes); lcd.setCursor(0、1); lcd.print( "車が終了しました"); for(pos1 = 140; pos1> = 45; pos1- = 1){ myservo.write(pos1); delay(5); } delay(2000); for(pos1 = 45; pos1 <= 140; pos1 + = 1){ // 1 度刻みmyservo.write(pos1); delay(5); } Firebase.pushString( "/ Parking Status /"、fireAvailable); lcd.clear(); }
車が駐車場に到着したかどうかを確認し、到着した場合は、場所がいっぱいであることを示す信号を発するLEDが点灯します。
if(distance <6){ Serial.println( "Occupied"); digitalWrite(led、HIGH); }
それ以外の場合は、スポットが利用可能であることを示します。
if(distance> 6){ Serial.println( "Available"); digitalWrite(led、LOW); }
駐車場内の空きスペースの合計を計算し、文字列に保存してデータをFirebaseに送信します。
空= allSpace-countYes; Available = String( "Available =")+ String(Empty)+ String( "/")+ String(allSpace); fireAvailable = String( "Available =")+ String(Empty)+ String( "/")+ String(allSpace); また、データをi2CLCDに印刷します。lcd.setCursor(0、0); lcd.print(Available);
以下のスナップショットに示すように、Firebaseで駐車場の空き状況をオンラインで追跡する方法は次のとおりです。
これで、ESP8266NodeMCUモジュールとさまざまな周辺機器を使用した完全なスマートパーキングシステムが完成しました。超音波センサーや赤外線センサーの代わりに他のセンサーを使用することもできます。スマートパーキングシステムにはさまざまな用途があり、さまざまな製品を追加してよりスマートにすることができます。疑問がある場合、またはサポートが必要な場合はフォーラムにアクセスして、以下にコメントしてください。