Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Juguete controlado por Android con Raspberry Motor Shield

Componentes y suministros

dispositivo Android
× 1
Arduino 101
× 1
Raspberry Pi 2 Modelo B
× 1
Dk Electronic Motor Shield
× 1
Wifi Dongle Offical Raspberry
× 1
Banco de energía Trust 5v
× 1

Aplicaciones y servicios en línea

Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015

Acerca de este proyecto

Al final del proyecto, gestionaremos un vehículo todoterreno controlado por el sensor de acelerador del dispositivo Android

El proyecto contiene dispositivos Motor shield, raspberry pi, arduino y dc motors.

PASO 1

En primer lugar deberíamos hacer un bus I2C entre raspberry pi y arduino. Puede ver por qué elegimos I2C desde aquí.

Puede encontrar el código requerido que contiene tanto I2C como el proceso de protección del motor como se muestra a continuación.

  #include #define MyAddress 0x40 # include AF_DCMotor motorhiz (3); AF_DCMotor motoryon (4); byte DataToBeSend [1]; byte ReceivedData; int contador =0; void setup () {Serial.begin (9600 ); / * Inicializar el esclavo I2C y asignar la función de devolución de llamada 'onReceive' en 'I2CReceived' * / Wire.begin (MyAddress); Wire.onReceive (I2CReceived); Wire.onRequest (I2CRequest); motorhiz.setSpeed ​​(254); motorhiz.run (LIBERACIÓN); motoryon.setSpeed ​​(254); motoryon.run (RELEASE);} void loop () {/ * Incrementar DataToBeSend cada segundo y asegurarse de que oscile entre 0 y 99 * / // DataToBeSend [0] =(DataToBeSend [0]> =99)? 0:DataToBeSend [0] + 1;} / * Esta función se llamará automáticamente cuando RPi2 envíe datos a este esclavo I2C * / void I2CReceived (int NumberOfBytes) {// contador ++; // Cadena contadorStr =Cadena (contador); //Serial.println("ReceivedData:"+ counterStr); / * WinIoT ha enviado bytes de datos; leerlo * / 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 ("LIBERAR"); motorhiz.run (LIBERACIÓN); } else if (ReceivedDataInt> =100 &&ReceivedDataInt <104) {Serial.println ("LIBERAR"); motorhiz.run (LIBERACIÓN); } else if (ReceivedDataInt> =155) {ReceivedDataInt =ReceivedDataInt -155; int motorSpeed ​​=(ReceivedDataInt * 10) +50; if (motorSpeed> 254) {motorSpeed ​​=254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run (HACIA ATRÁS); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); } else if (ReceivedDataInt> =105) {ReceivedDataInt =ReceivedDataInt -105; int motorSpeed ​​=(ReceivedDataInt * 10) +50; if (motorSpeed> 254) {motorSpeed ​​=254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run (ADELANTE); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); }} else // Y Datası {Serial.println ("DataX:" + ReceivedDataStr); if (ReceivedDataInt> 45 &&ReceivedDataInt <54) {Serial.println ("LIBERAR"); motoryon.run (LIBERACIÓN); } else if (ReceivedDataInt> =0 &&ReceivedDataInt <4) {Serial.println ("LIBERAR"); motoryon.run (LIBERACIÓN); } else if (ReceivedDataInt> =55) {ReceivedDataInt =ReceivedDataInt -55; int motorSpeed ​​=(ReceivedDataInt * 12) +50; if (motorSpeed> 254) {motorSpeed ​​=254; } motoryon.setSpeed ​​(motorSpeed); motoryon.run (HACIA ATRÁS); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); } else if (ReceivedDataInt> =5) {ReceivedDataInt =ReceivedDataInt -5; int motorSpeed ​​=(ReceivedDataInt * 12) +50; if (motorSpeed> 254) {motorSpeed ​​=254; } motoryon.setSpeed ​​(motorSpeed); motoryon.run (ADELANTE); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); }}} / * Esta función se llamará automáticamente cuando RPi2 solicite datos de este esclavo I2C * / void I2CRequest () {// Serial.println ("DataToBeSend"); / * Enviar datos a WinIoT * / //Wire.write(DataToBeSend,1);}  
  Esquema de pines de I2C para la comunicación entre arduino y raspberry pi en la imagen como se muestra arriba. No es necesario utilizar una fuente de alimentación externa para arduino. Arduino obtendrá energía del pin Vout de raspberry pi.  

PASO 2

El código requerido para raspberry pi (que funciona como servidor web) que envía datos a arduino a través de I2C como se muestra a continuación.

El código podría encontrar los códigos al final de la página (sección de códigos).

PASO 3

Desarrollamos la aplicación para Android Visual Studio Cordova que envía los datos del sensor del acelerómetro al servidor web mediante solicitudes ajax.

El código podría encontrar los códigos al final de la página (sección de códigos).

BREVEMENTE

1-) La aplicación de Android envía datos del sensor (datos del acelerómetro del teléfono Android) al servidor web que se ejecuta en raspberry pi.

2-) El servidor web envía datos (raspberry pi obtiene datos del sensor acelerómetro del teléfono Android) a arduino usando I2C.

3-) Arduino procesa los datos y ejecuta los motores utilizando protectores de motores.

Código

  • Wiri.h I2C Comminication y código de Android moto shield
  • Mando a distancia de Android
  • Servidor web Windows IOT
Wiri.h I2C Comminication y código de android moto shield Arduino
Comunicación I2C entre arduino y código arduino raspberry pi. Es para comunicación en serie para dos dispositivos con una fuente de salida de entrada mínima.
 #include  #define MyAddress 0x40 # include  AF_DCMotor motorhiz (3); AF_DCMotor motoryon (4); byte DataToBeSend [ 1]; byte ReceivedData; int contador =0; void setup () {Serial.begin (9600); / * Inicializar el esclavo I2C y asignar la función de devolución de llamada 'onReceive' en 'I2CReceived' * / Wire.begin (MyAddress); Wire.onReceive (I2CReceived); Wire.onRequest (I2CRequest); motorhiz.setSpeed ​​(254); motorhiz.run (LIBERACIÓN); motoryon.setSpeed ​​(254); motoryon.run (RELEASE);} void loop () {/ * Incrementar DataToBeSend cada segundo y asegurarse de que oscile entre 0 y 99 * / // DataToBeSend [0] =(DataToBeSend [0]> =99)? 0:DataToBeSend [0] + 1;} / * Esta función se llamará automáticamente cuando RPi2 envíe datos a este esclavo I2C * / void I2CReceived (int NumberOfBytes) {// contador ++; // Cadena contadorStr =Cadena (contador); //Serial.println("ReceivedData:"+ counterStr); / * WinIoT ha enviado bytes de datos; leerlo * / 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 ("LIBERAR"); motorhiz.run (LIBERACIÓN); } else if (ReceivedDataInt> =100 &&ReceivedDataInt <104) {Serial.println ("LIBERAR"); motorhiz.run (LIBERACIÓN); } else if (ReceivedDataInt> =155) {ReceivedDataInt =ReceivedDataInt -155; int motorSpeed ​​=(ReceivedDataInt * 10) +50; if (motorSpeed> 254) {motorSpeed ​​=254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run (HACIA ATRÁS); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); } else if (ReceivedDataInt> =105) {ReceivedDataInt =ReceivedDataInt -105; int motorSpeed ​​=(ReceivedDataInt * 10) +50; if (motorSpeed> 254) {motorSpeed ​​=254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run (ADELANTE); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); }} else // Y Datası {Serial.println ("DataX:" + ReceivedDataStr); if (ReceivedDataInt> 45 &&ReceivedDataInt <54) {Serial.println ("LIBERAR"); motoryon.run (LIBERACIÓN); } else if (ReceivedDataInt> =0 &&ReceivedDataInt <4) {Serial.println ("LIBERAR"); motoryon.run (LIBERACIÓN); } else if (ReceivedDataInt> =55) {ReceivedDataInt =ReceivedDataInt -55; int motorSpeed ​​=(ReceivedDataInt * 12) +50; if (motorSpeed> 254) {motorSpeed ​​=254; } motoryon.setSpeed ​​(motorSpeed); motoryon.run (HACIA ATRÁS); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); } else if (ReceivedDataInt> =5) {ReceivedDataInt =ReceivedDataInt -5; int motorSpeed ​​=(ReceivedDataInt * 12) +50; if (motorSpeed> 254) {motorSpeed ​​=254; } motoryon.setSpeed ​​(motorSpeed); motoryon.run (ADELANTE); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); }}} / * Esta función se llamará automáticamente cuando RPi2 solicite datos de este esclavo I2C * / void I2CRequest () {//Serial.println("DataToBeSend "); / * Enviar datos a WinIoT * / //Wire.write(DataToBeSend,1);} 
Mando a distancia de Android C #
Mando a distancia de Android
 Sin vista previa (solo descarga). 
Servidor web Windows IOT C #
Windows IOT Web Server
 Sin vista previa (solo descarga). 

Piezas y carcasas personalizadas

Diagrama de pines de Arduino a frambuesa

Esquemas

para más detalles:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefc

Proceso de manufactura

  1. Sensor de movimiento con Raspberry Pi
  2. Robot que usa Raspberry Pi y Bridge Shield
  3. Robot Raspberry Pi controlado por Bluetooth
  4. Cree su robot de transmisión de video controlado por Internet con Arduino y Raspberry Pi
  5. Robot controlado por gestos con Raspberry Pi
  6. ROBOT WIFI DE FRAMBUESA PI CONTROLADO DESDE EL TELÉFONO INTELIGENTE DE ANDROID
  7. Robot controlado por Wifi usando Raspberry Pi
  8. Sistema de robótica de detección humana con Arduino Uno
  9. Arduino Spybot
  10. Control remoto universal usando Arduino, 1Sheeld y Android
  11. LED controlados por Alexa a través de Raspberry Pi