Earth Analyzer: 農業支援のための高度IoT環境監視ローバー
必要な部品と材料
| 部品名 | 数量 |
|---|---|
| Bolt IoT Bolt WiFiモジュール | 1 |
| Arduino UNO | 1 |
| Arduino Nano R3 | 1 |
| nRF24L01 無線モジュール | 2 |
| DCモーター 12V | 2 |
| DFRobot ソーラー電源管理ボード (12V鉛バッテリー用) | 1 |
| SparkFun L298 デュアルHブリッジ モータードライバー | 1 |
| ジャンパーワイヤー(汎用) | 1セット |
| LM35 温度センサー | 1 |
| DFRobot 静電容量式土壌水分センサー (耐腐食) | 1 |
| SG90 マイクロサーボ | 1 |
| ジョイスティック 10kΩ | 2 |
必要な工具
- はんだごて
- 鉛フリーはんだ
- はんだフラックス
- マルチツール/ドライバー
使用ツール・サービス
- Arduino IDE
- Bolt IoT Bolt Cloud
- Integromat (現Make)
- Twilio SMS API
- Mailgun
- Bolt IoT Android/iOS アプリ
プロジェクト概要
農家を支援するためのローバー「Earth Analyzer」。主に3つのモジュールで構成されます。
モジュール1: メインローバー制御(DCモーター駆動・センサー読み取り)
2つのDCモーターとL298ドライバーで走行制御。Bolt WiFiモジュールのデジタルピン(0-3)でモーター制御、デジタルピン4で土壌水分センサー、アナログピンA0でLM35温度センサーを接続。電源はソーラー充電コントローラー経由で12V鉛バッテリーから供給。

モジュール2: 近距離無線制御(nRF24L01 + ジョイスティック)
nRF24L01で近距離無線制御を実現。ジョイスティック2個で走行方向とサーボ制御。

モジュール3: クラウド連携・アラート通知
Arduinoコード(送信側・受信側)
nRF24L01通信用コード(送信側: ジョイスティック読み取り→無線送信、受信側: 受信→モーター/サーボ制御)
// 送信側 (Transmitter)
#include
#include
#include
RF24 radio(7, 8); // CSN, CE
const byte address[6] = "00001";
int x_key = A1, y_key = A0, p_key = A3, q_key = A2;
// ジョイスティック値読み取り、閾値判定でpos(100-700)決定、radio.writeで送信
// 詳細コードは元記事参照
// 受信側 (Receiver)
#include
#include
#include
#include
RF24 radio(7, 8);
const byte address[6] = "00001";
Servo servo;
// radio.readでpos受信、値に応じてモーター制御(デジタルピン3-6)とサーボ(ピン9)駆動
// pos=100:停止, 200:前進, 300:後進, 400:左, 500:右, 600:サーボ90度, 700:サーボ180度
Telegramアラート通知(Python + Bolt Cloud)
土壌水分センサー値が閾値超過時にTelegramで通知。サーバー側(Python on repl.it等)でBolt Cloud API経由でセンサー値取得、Telegram Bot APIで送信。
# main.py
import requests, json, time
from boltiot import Bolt
import conf
mybolt = Bolt(conf.bolt_api_key, conf.device_id)
def get_sensor_value_from_pin(pin):
try:
response = mybolt.digitalRead(pin)
data = json.loads(response)
if data["success"] != 1: return -999
return int(data["value"])
except Exception as e:
print(e)
return -999
def send_telegram_message(message):
url = "https://api.telegram.org/" + conf.telegram_bot_id + "/sendMessage"
data = {"chat_id": conf.telegram_chat_id, "text": message}
try:
response = requests.request("GET", url, params=data)
telegram_data = json.loads(response.text)
return telegram_data["ok"]
except Exception as e:
print(e)
return False
while True:
sensor_value = get_sensor_value_from_pin("4")
print("Current sensor value:", sensor_value)
if sensor_value == -999:
time.sleep(10); continue
if sensor_value >= conf.threshold:
message = "Moisture value exceeded threshold"
send_telegram_message(message)
time.sleep(100)
# conf.py
bolt_api_key = "XXXX"
device_id = "BOLTXXXX"
telegram_chat_id = "@XXXX"
telegram_bot_id = "botXXXX"
threshold = 0
Telegramボット作成手順
- Telegramアプリインストール・アカウント作成
- 「New Channel」でチャンネル作成(公開設定、永久リンク名メモ)
- @BotFatherで「/newbot」実行、ボット名/ユーザー名設定、トークン取得(botトークン形式で保存)
- チャンネルの管理者にボットを追加、「Post Messages」権限付与
Google Assistant連携でSMS/メール通知 (Integromat + IFTTT + Twilio + Mailgun)
「OK Google, センサー値を送って」でLM35温度値をSMS/メール受信。Integromatでシナリオ構築:IFTTT Webhook受信 → HTTPでBolt Cloudからセンサー値取得 → ルーターでMailgun/Twilioに分岐 → メール/SMS送信。スケジューリング「Immediately」有効化。

IFTTTアプレット作成
- IFTTTで「New Applet」→ Google Assistant「Say a simple phrase」→ コマンド例:「send the temperature sensor value」
- 「+that」→ Webhooks「Make a web request」→ URLにIntegromatのWebhook URL貼り付け、POSTメソッド
回路図
すべてアップロードして動作確認を。質問はコメント欄へ。
製造プロセス
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- ArduinoとBluetoothで作るスマート紛失防止タグ「Find Me」
- Arduinoプロジェクトのための最適化電源ソリューション
- Arduino三目並べ:MAX7219 LEDマトリクスと段ボールケースで自作
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- Bolt IoTとArduino UNOでLED輝度をシームレス制御
- ゲーム用カスタムArduinoジョイスティックハンドルの製作
- Arduino Nano R3で本格的なCNCマシンを自作する