Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Ucapkan Terima Kasih kepada Semua Pengemudi yang Ramah

Komponen dan persediaan

Arduino MKR1000
× 1
Modem Bluetooth SparkFun - BlueSMiRF Silver
× 1
Adafruit 4-channel I2C-safe Bi-directional Logic Level Converter - BSS138
× 1
Adafruit Fleksibel Adafruit DotStar Matrix 8x32 - 256 Piksel LED RGB
× 1
Adafruit 4-pin JST SM Plug + Receptacle Cable Set
× 1
Konektor barel DC 2,1 mm
× 1
Adaptor Daya AC 5V @ 4A
× 1
Posisi Header 4 Pria (0,1")
× 1
Breadboard (generik)
× 1
Kotak Proyek
Pilih satu yang cukup besar untuk menampung semua barang plus ketinggian Bluetooth.
× 1
1/4" x 4,5" x 15" Kayu lapis birch Baltik
× 1
Pita Pengerjaan Kayu, 1" x 50'
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)
Pistol lem panas (generik)
Bit-bit hutan
Bor
Sandpaper
120 Grit untuk menghilangkan ujung yang tajam.

Aplikasi dan layanan online

Arduino IDE
Perisai Virtual untuk Arduino
Adafruit DotStar

Tentang proyek ini

Selama saya mengemudi, saya ingin dapat berkomunikasi dengan cara yang lebih bermakna dengan pengemudi acak di sekitar saya. Tampak bagi saya bahwa kilatan lampu, lambaian tangan, gerakan yang melibatkan lebih dari sekadar lambaian tangan, membunyikan klakson, atau menginjak rem semuanya berakhir menjadi mekanisme komunikasi yang sangat kasar.

Inspirasi untuk ini adalah film James Bond di mana, dalam adegan pembuka, ia memiliki beberapa teks yang ditampilkan di jendela belakang Austin Martin-nya. Saya pikir, saya benar-benar dapat mengetahui (tidak hanya mengungkapkan dengan tangan bergelombang) pengemudi di kendaraan lain persis seperti yang saya pikirkan.

Berikut adalah demo bangku:

Dan demo aksi langsung semu:

Berikut sketsa konsepnya:

Proyek ini memiliki tantangan tambahan karena MKR1000 adalah papan pra-rilis dan tidak ada dokumentasi formal. Ada titik awal yang sangat bagus di Hackster:

https://www.hackster.io/charifmahmoudi/arduino-mkr1000-getting-started-08bb4a

Jadi, pada langkah pertama proyek: 

Biarkan MKR1000 berbicara

Saya beruntung masuk ke forum yang disponsori oleh http://arduino.cc, yang memiliki forum pribadi untuk kami pemilik papan per-rilis. Setelah hari Sabtu yang padat, saya berhasil memprogram papan dan membuat semua komponen berfungsi.

Setup saya saat ini melibatkan Arduino IDE versi 1.6.9 build per jam. Jika Anda seperti saya, maka menggunakan build "setiap jam" dalam sebuah proyek membuat Anda "tidak nyaman" setidaknya.

Setelah saya menginstal IDE, saya mengunduh driver untuk papan dengan manajer Papan IDE. Saya juga memuat pustaka berikut menggunakan pengelola pustaka IDE:Adafruit DotStar, Adafruit DotStarMatrix, Adafruit GFX, ArduinoJson, dan Windows Virtual Shields for Arduino.

Ketika papan ini dirilis secara resmi, prosesnya akan jauh lebih sederhana. Jadi, saya tidak akan merincinya di sini. Ada referensi ke proyek untuk membantu Anda melakukan ini di akhir artikel.

Aturan nomor 1 dalam membangun elektronik:Jangan biarkan sihir keluar dari sirkuit!

MKR100 adalah papan berbasis 3v3. Tidak memiliki semua dokumentasi yang saya inginkan, saya tidak tahu apakah mereka toleran 5 volt. Tidak hanya itu beberapa komponen benar-benar menginginkan 5 volt tersedia untuk menetapkan logika 1 dan 0 yang tepat.

Ini memunculkan kebutuhan untuk pergeseran level dua arah 4 saluran oleh Adafruit. Baik kartu bluetooth dan terutama matriks DotStar sangat suka 5 volt penuh. Jadi, berhati-hatilah saat menghubungkan hal-hal ini.

Pastikan komponen berfungsi

Sebelum saya khawatir tentang membuat semuanya bekerja bersama, saya ingin memastikan bahwa semua komponen berfungsi.

Saya mulai dengan Adafruit 8x32 DotStar matrix. Saya menemukan bahwa koneksi yang saya miliki agak rapuh. Untuk membuat ini tidak menjadi masalah, saya menggunakan beberapa pin header yang saya letakkan di sekitar dan hanya menyoldernya.

Dengan pin header terpasang dengan kuat. Saya mengarahkan Data dan Jam ke pin SPI bertanda SDA dan SCL pada MKR1000.

Dengan pin header terpasang dengan kuat. Saya mengarahkan Data dan Jam ke pin SPI bertanda SDA dan SCL pada MKR1000.

Saya memuat contoh sketsa "File> Contoh> Adafruit DotStarMatric> matrixtest" ke dalam IDE. Menyesuaikan DATAPIN ke 11 dan CLOCKPIN ke 12 dalam kode. Membangun dan menyebarkan solusi. Setelah sedikit dengan opsi untuk matriks, saya berakhir dengan tampilan yang berfungsi.

Selanjutnya adalah membuat Perisai Virtual bekerja melalui adaptor Bluetooth. Itu benar-benar lurus ke depan. Saya mengikuti petunjuk yang disebutkan di repositori github https://github.com/ms-iot/virtual-shields-arduino. Satu-satunya perubahan yang harus saya lakukan adalah pin TX dan RX. Itu adalah pin 14 dan 13 seperti yang ditandai di papan saya.

Saya akan mencatat bahwa dalam inkarnasi sebelumnya saya harus melepaskan pin TX/RX untuk mengunggah sketsa baru. Dengan senang hati saya laporkan bahwa hal ini tidak lagi terjadi.

Menelusuri kode

Sekarang setelah semuanya berfungsi, saya akan meluangkan waktu sejenak dan menelusuri kode khusus untuk proyek ini.

Untuk mengakses semua fungsi, Anda harus menyertakan hal berikut:

#include #include #include #include #include #include #include #include #include #include  

5 pertama termasuk harus cukup jelas.

VirtualShield.h berisi fungsionalitas dasar untuk komunikasi melalui adaptor bluetooth. Ini diperlukan terlepas dari sensor mana yang ingin Anda akses.

File Text.h mendapatkan teks Anda yang lebih baik, yaitu penanganan String.

Graphics.h, Recognition.h, dan Colors.h berisi fungsionalitas yang Anda perlukan untuk mengakses layar virtual, dan mengaktifkan pengenalan suara. Meskipun, belum selesai untuk tantangan ini, saya akan mengkodekan fitur suara di masa mendatang.

Selanjutnya dalam daftar baris kode penting, menginisialisasi matriks DotStar dan menginisialisasi objek Shield:

MatriksAdafruit_DotStarMatrix =Adafruit_DotStarMatrix( 32, 8, DATAPIN, CLOCKPIN, DS_MATRIX_TOP + DS_MATRIX_LEFT + DS_MATRIX_COLUMNS + DS_MATRIX_ZIGZAG, DOTSTAR_GBR), matriks =16, warna matriks, 0,[] =16, matriks Warna(0, 255, 0), matrix.Color(0, 0, 255), matrix.Color(255, 0, 255), matrix.Color(255, 0, 106), matrix.Color( 255, 255, 255) };VirtualShield shield;Graphics screen =Graphics(shield);Recognition speech =Recognition(shield); 

Baris pertama memberi tahu pustaka DotStar tentang ukuran dan tata letak matriks. Lihat contoh matrixtest atau file Adafruit_DotStarMatrix.h untuk berbagai opsi.

Warnanya untuk pustaka DotStar.

3 baris terakhir menjalankan perisai dan menginisialisasi objek agar dapat bekerja dengan sensor di ponsel.

Selanjutnya seperti semua sketsa Arduino, kita perlu menangani metode setup()

pengaturan batal() { matrix.begin(); matrix.setTextWrap(salah); matrix.setBrightness(40); matrix.setTextColor(warna[0]); DisplayText("Inisialisasi...", 4, 10); // mengatur acara perisai virtual:shield.setOnRefresh(refresh); pidato.setOnEvent(onSpeech); screen.setOnEvent(screenEvent); // memulai komunikasi perisai (juga memanggil refresh()). perisai.mulai(); //mengasumsikan 115200 Bluetooth baudrate DisplayText("Inisialisasi...selesai", 3, 10);} 

Baris "matriks" cukup jelas dan dengan baris-baris yang dieksekusi ini memberi saya kemampuan untuk sekarang mengeluarkan beberapa pesan informasi ke matriks.

Baris "perisai" sekarang menyiapkan metode panggilan balik. Metode-metode ini akan dipanggil sesuai kebutuhan saat peristiwa terjadi.

Sekarang untuk metode paling rumit dari keseluruhan sketsa

void loop() { // checkSensors() memeriksa event yang dikembalikan dan menanganinya (memanggil callback). Ini adalah metode loop() tunggal VirtualShield. shield.checkSensors();} 

Ya, Anda mengerti. Kami terus memeriksa apakah salah satu sensor telah diaktifkan dan peristiwa yang perlu ditangani.

Ok sekarang, mari kita benar-benar menangani beberapa acara. Yang pertama adalah metode refresh(). Itu akan dipanggil ketika sejumlah peristiwa berbeda terjadi. Satu-satunya peristiwa yang kami pedulikan saat ini adalah ketika bluetooth terhubung. Kami membutuhkan acara agar kami dapat menggambar ulang layar agar terlihat seperti seharusnya.

void refresh(ShieldEvent* shieldEvent){ // letakkan kode penyegaran Anda di sini // ini berjalan setiap kali Bluetooth terhubung, setiap kali shield.begin() dijalankan, atau tombol 'segarkan' ditekan di aplikasi:screen.clear(ARGB(123,86,204)); screen.drawAt(0,0, ""); thanksId =screen.addButton(10, 50, ". Terima kasih ."); welcomeId =screen.addButton(10, 100, ".Selamat datang ."); turnLeftId =screen.addButton(10, 150, ". Kiri ."); stopId =screen.addButton(175, 50, ". Menghentikan ."); startingId =screen.addButton(175, 100, ". Mulai ."); turnRightId =screen.addButton(175, 150, ". Kanan ."); backoffId =screen.addButton(10, 225, ". Mundur ."); menelepon911Id =screen.addButton(10, 290, ". Memanggil 911 .");} 

Metode ini membersihkan layar dengan latar belakang ungu muda dan melanjutkan untuk meletakkan berbagai tombol di layar. Perhatikan spasi di sekitar kata-kata. Ini adalah batasan fungsi pelindung virtual saat ini karena saya benar-benar ingin memusatkan segalanya agar terlihat bagus.

Jadi apa yang terjadi ketika saya menyentuh salah satu tombol itu? Sebuah peristiwa dipecat dan ditangani dalam sedikit kode berikut.

void screenEvent(ShieldEvent* shieldEvent) { if(screen.isPressed(thanksId)) { DisplayText("Terima Kasih", 5, 100); } if(screen.isPressed(welcomeId)) { DisplayText("Sama-sama", 2, 100); } if(screen.isPressed(backoffId)) { DisplayText("Mohon mundur", 4, 100); } if(screen.isPressed(stoppingId)) { DisplayText("...stopping...", 0, 100); } if(screen.isPressed(startingId)) { DisplayText("...mulai...", 1, 100); } if(screen.isPressed(turnLeftId)) { DisplayText("Belok KIRI", 3, 100); } if(screen.isPressed(turnRightId)) { DisplayText("Belok KANAN", 3, 100); } if(screen.isPressed(calling911Id)) { DisplayText("Memanggil 911", 0, 100); }} 

Sebuah acara masuk, kode memeriksa tombol mana yang ditekan dan kami memanggil metode DisplayText dengan hal-hal yang akan ditampilkan.

Dan akhirnya bagaimana teks keluar ke matriks? Metode DisplayText akan menanganinya untuk Anda.

void DisplayText(Pesan string, int colorIndex, int currDelay){ int x =matrix.width(); int maxX =-1 * (message.length() * 5 + message.length()); matrix.setTextColor(warna[indeks warna]); while( x> maxX) { matrix.fillScreen(0); matrix.setCursor(x, 0); matrix.print(pesan); --x; matriks.tampilkan(); penundaan (currDelay); }} 

Metode ini mengetahui seberapa lebar string ini sebenarnya. Kita perlu tahu, sehingga kita bisa memastikan string sepenuhnya di-scroll masuk dan keluar dari pandangan. Hurufnya lebarnya 5 + 1 untuk spasi antar huruf.

Bangun enklosur

Membangun itu cukup lurus ke depan. Saya menemukan kotak berukuran layak yang lebih besar dari jejak matriks. Dapatkan sepotong birch baltik 1/4" yang lebih besar dari yang saya butuhkan dan potong sesuai ukuran.  

Menggunakan teknik yang sama seperti gergaji meja. Mulailah dengan meletakkan matriks di atas kayu lapis. Setelah diposisikan, lalu tandai bagian tengah horizontal dan vertikal sambungan (termasuk sambungan daya bantu). Yang perlu Anda lakukan sekarang adalah menghubungkan garis untuk menemukan bagian tengah lubang yang akan Anda buat.

Ya saya bilang 'membosankan', bukan 'bor. Terakhir kali saya "mengebor" lubang di plastik, saya mendapatkan hasil yang sangat tidak memuaskan. Kali ini saya menggunakan Forestner bit . Saya punya gambar mereka di bawah ini. Perhatikan tepi untuk memotong dan bagian tengahnya memiliki pengikis untuk menyendok kayu yang tidak diinginkan. Membuat "lubang" yang jauh lebih bagus. Sekarang, lanjutkan ke 'membosankan' dan Anda mungkin ingin melanjutkan dan membuat lubang suspensi.

Dapatkan selembar kertas amplas 120 Grit dan amplas perlahan seluruh bagian. Pastikan 'kemudahan' tepi papan mencakup semua lubang yang baru saja dibuat. Pastikan untuk menyeka papan agar tidak ada debu gergaji dari "barang" lain di papan.

Sekarang saatnya mengerjakan kotak plastik.

Buat dua lubang di kedua ujung kotak. Ini adalah untuk konektor daya dan sambungan ke matriks. Jangan mengebor lubang daya bantu matriks dulu.

Sekarang, tempelkan beberapa strip selotip dua sisi ke bagian belakang kotak, dan tempelkan kotak ke kayu lapis. Karena ini adalah kaset yang "dapat direposisi", saya benar-benar ingin ini menempel selamanya. Saya meletakkan beberapa buku berat di atasnya dan meninggalkannya selama 24 jam. Mengapa 24 jam? Instruksi rekaman mengatakan tidak. Itu alasan yang cukup bagus untukku.

Waktu untuk lubang terakhir itu. Anda sekarang harus memiliki posisi yang tepat untuk lubang sambungan daya tambahan. Selesaikan itu, nikmati pekerjaan Anda yang terlihat 'tepat'.

Masukkan kecerdasan ke dalam kotak

Tampaknya papan tempat memotong roti adalah ukuran yang tepat untuk kotak, tetapi saya ingin dapat memasang/mencabut konektor usb dari MKR1000. Jadi, saya harus membuat papan tempat memotong roti lebih pendek.

Ok setelah trauma itu, lepaskan bagian belakang papan tempat memotong roti dan tempelkan. Pastikan untuk menghindari lubang sambungan daya tambahan.

Pasang matriks ke bagian depan kayu lapis dengan memasukkan sambungan melalui lubang. Amankan matriks dengan lem panas.

Mari bicara kekuatan

Meskipun kecerahan saya set ke 40%, arus maksimum jika saya menyalakan semua 256 piksel benar sekitar 7,5 Amps. Jauh lebih dari yang bisa disediakan oleh MKR1000. Untungnya bagi saya, tidak ada layar yang statis dan saya tidak menyalakan lampu di mana pun di dekat matriks penuh. Sambungan daya tambahan datang untuk menyelamatkan. Saya memasok hingga 4A. Saya pikir karena tidak berkelanjutan dan tidak statis, catu daya harus baik.

Saya juga memiliki kutil dinding cadangan yang ujungnya saya gunakan untuk memberikan daya ke MKR1000 saat dihidupkan di dalam kendaraan.

Saya sedang berpikir tentang membangun konverter daya ke dalam proyek untuk mengambil daya mobil 12V dan mengirimkan 5V ke proyek. Setelah banyak berpikir, lebih baik dalam segala hal untuk mendapatkan adaptor AC 5V 4A seharga $5,00 dan menggunakan konverter AC yang sudah saya miliki. Sederhana biasanya lebih baik dalam hal ini.

Menggantung tanda

Saya telah merencanakan untuk menggunakan "Ball stretch cord" dan beberapa cangkir hisap untuk mengamankan ini ke kaca belakang. Katakan saja, saya memiliki lebih banyak pekerjaan yang harus dilakukan di area ini.

Kode

Kode Ucapkan Terima Kasih
https://github.com/pulcher/mkr1000_challenge

Skema

MKR1000 hanyalah mikro karena MKR1000 asli belum dirilis.

Proses manufaktur

  1. UnifiedWater v1
  2. Kotak Suara Seluler
  3. Arduino101 / tinyTILE BLE:Kacamata Mencocokkan
  4. Whac-A-Mole (Edisi Tombol)
  5. Jukebox Modern
  6. Arduino Apple Watch
  7. Arduino buatan sendiri , Si4730 Penerima Semua Band (LW, MW, SW, FM)
  8. Semua Tentang Selesai PCB, Dijelaskan
  9. Erosi Percikan EDM:Tentang Apa Itu?
  10. Bantalan Flange Dijelaskan dalam Semua Varietasnya