Tentang proyek ini
Di akhir proyek kami akan mengelola kendaraan medan yang dikendalikan oleh sensor akselerasi perangkat android
Proyek ini berisi perangkat Motor shield, raspberry pi, arduino, dan motor dc.
LANGKAH 1
Pertama-tama kita harus membuat bus I2C antara raspberry pi dan arduino. Anda dapat melihat mengapa kami memilih I2C dari sini.
Anda dapat menemukan kode yang diperlukan yang berisi proses I2C dan pelindung motor seperti yang ditunjukkan di bawah ini.
#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 ); /* Inisialisasi I2C Slave &tetapkan fungsi panggilan balik 'onReceive' pada 'I2CReceived'*/ Wire.begin(MyAddress); Wire.onReceive(I2CReceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(LEPAS); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* Tingkatkan DataToBeSend setiap detik dan pastikan rentangnya antara 0 dan 99 */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0 :DataToBeSend[0] + 1;}/* Fungsi ini akan otomatis dipanggil ketika RPi2 mengirimkan data ke slave I2C ini */void I2CReceived(int NumberOfBytes){ //counter++; //String penghitungStr =String(penghitung); //Serial.println("Data yang Diterima :"+counterStr); /* WinIoT telah mengirim byte data; membacanya */ ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; String ReceivedDataStr =String(DataDiterima); Serial.println(ReceivedDataInt); if(ReceivedDataInt>=100) //X Datası { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 145 &&ReceivedDataInt <154) { Serial.println("RELEASE"); motorhiz.run(LEPAS); } else if(ReceivedDataInt>=100 &&ReceivedDataInt <104) { Serial.println("RELEASE"); motorhiz.run(LEPAS); } else if(ReceivedDataInt>=155) { ReceivedDataInt =ReceivedDataInt -155; int kecepatan motor =(ReceivedDataInt * 10)+50; if(Kecepatan motor> 254) { Kecepatan motor =254; } motorhiz.setSpeed(kecepatan motor); motorhiz.run(Mundur); String motorSpeedStr =String(Kecepatan motor); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=105 ) { ReceivedDataInt =ReceivedDataInt -105; int kecepatan motor =(ReceivedDataInt * 10)+50; if(Kecepatan motor> 254) { Kecepatan motor =254; } motorhiz.setSpeed(kecepatan motor); motorhiz.run(maju); String motorSpeedStr =String(Kecepatan motor); Serial.println("MotorHiz :"+motorSpeedStr); } } else // Data Yı { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 45 &&ReceivedDataInt <54) { Serial.println("RELEASE"); motoryon.run(LEPAS); } else if(ReceivedDataInt>=0 &&ReceivedDataInt <4) { Serial.println("RELEASE"); motoryon.run(LEPAS); } else if(ReceivedDataInt>=55) { ReceivedDataInt =ReceivedDataInt -55; int kecepatan motor =(ReceivedDataInt * 12)+50; if(Kecepatan motor> 254) { Kecepatan motor =254; } motoryon.setSpeed(kecepatan motor); motoryon.run(Mundur); String motorSpeedStr =String(Kecepatan motor); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=5 ) { ReceivedDataInt =ReceivedDataInt -5; int kecepatan motor =(ReceivedDataInt * 12)+50; if(Kecepatan motor> 254) { Kecepatan motor =254; } motoryon.setSpeed(kecepatan motor); motoryon.run(FOWARD); String motorSpeedStr =String(Kecepatan motor); Serial.println("MotorHiz :"+motorSpeedStr); } }}/* Fungsi ini akan otomatis dipanggil ketika RPi2 meminta data dari slave I2C ini */void I2CRequest(){//Serial.println("DataToBeSend"); /*Kirim data ke WinIoT */ //Wire.write(DataToBeSend,1);}
Skema pin I2C untuk komunikasi antara arduino dan raspberry pi pada gambar seperti di atas. Tidak perlu menggunakan catu daya eksternal untuk arduino. Arduino akan mendapatkan daya dari pin Vout raspberry pi.
LANGKAH 2
Kode yang diperlukan untuk raspberry pi (berfungsi sebagai server web) yang mengirimkan data ke arduino melalui I2C seperti yang ditunjukkan di bawah ini.
Kode dapat menemukan kode di akhir halaman (Bagian Kode).
LANGKAH 3
Kami mengembangkan Aplikasi Android Visual Studio Cordova yang mengirimkan data sensor akselerometer ke server web menggunakan permintaan ajax.
Kode dapat menemukan kode di akhir halaman (Bagian Kode).
SINGKAT
1-) Aplikasi Android mengirimkan data sensor (data akselerometer ponsel android) ke server web yang berjalan di raspberry pi.
2-) Web server mengirimkan data (raspberry pi mendapatkan data dari sensor accelerometer ponsel android) ke arduino menggunakan I2C.
3-) Arduino memproses data dan menjalankan motor menggunakan pelindung motor.
Kode
- Komunikasi Wiri.h I2C dan kode android moto shield
- Pengendali Jarak Jauh Android
- Server Web Windows IOT
Wiri.h I2C Komunikasi dan moto shield kode androidArduino
Komunikasi I2C antara kode arduino dan raspberry pi. Ini untuk komunikasi serial untuk dua perangkat dengan sumber output input minimal.#include #define MyAddress 0x40#include AF_DCMotor motorhiz(3);AF_DCMotor motoryon(4);byte DataToBeSend[ 1];byte ReceivedData;int counter =0;pengaturan batal(){ Serial.begin(9600); /* Inisialisasi I2C Slave &tetapkan fungsi panggilan balik 'onReceive' pada 'I2CReceived'*/ Wire.begin(MyAddress); Wire.onReceive(I2CReceived); Wire.onRequest(I2CRequest); motorhiz.setSpeed(254); motorhiz.run(LEPAS); motoryon.setSpeed(254); motoryon.run(RELEASE);}void loop(){ /* Tingkatkan DataToBeSend setiap detik dan pastikan rentangnya antara 0 dan 99 */ //DataToBeSend[0] =(DataToBeSend[0]>=99) ? 0 :DataToBeSend[0] + 1;}/* Fungsi ini akan otomatis dipanggil ketika RPi2 mengirimkan data ke slave I2C ini */void I2CReceived(int NumberOfBytes){ //counter++; //String penghitungStr =String(penghitung); //Serial.println("Data yang Diterima :"+counterStr); /* WinIoT telah mengirim byte data; membacanya */ ReceivedData =Wire.read(); int ReceivedDataInt =(int)ReceivedData; String ReceivedDataStr =String(DataDiterima); Serial.println(ReceivedDataInt); if(ReceivedDataInt>=100) //X Datası { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 145 &&ReceivedDataInt <154) { Serial.println("RELEASE"); motorhiz.run(LEPAS); } else if(ReceivedDataInt>=100 &&ReceivedDataInt <104) { Serial.println("RELEASE"); motorhiz.run(LEPAS); } else if(ReceivedDataInt>=155) { ReceivedDataInt =ReceivedDataInt -155; int kecepatan motor =(ReceivedDataInt * 10)+50; if(Kecepatan motor> 254) { Kecepatan motor =254; } motorhiz.setSpeed(kecepatan motor); motorhiz.run(Mundur); String motorSpeedStr =String(Kecepatan motor); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=105 ) { ReceivedDataInt =ReceivedDataInt -105; int kecepatan motor =(ReceivedDataInt * 10)+50; if(Kecepatan motor> 254) { Kecepatan motor =254; } motorhiz.setSpeed(kecepatan motor); motorhiz.run(maju); String motorSpeedStr =String(Kecepatan motor); Serial.println("MotorHiz :"+motorSpeedStr); } } else // Data Yı { Serial.println("DataX :"+ReceivedDataStr); if(ReceivedDataInt> 45 &&ReceivedDataInt <54) { Serial.println("RELEASE"); motoryon.run(LEPAS); } else if(ReceivedDataInt>=0 &&ReceivedDataInt <4) { Serial.println("RELEASE"); motoryon.run(LEPAS); } else if(ReceivedDataInt>=55) { ReceivedDataInt =ReceivedDataInt -55; int kecepatan motor =(ReceivedDataInt * 12)+50; if(Kecepatan motor> 254) { Kecepatan motor =254; } motoryon.setSpeed(kecepatan motor); motoryon.run(Mundur); String motorSpeedStr =String(Kecepatan motor); Serial.println("MotorHiz :"+motorSpeedStr); } else if(ReceivedDataInt>=5 ) { ReceivedDataInt =ReceivedDataInt -5; int kecepatan motor =(ReceivedDataInt * 12)+50; if(Kecepatan motor> 254) { Kecepatan motor =254; } motoryon.setSpeed(kecepatan motor); motoryon.run(FOWARD); String motorSpeedStr =String(Kecepatan motor); Serial.println("MotorHiz :"+motorSpeedStr); } } }/* Fungsi ini akan otomatis dipanggil ketika RPi2 meminta data dari slave I2C ini */void I2CRequest(){ //Serial.println("DataToBeSend"); /*Kirim data ke WinIoT */ //Wire.write(DataToBeSend,1);}
Pengendali Jarak Jauh AndroidC#
Pengendali Jarak Jauh AndroidTanpa pratinjau (hanya unduhan).
Server Web Windows IOTC#
Server Web Windows IOTTanpa pratinjau (hanya unduhan).
Suku cadang dan penutup khusus
Diagram pin Arduino ke raspberry Skema
untuk detailnya:https://www.hackster.io/AnuragVasanwala/home-automation-0dcefc