Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Brinquedo controlado pelo Android usando Raspberry Motor Shield

Componentes e suprimentos

Dispositivo Android
× 1
Arduino 101
× 1
Raspberry Pi 2 Modelo B
× 1
Dk Electronic Motor Shield
× 1
Wifi Dongle Offical Raspberry
× 1
Trust 5v power bank
× 1

Aplicativos e serviços online

Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015

Sobre este projeto


No final do projeto, vamos gerenciar um veículo de terreno controlado pelo sensor acelerador do dispositivo Android

O projeto contém dispositivos motor shield, raspberry pi, arduino e dc.





PASSO 1


Em primeiro lugar, devemos fazer o barramento I2C entre o Raspberry Pi e o Arduino. Você pode ver porque escolhemos I2C aqui.

Você pode encontrar o código necessário que contém o processo I2C e a blindagem do motor, conforme mostrado abaixo.
  #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 ); / * Inicializar I2C Slave e atribuir função de retorno de chamada 'onReceive' em 'I2CReceived' * / Wire.begin (MyAddress); Wire.onReceive (I2CReceived); Wire.onRequest (I2CRequest); motorhiz.setSpeed ​​(254); motorhiz.run (RELEASE); motoryon.setSpeed ​​(254); motoryon.run (RELEASE);} void loop () {/ * Incrementar DataToBeSend a cada segundo e certificar-se de que varia entre 0 e 99 * / // DataToBeSend [0] =(DataToBeSend [0]> =99)? 0:DataToBeSend [0] + 1;} / * Esta função será chamada automaticamente quando RPi2 enviar dados para este escravo I2C * / void I2CReceived (int NumberOfBytes) {// counter ++; // String counterStr =String (contador); //Serial.println("ReceivedData:"+ counterStr); / * WinIoT enviou byte de dados; leia * / 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 (motorSpeed> 254) {motorSpeed ​​=254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run (PARA TRÁ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 (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 (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 (PARA TRÁ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 (FORWARD); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); }}} / * Esta função será chamada automaticamente quando RPi2 solicitar dados deste escravo I2C * / void I2CRequest () {// Serial.println ("DataToBeSend"); / * Enviar dados para WinIoT * / //Wire.write(DataToBeSend,1);}  
  Esquema de pin do I2C para cominicação entre arduino e raspberry pi na imagem como mostrado acima. Não é necessário usar fonte de alimentação externa para o Arduino. O Arduino obterá energia do pino Vout do raspberry pi.  





PASSO 2


O código necessário para raspberry pi (funcionando como um servidor web) que envia dados para o arduino via I2C, conforme mostrado abaixo.

O código pode localizar os códigos no final da página (Seção de código).





PASSO 3


Desenvolvemos o aplicativo Visual Studio Cordova Android que envia dados do sensor do acelerômetro para o servidor da Web usando solicitações ajax.

O código pode localizar os códigos no final da página (Seção de código).





BREVE


1-) O aplicativo Android envia dados do sensor (dados do acelerômetro do telefone Android) para o servidor web que roda no Raspberry Pi.

2-) O servidor web envia dados (raspberry pi obtém dados do sensor acelerômetro do telefone Android) para o arduino usando I2C.

3-) O Arduino processa dados e opera motores usando protetores de motores.




Código

  • Wiri.h I2C Comminication e código android moto shield
  • Controlador remoto Android
  • Windows IOT Web Server
Wiri.h I2C Comminication e código Android do escudo moto Arduino
Cominicação I2C entre o código arduino e raspberry pi arduino. É para comunicação serial para dois dispositivos com fonte de saída de entrada mínima.
 #include  #define MyAddress 0x40 # include  AF_DCMotor motorhiz (3); AF_DCMotor motoryon (4); byte DataToBeSend [ 1]; byte ReceivedData; contador interno =0; configuração vazia () {Serial.begin (9600); / * Inicializar I2C Slave e atribuir função de retorno de chamada 'onReceive' em 'I2CReceived' * / Wire.begin (MyAddress); Wire.onReceive (I2CReceived); Wire.onRequest (I2CRequest); motorhiz.setSpeed ​​(254); motorhiz.run (RELEASE); motoryon.setSpeed ​​(254); motoryon.run (RELEASE);} void loop () {/ * Incrementar DataToBeSend a cada segundo e certificar-se de que varia entre 0 e 99 * / // DataToBeSend [0] =(DataToBeSend [0]> =99)? 0:DataToBeSend [0] + 1;} / * Esta função será chamada automaticamente quando RPi2 enviar dados para este escravo I2C * / void I2CReceived (int NumberOfBytes) {// counter ++; // String counterStr =String (contador); //Serial.println("ReceivedData:"+ counterStr); / * WinIoT enviou byte de dados; leia * / 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 (motorSpeed> 254) {motorSpeed ​​=254; } motorhiz.setSpeed ​​(motorSpeed); motorhiz.run (PARA TRÁ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 (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 (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 (PARA TRÁ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 (FORWARD); String motorSpeedStr =String (motorSpeed); Serial.println ("MotorHiz:" + motorSpeedStr); }}} / * Esta função será chamada automaticamente quando RPi2 solicitar dados deste escravo I2C * / void I2CRequest () {//Serial.println("DataToBeSend "); / * Enviar dados para WinIoT * / //Wire.write(DataToBeSend,1);} 
Controle remoto Android C #
Android Remote Controller
 Sem visualização (apenas download). 
Windows IOT Web Server C #
Windows IOT Web Server
 Sem visualização (somente download). 

Peças personalizadas e gabinetes

Arduino para diagrama de pinos framboesa

Esquemas

para detalhes:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefc

Processo de manufatura

  1. Sensor de movimento usando Raspberry Pi
  2. Robô usando Raspberry Pi e Bridge Shield
  3. Robô Raspberry Pi controlado por Bluetooth
  4. Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
  5. Robô controlado por gestos usando Raspberry Pi
  6. ROBÔ WIFI RASPBERRY PI CONTROLADO PELO TELEFONE INTELIGENTE ANDROID
  7. Robô controlado por Wi-Fi usando Raspberry Pi
  8. Sistema de detecção de humanos usando Arduino Uno
  9. Arduino Spybot
  10. Controle remoto universal usando Arduino, 1Sheeld e Android