工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

盲導ステッキナビゲーター:Arduinoと1Sheeldで作る視覚障害者支援デバイス

必要な部品と材料

部品 数量 備考
1Sheeld ボード 1 スマホのセンサー・通信機能をArduinoで利用可能にするシールド
Arduino UNO 1 メインマイコン
Androidスマートフォン 1 GPS・SMS・Bluetooth提供用(1Sheeldアプリ必須)
リレー汎用 1 外部回路制御用(本プロジェクトでは未使用?)
トグルスイッチ 1 緊急SOSボタン用
超音波距離センサー HC-SR04 2 上部・下部障害物検知用(ステッキ先端と中間に配置)
DC振動モーター 2 障害物検知時の触覚フィードバック用(PVCパイプ内蔵)
ジャンパーワイヤー 1式 配線用
9V電池(またはモバイルバッテリー) 1 Arduino電源用

使用アプリ・ソフトウェア

プロジェクト概要

従来の白杖では地面の凹凸や階段、頭上の障害物を検知しにくいという課題を解決するため、超音波センサー2個と振動モーター2個をステッキ(PVCパイプ)に内蔵し、上方・前方の障害物を振動パターンで通知する支援デバイスを開発しました。さらに1Sheeld経由でスマホのGPS機能を利用し、トグルスイッチ操作で現在地(緯度・経度)とGoogleマップリンクを守護者や緊急連絡先へSMS送信する機能を実装しています。

卒業研究として6ヶ月かけて製作。電源持続時間の課題(9V電池では短い)や、盲人の方がスマホ操作できない問題(点字対応スマホの不在)など改善点も明確になっています。

盲導ステッキナビゲーター:Arduinoと1Sheeldで作る視覚障害者支援デバイス
システム全体のブロック図

動作手順

Step 1: 電源投入

9V電池をUSB電源アダプター経由でArduino UNOに接続。将来的にはソーラーパネル等での長時間駆動化が望まれます。

盲導ステッキナビゲーター:Arduinoと1Sheeldで作る視覚障害者支援デバイス
9V電池とUSBアダプターによる給電

Step 2: Bluetoothペアリングと1Sheeldアプリ設定

スマホと1SheeldをBluetooth接続し、1SheeldアプリでGPSシールドとSMSシールドを有効化します。盲人の方自身でスマホ操作するのは困難なため、介助者が事前に設定するか、将来的には点字対応や音声操作対応のカスタムアプリ開発が必要です。

盲導ステッキナビゲーター:Arduinoと1Sheeldで作る視覚障害者支援デバイス
1SheeldアプリでGPSとSMSを有効化

Step 3: 障害物検知と振動フィードバック

盲導ステッキナビゲーター:Arduinoと1Sheeldで作る視覚障害者支援デバイス
超音波センサー2個の配置イメージ(上部・下部)

Step 4: GPS位置情報と緊急SOS通知

Step 5: 調整可能パラメータ

ソースコード

#define CUSTOM_SETTINGS
#define INCLUDE_GPS_SHIELD
#define INCLUDE_SMS_SHIELD
#include <OneSheeld.h>
#include <string.h>

#define trigPinL 4
#define echoPinL 5
#define trigPinH 6
#define echoPinH 7
#define Vib1 12
#define Vib2 13
#define SW 8

boolean isInRange = false;
float lat;
float lon;
String PhoneNumber = "0134087286"; // 要変更:緊急連絡先番号
String Message;
String Message1;
String Message2;
char latitude[10];
char longitude[10];

void setup() {
  pinMode(trigPinL, OUTPUT);
  pinMode(echoPinL, INPUT);
  pinMode(trigPinH, OUTPUT);
  pinMode(echoPinH, INPUT);
  pinMode(Vib1, OUTPUT);
  pinMode(Vib2, OUTPUT);
  pinMode(SW, INPUT);
  OneSheeld.begin();
  // Serial.begin(9600);
}

void loop() {
  long durationL, distanceL, durationH, distanceH, MixDist;
  
  // 下部センサー測定
  digitalWrite(trigPinL, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPinL, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPinL, LOW);
  durationL = pulseIn(echoPinL, HIGH);
  distanceL = (durationL/2) / 29.1; // cm換算

  // 上部センサー測定
  digitalWrite(trigPinH, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPinH, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPinH, LOW);
  durationH = pulseIn(echoPinH, HIGH);
  distanceH = (durationH/2) / 29.1;

  // 下部障害物:40cm未満で連続振動
  if (distanceL > 40) { digitalWrite(Vib1, HIGH); }
  if (distanceL < 40) { digitalWrite(Vib1, LOW); }

  // 上部障害物:100cm未満で間欠振動
  if (distanceH < 100) {
    digitalWrite(Vib1, HIGH);
    delay(200);
    digitalWrite(Vib1, LOW);
    delay(200);
  }

  // GPS位置取得(コメントアウトされている範囲判定ロジック)
  // if(GPS.isInRange(30.0831008,31.3242943,100)) { ... }
  
  // 緊急スイッチ押下でSMS送信
  lat = GPS.getLatitude();
  lon = GPS.getLongitude();
  Message1 = String(lat, 8);
  Message2 = String(lon, 8);
  if (digitalRead(SW) == 0) { // スイッチON(LOW)で送信
    Message = "I need Help! I'm at latitude: " + Message1 + " and longitude: " + Message2;
    Message = "Google Maps - https://www.google.co.in/maps/place/" + Message1 + "," + Message2;
    SMS.send(PhoneNumber, Message);
    delay(3000);
  }
  
  delay(1000);
}

回路図・設計ファイル

プロジェクトドキュメント・動画

今後の改善点・展望

英語力不足で説明が至らない点がありますが、添付資料・リンクで詳細を確認できます。ご意見・ご質問歓迎します。

製造プロセス

  1. TinyML言語検出器:Edge ImpulseとArduino Nano 33 BLE Senseで「はい」を多言語判別
  2. Arduino NanoとMPU-6050で作るリアルタイムジャイロスコープゲーム
  3. Arduinoデジタルダイス: LCD表示の乱数ジェネレーター自作
  4. Arduino Nanoで37LEDルーレットゲームを自作:ヨーロピアンスタイル完全再現
  5. ATtiny85ミニアーケード:スネークゲーム - 手のひらサイズOLEDゲーム機の製作
  6. ポータブル距離検出器:Arduino Nano自作キット(HC-SR04、18650電源、3Dプリントケース付き)
  7. Arduino Nanoで作る音声反応デスクライト:音楽に合わせて光るイルミネーション
  8. Arduino Nano と OpenCV で実現する自律顔追跡ロボットカー
  9. 銅メッキプロジェクト:Arduino UNOで作るスマート電気メッキシステム
  10. Arduino Nanoで作るNeoPixelマトリックス版Pongゲーム
  11. Arduinoシフトレジスタで美しい光のシーケンスを作成