Mobil Robotik Dikenal Node.js Secara Nirkabel – Proyek IoT Real-Time
Komponen dan Perlengkapan
Arduino UNO
1
Driver motor Dual H-Bridge SparkFun L298
1
Modul Bluetooth HC-05
1
Kabel jumper (generik)
1
Baterai, 9 V
2
Motor DC, 12 V
2
Tentang Proyek Ini
Ide Proyek
Node.js adalah salah satu opsi terbaik untuk Aplikasi Real-Time. Saya sebelumnya telah bekerja pada beberapa aplikasi real-time menggunakan Sockets, jadi dengan konsep yang sama, saya memutuskan untuk membuat beberapa proyek IoT dengan server Node.js untuk pembelajaran mandiri.
Rover saya ini berkomunikasi dengan server Node.js saya menggunakan Bluetooth dan di sisi depan, saya mengirim perintah ke server menggunakan Sockets.
Tujuan Proyek
Untuk mempelajari dan mengimplementasikan komunikasi nirkabel antara server Node dan hardware (yang dalam hal ini adalah Rover kita), dan untuk mengontrol Rover secara jarak jauh dengan halaman web seluler yang disajikan oleh server Node menggunakan Sockets.
Prasyarat
Anda perlu memiliki pengetahuan dasar tentang Node, pemrograman socket, dan cara kerja Driver Motor L298.
Kebutuhan
1 Arduino Uno
1 Driver Motor L298
Modul Bluetooth HC-05
Kabel Jumper
2 Baterai - 9 volt masing-masing
2 gear Motor (6-9 volt)
2 roda kompatibel
Chassis
Komputer dengan Node.js terinstal untuk server kami.
Langkah 1- Membangun Rover
Membangun Rover tidak terlalu rumit, Anda dapat membeli "kit chassis 2 roda" yang mudah didapatkan secara online dan dilengkapi dengan semua unit pemasangan.
Arduino Uno dan Driver Motor L298 kami tertanam di atas Rover kami, keduanya diberdayakan oleh dua baterai 9 volt secara terpisah.
Arduino Uno kemudian akan memberi daya pada modul Bluetooth HC-05 yang akan berkomunikasi dengan server kami.
Diagram Rangkaian
Seperti yang ditunjukkan pada diagram rangkaian di atas, driver motor L298 diberdayakan oleh baterai 9V, dua output kontrol motor terhubung ke Motor A dan Motor B dan karena motor tidak memiliki polaritas Anda dapat menghubungkan terminal mana pun ke dalamnya, tetapi pastikan kedua motor berputar dalam arah yang sama. Jangan cabut jumper regulator 5V.
Catatan: jika Anda memberi daya pada L298 dengan lebih dari 12 volt regulator tegangan 5V papan akan rusak.
Arduino Uno juga diberdayakan oleh baterai 9V dengan terminal positifnya terhubung ke pin Vin Arduino dan terminal negatifnya ke ground bersama. Arduino kemudian akan memberi daya pada modul Bluetooth, jadi hubungkan pin Vcc HC-05 ke 5V Arduino dan GND ke ground.
Untuk komunikasi serial antara HC-05 dan Arduino, hubungkan pin TXD HC-05 ke pin RX Arduino dan pin RXD HC-05 ke pin TX Arduino.
Sekarang untuk mengontrol modul L298 Anda dapat menghubungkan pin EN1 dan EN2 dengan pin PWM mana pun pada Arduino. Dan kemudian hubungkan pin Input L298 -1, 2, 3, 4 dengan pin digital mana pun pada Arduino.
Transmisi Data
Seperti yang ditunjukkan di atas, adalah diagram yang menunjukkan transmisi sinyal.
1. Pengguna akan mengakses halaman web yang disajikan oleh server node. URL-nya adalah alamat IP dengan nomor port yang digunakan, misalnya- "192.XXX.XXX.129:8080".
2. Saat pengguna mengklik tombol pada halaman web, itu akan memicu server untuk melakukan fungsi yang diperlukan. Komunikasi ini terjadi karena Sockets.
3. Server Node yang terhubung ke modul HC-05 melalui Bluetooth, akan mengirim data yang diperlukan ke modul HC-05.
4. HC-05 akan mentransmisikan data ke Arduino UNO menggunakan komunikasi serial.
5. Arduino UNO kemudian akan mengontrol modul L298.
Langkah 2- Menyiapkan Server
Untuk server kami, kita perlu menginstal Node.js. Instal versi stabil node apa pun, milik saya adalah versi 11.15. Kita perlu menginstal paket berikut-
node-gyp
express
node-bluetooth
socket.io
ejs
Catatan - Instalasi "node-gyp" mungkin sedikit sulit karena tidak mendukung beberapa versi Node terbaru, jadi lebih baik instal versi 11.15 Node.
Sekarang, kita perlu mendengarkan event dari halaman web, segera event terpicu saat berinteraksi dengan halaman web, halaman akan memancarkan fungsi yang diperlukan yang perlu dieksekusi ke server Node kami. Server kemudian akan mendengarkan pesan itu dan akan mengeksekusi fungsi yang diinginkan (yang dalam kasus kami, mengirim data ke Bluetooth).
Jadi, buat server dan halaman web menggunakan paket seperti "express" dan "EJS". Desain halaman web dengan kontrol yang Anda inginkan dan siapkan koneksi socket untuk itu dengan membuat server socket, Anda dapat merujuk ke dokumentasi ini.
Untuk pengaturan Bluetooth merujuk ke dokumentasi ini. Kapan pun kontrol-tombol diklik pesan akan dikirim ke modul HC-05.
Ini adalah halaman web sederhana saya --
Langkah 3- Kode Arduino
Karena Bluetooth akan berkomunikasi dengan Arduino-Uno menggunakan Komunikasi Serial kita akan mengirim beberapa "string" sebagai perintah dan huruf tambahan yang akan memberi tahu kami untuk mengakhiri dan menangkap string.
Misalnya-: untuk bergerak maju, Bluetooth akan transmit "forwardT", dan di akhir Arduino segera kita menemukan huruf "T" kita akan tahu komunikasi serial selesai.
Dan dengan string perintah yang masuk ini, kita akan mengonfigurasi driver L298 untuk bergerak maju, mundur, kiri, kanan, mengubah kecepatan, dll.
Temukan Kode Arduino yang dilampirkan.
Langkah 4- Hasil Akhir
Peningkatan dan Lingkup Masa Depan
Di tahap selanjutnya, saya berencana untuk mengontrol rover menggunakan perintah suara, dan fitur penghindaran rintangan. Saya juga dapat memelihara database tempat saya akan menyimpan catatan statistik seperti jarak tempuh, kecepatan maks, kecepatan rata-rata, dll. Saya juga akan menambahkan beberapa sensor seperti suhu, cahaya, dan kelembaban dan akan melacaknya secara teratur yang akan disimpan di database kami.
Versi Selanjutnya
Lihat proyek selanjutnya saya "Rover Dikontrol Suara menggunakan Seluler"
Kode
Kode Arduino Rover Node
Kode Arduino Rover NodeArduino
const int en1 = 9; const int en2 = 3; const int inp1 = 2; const int inp2 = 4; const int inp3 = 7; const int inp4 = 8; char charRead; String inputString = ""; void setup() { Serial.begin(9600); pinMode(en1, OUTPUT); pinMode(en2, OUTPUT); pinMode(inp1, OUTPUT); pinMode(inp2, OUTPUT); pinMode(inp3, OUTPUT); pinMode(inp4, OUTPUT); } void loop() { // put your main code here, to run repeatedly: if (Serial.available()) { charRead = Serial.read(); if (charRead != 'T') { inputString += charRead; } else { if (inputString == "forward") { // To move Forward digitalWrite(inp1, HIGH); digitalWrite(inp2, LOW); digitalWrite(inp3, HIGH); digitalWrite(inp4, LOW); } else if (inputString == "backward") { // To move backward digitalWrite(inp1, LOW); digitalWrite(inp2, HIGH); digitalWrite(inp3, LOW); digitalWrite(inp4, HIGH); } else if (inputString == "fleft") { // To move left digitalWrite(inp1, HIGH); digitalWrite(inp2, LOW); digitalWrite(inp3, LOW); digitalWrite(inp4, LOW); } else if (inputString == "fright") { // To move right digitalWrite(inp1, LOW); digitalWrite(inp2, LOW); digitalWrite(inp3, HIGH); digitalWrite(inp4, LOW); } else if (inputString == "bleft") { // To move back left digitalWrite(inp1, LOW); digitalWrite(inp2, LOW); digitalWrite(inp3, LOW); digitalWrite(inp4, HIGH); } else if (inputString == "bright") { // To move back right digitalWrite(inp1, LOW); digitalWrite(inp2, HIGH); digitalWrite(inp3, LOW); digitalWrite(inp4, LOW); } else if (inputString == "break") { // To Stop analogWrite(en1, 50); analogWrite(en2, 50); delay(550); digitalWrite(inp1, LOW); digitalWrite(inp2, LOW); digitalWrite(inp3, LOW); digitalWrite(inp4, LOW); analogWrite(en1, 150); analogWrite(en2, 150); } else if (inputString == "maxspeed") { // Max speed analogWrite(en1, 250); analogWrite(en2, 250); } else if (inputString == "medspeed") { // Medium Speed analogWrite(en1, 180); analogWrite(en2, 180); } else if (inputString == "lowspeed") { // Low speed analogWrite(en1, 90); analogWrite(en2, 90); } else { // Stop digitalWrite(inp1, LOW); digitalWrite(inp2, LOW); digitalWrite(inp3, LOW); digitalWrite(inp4, LOW); } inputString = ""; } } }