Arduino駆動スマート自動駐車場システムの製作
必要な部品と材料
| 部品 | 数量 |
|---|---|
| Arduino UNO | 1 |
| サーボモーター(Tower Pro MG996R) | 1 |
| 近接センサー(赤外線) | 3 |
| LED(汎用) | 1 |
| UTSOURCE電子部品(その他) | 1 |
使用するアプリとオンラインサービス
- Arduino IDE
プロジェクト概要
非常に簡単で楽しい、Arduinoベースの自動駐車場システムです。車が到着すると空きスロット数を表示(空きがある場合)し、ゲートを開きます。空きがない場合はゲートを開きません。驚くべきことに、このプロジェクト全体をモバイルバッテリーだけで駆動できます!
詳細なチュートリアルは動画をご覧ください。
注: 自作LEDサインの代わりにLCDディスプレイやOLEDディスプレイを使用することもできます。
ステップ1: パーツ
- Arduino - どのボードでも可
- 赤外線近接センサー(写真2、3 - どちらも動作します)
- 330Ω抵抗
- いくつかのLED
- サーボモーター - 任意のモデル/サイズ
ステップ2: LEDディスプレイの製作
ブレッドボードの一片を使い、LEDと330Ω抵抗をはんだ付けし、リボンケーブルで配線して仕上げました。
注: 抵抗を裏面にはんだ付けして表から見えないようにすることで、すっきりした表示にしています。LCDや安価なOLEDディスプレイを使う方が良いですが、手元になかったため自作しました。
ステップ3: 駐車場ガレージの製作
段ボール箱を加工してスロープを作り、サーボモーターに段ボール片を取り付けてホットグルーで固定。入口にセンサー1個、各スロットにセンサー1個ずつ配置。自作LEDディスプレイを割り箸2本で支えて箱に固定。ArduinoのUSBポートにアクセスできるよう箱に穴を開けました。少し塗装して仕上げています。
ステップ4: 回路
LEDの配線が少し複雑に見えますが、実際は非常にシンプルな回路です。
注意: 近接センサーは5Vで動作するため、Arduinoの5V出力に直接接続できます。
「なぜサーボをVINに接続しているのか?」モバイルバッテリーは通常5V/1Aを出力し、ArduinoのUSBケーブル経由で入力されます。Arduinoには電圧レギュレーターがあり、ボードに500mAを供給します。VINに接続することで、ブレッドボードなしでモバイルバッテリーから直接電力を取り出せます。これは安全に動作します。
ステップ5: コード
以下のコードをArduinoにアップロードしてください。
コードダウンロード: GitHub
または以下からコピー:
/* Automated Parking Garage by Ashraf Minhaj
* www.youtube.com/c/fusebatti
* お問い合わせ: ashraf_minhaj@yahoo.com
*/
#include <Servo.h>
Servo gate; // サーボでゲート開閉
int slot1 = 5; // スロット1用IRセンサー → D5
int slot2 = 4; // スロット2用IRセンサー → D4
int gateSensor = 3; // ゲート用IRセンサー → D3
int slot1_l = 13; // スロット1表示LED
int slot2_l = 12; // スロット2表示LED
int gate_grn = 11; // ゲート緑色LED
int gate_red = 10; // ゲート赤色LED
void setup() {
gate.attach(7); // ゲートサーボ → D7
pinMode(slot1, INPUT);
pinMode(slot2, INPUT);
pinMode(gateSensor, INPUT);
pinMode(slot1_l, OUTPUT);
pinMode(slot2_l, OUTPUT);
pinMode(gate_grn, OUTPUT);
pinMode(gate_red, OUTPUT);
Serial.begin(9600);
}
void loop() {
// 車到着時、ゲートセンサーがLOWになる(検出)
// センサーは車検知でLOW、非検知でHIGHと仮定
// スロット1、2ともに空き
if (!digitalRead(gateSensor) && digitalRead(slot1) && digitalRead(slot2)) {
Serial.println("Welcome, Available: SLOT1, SLOT2");
digitalWrite(slot1_l, HIGH);
digitalWrite(slot2_l, HIGH);
delay(1000);
digitalWrite(gate_grn, HIGH);
gate.write(75); // ゲート開
}
// スロット1占有、スロット2空き
if (!digitalRead(gateSensor) && !digitalRead(slot1) && digitalRead(slot2)) {
Serial.println("Welcome, Available: SLOT2");
digitalWrite(slot1_l, LOW);
digitalWrite(slot2_l, HIGH);
delay(1000);
digitalWrite(gate_grn, HIGH);
gate.write(75);
}
// スロット1空き、スロット2占有
if (!digitalRead(gateSensor) && digitalRead(slot1) && !digitalRead(slot2)) {
Serial.println("Welcome, Available: SLOT1");
digitalWrite(slot1_l, HIGH);
digitalWrite(slot2_l, LOW);
delay(1000);
digitalWrite(gate_grn, HIGH);
gate.write(75);
delay(100);
}
// 満車
if (!digitalRead(gateSensor) && !digitalRead(slot1) && !digitalRead(slot2)) {
Serial.println("Welcome, Parking Full");
digitalWrite(slot1_l, LOW);
digitalWrite(slot2_l, LOW);
delay(1000);
digitalWrite(gate_red, HIGH);
delay(100);
digitalWrite(gate_red, LOW);
delay(100);
digitalWrite(gate_red, HIGH);
delay(100);
digitalWrite(gate_red, LOW);
}
// 車未検知(ゲートセンサーHIGH)
if (digitalRead(gateSensor)) {
Serial.println("Welcome");
gate.write(5); // ゲート閉
digitalWrite(slot1_l, LOW);
digitalWrite(slot2_l, LOW);
digitalWrite(gate_red, LOW);
digitalWrite(gate_grn, HIGH);
delay(100);
digitalWrite(gate_grn, LOW);
delay(100);
}
}
ステップ6: 完成
USBケーブルでArduinoに給電して完成です。お楽しみください!
どのようにアップグレードしたいか、なぜそう考えるか、ぜひ教えてください。
拡張版コード(LCDディスプレイ対応)
回路図
回路図はプロジェクトページに掲載されています。
製造プロセス
- 自作LUMAZOID:Arduino音楽ビジュアライザーDIYガイド
- Arduino Unoで作る自動発射レゴ・スターウォーズ砲台
- ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
- SunGlass-BOT:光量に合わせて自動でレンズを開閉するスマートサングラス
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- Arduino手洗いタイマー:COVID-19対策のシンプルDIYツール
- Arduino RGB LEDカラーミキサー:初心者向けDIYプロジェクト
- Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド
- Arduinoで自動化するChrome恐竜ゲーム – LDRとPythonで障害物を検知してジャンプ
- DIY ArduinoラジオニクスEMR治療デバイスの構築
- 屋外対応DMX制御RGB LED投光器 – 低コスト・高性能・自作PCB