Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Android-gesteuertes Spielzeug mit Raspberry Motor Shield

Komponenten und Verbrauchsmaterialien

Android-Gerät
× 1
Arduino 101
× 1
Raspberry Pi 2 Model B
× 1
Dk Electronic Motor Shield
× 1
Wifi Dongle Offizieller Raspberry
× 1
Vertrauen Sie 5-V-Powerbank
× 1

Apps und Onlinedienste

Microsoft Windows 10 IoT Core
Arduino-IDE
Microsoft Visual Studio 2015

Ü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-Fernbedienung
Keine Vorschau (nur Download).
Windows IOT-WebserverC#
Windows IOT Web Server
Keine Vorschau (nur Download).

Kundenspezifische Teile und Gehäuse

Arduino zu Himbeer-Pin-Diagramm

Schaltpläne

für Details:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefc

Herstellungsprozess

  1. Bewegungssensor mit Raspberry Pi
  2. Roboter mit Raspberry Pi und Bridge Shield
  3. Raspberry Pi Roboter über Bluetooth gesteuert
  4. Bauen Sie Ihren internetgesteuerten Videostreaming-Roboter mit Arduino und Raspberry Pi
  5. Gestengesteuerter Roboter mit Raspberry Pi
  6. RASPBERRY PI WIFI-ROBOTER, KONTROLLIERT VON ANDROID SMART PHONE
  7. WLAN-gesteuerter Roboter mit Raspberry Pi
  8. Robotersystem zur Erkennung von Menschen mit Arduino Uno
  9. Arduino Spybot
  10. Universelle Fernbedienung mit Arduino, 1Sheeld und Android