Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Игрушка под управлением Android с использованием Raspberry Motor Shield

Компоненты и расходные материалы

Android-устройство
× 1
Arduino 101
× 1
Raspberry Pi 2, модель B
× 1
Dk Electronic Motor Shield
× 1
Официальный ключ Wi-Fi Raspberry
× 1
Блок питания Trust 5v
× 1

Приложения и онлайн-сервисы

Microsoft Windows 10 IoT Core
IDE Arduino
Microsoft Visual Studio 2015

Об этом проекте

В конце проекта мы будем управлять вездеходом, управляемым датчиком акселерометра устройства 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

Производственный процесс

  1. Датчик движения с использованием Raspberry Pi
  2. Робот, использующий Raspberry Pi и Bridge Shield
  3. Робот Raspberry Pi, управляемый через Bluetooth
  4. Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
  5. Робот, управляемый жестами, использующий Raspberry Pi
  6. РОБОТ МАЛИНЫ PI WIFI, УПРАВЛЯЕМЫЙ С СМАРТ-ТЕЛЕФОНА ANDROID
  7. Робот, управляемый Wi-Fi и использующий Raspberry Pi
  8. Робототехническая система для обнаружения человека с использованием Arduino Uno
  9. Arduino Spybot
  10. Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android