Jouet contrôlé par Android utilisant un bouclier de moteur Raspberry
Composants et fournitures
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Applications et services en ligne
| ||||
| ||||
|
À propos de ce projet
À la fin du projet, nous gérerons un véhicule tout terrain contrôlé par le capteur d'accélération de l'appareil Android
Le projet contient Motor shield, Raspberry Pi, Arduino et des dispositifs de moteurs à courant continu.
ÉTAPE 1
Tout d'abord, nous devrions créer un bus I2C entre raspberry pi et arduino. Vous pouvez voir pourquoi nous avons choisi I2C ici.
Vous pouvez trouver le code requis qui contient à la fois I2C et le processus de protection du moteur, comme indiqué ci-dessous.
#include #define MyAddress 0x40#include AF_DCMotor motorhiz(3);AF_DCMotor motoryon(4);byte DataToBeSend[1];byte ReceivedData;int counter =0;void setup(){Serial.begin(9600 ); /* Initialiser l'esclave I2C et affecter la fonction de rappel 'onReceive' sur 'I2CReceived'*/ Wire.begin(MyAddress); Wire.onReceive(I2CReceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(RELEASE); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* Incrémentez DataToBeSend toutes les secondes et assurez-vous qu'il est compris entre 0 et 99 */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0 :DataToBeSend[0] + 1;}/* Cette fonction sera automatiquement appelée lorsque RPi2 envoie des données à cet esclave I2C */void I2CReceived(int NumberOfBytes){ //counter++; //String counterStr =String(counter); //Serial.println("ReceivedData :"+counterStr); /* WinIoT a envoyé un octet de données ; lisez-le */ ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; Chaîne ReceivedDataStr =String(ReceivedData); Serial.println(ReceivedDataInt); if(ReceivedDataInt>=100) //Données Xı { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 145 &&ReceivedDataInt <154) { Serial.println("RELEASE"); motorhiz.run(RELEASE); } else if(ReceivedDataInt>=100 &&ReceivedDataInt <104) { Serial.println("RELEASE"); motorhiz.run(RELEASE); } else if(ReceivedDataInt>=155) { ReceivedDataInt =ReceivedDataInt -155; int motorSpeed =(ReceivedDataInt * 10)+50 ; if(motorSpeed > 254) { motorSpeed =254; } motorhiz.setSpeed(motorSpeed); motorhiz.run(BACKWARD); Chaîne motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=105 ) { ReceivedDataInt =ReceivedDataInt -105; int motorSpeed =(ReceivedDataInt * 10)+50 ; if(motorSpeed > 254) { motorSpeed =254; } motorhiz.setSpeed(motorSpeed); motorhiz.run(AVANT); Chaîne motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz :"+motorSpeedStr); } } else // Y Datası { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 45 &&ReceivedDataInt <54) { Serial.println("RELEASE"); motoryon.run(RELEASE); } else if(ReceivedDataInt>=0 &&ReceivedDataInt <4) { Serial.println("RELEASE"); motoryon.run(RELEASE); } else if(ReceivedDataInt>=55) { ReceivedDataInt =ReceivedDataInt -55; int motorSpeed =(ReceivedDataInt * 12)+50 ; if(motorSpeed > 254) { motorSpeed =254; } motoryon.setSpeed(motorSpeed); motoryon.run(BACKWARD); Chaîne motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=5 ) { ReceivedDataInt =ReceivedDataInt -5; int motorSpeed =(ReceivedDataInt * 12)+50 ; if(motorSpeed > 254) { motorSpeed =254; } motoryon.setSpeed(motorSpeed); motoryon.run(AVANT); Chaîne motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz :"+motorSpeedStr); } }}/* Cette fonction sera automatiquement appelée lorsque RPi2 demande des données à cet esclave I2C */void I2CRequest(){//Serial.println("DataToBeSend"); /*Envoyer des données à WinIoT */ //Wire.write(DataToBeSend,1);}
Schéma de broches d'I2C pour la communication entre arduino et raspberry pi dans l'image, comme indiqué ci-dessus. Il n'est pas nécessaire d'utiliser une alimentation externe pour arduino. Arduino sera alimenté par la broche Vout de Raspberry Pi.
ÉTAPE 2
Le code requis pour raspberry pi (fonctionnant comme un serveur Web) qui envoie des données à arduino via I2C comme indiqué ci-dessous.
Le code peut trouver les codes à la fin de la page (section Code).
ÉTAPE 3
Nous développons l'application Android Visual Studio Cordova qui envoie les données du capteur de l'accéléromètre au serveur Web à l'aide de requêtes ajax.
Le code peut trouver les codes à la fin de la page (section Code).
BREF
1-) L'application Android envoie les données du capteur (données de l'accéléromètre du téléphone Android) au serveur Web qui s'exécute dans Raspberry Pi.
2-) Le serveur Web envoie des données (raspberry pi obtient des données du capteur d'accéléromètre du téléphone Android) à arduino en utilisant I2C.
3-) Arduino traite les données et fait fonctionner les moteurs à l'aide de blindages de moteurs.
Code
- Communication Wiri.h I2C et code Android de bouclier moto
- Télécommande Android
- Serveur Web Windows IOT
Wiri.h I2C Communication et code Android de bouclier motoArduino
Communication I2C entre le code arduino et raspberry pi arduino. Il est destiné à la communication série pour deux appareils avec une source d'entrée et de sortie minimale.#include#define MyAddress 0x40#include AF_DCMotor motorhiz(3);AF_DCMotor motoryon(4);byte DataToBeSend[ 1];byte ReceivedData;int counter =0;void setup(){ Serial.begin(9600); /* Initialiser l'esclave I2C et affecter la fonction de rappel 'onReceive' sur 'I2CReceived'*/ Wire.begin(MyAddress); Wire.onReceive(I2CReceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(RELEASE); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* Incrémentez DataToBeSend toutes les secondes et assurez-vous qu'il est compris entre 0 et 99 */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0 :DataToBeSend[0] + 1;}/* Cette fonction sera automatiquement appelée lorsque RPi2 envoie des données à cet esclave I2C */void I2CReceived(int NumberOfBytes){ //counter++; //String counterStr =String(counter); //Serial.println("ReceivedData :"+counterStr); /* WinIoT a envoyé un octet de données ; lisez-le */ ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; Chaîne ReceivedDataStr =String(ReceivedData); Serial.println(ReceivedDataInt); if(ReceivedDataInt>=100) //Données Xı { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 145 &&ReceivedDataInt <154) { Serial.println("RELEASE"); motorhiz.run(RELEASE); } else if(ReceivedDataInt>=100 &&ReceivedDataInt <104) { Serial.println("RELEASE"); motorhiz.run(RELEASE); } else if(ReceivedDataInt>=155) { ReceivedDataInt =ReceivedDataInt -155; int motorSpeed =(ReceivedDataInt * 10)+50 ; if(motorSpeed > 254) { motorSpeed =254; } motorhiz.setSpeed(motorSpeed); motorhiz.run(BACKWARD); Chaîne motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=105 ) { ReceivedDataInt =ReceivedDataInt -105; int motorSpeed =(ReceivedDataInt * 10)+50 ; if(motorSpeed > 254) { motorSpeed =254; } motorhiz.setSpeed(motorSpeed); motorhiz.run(AVANT); Chaîne motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz :"+motorSpeedStr); } } else // Y Datası { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 45 &&ReceivedDataInt <54) { Serial.println("RELEASE"); motoryon.run(RELEASE); } else if(ReceivedDataInt>=0 &&ReceivedDataInt <4) { Serial.println("RELEASE"); motoryon.run(RELEASE); } else if(ReceivedDataInt>=55) { ReceivedDataInt =ReceivedDataInt -55; int motorSpeed =(ReceivedDataInt * 12)+50 ; if(motorSpeed > 254) { motorSpeed =254; } motoryon.setSpeed(motorSpeed); motoryon.run(BACKWARD); Chaîne motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=5 ) { ReceivedDataInt =ReceivedDataInt -5; int motorSpeed =(ReceivedDataInt * 12)+50 ; if(motorSpeed > 254) { motorSpeed =254; } motoryon.setSpeed(motorSpeed); motoryon.run(AVANT); Chaîne motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz :"+motorSpeedStr); } } }/* Cette fonction sera automatiquement appelée lorsque RPi2 demande des données à cet esclave I2C */void I2CRequest(){ //Serial.println("DataToBeSend"); /*Envoyer des données à WinIoT */ //Wire.write(DataToBeSend,1);}
Télécommande AndroidC#
Télécommande AndroidAucun aperçu (téléchargement uniquement).
Serveur Web Windows IOTC#
Serveur Web Windows IOTAucun aperçu (téléchargement uniquement).
Pièces et boîtiers personnalisés
Schéma de broche Arduino à framboiseSchémas
pour plus de détails :https://www.hackster.io/AnuragVasanwala/home-automation-0dcefcProcessus de fabrication
- Capteur de mouvement utilisant Raspberry Pi
- Robot utilisant Raspberry Pi &Bridge Shield
- Robot Raspberry Pi contrôlé par Bluetooth
- Créez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
- Robot à commande gestuelle utilisant Raspberry Pi
- ROBOT WIFI RASPBERRY PI CONTRLÉ À PARTIR D'UN SMARTPHONE ANDROID
- Robot contrôlé par Wi-Fi utilisant Raspberry Pi
- Système robotique de détection humaine utilisant Arduino Uno
- Arduino Spybot