Isi kandungan:

FaceBot: 8 Langkah
FaceBot: 8 Langkah

Video: FaceBot: 8 Langkah

Video: FaceBot: 8 Langkah
Video: Smart Watch 8 Ultra / T800 / C800: Cara Mengaktifkan Facebook Messenger? (Jam Tangan Fitpro) 2024, November
Anonim
FaceBot
FaceBot

Panduan ini akan menunjukkan kepada anda cara membuat robot penghindaran perlanggaran dengan kos rendah ($ 39) dengan wajah pada fon. Kami melakukan ini dengan menggunakan paparan OLED kos rendah dan terang yang baru. Pelajar kami suka menambahkan wajah pada robot mereka. Mereka suka melukis wajah tersenyum yang berubah berdasarkan apa yang sedang dilakukan robot.

Terdapat beberapa robot kos rendah yang tersedia dengan harga di bawah $ 25 yang membolehkan anda mengajar asas-asas sains komputer. Salah satu masalah dengan robot ini adalah mereka tidak memberikan ketelusan mengenai apa yang berlaku di dalam robot semasa anda membuatnya. Pada tahun 2018 semuanya mula berubah dengan adanya paparan OLED berkualiti tinggi dengan kos rendah. Paparan ini mempunyai faedah berikut:

  • Mereka sangat terang dan mempunyai kontras yang tinggi. Walaupun bilik yang terang, mereka mudah dibaca dari pelbagai sudut.
  • Mereka mempunyai resolusi yang baik. Yang saya gunakan ialah 168x64 piksel. Ini hampir 4x paparan sebelumnya yang telah kita gunakan.
  • Mereka berkekuatan rendah dan mereka berfungsi secara konsisten walaupun kuasa robot anda merosot.
  • Kosnya agak rendah (masing-masing sekitar $ 16) dan harganya turun.

Pada masa lalu, mereka sukar memprogram dan akan menggunakan terlalu banyak memori untuk digunakan dengan Arduino Nanos yang murah. Nano hanya mempunyai RAM 2K atau dinamik. Panduan ini akan menunjukkan kepada anda cara mengatasi masalah ini dan membina robot yang suka diprogramkan oleh anak-anak.

Langkah 1: Langkah 1: Bina Robot Pangkalan Anda

Langkah 1: Bina Robot Pangkalan Anda
Langkah 1: Bina Robot Pangkalan Anda

Untuk membina FaceBot, kita biasanya bermula dengan robot asas. Salah satu contohnya ialah Robot CoderDojo $ 25 yang dijelaskan di sini. Robot ini menggunakan Arduino Nano yang murah dan popular, pengawal motor sederhana, 2 motor DC dan bateri 4 atau 6 AA. Sebilangan besar pelajar mula menggunakan sensor ping untuk membina robot penghindaran perlanggaran. Kerana menyediakan sistem kuasa 5v, ia sangat sesuai untuk FaceBot. Untuk memastikan kosnya rendah, saya biasanya meminta pelajar saya memesan bahagian dalam talian dari e-Bay. Bahagian-bahagiannya biasanya mengambil masa 2-3 minggu untuk tiba dan memerlukan sedikit pematerian untuk motor dan suis kuasa. Sambungan selebihnya dibuat menggunakan papan roti 400-tali leher. Pelajar sering-sering menempelkan wayar agar tidak tergelincir.

Terdapat satu perubahan yang kami buat pada reka bentuk penghindaran perlanggaran standard. Kami memindahkan sensor ping dari bahagian atas casis ke bawah casis. Ini meninggalkan ruang untuk paparan di atas robot.

Sebaik sahaja anda mempunyai pengaturcaraan penghindaran perlanggaran, anda akan membaca untuk menambah wajah!

Langkah 2: Langkah 2: Cari dan Pesan Paparan OLED Anda

Langkah 2: Cari dan Pesan Paparan OLED Anda
Langkah 2: Cari dan Pesan Paparan OLED Anda

Semasa paparan OLED keluar, paparan kos rendah dirancang untuk jam tangan atau monitor kecergasan. Akibatnya mereka kecil, biasanya sekitar 1 inci. Berita baiknya ialah mereka murah, sekitar $ 3. Kami membina beberapa robot dengan paparan ini, tetapi kerana ukuran paparan terhad apa yang dapat kami lakukan di layar. Kemudian pada tahun 2018 kami mula melihat harga skrin OLED 2,42 inci yang lebih besar turun harganya. Pada bulan Januari 2019 harganya turun menjadi sekitar $ 16. Kami akhirnya mempunyai paparan hebat yang dapat kami gunakan untuk wajah robot kami.

Berikut adalah spesifikasi paparan ini:

  1. 2.42 inci (ukuran pepenjuru)
  2. 128 piksel (x-dimensi)
  3. Tinggi 64 piksel (dimensi y)
  4. Kuasa rendah (biasanya 10ma)
  5. Monokrom (berwarna kuning, hijau, biru dan putih)
  6. Antara muka SPI lalai walaupun anda boleh mengubahnya menjadi I2C jika anda mahu
  7. Pemacu SSD1309 (pemacu paparan yang sangat biasa)

Antara muka SPI mempunyai tujuh wayar. Berikut adalah label khas pada antara muka:

  1. CS - Pilih Cip
  2. DC - Data / Perintah
  3. RES - Tetapkan semula
  4. SDA - Data - ini harus disambungkan ke pin Arduino Nano 11
  5. SCL - Jam - ini harus disambungkan ke pin Arduino Nano 13
  6. VCC - +5 volt
  7. GND - Tanah

Anda juga perlu mempunyai beberapa wayar untuk menyambungkan paparan ke papan roti. Paparan biasanya dilengkapi dengan header 7-pin yang anda pasangkan ke paparan. Saya menggunakan 7 penyambung Dupont lelaki-ke-lelaki 20mc dan menyoldernya sehingga wayar keluar di bahagian belakang paparan.

Langkah 3: Langkah 3: Sambungkan OLED ke Arduino Nano

Langkah 3: Sambungkan OLED ke Arduino Nano
Langkah 3: Sambungkan OLED ke Arduino Nano
Langkah 3: Sambungkan OLED ke Arduino Nano
Langkah 3: Sambungkan OLED ke Arduino Nano

Sekarang anda sudah bersedia untuk menguji OLED anda. Saya menggunakan Arduino Nano yang lain hanya untuk menguji setiap paparan yang saya hasilkan. Setelah ujian berjaya, saya menyambungkannya ke robot. Gambar rajah pendawaian untuk penguji ditunjukkan dalam gambar di atas. Perhatikan bahawa anda boleh memindahkan sambungan OLED ke pin lain yang menyokong output digital, tetapi jika anda memastikan bahawa SCL (jam) ada di Arduino Nano pin 13 dan SDA (data) ada di Arduino Nano pin 11, anda boleh menggunakan tetapan lalai di perisian. Ini menjadikan kod anda sedikit lebih mudah.

Langkah 4: Langkah 4: Uji Paparan Anda

Langkah 4: Uji Paparan Anda
Langkah 4: Uji Paparan Anda

Untuk menguji paparan anda, kami akan menggunakan perpustakaan u8g2. Terdapat perpustakaan lain yang boleh anda gunakan, tetapi menurut pengalaman saya, tiada satu pun yang bagus di perpustakaan u8g2. Salah satu faktor kritikal adalah berapa banyak RAM dalam Arduino yang digunakan oleh paparan. U8g2 adalah satu-satunya perpustakaan yang saya dapati yang menggunakan "Mod Halaman" yang akan berfungsi dengan Arduino Nano.

Anda boleh menambahkan perpustakaan ini ke Arduino IED anda dengan mencari "u8g2" di menu "Urus Perpustakaan". Anda juga boleh memuat turun kod secara langsung dari gethub.

github.com/olikraus/u8g2

Kod ujian yang saya gunakan ada di sini:

github.com/dmccreary/coderdojo-robots/blob…

Terdapat beberapa perkara yang perlu diberi perhatian. Nombor pin SCL dan SDA dikomentari kerana ini adalah pin lalai di Nano. Pembina untuk u8g2 adalah garis utama:

// Kami menggunakan SSD1306, 128x64, satu halaman, tanpa nama, 4 wayar, Perkakasan, SPI tanpa putaran yang hanya menggunakan 27% memori dinamikU8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2 (U8G2_R0, CS_PIN, DC_PIN), RDS_

Kami menggunakan mod satu halaman kerana mod itu menggunakan RAM minimum. Kami menggunakan antara muka perkakasan 4-wayar dan OLED dilengkapi dengan SPI secara lalai.

Langkah 5: Langkah 5: Tambahkan OLED Anda ke Robot

Langkah 5: Tambahkan OLED Anda ke Robot
Langkah 5: Tambahkan OLED Anda ke Robot

Sekarang kita mempunyai OLED yang berfungsi dan kita tahu bagaimana menginisialisasi perpustakaan u8g2, kita sudah siap untuk mengintegrasikan OLED dengan robot asas kita. Terdapat beberapa perkara yang perlu dipertimbangkan. Dalam ujian OLED kami menggunakan pin yang saling berdekatan untuk memudahkan pendawaian. Malangnya, kita memerlukan pin 9 untuk menggerakkan Robot kita kerana ia adalah salah satu pin PWM yang kita perlukan untuk menghantar isyarat analog kepada pemandu motor. Penyelesaiannya adalah dengan memindahkan wayar yang ada di pin 9 ke pin percuma yang lain dan kemudian menukar pernyataan #define ke pin baru itu. Untuk memasang OLED di bahagian depan robot, saya memotong dua kepingan segitiga dari plexiglass dan terpaku panas mereka ke casis. Saya selalu suka menggunakan beberapa kertas pasir untuk mengacaukan permukaan plexiglass sebelum saya melekatkan bahagian-bahagiannya supaya tidak mudah pecah.

Seterusnya, mari dapatkan beberapa data mengenai OLED kami dan lukiskan beberapa wajah pada robot!

Langkah 6: Langkah 6: Paparkan Parameter Robot

Langkah 6: Paparkan Parameter Robot
Langkah 6: Paparkan Parameter Robot

Salah satu perkara yang baik tentang mempunyai paparan adalah bahawa ia sangat membantu dalam menyahpepijat apa yang sedang berlaku di dalam robot kita semasa ia bergerak. Bukan perkara biasa bagi pembangun untuk mempunyai fungsi yang berfungsi di desktop apabila anda disambungkan ke komputer anda, hanya untuk membuatnya tidak berfungsi semasa robot bergerak. Menampilkan nilai seperti jarak yang diukur oleh sensor ping adalah contoh yang baik untuk memaparkan parameter robot.

Dalam foto di atas, baris pertama (Echo Time) menunjukkan masa kelewatan antara ketika suara meninggalkan pembesar suara ultrasonik dan masa ia diterima oleh mikrofon. Nombor ini kemudian ditukar menjadi sentimeter pada baris kedua (Jarak dalam cm). Kaunter dikemas kini carian kedua untuk menunjukkan paparan semakin diperbaharui. "Pusing …" hanya dipaparkan jika jaraknya di bawah nombor tertentu yang disebut ambang putar. Kedua-dua roda bergerak ke hadapan jika jarak ping melebihi nombor ini. Sekiranya nombor di bawah ambang putar maka kita membalikkan motor (sandaran) dan kemudian menukar arah.

Berikut adalah beberapa contoh kod yang menunjukkan cara mengambil nilai dari sensor ping dan memaparkan nilai pada skrin OLED anda.

Berikut adalah contoh yang menguji tiga sensor ping (kiri, tengah dan kanan) dan menunjukkan nilai pada paparan:

github.com/dmccreary/coderdojo-robots/blob…

Langkah 7: Langkah 7: Lukiskan Beberapa Muka

Langkah 7: Lukiskan Beberapa Muka!
Langkah 7: Lukiskan Beberapa Muka!

Sekarang kita mempunyai semua bahagian untuk menggambar beberapa wajah. Pelajar kami biasanya berpendapat bahawa robot itu harus mempunyai wajah yang gembira jika bergerak maju. Apabila melihat sesuatu di hadapannya, ia akan melihat perasaan terkejut. Ia kemudian kembali ke belakang dan melihat sekeliling, mungkin dengan mata bergerak untuk memberi isyarat ke arah mana ia akan berpusing.

Perintah melukis untuk melukis wajah cukup mudah. Kita dapat melukis bulatan untuk garis besar wajah dan mengisi bulatan untuk setiap mata. Mulut boleh menjadi setengah bulatan untuk senyuman dan lingkaran bulat yang penuh untuk perasaan terkejut. Ini adalah tempat di mana anak-anak dapat menggunakan kreativiti mereka untuk memperibadikan ekspresi. Saya kadang-kadang sengaja melukis wajah buruk dan meminta pelajar menolong saya menjadikannya lebih baik.

Anda boleh menggunakan fungsi display.height () dan display.width () untuk mendapatkan ukuran paparan. Dalam kod di bawah ini kita menetapkan pemboleh ubah

half_width = display.width () / 2; half_height = display.height () / 2;

Sekiranya anda melakukan pengiraan ini berkali-kali, kodnya sedikit lebih cepat jika dikira sekali dan disimpan dalam pemboleh ubah. Berikut adalah beberapa contoh bagaimana wajah lurus yang membosankan di atas dilukis:

// kami melakukan ini pada permulaan setiap gelung

display.clearDisplay (); // lukiskan wajah terang untuk backgrounddisplay.fillCircle (half_width, half_height, 31, WHITE); // paparan gelap mata kanan. isiCircle (half_width - 10, display.height () / 3, 4, BLACK); // mata kiri darkdisplay.fillCircle (half_width + 10, display.height () / 3, 4, BLACK); // lukiskan garis lurus untuk paparan mulut.drawLine (half_width - 10, display.height () / 3 * 2, half_width + 10, display.height () / 3 * 2, BLACK); // baris ini menghantar wajah baru kami ke paparan paparan OLED.display ();

Langkah 8: Langkah 8: Sesuaikan

Langkah 8: Sesuaikan
Langkah 8: Sesuaikan

Melukis wajah asas hanyalah permulaan. Pelajar dapat membuat banyak variasi. Ramai pelajar telah menambah pembesar suara kecil yang memainkan nada atau suara semasa mereka bergerak.

Anda juga boleh membina program ujian yang lebih kecil yang membantu pelajar anda memasang motor dengan betul. Contohnya anak panah (segitiga) di skrin akan memberitahu pelajar arah mana roda harus dipusingkan semasa anda menyambungkan motor. Program ujian berpusing melalui setiap arah motor:

  1. Ke Hadapan Kanan
  2. Pembalikan Kanan
  3. Kiri Ke Depan
  4. Belakang Kiri

Untuk setiap mod, layar diperbarui dengan paparan baru untuk menunjukkan roda mana yang harus dipusingkan dan ke arah mana.

Contoh program itu ada di sini

github.com/dmccreary/coderdojo-robots/blob…

Terdapat banyak contoh dan perincian pengaturcaraan di halaman CoderDojo Robot GitHub FaceBot.

Terdapat juga versi robot FaceBot yang membolehkan pelajar mengubah semua parameter penghindaran perlanggaran (kelajuan ke depan, jarak putaran, masa putaran, kelajuan putaran) secara langsung menggunakan paparan. Tidak ada komputer yang diperlukan untuk "memprogram" robot ini! Versi ini sangat sesuai untuk MakerFairs dan acara yang anda tidak mahu bawa komputer.

Beri tahu kami wajah baru yang anda dan pelajar anda tentukan!

Selamat pengekodan!

Disyorkan: