Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

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

  1. Android-applicatie stuurt sensordata (versnellingsmeter) naar webserver op Raspberry Pi.
  2. Webserver stuurt data naar Arduino via I2C.
  3. Arduino verwerkt data en stuurt motoren aan via Motor Shield.

Productieproces

  1. Een LED Besturen met een PIR-bewegingssensor op Raspberry Pi
  2. Bouw een Slimme Robot met de Bridge Shield – Raspberry Pi & Arduino Integratie
  3. Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
  4. Bouw een Internet-gecontroleerde Video-streamende Robot met Arduino & Raspberry Pi
  5. Gebaren-gecontroleerde Robot Aangedreven door Raspberry Pi
  6. Bouw een WiFi-gecontroleerde Robot met Raspberry Pi & Android Smartphone
  7. Bouw een Wi-Fi-gecontroleerde Raspberry Pi Robot met Python – Stap-voor-stap Gids
  8. Arduino Uno Gebaseerde Mensendetectie Robot: Stap-voor-stap Sensorintegratie
  9. Bluetooth-gecontroleerde Arduino Spybot bouwen
  10. Universele Android-afstandsbediening bouwen met Arduino, 1Sheeld en IR-besturing
  11. LED's bedienen met Alexa via Raspberry Pi – Eenvoudige stapsgewijze handleiding