Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Jouet contrôlé par Android utilisant un bouclier de moteur Raspberry

Composants et fournitures

Appareil Android
× 1
Arduino 101
× 1
Raspberry Pi 2 Modèle B
× 1
Bouclier de moteur électronique Dk
× 1
Dongle Wifi Framboise Officielle
× 1
Banque d'alimentation Trust 5v
× 1

Applications et services en ligne

Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015

À 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 Android
Aucun aperçu (téléchargement uniquement).
Serveur Web Windows IOTC#
Serveur Web Windows IOT
Aucun aperçu (téléchargement uniquement).

Pièces et boîtiers personnalisés

Schéma de broche Arduino à framboise

Schémas

pour plus de détails :https://www.hackster.io/AnuragVasanwala/home-automation-0dcefc

Processus de fabrication

  1. Capteur de mouvement utilisant Raspberry Pi
  2. Robot utilisant Raspberry Pi &Bridge Shield
  3. Robot Raspberry Pi contrôlé par Bluetooth
  4. Créez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
  5. Robot à commande gestuelle utilisant Raspberry Pi
  6. ROBOT WIFI RASPBERRY PI CONTRLÉ À PARTIR D'UN SMARTPHONE ANDROID
  7. Robot contrôlé par Wi-Fi utilisant Raspberry Pi
  8. Système robotique de détection humaine utilisant Arduino Uno
  9. Arduino Spybot