Android-gesteuertes Spielzeug mit Raspberry Motor Shield
Komponenten und Verbrauchsmaterialien
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Apps und Onlinedienste
| ||||
| ||||
|
Über dieses Projekt
Am Ende des Projekts werden wir ein Geländefahrzeug verwalten, das vom Beschleunigungssensor des Android-Geräts gesteuert wird
Das Projekt enthält Motorschild-, Himbeer-Pi-, Arduino- und Gleichstrommotorengeräte.
SCHRITT 1
Zuallererst sollten wir einen I2C-Bus zwischen Himbeer-Pi und Arduino machen. Sie können hier sehen, warum wir uns für I2C entscheiden.
Sie finden den erforderlichen Code, der sowohl den I2C- als auch den Motorabschirmprozess enthält, wie unten gezeigt.
#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 ); /* I2C Slave initialisieren &Rückruffunktion 'onReceive' auf 'I2CReceived' zuweisen*/ Wire.begin(MyAddress); Wire.onReceive(I2CReceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(FREIGABE); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* DataToBeSend jede Sekunde erhöhen und sicherstellen, dass es zwischen 0 und 99 liegt */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0 :DataToBeSend[0] + 1;}/* Diese Funktion wird automatisch aufgerufen, wenn RPi2 Daten an diesen I2C-Slave sendet */void I2CReceived(int NumberOfBytes){ //counter++; //String-ZählerStr =String(Zähler); //Serial.println("ReceivedData :"+counterStr); /* WinIoT hat Datenbyte gesendet; lesen Sie es */ ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; String ReceivedDataStr =String(ReceivedData); Serial.println (ReceivedDataInt); if (ReceivedDataInt> =100) // X Datası {Serial.println ("DataX:"+ReceivedDataStr); if (ReceivedDataInt> 145 &&ReceivedDataInt <154) {Serial.println ("RELEASE"); motorhiz.run(FREIGABE); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=100 &&ReceivedDataInt <104) {Serial.println("RELEASE"); motorhiz.run(FREIGABE); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=155) { ReceivedDataInt =ReceivedDataInt -155; int motorSpeed =(ReceivedDataInt * 10)+50; if (motorSpeed > 254) { motorSpeed =254; } motorhiz.setSpeed (motorSpeed); motorhiz.run (RÜCKWÄRTS); String motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=105) { ReceivedDataInt =ReceivedDataInt -105; int motorSpeed =(ReceivedDataInt * 10)+50; if (motorSpeed > 254) { motorSpeed =254; } motorhiz.setSpeed (motorSpeed); motorhiz.run(FORWARD); String motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); }} else // Y Datası {Serial.println("DataX:"+ReceivedDataStr); if (ReceivedDataInt> 45 &&ReceivedDataInt <54) {Serial.println ("RELEASE"); motoryon.run(FREIGABE); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=0 &&ReceivedDataInt <4) {Serial.println("RELEASE"); motoryon.run(FREIGABE); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=55) { ReceivedDataInt =ReceivedDataInt -55; int motorSpeed =(ReceivedDataInt * 12)+50; if (motorSpeed > 254) { motorSpeed =254; } motoryon.setSpeed (motorSpeed); motoryon.run(RÜCKWÄRTS); String motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=5) { ReceivedDataInt =ReceivedDataInt -5; int motorSpeed =(ReceivedDataInt * 12)+50; if (motorSpeed > 254) { motorSpeed =254; } motoryon.setSpeed (motorSpeed); motoryon.run(FORWARD); String motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } }}/* Diese Funktion wird automatisch aufgerufen, wenn RPi2 Daten von diesem I2C-Slave anfordert */void I2CRequest(){//Serial.println("DataToBeSend"); /*Daten an WinIoT senden */ //Wire.write(DataToBeSend,1);}
Das Pin-Schema von I2C für die Kommunikation zwischen Arduino und Himbeer-Pi im Bild wie oben gezeigt. Es ist nicht erforderlich, ein externes Netzteil für Arduino zu verwenden. Arduino wird über den Vout-Pin von Raspberry Pi mit Strom versorgt.
SCHRITT 2
Der erforderliche Code für Raspberry Pi (der als Webserver arbeitet), der Daten über I2C an Arduino sendet, wie unten gezeigt.
Code könnte die Codes am Ende der Seite finden (Codeabschnitt).
SCHRITT 3
Wir entwickeln Visual Studio Cordova Android-Anwendung, die die Daten des Beschleunigungssensors mithilfe von Ajax-Anfragen an den Webserver sendet.
Code könnte die Codes am Ende der Seite finden (Codeabschnitt).
KURZ
1-) Die Android-Anwendung sendet Sensordaten (Daten des Beschleunigungsmessers für Android-Telefone) an den Webserver, der in Himbeer-Pi ausgeführt wird.
2-) Der Webserver sendet Daten (Raspberry Pi erhält Daten vom Beschleunigungssensor des Android-Telefons) über I2C an Arduino.
3-) Arduino verarbeitet Daten und betreibt Motoren mit Motorschilden.
Code
- Wiri.h I2C-Kommunikation und Moto-Schild-Android-Code
- Android-Fernbedienung
- Windows IOT-Webserver
Wiri.h I2C-Kommunikation und Moto-Schild-Android-CodeArduino
I2C-Kommunikation zwischen Arduino- und Himbeer-Pi-Arduino-Code. Es dient der seriellen Kommunikation für zwei Geräte mit minimaler Eingangs-/Ausgangsquelle.#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); /* I2C Slave initialisieren &Rückruffunktion 'onReceive' auf 'I2CReceived' zuweisen*/ Wire.begin(MyAddress); Wire.onReceive(I2CReceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(FREIGABE); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* DataToBeSend jede Sekunde erhöhen und sicherstellen, dass es zwischen 0 und 99 liegt */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0 :DataToBeSend[0] + 1;}/* Diese Funktion wird automatisch aufgerufen, wenn RPi2 Daten an diesen I2C-Slave sendet */void I2CReceived(int NumberOfBytes){ //counter++; //String-ZählerStr =String(Zähler); //Serial.println("ReceivedData :"+counterStr); /* WinIoT hat Datenbyte gesendet; lesen Sie es */ ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; String ReceivedDataStr =String(ReceivedData); Serial.println (ReceivedDataInt); if (ReceivedDataInt> =100) // X Datası {Serial.println ("DataX:"+ReceivedDataStr); if (ReceivedDataInt> 145 &&ReceivedDataInt <154) {Serial.println ("RELEASE"); motorhiz.run(FREIGABE); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=100 &&ReceivedDataInt <104) {Serial.println("RELEASE"); motorhiz.run(FREIGABE); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=155) { ReceivedDataInt =ReceivedDataInt -155; int motorSpeed =(ReceivedDataInt * 10)+50; if (motorSpeed > 254) { motorSpeed =254; } motorhiz.setSpeed (motorSpeed); motorhiz.run (RÜCKWÄRTS); String motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=105) { ReceivedDataInt =ReceivedDataInt -105; int motorSpeed =(ReceivedDataInt * 10)+50; if (motorSpeed > 254) { motorSpeed =254; } motorhiz.setSpeed (motorSpeed); motorhiz.run(FORWARD); String motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); }} else // Y Datası {Serial.println("DataX:"+ReceivedDataStr); if (ReceivedDataInt> 45 &&ReceivedDataInt <54) {Serial.println ("RELEASE"); motoryon.run(FREIGABE); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=0 &&ReceivedDataInt <4) {Serial.println("RELEASE"); motoryon.run(FREIGABE); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=55) { ReceivedDataInt =ReceivedDataInt -55; int motorSpeed =(ReceivedDataInt * 12)+50; if (motorSpeed > 254) { motorSpeed =254; } motoryon.setSpeed (motorSpeed); motoryon.run(RÜCKWÄRTS); String motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); aufrechtzuerhalten. Sonst if (ReceivedDataInt>=5) { ReceivedDataInt =ReceivedDataInt -5; int motorSpeed =(ReceivedDataInt * 12)+50; if (motorSpeed > 254) { motorSpeed =254; } motoryon.setSpeed (motorSpeed); motoryon.run(FORWARD); String motorSpeedStr =String(motorSpeed); Serial.println("MotorHiz:"+motorSpeedStr); } } }/* Diese Funktion wird automatisch aufgerufen, wenn RPi2 Daten von diesem I2C-Slave anfordert */void I2CRequest(){ //Serial.println("DataToBeSend"); /*Daten an WinIoT senden */ //Wire.write(DataToBeSend,1);}
Android-FernbedienungC#
Android-FernbedienungKeine Vorschau (nur Download).
Windows IOT-WebserverC#
Windows IOT Web ServerKeine Vorschau (nur Download).
Kundenspezifische Teile und Gehäuse
Arduino zu Himbeer-Pin-DiagrammSchaltpläne
für Details:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefcHerstellungsprozess
- Bewegungssensor mit Raspberry Pi
- Roboter mit Raspberry Pi und Bridge Shield
- Raspberry Pi Roboter über Bluetooth gesteuert
- Bauen Sie Ihren internetgesteuerten Videostreaming-Roboter mit Arduino und Raspberry Pi
- Gestengesteuerter Roboter mit Raspberry Pi
- RASPBERRY PI WIFI-ROBOTER, KONTROLLIERT VON ANDROID SMART PHONE
- WLAN-gesteuerter Roboter mit Raspberry Pi
- Robotersystem zur Erkennung von Menschen mit Arduino Uno
- Arduino Spybot
- Universelle Fernbedienung mit Arduino, 1Sheeld und Android