Kendalikan Robot Anda dengan Gelombang Otak: Proyek Arduino Komprehensif
Komponen dan Perlengkapan
Arduino UNO – 1 unit (digunakan untuk robot)
Arduino Mega 2560 – 1 unit (otak proyek)
Arduino Leonardo – 1 unit (Pengontrol Mouse)
Particle Photon – 1 unit (Pencatat Data Webserver)
Necomimi Brainwave Cat Ears – 1 unit (Sensor EEG)
SparkFun Dual H-Bridge motor drivers L298 – 1 unit
Relay Module – 1 unit
HC-05 Bluetooth Module – 1 unit
HC-06 Bluetooth Module – 1 unit
LED (umum) – 3 unit
Resistor 330 ohm – 3 unit
Transistor NPN Umum – 3 unit
Kabel Jumper Paka/Jaka – 1 set
Kabel Jumper (umum) – 1 set
Solderless Breadboard Ukuran Setengah – 1 unit
Alat dan Mesin yang Diperlukan
Pakuin (umum)
Aplikasi dan Layanan Online
Brain Visualizer (hanya diperlukan untuk eksperimen)
Tentang Proyek Ini
Sejak kecil, saya selalu ingin memiliki kemampuan khusus, seperti memindahkan benda dengan pikiran atau terbang. Saya mencoba memindahkan benda dengan “kekuatan pikiran saya” tentu saja tanpa hasil. Ya, saya dan masih merupakan penggemar Star Wars yang besar, tetapi saya juga menyukai elektronika dan pemrograman, jadi mengapa tidak menggabungkan keduanya untuk membangun proyek yang luar biasa?
Anda dapat menemukan semua bagian, kode dan pustaka dengan tautan di bagian Perangkat Keras dan Perangkat Lunak.
Konsep utama adalah bahwa dengan menggunakan gelombang otak yang berbeda pengguna akan dapat mengontrol robot, kursor pada PC-nya atau menyalakan/mematikan lampu di rumahnya, sementara mikrokontroler (Particle Photon) membuat analisis online tentang gelombang otak pengguna. Ini adalah metode yang sempurna untuk mendeteksi penyakit atau stres dan konditas mengantuk. Ini juga dapat digunakan untuk membantu orang menjalani hidup yang lebih baik, belajar mengontrol emosi mereka dan bagaimana selalu bahagia. Otak manusia membutuhkan keseimbangan, untuk sehat, kita harus tidur, berpikir, bergerak... Menggunakan Particle Photon dan webserver yang dibuat oleh pendiri Particle kita dapat membantu orang menemukan keseimbangan otak alami mereka. Mimpi masa kecil memandu saya ke proyek ini, dan saya sangat senang bahwa saya telah menyelesaikannya.
Tetapi jika kita melepaskan Star Wars dan the Force untuk sementara, perangkat ini tidak hanya untuk orang malas atau penggemar, itu dibuat untuk memberikan kembali kemampuan untuk orang yang bertarung setiap hari dengan disabilitas mereka. Robot yang saya desain bekerja sama seperti kursi roda, sistem otomatisasi rumah akan membantu pengguna untuk mengontrol lampu atau TV bahkan jika dia tidak bisa bergerak. Mode pengontrol PC dapat berguna bahkan untuk mereka yang sehat sempurna. Saya pikir kita semua ingin memainkan game komputer atau hanya berselancar di internet menggunakan hanya pikiran.
Tonton video perkenalan singkat ini tentang kisah proyek ini:
Apakah Anda ingin membangunnya sendiri? Di sini saya akan menjelaskan semuanya yang harus Anda ketahui untuk proyek ini. saya membagikan kode, skema dan petunjuk ini secara rinci, jadi siapkan pakuin Anda…
Ilmu di Balik Proyek
Electroencephalography (EEG) adalah metode pemantauan elektrofisiologis untuk mencatat aktivitas listrik otak. Biasanya non-invasif, dengan elektrode ditempatkan di kulit kepala, meskipun elektrode invasif terkadang digunakan dalam aplikasi tertentu. EEG mengukur fluktuasi voltase yang dihasilkan dari arus ionik dalam neuron otak. Aplikasi diagnostik biasanya berfokus pada konten spektral EEG, yaitu, jenis osilasi neural (disebut populer sebagai “gelombang otak”) yang dapat diamati dalam sinyal EEG. (terima kasih Wikipedia) Tetapi kita akan menggunakan dua nilai yang sangat akurat
Alpha adalah rentang frekuensi dari 7 Hz hingga 14 Hz. Ini muncul dengan penutupan mata dan dengan relaksasi, dan menurun dengan pembukaan mata atau usaha mental.
Beta adalah rentang frekuensi dari 15 Hz hingga sekitar 30 Hz. Beta dengan amplitudo rendah dengan frekuensi yang beraneka ragam dan bervariasi seringkali terkait dengan pemikiran yang aktif, sibuk atau cemas dan konsentrasi aktif.
Bagaimana Cara Kerjanya?
Saya menggunakan empat mikrokontroler untuk menghidupkan proyek ini: Arduino Mega, Arduino Leonardo, UNO dan Particle Photon. Mega adalah otak proyek yang menerima sinyal dari headset, menganalisisnya lalu meneruskan perintah ke perangkat lain. Mentransmisikan setiap data ke depan ke Photon yang membuat webserver. Leonardo mengontrol mouse pada PC dan Uno digunakan untuk menerima IR (sinyal inframerah) dan mengontrol robot. Seperti yang saya katakan, perangkat mampu mengontrol tiga hal berbeda (atau lebih jika Anda ingin memprogram apa pun lainnya). Sekarang saya akan memanggil tiga hal berbeda ini sebagai saluran. Perangkat beralih di antara saluran ini jika Anda menutup mata:
Tutup mata selama 1-2 detik: beralih ke fitur otomatisasi rumah
Tutup mata selama 2-4 detik: beralih ke mode pengontrol robot
Tutup mata selama 1-6 detik: beralih ke mode pengontrol mouse
Saya menggunakan relay untuk membuat fitur otomatisasi rumah Anda dapat menghubungkan apa saja padanya: TV, lampu, stopkontak, apa pun yang Anda inginkan
Headset nirkabel:
Saya suka meng-hack mainan jadi saya membeli mainan sensor gelombang otak bernama Necomimi, yang dapat menggerakkan telinganya tergantung pada gelombang otak Anda (perhatian, meditasi). Ini adalah mainan paling berguna yang pernah saya lihat, tetapi di dalamnya ada chip kecil yang membaca gelombang otak, menyaring kebisingan dan memberikan sinyal yang sangat baik. Bekerja dengan antarmuka UART (Serial), jadi dengan beberapa hacking kita dapat menggunakan Arduino untuk membaca gelombang otak. Peran headset ini adalah untuk mentransmisikan gelombang otak secara nirkabel ke server pusat. Tidak ada yang ingin kabel di kepalanya jadi saya membuat headset nyaman dan ramah pengguna ini.
Lihat di bawah untuk melihat cara melepasnya dan membuat headset Bluetooth nirkabel darinya.
Cara Menggunakannya?
Kita memiliki dua nilai eSense yang dapat diukur (nilai NeuroSky): meditasi dari 0 hingga 100 dan perhatian dari 0 hingga 100. Semakin terfokus Anda, semakin tinggi nilai perhatiannya. Semakin rileks Anda, semakin tinggi tingkat meditasinya.
Sistem bekerja dengan pikiran, tidak ada yang dibutuhkan selain belajar cara menjadi terfokus atau rileks. Setelah satu minggu eksperimen saya dapat mengontrol nilai “perhatian” saya dengan sangat akurat. Saya dapat mengatur tingkat perhatian saya secara sadar ke sekitar 15, atau 39, 65 dan 90. Anda harus menemukan cara mengontrol nilai Anda, kita semua berbeda. Ini bekerja sangat baik dengan emosi. Memikirkan cinta, persahabatan, amarah atau ketakutan memberikan kontras yang sangat baik dalam nilai.
Untuk menyalakan sistem colokkan kabel micro USB ke Arduino Leonardo. Ini juga akan mengontrol mouse Anda (jika Anda ingin) dan memastikan 5 volt dan 500mA untuk sistem.
Mengontrol Sistem Otomatisasi Rumah
Jika Anda sudah beralih ke mode otomatisasi rumah tingkatkan tingkat perhatian di atas 70 untuk menyalakan relay pertama, tingkatkan tingkat meditasi di atas 70 untuk menyalakan relay kedua, dan tingkatkan keduanya di atas 70 untuk menyalakan relay ketiga. Ini sedikit sulit tetapi tidak mustahil setelah beberapa latihan pikiran. Jika sudah menyala, gunakan perintah yang sama untuk mematikannya (jadi jika sudah menyala mencapai lagi 70 untuk mematikannya). Setelah sistem selesai Anda dapat menghubungkan perangkat tegangan tinggi apa pun (lampu, TV, PC, kipas pendingin, apa pun yang Anda inginkan) ke modul relay.
Mengontrol Mouse
Kursor dikontrol dengan emosi. Jika tingkat perhatian di bawah 25 bergerak ke kiri, jika berada di antara 25 dan 50 bergerak ke kanan, jika berada di antara 50 dan 75 bergerak ke atas dan jika di antara 75 dan 100 bergerak ke bawah. Anda dapat klik dengan meningkatkan tingkat meditasi. Seperti yang saya katakan sebelumnya tingkat perhatian dapat dengan mudah dikontrol dengan emosi (bagi saya).
Mengontrol Robot
Robot hanya memiliki tiga pernyataan berbeda: berhenti, belok ke kiri, dan berjalan ke depan. Mengapa hanya dua opsi gerakan? Karena dua arah ini cukup untuk memindahkan robot ke mana pun yang Anda inginkan. Gunakan tingkat meditasi Anda untuk berputar dengan robot, dan ketika Anda mencapai arah tempat Anda ingin bergerak hentikan robot lalu bergerak ke depan dengan tingkat perhatian. Ini adalah metode yang lebih baik untuk mengontrol robot dan bahkan pemula, yang tidak dapat mengontrol nilai perhatian/meditasi mereka dengan baik, dapat bermain dengan robot ini.
Rencana Saya
Ini adalah gambar lebih lama tentang rencana saya, tetapi berhasil jadi saya sangat senang dengan hasilnya. Headset mentransmisikan sinyal BT (Bluetooth) ke Arduino Mega yang menganalisis byte yang masuk dan tergantung pada pikiran pengguna mengontrol fitur yang berbeda. Sangat sulit untuk menemukan cara terbaik untuk mentransmisikan banyak data ini, tetapi saya memilih Bluetooth daripada WiFi. Pada awalnya saya ingin menggunakan Particle Photon sebagai pengirim data, tetapi anak kecil itu mendapatkan peran yang lebih baik dalam pembuatan webserver. Itu adalah modifikasi terbesar dalam seluruh proyek. (Pada gambar Anda dapat melihat rencana aktual). Saya menggunakan modul Arduino buatan sendiri, karena saya suka merancang rangkaian saya sendiri. Anda dapat membeli modul ini online jika Anda ingin atau membangun sendiri dengan saya.
Setengah Tahun Belajar dan Eksperimen
Saya bekerja banyak pada proyek ini dan ya, saya memulai hampir setengah tahun yang lalu, tetapi dengan Photon hal-hal mempercepat. Sangat mudah untuk menggunakan dasbor mereka. Dengan demikian ada banyak tutorial di internet cara meng-hack mainan EEG, yang membantu saya sedikit, tetapi mereka tidak memiliki fungsi tambahan. Jadi saya memutuskan bahwa saya akan meng-hack mainan Necomimi ini dan menggunakan kreativitas saya saya menciptakan perangkat ini yang memiliki lebih banyak fitur daripada berkedipkan LED. Semoga Anda menikmatinya!
Mari kita mulai!
Meng-hack Mainan Necomimi
Kita ingin memodifikasi mainan EEG ini untuk mentransmisikan data melalui Bluetooth jadi pertama lepasi casingnya. Sekrup ada di bawah stiker. Lepas stikerdan bagian belakang perangkat dan Anda akan menemukan di dalamnya rangkaian kecil. Yang ada di bawah rangkaian utama adalah chip Neurosky TGAM. Ini terhubung dengan empat pin header ke papan mikrokontroler utama jadi ambil pakuin dan lepaskan rangkaian ini dengan hati-hati. Sekarang las tiga kabel ke pin GND ke pin VCC dan ke pin T. Pin T adalah pin transmisi dengan kecepatan 57600 baud, ini mengirim paket data ke mikrokontroler kita, tetapi saya menghubungkannya langsung ke modul BT slave HC-06. HC-06 diatur ke 9600 baud rate tapi jangan khawatir kita akan memperbaiki masalah ini. Jika Anda telah memasang tiga kabel ke Anda dapat memasang sumber daya baterai rechargeable Anda sendiri. Saya menggunakan baterai Li-Ion 500mAh, rangkaian pengisi daya USB, rangkaian step up 5v dan dua resistor (100 ohm dan 200 ohm) untuk memastikan suplai daya 3.4 volt yang sempurna untuk chip dan untuk modul Bluetooth. Ikuti skema untuk membangun rangkaian yang diperlukan dalam headset. Jika rangkaian selesai konfigurasikan modul Bluetooth.
Tentang chip:
Neurosky ThinkGear AM dirancang untuk menyaring, memperkuat dan mengirim data melalui antarmuka serial. Info lebih lanjut di sini.
Skema / Elektronika
Ikuti petunjuk dan gambar di bawah ini dan buat headset EEG nirkabel Anda sendiri.
Anda akan membutuhkan baterai Lithium-Ion 500mAh, modul step-up tegangan 5v untuk menciptakan tegangan stabil kemudian resistor 100 Ohm dan 200 Ohm untuk mengurangi tegangan ke 3.3 Volt stabil. Saya memasang pin header wanita untuk memberi daya dan mentransmisikan data ke modul Bluetooth.
Bagian paling penting adalah menghubungkan pin “T” dengan “RX” pada modul Bluetooth. Ini menghidupkan proyek kami.
Mengonfigurasi Modul Bluetooth
HC-06: Pertama muat sketch bernama “HC_06_Bluetooth” ke Arduino UNO lalu hubungkan modul Bluetooth seperti yang ditunjukkan skema. Saya menemukan skema ini di situs web Artronix team dan tampaknya berguna.
Buka Serial Monitor di Arduino IDE dan tunggu sampai Arduino mengonfigurasi modul BT. Sekarang modul Bluetooth Anda diatur ke 57600 baud rate. Anda dapat mencoba banyak aplikasi BCI (Brain Computer Interface), karena hacked bluetooth inimainan Necomimi akan kompatibel dengan setiap aplikasi NeuroSky.
Anda dapat menggunakan aplikasi ini untuk belajar mengontrol gelombang otak dan nilai Anda, seperti perhatian atau meditasi. Anda dapat mencoba banyak game keren, tetapi saya merekomendasikan aplikasi ini (mereka kompatibel dengan PC, iOS dan Android):
Kemudian gunakan “HC_05_Bluetooth” dan muat ke Arduino Anda dengan cara yang sama seperti sebelumnya. Hubungkan pin “EN” HC-05 ke 3v3 Arduino. Anda harus menulis alamat modul HC-06 Anda dalam kode. Periksa alamat modul BT dengan ponsel Android, seperti saya. Ganti “:” (titik dua) dengan “,” koma dalam kode.
Dan Anda harus mengubah alamat dalam kode:
20:15:09:15:17:82 ==> 2015,09,151782 Dengan cara ini modul HC-05 dapat mengenali alamatnya. Jadi biarkan beberapa “:”, karena mereka tidak diperlukan.
// HC-05 configuration void setup() { // Start the hardware serial. Serial.begin(9600); // default HC-05 baud rate delay(1000); Serial.print("AT"); delay(1000); Serial.print("AT+VERSION"); delay(1000); Serial.println("AT+ROLE=1"); //set the HC-05 to master mode delay(1000); Serial.println(" AT+LINK="copy here your adress"); //now the module should connnect automatically delay(1000); Serial.print("AT+UART=57600,1,0"); // Set baudrate to 576000 Serial.begin(57600); // delay(1000); } void loop() { }
Akhirnya kedua modul harus terhubung satu sama lain. Jika Anda memiliki masalah klik tautan ini untuk membaca lebih lanjut.
Robot Terkontrol Jarak Jauh
Untuk membuat robot murah ini saya menggunakan teknologi IR 38kHz, yang digunakan dalam pengontrol TV jarak jauh. Saya membeli chassis untuk robot saya dari Amazon. Penerima IR direbut dari TV lama dan Arduino juga dari Amazon. Saya menambahkan tautan ke bagian (lihat di bawah di bagian Perangkat Keras).
Rangkaian pengemudi motor
Anda membutuhkan bagian-bagian ini:
2 Terminal Sekrup
IC L293D
3 Pin Header
9 Pin Header (90 derajat)
Resistor 1k
LED Merah
Kabel
Papan PCB
Saya menggunakan beberapa kabel tembaga dan mengikuti skema menghubungkan pin IC ke pin header. Tidak masalah pin mana yang terhubung ke pin header mana, hanya ingat di mana Anda menghubungkannya. LED terhubung berurutan dengan resistor dan paralel dengan 5v VCC.
Rangka Chassis
Langkah ini sangat mudah, saya menggunakan obeng dan beberapa keterampilan kerajinan saya membangun frame dalam lima menit. Setelah ini datang bagian yang lebih sulit, kita harus membangun rangkaian pengemudi motor. Untuk mengontrol motor saya saya memilih IC L293D yang dapat mendorong dua motor. Lihat skema untuk membangun rangkaian.
Hubungkan bagian ke Arduino
Saya menggunakan kabel jumper untuk menghubungkan sensor dan pengemudi motor ke Arduino.
Pin Arduino ==> Pengemudi Motor
4 ==> 15
5 ==> 10
6 ==> 7
7 ==> 2
VIN ==> 8
5v ==> 1, 9, 16
GND ==> 4, 5, 13, 12
Jadi lihat skema modul L293D, lalu hubungkan pinnya ke Arduino UNO seperti yang saya tulis di sini. Pin 5v Arduino harus terhubung ke pin 1, 9, 16 untuk mengaktifkan fungsi pengemudi motor IC. Lalu akhirnya gunakan sekrup terminal untuk memberi daya ke motor.
Menulis kode…
Menggunakan pustaka IRremote saya membuat kode yang membaca sinyal inframerah 38kHz, mendekodekannya, lalu memindahkan robot. (Unduh pustaka di bagian Kode).
Saya menambahkan penjelasan dalam kode, tetapi intinya adalah mendekode sinyal IR yang datang dari server utama, lalu tergantung pada apa yang diinginkan pengguna, memindahkan motor yang akan memindahkan robot ke depan atau belok ke kiri. Unduh kode: “Robot_Code”. Muat ini ke Arduino Anda dan robot Anda akan selesai.
Server Utama (Arduino Mega, Leonardo, Photon)
Server membaca paket data yang masuk dari headset nirkabel. Kami akan menggunakan modul BT yang dikonfigurasi untuk memastikan koneksi antara headset dan server. Arduino Mega adalah otak rangkaian, semuanya terhubung ke mikrokontroler ini: Bluetooth, pemancar LED inframerah, webserver, dan pengontrol mouse. Kode agak rumit, tetapi saya menambahkan penjelasan untuk memahaminya.
Kotak
Sederhana tetapi tampak bagus. Saya memotong dua papan 18x15 cm lalu meratakan tepinya dengan kertas abrasif. Menggunakan beberapa sekrup, saya menghubungkannya satu sama lain.
Rangkaian Relay
Anda membutuhkan bagian-bagian ini:
transistor 2n2222 (3 PCS)
dioda germanium (3 PCS)
resistor 330 ohm (3 PCS)
resistor 1k Ohm (3 PCS)
relay 5v (3 PCS)
kabel pasang
pin header
papan PCB
Sejumlah gambar lebih bernilai dari seribu kata, jadi daripada mencoba menulis bagaimana Anda harus menghubungkan bagian-bagian pada PCB lihat skema Jika pin “Signal” menerima sinyal dari Arduino relay akan menyala. Transistor memperkuat sinyal untuk memastikan cukup daya untuk relay. Kami akan menggunakan pin 37-38-39 untuk mengontrol tingkat HIGH-LOW setiap relay.
Pasang Bagian dalam Kotak
Untuk memasang bagian di kotak plexy-glass saya menggunakan lem dua sisi putih. Ini tampak bagus dan memegang rangkaian di kotak cukup kuat.
Rangkaian Server
Server ini berbasis perangkat lunak jadi membuat rangkaian tidak begitu sulit. (Lihat skema di bawah). Anda hanya perlu memberi daya pada mikrokontroler dan membuat koneksi di antara mereka. LED IR terhubung ke pin D3 dan relay ke 37-38-39. D16 Arduino Mega ke RX Photon dan D18 ke RX Leonardo.
Koneksi dengan Robot
LED IR terhubung ke pin digital D3 dan dengan pustaka IRremote kita mengirim kode ke robot. Ini sangat sederhana. Kode IR harus sama dalam kode robot. Jika Anda pikir selesai Anda dapat mengujinya dengan kamera Anda. Cahaya inframerah terlihat ungu pada foto, kamera dapat mendeteksi cahaya IR. Trik ini selalu berhasil.
Kode
Gunakan kode “Arduino_Mega_Server” di bagian Perangkat Lunak.
Saya menderita banyak saat menulis kode. Saya harus memprogram tiga mikrokontroler berbeda, jadi ini adalah tantangan besar. Saya menggunakan pustaka IRremote, Brain, SofwareSerial dan Mouse. (lihat tautan unduh di bagian Perangkat Lunak). Tetapi sekarang kode selesai dan bekerja jadi Anda hanya perlu mengunggah ke mikrokontroler Anda. Unduh file .ino atau salin/tempel kode di IDE Anda dan gunakan. Kode untuk Particle Photon harus diunggah melalui browser IDE. Untuk melakukannya daftar ke Particle Build. Dan hubungkan laptop Anda ke mikrokontroler Anda. Saya sangat terkejut bahwa ini terjadi hampir secara otomatis, saya hanya menambahkan nomor ID Perangkat saya.
Sebelum memuat kode pastikan tidak ada yang terhubung ke pin RX/TX. Jadi lepaskan modul Bluetooth Anda dari Mega, dan lepaskan Mega dari Leonardo dan Photon.
Pengontrol Mouse
Webserver
Saya ingin menambahkan fungsi IoT (Internet of Things) di proyek saya, jadi saya membuat pencatat data online menggunakan Particle Photon. Tergantung pada apa yang Anda buat dengan perangkat Photon membuat server pribadi, dan menulis data di Cloud.
Ini mungkin terlihat menakutkan pada awalnya, tapi bayangkan bahwa Anda dapat mendeteksi jika Anda stres (tingkat perhatian naik dan turun dengan cepat) atau jika Anda harus tidur (tingkat meditasi selalu di atas 80). Webserver ini mungkin membantu Anda hidup lebih sehat.
Particle juga memiliki dasbor online tempat Anda dapat menerbitkan data apa pun dengan sintaks “Particle.publish();”. Kami harus mengucapkan terima kasih besar kepada pengembang dasbor. Mereka telah menghemat banyak waktu untuk kami.
Menulis kode di browser?
Menarik untuk menulis kode di halaman web, tetapi bekerja sama seperti IDE normal. Kode diunggah secara nirkabel. Mikrokontroler ini akan menjadi alat yang sangat berguna dalam kotak alat semua orang.
Dasbor terlihat seperti ini jika Anda bekerja dengan baik. Menampilkan Perhatian dan Meditasi, dan Anda dapat memeriksanya kapan saja, di URL dasbor Anda. Untuk informasi lebih lanjut tentang dasbor klik di sini.
Peningkatan cepat untuk mereka yang hanya ingin mengontrol robot dengan gelombang otak:
Anda tidak ingin membangun seluruh proyek, hanya robot yang dikontrol gelombang otak? Jangan khawatir jika Anda pemula saya sudah memikirkan Anda. Saya membuat kode dengan penjelasan yang membutuhkan Arduino Mini Pro dan LED IR dan tentu saja headset untuk mengontrol robot. Saya tahu banyak pembaca saya ingin membuat proyek akhir pekan yang sederhana dan menyenangkan jadi inilah deskripsi dan kode untuk Anda.
Gunakan kode “RobotControlllerHeadset” di bagian Perangkat Lunak. Hubungkan LED IR ke pin D3 pada Mini Pro (atau Arduino UNO) dan hubungkan pin T chip NeuroSky ke pin RX Arduino. Nyalakan dengan 3.3 atau 5 volt dan selesai. Jadi bangun robot, lalu gunakan kode ini di headset Anda:
#include <IRremote.h> #include <IRremoteInt.h> #include <Brain.h> IRsend irsend; Brain brain(Serial); const int ledPin = 3; long interval = 500; long previousMillis = 0; int ledState = LOW; int medValue; void setup() { // Set up the LED pin. pinMode(ledPin, OUTPUT); // Start the hardware serial. Serial.begin(57600); } void loop() { // Expect packets about once per second. if (brain.update()) { Serial.println(brain.readCSV()); // Attention runs from 0 to 100. medValue = brain.readMeditation(); } // Make sure we have a signal. if(brain.readSignalQuality() == 0) { // Send a signal to the LED. if (medValue > 65) { irsend.sendNEC(0xFF10EF, 32); delay(40); } if (brain.readAttention() > 65) { irsend.sendNEC(0xFF18E7, 32); delay(40); } } }
Menjadi Jedi IoT (Pengujian)
Setelah membuat semua yang saya jelaskan di sini, hanya satu hal yang tersisa: coba. Gunakan kekuatan pikiran Anda, gunakan Kekuatan neuron di otak Anda,gerakkan robot kecil Anda, kontrol rumah Anda, kontrol semuanya dengan pikiran…
Sekarang Anda menjadi Jedi IoT yang sesungguhnya!
Perangkat memiliki banyak fitur dan sangat menyenangkan untuk dimainkan. Tetapi seperti yang saya katakan sebelumnya ini bukan sekadar mainan, menggabungkan biologi dan elektronika kami menciptakan perangkat yang mungkin dapat membantu orang, yang bertarung setiap hari dengan disabilitas mereka, untuk mendapatkan kembali kemampuan alami mereka.
Robot dapat dikontrol dengan mudah, relay bukan tantangan besar juga. Anda hanya harus belajar cara mengontrol tingkat perhatian Anda untuk mengontrol mouse. Pada gambar saya mencoba keluar dari aplikasi dengan gelombang otak saya. Lebih banyak latihan memastikan pengalaman yang lebih baik.
Terima kasih telah menonton!
Saya sangat berharap Anda menyukai proyek saya dan tolong tulis pendapat Anda di komentar. Saya ingin membuat video tentang perangkat, tetapi pemrograman sulit jadi saya tidak cukup waktu untuk membuat film pendek, tetapi saya akan menerbitkannya segera di channel Youtube saya dan saya akan memperbarui presentasi proyek ini juga.
Semoga Kekuatan selalu bersama Anda!
Kode
Kode Particle Photon
Kode Pengontrol Robot
HC_05_Bluetooth.ino
Kode Pengontrol Mouse
Arduino_Mega_Server
RobotControllerHeadset.ino
Kode Particle PhotonArduino
Salin ini di browser IDE Anda lalu unggah ke Particle Photon. Buka dasbor untuk melihat hasilnya secara real time.
//this is the code for the webserver for a "Use the Force... Or your Brainwaves?" project //creates a statistics for the user about his/her brainwaves meditation and attention level //thanked to the fully functioning dashboard of the Particle the code is very simple int att; int med; int function; void setup() { Serial.begin(9600); } void loop() { // Publish data Spark.publish("Attention", (att) + "%"); delay(2000); Spark.publish("Meditation", (med) + "%"); delay(2000); Spark.publish("Last Function", (function) + ""); delay(2000); if (Serial.available > 0) { char c = Serial.read(); } delay(10); switch(c) { case'a': att = 10; break; case'b': att = 20; break; case'c': att = 30; break; case'd': att = 40; break; case'e': att = 50; break; case'f': att = 60; break; case'g': att = 70; break; case'h': att = 80; break; case'i': att = 90; break; case'j': att = 100; break; case'k': med = 10; break; case'l': med = 20; break; case'm': med = 30; break; case'n': med = 40; break; case'o': med = 50; break; case'p': med = 60; break; case'q': med = 70; break; case'r': med = 80; break; case's': med = 90; break; case't': med = 100; break; case'x': function = "Home Automation" break; case'y': function = "Robot Controller Mode" break; case'z': function = "Mouse Controller" break; } }
Kode Pengontrol RobotArduino
Kode ini mengontrol robot. Unggah ini ke Arduino UNO. Anda dapat mengubah kode IR jika ingin.
//Used for "Use the Force or your Brainwaves?" project #include <IRremote.h> int IRpin = 3; IRrecv irrecv(IRpin); decode_results results; int motor_pin1 = 4; int motor_pin2 = 5; int motor_pin3 = 6; int motor_pin4 = 7; void setup () { irrecv.enableIRIn(); pinMode(motor_pin1,OUTPUT); pinMode(motor_pin2,OUTPUT); pinMode(motor_pin3,OUTPUT); pinMode(motor_pin4,OUTPUT); Serial.begin(9600); } void loop() { if (irrecv.decode(&results)) { irrecv.resume(); // Receive the next value } if (results.value == 0xFF18E7) //if gets this code goes forward { digitalWrite(motor_pin1,LOW); digitalWrite(motor_pin2,HIGH); digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,HIGH); { Serial.println("Go Forward!"); } } if (irrecv.decode(&results)) { irrecv.resume(); // Receive the next value } if (results.value == 0xFF4AB5) //if gets this code goes backward { digitalWrite(motor_pin1,HIGH); digitalWrite(motor_pin2,LOW); digitalWrite(motor_pin3,HIGH); digitalWrite(motor_pin4,LOW); { Serial.println("Go Backward!"); } } if (irrecv.decode(&results)) { irrecv.resume(); // Receive the next value } if (results.value == 0xFF10EF) //if gets this code turns left { digitalWrite(motor_pin1,HIGH); digitalWrite(motor_pin2,LOW); digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,HIGH); { Serial.println("Turn Left!"); } } if (irrecv.decode(&results)) { irrecv.resume(); // Receive the next value } if (results.value == 0xFF5AA5) //if gets this code turns right { digitalWrite(motor_pin1,LOW); digitalWrite(motor_pin2,HIGH); digitalWrite(motor_pin3,HIGH); digitalWrite(motor_pin4,LOW); { Serial.println("Turn Right!"); } } if (irrecv.decode(&results)) { irrecv.resume(); // Receive the next value } if (results.value == 0xFF38C7) //if gets this code stops { digitalWrite(motor_pin1,LOW); digitalWrite(motor_pin2,LOW); digitalWrite(motor_pin3,LOW); digitalWrite(motor_pin4,LOW); { Serial.println("Stop!"); } } }
HC_05_Bluetooth.inoArduino
Mengonfigurasi modul HC-05.
// HC-05 configuration void setup() { // Start the hardware serial. Serial.begin(9600); // default HC-05 baud rate delay(1000); Serial.print("AT"); delay(1000); Serial.print("AT+VERSION"); delay(1000); Serial.println("AT+ROLE=1"); //set the HC-05 to master mode delay(1000); Serial.println(" AT+PAIR=copy here your adress,9"); //now the module should connnect automatically delay(1000); Serial.print("AT+BAUD7"); // Set baudrate to 576000 - eg Necomimi dafault Serial.begin(57600); // delay(1000); } void loop() { }
Kode Pengontrol MouseArduino
Unggah ini ke Arduino Leonardo. Mengontrol kursor di komputer Anda, tergantung pada sinyal yang diterima dari Arduino Mega.
//Code by Imets Tamas for the Use the Force... Or your Brainwaves? project //Moves the mouse cursor through serial signals #include <Mouse.h> void setup() { Serial.begin(9600); // initialize mouse control: Mouse.begin(); } void loop() { // use serial input to control the mouse: if (Serial.available() > 0) { char inByte = Serial.read(); switch (inByte) { case 'u': // move mouse up Mouse.move(0, -8); break; case 'd': // move mouse down Mouse.move(0, 8); break; case 'l': // move mouse left Mouse.move(-8, 0); break; case 'r': // move mouse right Mouse.move(8, 0); break; case 'c': // perform mouse left click Mouse.click(MOUSE_LEFT); break; } } }
Arduino_Mega_ServerArduino
Menganalisis gelombang otak, mengontrol semuanya...
/* Arduino Mega Code for "A Tool for the Mind" project by Imets Tams, 2nd of February, 2016 This code analyzes and organizes then sends forward incoming bluetooth serial signals from the brainwave sensor Feel free to edit, but don't forget to credit, For the variable values I used the characters of family's name, you can change them if you want: I. M. E. T. S. See more details at https://www.instructables.com/member/Imetomi/ or https://www.hackster.io/Imetomi */ #include <VirtualWire.h> // include the library #include <SoftwareSerial.h> // include the library #include <Brain.h> // include the library #include <LiquidCrystal.h> // include the library #include <IRremote.h> int led = 13; int medled = 50; //the LED to shows the meditation level int attled = 51; //the LED to shows the attention level int blinkled = 52; char robot; IRsend irsend; //IR led to pin 3 SoftwareSerial mouse(18, 19); //RX, TX this goes to the Leaonardo Board SoftwareSerial webserver(16, 15); //goes to the Particle Photon to create a web server LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // initialize the library with the numbers of the interface pins Brain brain(Serial); //the Brainwaves are read with the help of the bluetooth module through hardware serial int closedeye = (brain.readLowAlpha()); //to detect blink int attention = (brain.readAttention()); //to read attention int brainsignal = (brain.readSignalQuality()); //to read signal quality int meditation = (brain.readMeditation()); //to detect meditation int alpha = (brain.readHighAlpha()); //to detect closed eye int lightatt; int lightmed; int blinklength; int prevsignal = 0; void setup() { //here we're going to set the main settings: mouse.begin(9600); //set the baud rate webserver.begin(9600); //set the baud rate Serial.begin(57600); //set the baud rate (57600 is the Necomimi's bit/seconds rate) lcd.begin(16, 2); //start the LCD screen pinMode(led, OUTPUT); //set pinmodes for the leds and relays pinMode(attled, OUTPUT); //set pinmodes for the leds and relays pinMode(medled, OUTPUT); //set pinmodes for the leds and relays pinMode(blinkled, OUTPUT); //set pinmodes for the leds and relays pinMode(37, OUTPUT); //set pinmodes for the leds and relays pinMode(38, OUTPUT); //set pinmodes for the leds and relays pinMode(39, OUTPUT); //set pinmodes for the leds and relays lightatt = map(attention, 0, 100, 0, 255); //map the attention level for analogWrite the LED lightmed = map(meditation, 0, 100, 0, 255); //map the attention level for analogWrite the LED } void robotmode() { if (brain.update()) { if ((blinklength > 0) && (blinklength < 2000)) { //if you close eyour eyes for 2 seconds loop(); //you'll exit the robot controller mode } if (attention > 70) { irsend.sendNEC(0xFF18E7, 32); //go forward webserver.println("g"); delay(40); } if (meditation > 70) { irsend.sendNEC(0xFF10EF, 32); //spin webserver.println("q"); delay(40); } } } void loop() { if (brain.update()){ analogWrite(attled, lightatt); //analog write the attention led to show the actual attention level //the more focused you are, the stronger thee LED lights analogWrite(medled, lightmed); //analog write the attention led to show the actual attention level //the higher meditation level will light up the LED if ((closedeye > 30000) && (alpha > 30000)) { //we use 2 values to be sure the user's eye is closed digitalWrite(blinkled, HIGH); //in english: if eyes are closed the LED will light up blinklength = millis(); // count milliseconds if eye closed } else if ((closedeye < 30000) && (alpha < 30000)) { digitalWrite(blinkled, LOW); //in english: if eyes are opened the LED will turn off blinklength = 0; } if ((blinklength > 0) && (blinklength < 2000)) { //if you close eyour eyes for 2 seconds webserver.println("a"); delay(40); robotmode(); //you'll be able to control the robots } if ((blinklength > 2001) && (blinklength < 4000)) { //if you close eyour eyes for 3-4 seconds webserver.println("a"); delay(40); relay(); //you'll be able to control the the home automation system } if ((blinklength > 4001) && (blinklength < 6000)) { //if you close eyour eyes for 4-6 seconds webserver.println("a"); delay(40); mousecontrol(); //you'll be able to control the mouse } Serial.println(brain.readCSV()); //print the data on serial monitor, not necessary, it's only for testing } } void relay() { webserver.println(""); if (brain.update()) { if ((blinklength > 0) && (blinklength < 2000)) { //if you close eyour eyes for 2 seconds loop(); //you'll exit the relay controller mode } if(attention > 70) { //turn on relay1 digitalWrite(37, HIGH); webserver.println("g"); prevsignal = 1; } if(meditation > 70) { //turn on relay2 digitalWrite(37, HIGH); webserver.println("q"); prevsignal = 1; } if(1000 > blinklength > 0) { //turn on relay3 digitalWrite(37, HIGH); webserver.println("qj"); prevsignal = 1; } if((attention > 70) && (prevsignal == 1)) { digitalWrite(37, LOW); webserver.println("q"); prevsignal = 1; //check if is already turned on, then turn off } if((meditation > 70) && (prevsignal == 1)) { digitalWrite(37, LOW); webserver.println("qj"); prevsignal = 1; //check if is already turned on, then turn off } if((1000 > blinklength > 0) && (prevsignal == 1)) { digitalWrite(37, LOW); webserver.println("a"); prevsignal = 1; //check if is already turned on, then turn off } } } void mousecontrol() { //you'll need a few hours of practice to control the cursor perfectly webserver.println("z"); //forward data to the webserver if(brain.update()) { if (0 < attention < 25) { mouse.println('l'); //left webserver.println("a"); } if (26 < attention < 50) { mouse.println('r'); //right webserver.println("c"); } if (51 < attention < 75) { mouse.println('u'); //up webserver.println("f"); } if (76 < attention < 100) { mouse.println('d'); //down webserver.println("h"); } if (meditation > 70) { mouse.println('c'); //click webserver.println("t"); } } }
RobotControllerHeadset.inoArduino
Untuk mereka yang ingin membuat robot IR.
#include <IRremote.h> #include <IRremoteInt.h> #include <Brain.h> IRsend irsend; Brain brain(Serial); const int ledPin = 3; long interval = 500; long previousMillis = 0; int ledState = LOW; int medValue; void setup() { // Set up the LED pin. pinMode(ledPin, OUTPUT); // Start the hardware serial. Serial.begin(57600); } void loop() { // Expect packets about once per second. if (brain.update()) { Serial.println(brain.readCSV()); // Attention runs from 0 to 100. medValue = brain.readMeditation(); } // Make sure we have a signal. if(brain.readSignalQuality() == 0) { // Send a signal to the LED. if (medValue > 65) { irsend.sendNEC(0xFF10EF, 32); delay(40); } if (brain.readAttention() > 65) { irsend.sendNEC(0xFF18E7, 32); delay(40); } } }
Pustaka Brain
Digunakan untuk mengukur tingkat perhatian dan meditasi.https://github.com/kitschpatrol/Brain
Pustaka SoftwareSerial
Digunakan untuk memastikan beberapa pin komunikasi.https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/libraries/SoftwareSerial
Pustaka IRremote
Mendekode dan mengirim sinyal IR.https://github.com/z3t0/Arduino-IRremote
Skema Rangkaian
Gunakan skema ini untuk membuat server utama.Skema untuk robot IR DIYSkema untuk modul relay 3 saluran DIY. Digunakan pin Arduino: D37, D38, D39.Skema untuk pengemudi motor. Hubungkan pin ke Arduino.Skema untuk elektronika server utama.Skema untuk robot Arduino UNOSkema untuk robot IRGunakan skema ini untuk membuat server utama.Skema untuk elektronika headset