工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ラズベリーモーターシールドを使用したAndroid制御玩具

コンポーネントと消耗品

>
Androidデバイス
× 1
Arduino 101
× 1
Raspberry Pi2モデルB
× 1
Dk電子モーターシールド
× 1
Wifiドングルオフィシャルラズベリー
× 1
Trust5vパワーバンク
× 1

アプリとオンラインサービス

>
Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015

このプロジェクトについて

プロジェクトの最後に、Androidデバイスのアクセラレータセンサーによって制御される地形車両を管理します

このプロジェクトには、モーターシールド、ラズベリーパイ、arduino、およびDCモーターデバイスが含まれています。

ステップ1

まず、ラズベリーパイとarduinoの間にI2Cバスを作成する必要があります。ここから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(RELEASE); 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 ++; // String counterStr =String(counter); //Serial.println("ReceivedData: "+ counterStr); / * WinIoTはデータバイトを送信しました。読む* / ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; String ReceivedDataStr =String(ReceivedData); Serial.println(ReceivedDataInt); if(ReceivedDataInt> =100)//XDatası{​​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(BACKWARD);文字列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);文字列motorSpeedStr =String(motorSpeed); Serial.println( "MotorHiz:" + motorSpeedStr); }} else //YDatası{​​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(BACKWARD);文字列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);文字列motorSpeedStr =String(motorSpeed); Serial.println( "MotorHiz:" + motorSpeedStr); }}} / *この関数は、RPi2がこのI2Cスレーブからのデータを要求したときに自動的に呼び出されます* / void I2CRequest(){// Serial.println( "DataToBeSend"); / * WinIoTにデータを送信します* / //Wire.write(DataToBeSend,1);}  
<図>
 上記の写真のarduinoとラズベリーパイの間の通信のためのI2Cのピンスキーマ。 arduinoには外部電源を使用する必要はありません。 ArduinoはラズベリーパイのVoutピンから電力を取得します。 

ステップ2

以下に示すように、I2Cを介してarduinoにデータを送信するラズベリーパイ(Webサーバーとして機能)に必要なコード。

コードはページの最後のコードを見つけることができます(コードセクション)。

ステップ3

ajaxリクエストを使用して加速度センサーのデータをウェブサーバーに送信するVisualStudio CordovaAndroidアプリケーションを開発しています。

コードはページの最後のコードを見つけることができます(コードセクション)。

簡単に

1-)Androidアプリケーションは、センサーデータ(Androidフォンの加速度計データ)をラズベリーパイで実行されるWebサーバーに送信します。

2-)WebサーバーはI2Cを使用してデータをarduinoに送信します(raspberry piはAndroidフォンの加速度センサーからデータを取得します)。

3-)Arduinoはデータを処理し、モーターシールドを使用してモーターを実行します。

コード

  • Wiri.hI2C通信およびモトシールドAndroidコード
  • Androidリモコン
  • Windows IOTWebサーバー
Wiri.hI2C通信およびモトシールドAndroidコード Arduino
arduinoとラズベリーpiarduinoコード間のI2C通信。これは、最小の入出力ソースを持つ2つのデバイスのシリアル通信用です。
 #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(RELEASE); 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 ++; // String counterStr =String(counter); //Serial.println("ReceivedData: "+ counterStr); / * WinIoTはデータバイトを送信しました。読む* / ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; String ReceivedDataStr =String(ReceivedData); Serial.println(ReceivedDataInt); if(ReceivedDataInt> =100)//XDatası{​​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(BACKWARD);文字列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);文字列motorSpeedStr =String(motorSpeed); Serial.println( "MotorHiz:" + motorSpeedStr); }} else //YDatası{​​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(BACKWARD);文字列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);文字列motorSpeedStr =String(motorSpeed); Serial.println( "MotorHiz:" + motorSpeedStr); }}} / *この関数は、RPi2がこのI2Cスレーブからのデータを要求したときに自動的に呼び出されます* / void I2CRequest(){// Serial.println( "DataToBeSend"); / * WinIoTにデータを送信します* / //Wire.write(DataToBeSend,1);} 
Androidリモコン C#
Androidリモートコントローラー
プレビューなし(ダウンロードのみ)。
Windows IOTWebサーバー C#
Windows IOT Webサーバー
プレビューなし(ダウンロードのみ)。

カスタムパーツとエンクロージャー

Arduinoからラズベリーピンの図

回路図

詳細については、https://www.hackster.io/AnuragVasanwala/home-automation-0dcefcをご覧ください。

製造プロセス

  1. RaspberryPiを使用したモーションセンサー
  2. ラズベリーパイとブリッジシールドを使用したロボット
  3. Bluetoothで制御されるRaspberryPi Robot
  4. ArduinoとRaspberryPiを使用してインターネット制御のビデオストリーミングロボットを構築する
  5. RaspberryPiを使用したジェスチャー制御ロボット
  6. ANDROID SMARTPHONEから制御されるRASPBERRYPI WIFI ROBOT
  7. RaspberryPiを使用したWifi制御ロボット
  8. ArduinoUnoを使用した人間検出ロボティクスシステム
  9. Arduino Spybot
  10. Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
  11. RaspberryPiを介したAlexa制御LED