Buat Aplikasi Android Khusus untuk Mengontrol Arduino dengan MIT App Inventor
Dalam tutorial Arduino ini kita akan mempelajari cara membangun aplikasi Android khusus untuk mengontrol Arduino menggunakan aplikasi online MIT App Inventor. Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini.
Ringkasan
Untuk tutorial ini kita memiliki dua contoh. Contoh pertama adalah mengontrol LED sederhana dan contoh kedua adalah mengontrol Motor Stepper menggunakan ponsel. Dalam tutorial sebelumnya kita sudah mempelajari cara membuat komunikasi Bluetooth antara Papan Arduino dan Smartphone menggunakan modul Bluetooth HC-05 dan menjelaskan kode Arduino yang diperlukan untuk contoh pertama.
Kode Arduino
Berikut gambaran cepat dari kodenya. Jadi, melalui port serial kita menerima data masuk dari smartphone dan menyimpannya dalam variabel ‘state’. Jika kita menerima karakter ‘0’ yang dikirim dari smartphone saat tombol ‘LED: OFF’ ditekan, kita akan mematikan LED dan mengirim kembali ke smartphone String “LED: OFF”. Di sisi lain, jika kita menerima karakter ‘1’ kita akan menyalakan LED dan mengirim kembali String “LED: ON”.
/* Arduino and HC-05 Bluetooth Module Tutorial * * by Dejan Nedelkovski, www.HowToMechatronics.com * */ #define ledPin 7 int state = 0; void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); Serial.begin(38400); // Default communication rate of the Bluetooth module } void loop() { if(Serial.available() > 0){ // Checks whether data is comming from the serial port state = Serial.read(); // Reads the data from the serial port } if (state == '0') { digitalWrite(ledPin, LOW); // Turn LED OFF Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON" state = 0; } else if (state == '1') { digitalWrite(ledPin, HIGH); Serial.println("LED: ON");; state = 0; } }Bahasa kode: Arduino (arduino)
Sekarang kita perlu membangun aplikasi Android khusus kita yang akan mengirim karakter ‘0’ dan ‘1’ ketika tombol tertentu ditekan, serta menerima String masuk dari Arduino.
MIT App Inventor
Dari situs web MIT App Inventor kita perlu masuk ke aplikasi pembangunan online dengan mengklik tombol “Create apps!”. Untuk masuk kita perlu memiliki akun Gmail. Setelah masuk sekarang kita dapat membuat proyek pertama kami. Berikut tampilan jendela desain dan sekarang kita dapat mulai membangun aplikasi kami.
Tetapi sebelum melakukan itu, kita dapat menghubungkan smartphone kita ke proyek ini sehingga kita dapat melihat bagaimana aplikasi sedang terbentuk secara langsung pada smartphone kami secara real-time. Untuk melakukan itu pertama-tama kita harus mengunduh aplikasi MIT AI2 Companion dari Play Store dan menginstalnya pada smartphone kita. Kemudian dari menu Connect di editor online kita akan memilih AI Companion dan sebuah barcode akan muncul yang kita cukup memindainya atau memasukkan kodenya ke dalam aplikasi smartphone dan koneksi antara editor online dan aplikasi smartphone akan terbentuk.
Jadi sekarang misalnya, jika kita memasukkan tombol di layar editor online, tombol akan muncul secara real-time di smartphone juga. Serupa dengan ini, jika Anda tidak ingin menggunakan smartphone saat membangun aplikasi, Anda dapat menginstal Android Emulator di komputer Anda dan menggunakannya dengan cara yang sama. Anda dapat menemukan detail lebih lanjut tentang cara mengatur Emulator di situs web mereka.
Membangun Aplikasi – Contoh 1
Sekarang kita siap untuk membangun contoh pertama. Kami akan mulai dengan tata letak program. Pertama kita akan menambahkan beberapa HorizontalArrangements dari Palette tata letak dan mengatur propertinya seperti tinggi, lebar, dan perataan agar sesuai dengan tampilan yang diinginkan program kita. Kemudian dari Palette UserInterface kita akan menambahkan ListPicker dan melampirkan gambar padanya. ListPicker akan digunakan untuk memilih perangkat Bluetooth yang smartphone kita akan terhubung.
Selanjutnya kita akan menambahkan HorizontalArrangements lainnya di mana kita akan menempatkan Label. Label ini akan menunjukkan apakah smartphone terhubung atau tidak ke modul Bluetooth dan itulah sebabnya kita akan mengatur teks awal label ini menjadi “Not Connected”. Label berikutnya akan digunakan untuk menampilkan status LED, apakah dimatikan atau menyala. Status awal akan menjadi “LED: OFF”. Selanjutnya kita akan menambahkan dua tombol, ‘Turn On’ dan ‘Turn Off’ untuk mengontrol LED. Pada titik ini baik untuk mengganti nama komponen sehingga kita dapat lebih mudah mengenali dan menggunakannya di editor Blok nanti. Yang tersisa sekarang adalah menambahkan BluetoothClient yang merupakan komponen Non-visible serta jam yang akan digunakan untuk indikasi status koneksi secara real-time.
Editor Blok
Sekarang di Editor Blok kita siap untuk memberikan kehidupan pada program kita. Dari sisi kiri kita mendapatkan semua blok dan fungsi terkait komponen yang telah ditambahkan sebelumnya.
Kami akan mulai dengan ListPicker BluetoothList. Dari sana pertama-tama kita akan menambahkan blok ‘BeforePicking’ dan melampirkan blok ‘set Bluetooth Elements’ padanya. Kemudian dari blok BluetoothClient kita akan menambahkan blok ‘BluetoothClient AddressesAndNames’. Kumpulan blok ini akan mengatur daftar perangkat Bluetooth yang sudah dipasangkan dengan ponsel kita sehingga ketika kita akan mengklik ListPicker “Tombol Koneksi” daftar semua perangkat yang dipasangkan akan muncul.
Selanjutnya kita harus mengatur apa yang akan terjadi setelah kita memilih atau memilih modul Bluetooth tertentu kami. Dari blok BluetoothClient kita akan menambahkan blok ‘call BluetoothClient .Connect address’ dan menambahkan blok ‘BluetoothList Selection’ padanya, yang berarti ponsel kami akan terhubung ke alamat Bluetooth yang telah kita pilih sebelumnya.
Selanjutnya dari blok Jam kita akan menambahkan blok “.Timer”. Dalam blok ini kita akan membuat indikasi real-time apakah ponsel terhubung atau tidak ke modul Bluetooth menggunakan blok “set Text” dari label bernama “Connected”.
Selanjutnya kita perlu memberikan kehidupan pada dua tombol. Jadi ketika tombol “TurnOn_Button” diklik kita akan menggunakan fungsi Bluetooth client “Send1ByteNumber” untuk mengirim angka ke modul Bluetooth Arduino. Dalam kasus kami itu adalah angka 49 yang sesuai dengan karakter ‘1’ sesuai dengan tabel ASCII dan itu akan menyalakan LED. Segera setelah itu kita akan menggunakan fungsi BluetoothClient “ReceiveText” untuk menerima String masuk yang dikirim kembali dari Arduino ke ponsel. String ini diatur ke Label “LED_Status”.
Prosedur yang sama berlaku untuk “TurnOff_Button” di mana angka yang dikirim harus diubah menjadi 48 yang sesuai dengan karakter ‘0’. Yang tersisa sekarang adalah untuk mengundah dan menginstal program di ponsel kami. Kita dapat melakukan itu dari menu “Build” dengan menyimpannya ke komputer kami lalu mentransfer ke ponsel atau memindai kode QR untuk unduhan online program. Berikut demonstrasi dari contoh ini.
Berikut berkas unduhan dari proyek MIT App Inventor di atas:
BluetoothTest.aia
1 file(s) 5.16 KB Download
Contoh Kontrol Motor Stepper
Sekarang mari kita lihat contoh kedua, mengontrol motor stepper. Di bagian atas layar kita memiliki komponen yang sama untuk koneksi Bluetooth seperti contoh sebelumnya. Selanjutnya kita memiliki komponen Canvas yang digunakan untuk menggambar dan menyisipkan gambar. Saya memasukkan dua gambar transparan yang sebelumnya saya gambar. Pertama adalah gambar pengukur yang akan tetap di tempat dan yang kedua adalah gambar jarum yang akan berputar. Selanjutnya kita memiliki tombol Check untuk beralih antara mode Manual dan Auto atau berjalan terus-menerus dan tombol untuk mengubah arah rotasi. Di bagian bawah kita memiliki slider untuk mengubah kecepatan rotasi motor stepper.
Berikut blok dan kode Arduino di balik contoh ini. Jadi, di Editor Blok lagi kita memiliki blok yang sama untuk koneksi Bluetooth seperti contoh sebelumnya.
Sekarang untuk memutar gambar jarum kita menggunakan fungsi ImageSprite “.PointInDirection” yang memutar gambar dari posisi 0° ke koordinat X dan Y tempat Canvas telah disentuh. Pada saat yang sama kita mengatur heading ImageSprite yang diputar ke label teks di atasnya. Setelah itu kita memanggil prosedur khusus, atau fungsi yang sebenarnya adalah penundaan 10m detik.
Terakhir kita mengirim nilai heading sebagai Text ke Arduino menggunakan fungsi Bluetooth “SendText”. Nilai ini akan diterima oleh Arduino dan akan memutar motor stepper sesuai.
Selanjutnya adalah blok CheckBox. Jadi jika CheckBox dicentang kita akan mengirim teks “Auto” ke Arduino yang akan mengaktifkan motor stepper untuk berputar terus-menerus. Sementara kita berada dalam mode ini jika kita menekan tombol “Reverse”, kita akan mengirim teks “Reverse” ke Arduino yang akan mengubah arah rotasi motor. Juga, sementara kita berada dalam mode ini, kita dapat mengubah kecepatan rotasi. Jika kita mengubah posisi slider, nilai saat ini dari posisi slider akan dikirim ke Arduino yang akan mengubah kecepatan rotasi motor stepper. Jika kita tidak mencentang CheckBox kita akan kembali ke mode manual. Berikut demonstrasi dari contoh ini.
Berikut berkas unduhan dari proyek MIT App Inventor di atas, serta dua gambar yang digunakan dalam proyek:
StepperMotorTest.aia
1 file(s) 60.96 KB Download
Gambar Pengukur dan Jarum Motor Stepper
1 file(s) 27.34 KB Download
Berikut kode Arduino dari contoh kedua:
/* Stepper Motor Control via HC-05 Bluetooth Module * * by Dejan Nedelkovski, www.HowToMechatronics.com * */ // Defining variables const int stepPin = 7; const int dirPin = 6; String state = ""; int currentHeading=0; int currentAngle=0; int lastAngle=0; int angle=0; int rotate=0; int runContinuously=0; String mode = "Manual"; boolean dirRotation = HIGH; int rotSpeed = 1500; void setup() { // Sets the two pins as Outputs pinMode(stepPin,OUTPUT); pinMode(dirPin,OUTPUT); Serial.begin(38400); // Default communication rate of the Bluetooth module } void loop() { delayMicroseconds(1); if(Serial.available() > 0){ // Checks whether data is comming from the serial port state = Serial.readString(); // Reads the data from the serial port } // When Auto Button is pressed if (mode == "Auto") { if (state == "Reverse") { delay(10); if (dirRotation == HIGH) { dirRotation = LOW; } else { dirRotation = HIGH; } digitalWrite(dirPin,dirRotation); delay(10); state = ""; } rotSpeed = state.toInt(); if (rotSpeed >= 300 && rotSpeed <= 3000) { digitalWrite(stepPin,HIGH); delayMicroseconds(rotSpeed); digitalWrite(stepPin,LOW); delayMicroseconds(rotSpeed); } else { digitalWrite(stepPin,HIGH); delayMicroseconds(1500); digitalWrite(stepPin,LOW); delayMicroseconds(1500); } if (state == "Manual"){ mode = state; } } // When Program is in Manual mode else if (mode == "Manual"){ currentHeading = state.toInt(); //Serial.println(angle); //Serial.println(state); if (currentHeading < 0 ){ currentHeading = 360+currentHeading; } currentAngle = map(currentHeading,0,359,0,200); digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction // Makes 200 pulses for making one full cycle rotation if (currentAngle != lastAngle){ if(currentAngle > lastAngle){ rotate = currentAngle - lastAngle; for(int x = 0; x < rotate; x++) { digitalWrite(stepPin,HIGH); delayMicroseconds(500); digitalWrite(stepPin,LOW); delayMicroseconds(500); } } if(currentAngle < lastAngle){ rotate = lastAngle - currentAngle; digitalWrite(dirPin,LOW); //Changes the rotations direction for(int x = 0; x < rotate; x++) { digitalWrite(stepPin,HIGH); delayMicroseconds(500); digitalWrite(stepPin,LOW); delayMicroseconds(500); } } } lastAngle = currentAngle; if (state == "Auto"){ mode = state; } } } Bahasa kode: Arduino (arduino)