Arduino Yunで作る侵入検知アラーム:SMSアラート機能付きDIYガイド
必要な部品と材料
| Arduino Yun | ×1 |
| 9V電池 | ×1 |
| ジャンパーワイヤー | ×1 |
| HC-SR04 超音波距離センサー | ×1 |
アプリとオンラインサービス
- Temboo
- Twilio SMS Messaging API
プロジェクト概要
はんだ付けや高度なスキルは不要で、簡単に作れます。
仕組み:
距離センサーがパルスの変化を検知 → Wi-Fi経由でTembooを呼び出し → Twilio APIがSMSを送信!
このチュートリアルでは、動きを検知したらテキストメッセージでアラートを送る侵入アラームの作り方を解説します。複雑そうに見えますが、電子工作初心者でも十分に作れます。距離センサーが動きを検知してArduinoに通知し、テキストを送信します。自宅に設置してネットワークに接続しておけば、携帯電話の電波が届く場所ならどこにいてもSMSアラートを受け取れます。
所要時間は約45分。パーツ代はAmazonで80-90ドル、AliExpressなら50ドル程度。最大の出費はWi-Fi機能付きArduinoボードですが、一度手に入れれば他のプロジェクトにも流用できます。
必要なパーツ:
- HC-SR04 距離センサー
- Arduino Yunボード、またはLeonardo + Wi-Fiシールド
- ジャンパーワイヤー 4本
- ミニブレッドボード(あれば)
- 9V電池
- 9V電池ボックス(バレルプラグ付き、オン/オフスイッチ付き)
パーツリンクとコードはこちら:Parts Links and Code
ステップ1:配線してテスト!
図のように距離センサーをボードに接続します。まずセンサーが正常に動作するかテストします。
こちらの最初のコードブロックをコピーしてArduino IDEに貼り付け、ボードに接続してスケッチをアップロード。シリアルモニタを9600ボーレートで開くと、距離(インチ)が連続表示されます。十分な距離変化が検知されると「Intruder Detected」と表示されます。
ステップ2:ボードをWi-Fiネットワークに接続
Arduino Yunの場合:公式ガイド
Leonardo + Iduino Wi-Fiシールドの場合:こちら
ターミナルでLANスキャンするか、無料ツールで同じネットワークに接続されているか確認できます(MacならApp StoreのLanScanなど)。
ステップ3:SMS送信機能の追加
Arduino IDEで新規スケッチを作成し、同サイトの2つ目のコードブロックを貼り付けます。右側の矢印から「Create New Tab」を選び、TembooAccount.hという名前でタブを作成。最後のコードブロック(ヘッダーファイル)をそこに貼り付けて保存。
TembooとTwilioのアカウントを作成し、コードに情報を追加します。
ステップ4:TwilioとTembooの認証情報をスケッチに追加
- Twilioアカウント設定からAccount SIDとAuth Tokenを取得(鍵アイコンで表示)し、スケッチの該当箇所に入力
- Twilioホームの「Phone Numbers」から送信元電話番号を取得してコードに追加
- 受信したい電話番号とメッセージ内容を設定(電話番号は「+1xxxxxxxxxx」形式)
- ヘッダーファイルにTembooアカウント情報を追加(Tembooログイン→Applicationsで取得)
保存してアップロード。9V電池ボックスで電源を入れ(スイッチオン)、シリアルモニタで動作確認。接続まで20秒ほどかかる場合があります。
ステップ5:完成!
うまく動かない場合は、検知距離の閾値(コード内のハイライト部分)を調整してください。デフォルトでは「最寄り物体までの距離が20インチ未満、または500インチ超」でアラート発報です。設置場所や周囲の物体に合わせて値を調整します。テスト段階(最初のコードブロック、SMS送信なし)で調整することを推奨します。TembooとTwilioの無料枠には制限があるためです(コード側でも再起動まで10回までに制限)。
質問があればお気軽にどうぞ!
コード
テスト用コード
//TEST CODE #include <SoftwareSerial.h> int trigPin = 2; int echoPin = 4; long duration, cm, inches; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); delay(5000); Serial.println("Patrol Mode Initiated..."); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(1); digitalWrite(trigPin, HIGH); delayMicroseconds(2); digitalWrite(trigPin, LOW); pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); inches = (duration / 2) / 74; Serial.println(inches); if (inches < 20 || inches > 1000) { Serial.println("Intruder Detected!"); Serial.println("Sending text Notification..."); delay(5000); Serial.println("Patrol Mode Initiated..."); }//end if statement }//ends loop
SMS送信機能付き完全版コード
#include <Bridge.h> #include <Temboo.h> #include "TembooAccount.h" // contains Temboo account information, as described below #include <SoftwareSerial.h> int numRuns = 1; // Execution count, so this doesn't run forever int maxRuns = 5; // Maximum number of times the Choreo should be executed int trigPin = 2; int echoPin = 4; long duration, cm, inches; void setup() { Serial.begin(9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); // For debugging, wait until the serial console is connected delay(5000); Bridge.begin(); Serial.println("Patrol Mode Initiated..."); } void loop() { digitalWrite(trigPin, LOW); delayMicroseconds(1); digitalWrite(trigPin, HIGH); delayMicroseconds(2); digitalWrite(trigPin, LOW); pinMode(echoPin, INPUT); duration = pulseIn(echoPin, HIGH); inches = (duration / 2) / 74; Serial.println(inches); if (inches < 20 || inches > 1100) { Serial.println("Intruder Detected!"); Serial.println("Sending text Notification..."); if (numRuns <= maxRuns) { Serial.println("Running SendSMS - Run #" + String(numRuns++)); TembooChoreo SendSMSChoreo; // Invoke the Temboo client SendSMSChoreo.begin(); // Set Temboo account credentials SendSMSChoreo.setAccountName(TEMBOO_ACCOUNT); SendSMSChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME); SendSMSChoreo.setAppKey(TEMBOO_APP_KEY); // Set Choreo inputs SendSMSChoreo.addInput("AuthToken", "e684a4f37ee686636e2b1e24c12f4279"); SendSMSChoreo.addInput("To", "+14125236422"); SendSMSChoreo.addInput("From", "+14123608633"); SendSMSChoreo.addInput("Body", "Intruder Detected!!!!!!"); SendSMSChoreo.addInput("AccountSID", "ACf3be01a84d78829e5619c16b6e16a9e4"); // Identify the Choreo to run SendSMSChoreo.setChoreo("/Library/Twilio/SMSMessages/SendSMS"); // Run the Choreo; when results are available, print them to serial SendSMSChoreo.run(); while(SendSMSChoreo.available()) { char c = SendSMSChoreo.read(); Serial.print(c); } SendSMSChoreo.close(); } Serial.println("Waiting..."); delay(10000); // wait 10 seconds between SendSMS calls Serial.println("Patrol Mode Initiated..."); }//end if statement }//ends loop
回路図

製造プロセス
- センサーデータをRaspberry Piに統合:実践ガイド
- Raspberry Piでライントラッキングセンサー – シンプルなKY-033ドア/ライン検出器
- GY-91モジュールでRaspberry Pi上に堅牢な温度・センサーAPIを構築
- Home Assistant on Raspberry Piで安全なホーム監視 – モーション、アラーム、ビデオ撮影
- Adafruit T-Cobbler PlusでヘッドレスRaspberry Pi 2水漏れアラームを構築
- HC-SR04超音波センサーをRaspberry Piに接続する実践ガイド
- Raspberry Piと湿度センサーで作る自動エアロポニックスシステム
- Raspberry Pi GPIOマスター:PIRモーションセンサーをB+/Model 2でインターフェース
- Acconeer A111パルスレーダーをRaspberry Piと統合:実践ガイド
- HC-SR501 PIRモーションセンサーをRaspberry Piで接続・調整・プログラミングする方法
- Python/MicroPythonセンサーロガー:センサーデータをGoogleスプレッドシートにシームレス保存