• Le pourcentage de personnes handicapées a augmenté dans les zones rurales et urbaines de l'Inde. Le handicap peut être de naissance ou dû à des raisons médicales ou accidentelles.
• Le but de ce projet est de réaliser un fauteuil roulant commandé par gestes de la main et utilisant un accéléromètre comme capteur pour aider les personnes physiquement handicapées à se déplacer d'un endroit à un autre simplement en donnant la direction avec la main.
• Aujourd'hui en Inde, beaucoup de gens souffrent de handicap, il y a des gens dont la moitié inférieure du corps est paralysée. Ce fauteuil roulant ajoutera au confort et rendra la vie de ces gens un peu plus facile.
Code
Code émetteur
Code récepteur
Code émetteur Arduino
#include <SPI.h> // bibliothèque SPI pour communiquer avec le nRF24L01+
#include "RF24.h" // La bibliothèque principale du nRF24L01+
#include "Wire.h" // Pour communiquer
#include "I2Cdev.h" // Pour communiquer avec le MPU6050
#include "MPU6050.h" // La bibliothèque principale du 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(); // Initialiser l'objet MPU
radio.begin(); // Démarrer la communication nRF24
radio.openWritingPipe(pipe); // Définit l'adresse du récepteur vers lequel le programme enverra les données.
}
void loop(void){
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
data[0] = map(ax, -17000, 17000, 300, 400 ); // Envoie les données de l'axe X
data[1] = map(ay, -17000, 17000, 100, 200); // Envoie les données de l'axe Y
radio.write(data, sizeof(data));
}
Code récepteur Arduino
#include <nRF24L01.h>
#include <printf.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h> // bibliothèque SPI pour communiquer avec le nRF24L01+
#include "RF24.h" // La bibliothèque principale du nRF24L01+
const int enbA = 3;
const int enbB = 5;
const int IN1 = 2; // Moteur droit (-)
const int IN2 = 4; // Moteur droit (+)
const int IN3 = 7; // Moteur gauche (+)
const int IN4 = 6; // Moteur droit (-)
int RightSpd = 130;
int LeftSpd = 130;
int data[2];
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(){
// Définir les broches moteur comme SORTIE
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){ // avant
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
if(data[0] < 310){ // arrière
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
if(data[1] > 180){ // gauche
analogWrite(enbA, RightSpd);
analogWrite(enbB, LeftSpd);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
if(data[1] < 110){ // droite
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){ // arrêt
analogWrite(enbA, 0);
analogWrite(enbB, 0);
}
}
}