Игрушка под управлением Android с использованием Raspberry Motor Shield
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
| ||||
|
Об этом проекте
В конце проекта мы будем управлять вездеходом, управляемым датчиком акселерометра устройства Android
Проект содержит устройства Motor shield, raspberry pi, arduino и dc motors.
ШАГ 1
Прежде всего, мы должны сделать шину I2C между Raspberry Pi и Arduino. Вы можете понять, почему мы выбрали I2C здесь.
Вы можете найти требуемый код, который содержит как I2C, так и процесс защиты электродвигателя, как показано ниже.
#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 и назначить функцию обратного вызова 'onReceive' для 'I2CReceived' * / Wire.begin (MyAddress); Wire.onReceive (I2CReceived); Wire.onRequest (I2CRequest); motorhiz.setSpeed (254); motorhiz.run (ВЫПУСК); motoryon.setSpeed (254); motoryon.run (RELEASE);} void loop () {/ * Увеличивайте DataToBeSend каждую секунду и убедитесь, что он находится в диапазоне от 0 до 99 * / // DataToBeSend [0] =(DataToBeSend [0]> =99)? 0:DataToBeSend [0] + 1;} / * Эта функция будет автоматически вызываться, когда RPi2 отправляет данные этому ведомому устройству I2C * / void I2CReceived (int NumberOfBytes) {// counter ++; // Строка counterStr =String (counter); //Serial.println("ReceivedData:"+ counterStr); / * WinIoT отправил байт данных; прочтите его * / ReceivedData =Wire.read (); int ReceivedDataInt =(int) ReceivedData; Строка ReceivedDataStr =String (ReceivedData); Serial.println (ReceivedDataInt); if (ReceivedDataInt> =100) // X Datası {Serial.println ("DataX:" + ReceivedDataStr); если (ReceivedDataInt> 145 &&ReceivedDataInt <154) {Serial.println ("ВЫПУСКАТЬ"); motorhiz.run (ВЫПУСК); } иначе, если (ReceivedDataInt> =100 &&ReceivedDataInt <104) {Serial.println ("RELEASE"); motorhiz.run (ВЫПУСК); } иначе, если (ReceivedDataInt> =155) {ReceivedDataInt =ReceivedDataInt -155; int motorSpeed =(ReceivedDataInt * 10) +50; если (motorSpeed> 254) {motorSpeed =254; } motorhiz.setSpeed (motorSpeed); motorhiz.run (НАЗАД); Строка motorSpeedStr =Строка (motorSpeed); Serial.println ("МоторХиз:" + motorSpeedStr); } иначе, если (ReceivedDataInt> =105) {ReceivedDataInt =ReceivedDataInt -105; int motorSpeed =(ReceivedDataInt * 10) +50; если (motorSpeed> 254) {motorSpeed =254; } motorhiz.setSpeed (motorSpeed); motorhiz.run (ВПЕРЕД); Строка motorSpeedStr =Строка (motorSpeed); Serial.println ("МоторХиз:" + motorSpeedStr); }} else // Y Данные {Serial.println ("DataX:" + ReceivedDataStr); если (ReceivedDataInt> 45 &&ReceivedDataInt <54) {Serial.println ("ВЫПУСКАТЬ"); motoryon.run (ВЫПУСК); } иначе, если (ReceivedDataInt> =0 &&ReceivedDataInt <4) {Serial.println ("RELEASE"); motoryon.run (ВЫПУСК); } иначе, если (ReceivedDataInt> =55) {ReceivedDataInt =ReceivedDataInt -55; int motorSpeed =(ReceivedDataInt * 12) +50; если (motorSpeed> 254) {motorSpeed =254; } motoryon.setSpeed (motorSpeed); motoryon.run (НАЗАД); Строка motorSpeedStr =Строка (motorSpeed); Serial.println ("МоторХиз:" + motorSpeedStr); } иначе, если (ReceivedDataInt> =5) {ReceivedDataInt =ReceivedDataInt -5; int motorSpeed =(ReceivedDataInt * 12) +50; если (motorSpeed> 254) {motorSpeed =254; } motoryon.setSpeed (motorSpeed); motoryon.run (ВПЕРЕД); Строка motorSpeedStr =Строка (motorSpeed); Serial.println ("МоторХиз:" + motorSpeedStr); }}} / * Эта функция будет автоматически вызываться, когда RPi2 запрашивает данные от этого ведомого устройства I2C * / void I2CRequest () {// Serial.println ("DataToBeSend"); / * Отправляем данные в WinIoT * / //Wire.write(DataToBeSend,1);}
Схема контактов I2C для связи между Arduino и Raspberry Pi на картинке, как показано выше. Для Arduino нет необходимости использовать внешний источник питания. Arduino будет получать питание от вывода Vout Raspberry Pi.
ШАГ 2
Требуемый код для Raspberry Pi (работающего как веб-сервер), который отправляет данные в Arduino через I2C, как показано ниже.
Код может найти коды в конце страницы (раздел кода).
ШАГ 3
Мы разрабатываем приложение Visual Studio Cordova для Android, которое отправляет данные датчика акселерометра на веб-сервер с помощью запросов ajax.
Код может найти коды в конце страницы (раздел кода).
КРАТКО
1-) Приложение Android отправляет данные датчика (данные акселерометра телефона Android) на веб-сервер, работающий в Raspberry Pi.
2-) Веб-сервер отправляет данные (raspberry pi получает данные от датчика акселерометра телефона Android) на Arduino с помощью I2C.
3-) Arduino обрабатывает данные и запускает двигатели, используя экраны двигателей.
Код
- Wiri.h I2C Comminication и moto Shield код Android
- Пульт дистанционного управления Android
- Веб-сервер Windows IOT
Wiri.h I2C Comminication и moto Shield код Android Arduino
Связь I2C между кодом arduino и raspberry pi. Он предназначен для последовательной связи для двух устройств с минимальным входным выходным источником.#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 и назначить функцию обратного вызова 'onReceive' для 'I2CReceived' * / Wire.begin (MyAddress); Wire.onReceive (I2CReceived); Wire.onRequest (I2CRequest); motorhiz.setSpeed (254); motorhiz.run (ВЫПУСК); motoryon.setSpeed (254); motoryon.run (RELEASE);} void loop () {/ * Увеличивайте DataToBeSend каждую секунду и убедитесь, что он находится в диапазоне от 0 до 99 * / // DataToBeSend [0] =(DataToBeSend [0]> =99)? 0:DataToBeSend [0] + 1;} / * Эта функция будет автоматически вызываться, когда RPi2 отправляет данные этому ведомому устройству I2C * / void I2CReceived (int NumberOfBytes) {// counter ++; // Строка counterStr =String (counter); //Serial.println("ReceivedData:"+ counterStr); / * WinIoT отправил байт данных; прочтите его * / ReceivedData =Wire.read (); int ReceivedDataInt =(int) ReceivedData; Строка ReceivedDataStr =String (ReceivedData); Serial.println (ReceivedDataInt); if (ReceivedDataInt> =100) // X Datası {Serial.println ("DataX:" + ReceivedDataStr); если (ReceivedDataInt> 145 &&ReceivedDataInt <154) {Serial.println ("ВЫПУСКАТЬ"); motorhiz.run (ВЫПУСК); } иначе, если (ReceivedDataInt> =100 &&ReceivedDataInt <104) {Serial.println ("RELEASE"); motorhiz.run (ВЫПУСК); } иначе, если (ReceivedDataInt> =155) {ReceivedDataInt =ReceivedDataInt -155; int motorSpeed =(ReceivedDataInt * 10) +50; если (motorSpeed> 254) {motorSpeed =254; } motorhiz.setSpeed (motorSpeed); motorhiz.run (НАЗАД); Строка motorSpeedStr =Строка (motorSpeed); Serial.println ("МоторХиз:" + motorSpeedStr); } иначе, если (ReceivedDataInt> =105) {ReceivedDataInt =ReceivedDataInt -105; int motorSpeed =(ReceivedDataInt * 10) +50; если (motorSpeed> 254) {motorSpeed =254; } motorhiz.setSpeed (motorSpeed); motorhiz.run (ВПЕРЕД); Строка motorSpeedStr =Строка (motorSpeed); Serial.println ("МоторХиз:" + motorSpeedStr); }} else // Y Данные {Serial.println ("DataX:" + ReceivedDataStr); если (ReceivedDataInt> 45 &&ReceivedDataInt <54) {Serial.println ("ВЫПУСКАТЬ"); motoryon.run (ВЫПУСК); } иначе, если (ReceivedDataInt> =0 &&ReceivedDataInt <4) {Serial.println ("RELEASE"); motoryon.run (ВЫПУСК); } иначе, если (ReceivedDataInt> =55) {ReceivedDataInt =ReceivedDataInt -55; int motorSpeed =(ReceivedDataInt * 12) +50; если (motorSpeed> 254) {motorSpeed =254; } motoryon.setSpeed (motorSpeed); motoryon.run (НАЗАД); Строка motorSpeedStr =Строка (motorSpeed); Serial.println ("МоторХиз:" + motorSpeedStr); } иначе, если (ReceivedDataInt> =5) {ReceivedDataInt =ReceivedDataInt -5; int motorSpeed =(ReceivedDataInt * 12) +50; если (motorSpeed> 254) {motorSpeed =254; } motoryon.setSpeed (motorSpeed); motoryon.run (ВПЕРЕД); Строка motorSpeedStr =Строка (motorSpeed); Serial.println ("МоторХиз:" + motorSpeedStr); }}} / * Эта функция будет автоматически вызываться, когда RPi2 запрашивает данные от этого ведомого устройства I2C * / void I2CRequest () {//Serial.println("DataToBeSend "); / * Отправляем данные в WinIoT * / //Wire.write(DataToBeSend,1);}
Пульт дистанционного управления Android C #
Пульт дистанционного управления AndroidБез предварительного просмотра (только загрузка).
Веб-сервер Windows IOT C #
Веб-сервер Windows IOTБез предварительного просмотра (только загрузка).
Изготовленные на заказ детали и корпуса
Схема контактов Arduino и RaspberryСхема
для подробностей:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefcПроизводственный процесс
- Датчик движения с использованием Raspberry Pi
- Робот, использующий Raspberry Pi и Bridge Shield
- Робот Raspberry Pi, управляемый через Bluetooth
- Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
- Робот, управляемый жестами, использующий Raspberry Pi
- РОБОТ МАЛИНЫ PI WIFI, УПРАВЛЯЕМЫЙ С СМАРТ-ТЕЛЕФОНА ANDROID
- Робот, управляемый Wi-Fi и использующий Raspberry Pi
- Робототехническая система для обнаружения человека с использованием Arduino Uno
- Arduino Spybot
- Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android