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

Android bestuurd speelgoed met Raspberry Motor Shield

Componenten en benodigdheden

Android-apparaat
× 1
Arduino 101
× 1
Raspberry Pi 2 Model B
× 1
Dk elektronisch motorschild
× 1
Wifi-dongle officiële framboos
× 1
Vertrouw op 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 zullen we een terreinvoertuig beheren dat wordt bestuurd door de versnellingssensor van het Android-apparaat

Het project bevat Motor Shield, Raspberry Pi, Arduino en DC Motors-apparaten.

STAP 1

Allereerst moeten we een I2C-bus maken tussen Raspberry Pi en Arduino. U kunt hier zien waarom we voor I2C kiezen.

U kunt de vereiste code vinden die zowel het I2C- als het motorschildproces bevat, zoals hieronder weergegeven.

#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) ); /* Initialiseer I2C Slave &wijs de call-back-functie 'onReceive' toe aan 'I2CReceived'*/ Wire.begin(MyAddress); Wire.onReceive (I2Creceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(RELEASE); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* Verhoog DataToBeSend elke seconde en zorg ervoor dat het tussen 0 en 99 ligt */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0:DataToBeSend[0] + 1;}/* Deze functie wordt automatisch aangeroepen wanneer RPi2 gegevens naar deze I2C-slave verzendt */void I2CReceived(int NumberOfBytes){ //counter++; // String counterStr =String (teller); //Serial.println("ReceivedData:"+counterStr); /* WinIoT heeft databyte verzonden; lees het */ 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(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 (motorSnelheid> 254) { motorSnelheid =254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run(ACHTERUIT); String motorSpeedStr =String (motorSnelheid); Serial.println("MotorHiz :"+motorSpeedStr); } else if (ReceivedDataInt>=105) { ReceivedDataInt =ReceivedDataInt -105; int motorSpeed ​​=(ReceivedDataInt * 10)+50; if (motorSnelheid> 254) { motorSnelheid =254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run(VOORUIT); String motorSpeedStr =String (motorSnelheid); 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 (motorSnelheid> 254) { motorSnelheid =254; } motoryon.setSpeed ​​(motorSpeed); motoryon.run(ACHTERUIT); String motorSpeedStr =String (motorSnelheid); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=5) { ReceivedDataInt =ReceivedDataInt -5; int motorSpeed ​​=(ReceivedDataInt * 12)+50; if (motorSnelheid> 254) { motorSnelheid =254; } motoryon.setSpeed ​​(motorSpeed); motoryon.run(VOORUIT); String motorSpeedStr =String (motorSnelheid); Serial.println("MotorHiz :"+motorSpeedStr); } }}/* Deze functie wordt automatisch aangeroepen wanneer RPi2 om gegevens verzoekt van deze I2C-slave */void I2CRequest(){//Serial.println("DataToBeSend"); /*Stuur gegevens naar WinIoT */ //Wire.write(DataToBeSend,1);} 
I2C's pinschema voor communicatie tussen arduino en raspberry pi in afbeelding zoals hierboven weergegeven. Het is niet nodig om een ​​externe voeding voor Arduino te gebruiken. Arduino krijgt stroom van de Vout-pin van Raspberry Pi. 

STAP 2

De vereiste code voor raspberry pi (werkt als een webserver) die gegevens via I2C naar Arduino verzendt, zoals hieronder weergegeven.

Code kan de codes aan het einde van de pagina vinden (Codesectie).

STAP 3

We ontwikkelen Visual Studio Cordova Android-applicatie die de gegevens van de versnellingsmetersensor naar de webserver stuurt met behulp van ajax-verzoeken.

Code kan de codes aan het einde van de pagina vinden (Codesectie).

KORT

1-) Android-applicatie stuurt sensorgegevens (versnellingsmetergegevens van Android-telefoon) naar webserver die in Raspberry Pi draait.

2-) De webserver verzendt gegevens (raspberry pi krijgt gegevens van de versnellingsmetersensor van de Android-telefoon) naar arduino met behulp van I2C.

3-) Arduino verwerkt gegevens en laat motoren draaien met behulp van motorschilden.

Code

  • Wiri.h I2C-communicatie en moto shield android-code
  • Android-afstandsbediening
  • Windows IOT-webserver
Wiri.h I2C-communicatie en moto-schild android-codeArduino
I2C-communicatie tussen Arduino en Raspberry Pi Arduino-code. Het is voor seriële communicatie voor twee apparaten met een minimale invoer-uitvoerbron.
#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); /* Initialiseer I2C Slave &wijs de call-back-functie 'onReceive' toe aan 'I2CReceived'*/ Wire.begin(MyAddress); Wire.onReceive (I2Creceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(RELEASE); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* Verhoog DataToBeSend elke seconde en zorg ervoor dat het tussen 0 en 99 ligt */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0:DataToBeSend[0] + 1;}/* Deze functie wordt automatisch aangeroepen wanneer RPi2 gegevens naar deze I2C-slave verzendt */void I2CReceived(int NumberOfBytes){ //counter++; // String counterStr =String (teller); //Serial.println("ReceivedData:"+counterStr); /* WinIoT heeft databyte verzonden; lees het */ 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(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 (motorSnelheid> 254) { motorSnelheid =254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run(ACHTERUIT); String motorSpeedStr =String (motorSnelheid); Serial.println("MotorHiz :"+motorSpeedStr); } else if (ReceivedDataInt>=105) { ReceivedDataInt =ReceivedDataInt -105; int motorSpeed ​​=(ReceivedDataInt * 10)+50; if (motorSnelheid> 254) { motorSnelheid =254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run(VOORUIT); String motorSpeedStr =String (motorSnelheid); 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 (motorSnelheid> 254) { motorSnelheid =254; } motoryon.setSpeed ​​(motorSpeed); motoryon.run(ACHTERUIT); String motorSpeedStr =String (motorSnelheid); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=5) { ReceivedDataInt =ReceivedDataInt -5; int motorSpeed ​​=(ReceivedDataInt * 12)+50; if (motorSnelheid> 254) { motorSnelheid =254; } motoryon.setSpeed ​​(motorSpeed); motoryon.run(VOORUIT); String motorSpeedStr =String (motorSnelheid); Serial.println("MotorHiz :"+motorSpeedStr); } } }/* Deze functie wordt automatisch aangeroepen wanneer RPi2 om gegevens verzoekt van deze I2C-slave */void I2CRequest(){ //Serial.println("DataToBeSend"); /*Stuur gegevens naar WinIoT */ //Wire.write(DataToBeSend,1);}
Android-afstandsbedieningC#
Android-afstandsbediening
Geen voorbeeld (alleen downloaden).
Windows IOT-webserverC#
Windows IOT Web Server
Geen voorbeeld (alleen downloaden).

Aangepaste onderdelen en behuizingen

Arduino naar frambozenpin-diagram

Schema's

voor details:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefc

Productieproces

  1. Bewegingssensor met Raspberry Pi
  2. Robot die Raspberry Pi &Bridge Shield gebruikt
  3. Raspberry Pi-robot bestuurd via Bluetooth
  4. Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
  5. Gebaargestuurde robot met Raspberry Pi
  6. RASPBERRY PI WIFI ROBOT GECONTROLEERD VANAF ANDROID SMART PHONE
  7. Wifi-gestuurde robot met Raspberry Pi
  8. Human Detection Robotics System met Arduino Uno
  9. Arduino Spybot
  10. Universele afstandsbediening met Arduino, 1Sheeld en Android
  11. Alexa gestuurde LED's via Raspberry Pi