Brinquedo controlado pelo Android usando Raspberry Motor Shield
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
| ||||
| ||||
|
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 ControllerSem visualização (apenas download).
Windows IOT Web Server C #
Windows IOT Web ServerSem visualização (somente download).
Peças personalizadas e gabinetes
Arduino para diagrama de pinos framboesaEsquemas
para detalhes:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefcProcesso de manufatura
- Sensor de movimento usando Raspberry Pi
- Robô usando Raspberry Pi e Bridge Shield
- Robô Raspberry Pi controlado por Bluetooth
- Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi
- Robô controlado por gestos usando Raspberry Pi
- ROBÔ WIFI RASPBERRY PI CONTROLADO PELO TELEFONE INTELIGENTE ANDROID
- Robô controlado por Wi-Fi usando Raspberry Pi
- Sistema de detecção de humanos usando Arduino Uno
- Arduino Spybot
- Controle remoto universal usando Arduino, 1Sheeld e Android