障害者向けスマート・ハンドジェスチャー電動車椅子
部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano R3 | 2 | 送信側・受信側各1 |
| nRF24L01+ モジュール | 2 | 無線通信用 |
| SparkFun デュアルHブリッジ・モーター・ドライバー L298 | 1 | |
| ジャンパー・ワイヤー | 1セット | |
| DCモーター 12V | 2 | 左右駆動用 |
必要な工具
- はんだごて
- グルーガン
使用ソフトウェア
- Arduino IDE
プロジェクト概要
- インドの都市部・農村部ともに障害者割合が増加中。先天性、医療的理由、事故など原因は様々。
- 本プロジェクトの目的:加速度センサー(MPU6050)を用いたハンドジェスチャー制御電動車椅子を開発し、身体障害者が手の動きだけで移動できるようにすること。
- 現在インドでは下半身麻痺などで苦しむ人が多数。この車椅子で快適性を向上させ、生活を少しでも楽にしたい。
コード
送信側スケッチ(手元コントローラー)
#include // nRF24L01+とのSPI通信用
#include "RF24.h" // nRF24L01+メイン・ライブラリ
#include "Wire.h" // I2C通信用
#include "I2Cdev.h" // MPU6050通信用
#include "MPU6050.h" // MPU6050メイン・ライブラリ
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int data[2];
RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void) {
Serial.begin(9600);
Wire.begin();
mpu.initialize(); // MPU6050初期化
radio.begin(); // nRF24通信開始
radio.openWritingPipe(pipe); // 受信側アドレス設定
}
void loop(void) {
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
data[0] = map(ax, -17000, 17000, 300, 400); // X軸データ送信
data[1] = map(ay, -17000, 17000, 100, 200); // Y軸データ送信
radio.write(data, sizeof(data));
}
受信側スケッチ(車椅子本体)
#include
#include
#include
#include
#include
#include "RF24.h"
const int enbA = 3;
const int enbB = 5;
const int IN1 = 2; // 右モーター (-)
const int IN2 = 4; // 右モーター (+)
const int IN3 = 7; // 左モーター (+)
const int IN4 = 6; // 左モーター (-)
int RightSpd = 130;
int LeftSpd = 130;
int data[2];
RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup() {
pinMode(enbA, OUTPUT);
pinMode(enbB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, pipe);
radio.startListening();
}
void loop() {
if (radio.available()) {
radio.read(data, sizeof(data));
if (data[0] > 380) { // 前進
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
if (data[0] < 310) { // 後退
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
if (data[1] > 180) { // 左旋回
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
if (data[1] < 110) { // 右旋回
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
if (data[0] > 330 && data[0] < 360 && data[1] > 130 && data[1] < 160) { // 停止
analogWrite(enbA, 0);
analogWrite(enbB, 0);
}
}
}
回路図
製造プロセス
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Windows 10 CortanaでBluetooth経由でArduinoのLEDを制御
- Arduino UNOとモーターシールドで作る人追従ロボット
- 全方向移動ロボットで人物を安全追跡:オムニホイール搭載「ハンターフラッタラーボット」
- 無線方向探知用オートマチック・キーヤー – 精度、簡単操作、信頼性
- ジョイスティックで精密制御:Arduino UNOと28BYJ-48ステッピングモーター
- Arduino向けスマート屋内ナビゲーションロボットキット
- 高度なモータ制御回路:ラッチング、停止、タイムディレイ技術
- 新脳-コンピュータインターフェースで麻痺患者が思考だけでタブレット操作
- ルネサス、RX66T 32ビットMCUファミリを発表 – モータ制御性能を2.5倍向上
- Renesas、産業用ロボットの高度サーボ制御向けRX72Tマイクロコントローラーを発表