Bouw een Android-bestuurd extern voertuig met Raspberry Pi Motor Shield
Onderdelen en benodigdheden
| Android-apparaat | × | 1 |
| Arduino 101 | × | 1 |
| Raspberry Pi 2 Model B | × | 1 |
| DK Electronic Motor Shield | × | 1 |
| WiFi-dongle (officiële Raspberry Pi) | × | 1 |
| Trust 5V powerbank | × | 1 |
Apps en online services
- Microsoft Windows 10 IoT Core
- Arduino IDE
- Microsoft Visual Studio 2015
Over dit project
Aan het einde van het project besturen we een gelandsvoertuig dat gestuurd wordt door de versnellingsmeter van een Android-apparaat.
Het project bevat: Motor Shield, Raspberry Pi, Arduino en DC-motoren.
STAP 1: I2C-bus tussen Raspberry Pi en Arduino
Allereerst maken we een I2C-bus tussen de Raspberry Pi en de Arduino. Waarom I2C? Zie hier.
De benodigde code (bevat zowel I2C als motor shield-logica) is hieronder getoond.
#include <Wire.h>
#define MyAddress 0x40
#include <AFMotor.h>
AF_DCMotor motorhiz(3);
AF_DCMotor motoryon(4);
byte DataToBeSend[1];
byte ReceivedData;
int counter = 0;
void setup() {
Serial.begin(9600);
Wire.begin(MyAddress);
Wire.onReceive(I2CReceived);
Wire.onRequest(I2CRequest);
motorhiz.setSpeed(254);
motorhiz.run(RELEASE);
motoryon.setSpeed(254);
motoryon.run(RELEASE);
}
void loop() {
// DataToBeSend[0] = (DataToBeSend[0] >= 99) ? 0 : DataToBeSend[0] + 1;
}
void I2CReceived(int NumberOfBytes) {
ReceivedData = Wire.read();
int ReceivedDataInt = (int)ReceivedData;
String ReceivedDataStr = String(ReceivedData);
Serial.println(ReceivedDataInt);
if(ReceivedDataInt >= 100) { // X-data
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);
Serial.println("MotorHiz: " + String(motorSpeed));
} else if(ReceivedDataInt >= 105) {
ReceivedDataInt = ReceivedDataInt - 105;
int motorSpeed = (ReceivedDataInt * 10) + 50;
if(motorSpeed > 254) motorSpeed = 254;
motorhiz.setSpeed(motorSpeed);
motorhiz.run(FORWARD);
Serial.println("MotorHiz: " + String(motorSpeed));
}
} else { // Y-data
Serial.println("DataY: " + 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);
Serial.println("MotorHiz: " + String(motorSpeed));
} else if(ReceivedDataInt >= 5) {
ReceivedDataInt = ReceivedDataInt - 5;
int motorSpeed = (ReceivedDataInt * 12) + 50;
if(motorSpeed > 254) motorSpeed = 254;
motoryon.setSpeed(motorSpeed);
motoryon.run(FORWARD);
Serial.println("MotorHiz: " + String(motorSpeed));
}
}
}
void I2CRequest() {
// Wire.write(DataToBeSend, 1);
}
I2C-pinschema voor communicatie tussen Arduino en Raspberry Pi (zie afbeelding). Geen externe voeding voor Arduino nodig – Arduino krijgt stroom van de Vout-pin van de Raspberry Pi.
STAP 2: Raspberry Pi-code (webserver)
De benodigde code voor de Raspberry Pi (werkend als webserver) die data naar de Arduino stuurt via I2C, staat aan het einde van de pagina (Code-sectie).
STAP 3: Android-applicatie (Visual Studio Cordova)
We ontwikkelden een Visual Studio Cordova Android-applicatie die de versnellingsmeterdata naar de webserver stuurt via AJAX-verzoeken. Code staat aan het einde (Code-sectie).
Kort samengevat
- Android-applicatie stuurt sensordata (versnellingsmeter) naar webserver op Raspberry Pi.
- Webserver stuurt data naar Arduino via I2C.
- Arduino verwerkt data en stuurt motoren aan via Motor Shield.
Productieproces
- Een LED Besturen met een PIR-bewegingssensor op Raspberry Pi
- Bouw een Slimme Robot met de Bridge Shield – Raspberry Pi & Arduino Integratie
- Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
- Bouw een Internet-gecontroleerde Video-streamende Robot met Arduino & Raspberry Pi
- Gebaren-gecontroleerde Robot Aangedreven door Raspberry Pi
- Bouw een WiFi-gecontroleerde Robot met Raspberry Pi & Android Smartphone
- Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
- Arduino Uno Gebaseerde Mensendetectie Robot: Stap-voor-stap Sensorintegratie
- Bluetooth-gecontroleerde Arduino Spybot bouwen
- Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
- LED's bedienen met Alexa via Raspberry Pi – Eenvoudige stapsgewijze handleiding