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

Tampilkan Rujukan kepada Pengemudi Sopan

Komponen dan Perlengkapan

KomponenJumlah
Arduino MKR10001
SparkFun Bluetooth Modem - BlueSMiRF Silver1
Adafruit 4-channel I2C-safe Bi-directional Logic Level Converter - BSS1381
Adafruit Flexible Adafruit DotStar Matrix 8x32 - 256 RGB LED Pixels1
Adafruit 4-pin JST SM Plug + Receptacle Cable Set1
DC 2.1 mm barrel connector1
AC Power Adapter 5V @ 4A1
Male Header 4 position (0.1")1
Breadboard (generic)1
Project Box1
1/4" x 4.5" x 15" Baltic birch plywood1
Woodworking Tape, 1" x 50'1

Alat dan Mesin yang Diperlukan

Aplikasi dan Layanan Online

Tentang Proyek

Sejak saya mulai berkendara, saya selalu ingin dapat berkomunikasi dengan cara yang lebih bermakna dengan pengemudi acak di sekitar saya. Sepertinya bagi saya, flash lampu, lamba tangan, gerakan yang melibatkan lebih dari sekadar lamba tangan, klakson, atau rem tiba-tiba semuanya akhirnya menjadi mekanisme komunikasi yang sangat kasar.

Inspirasi untuk ini adalah film James Bond di mana, dalam adegan pembuka, dia memiliki beberapa teks yang ditampilkan di jendela belakang Austin Martin-nya. Saya pikir, saya benar-benar dapat memberi tahu (bukan hanya mengungkapkan dengan tangan melambung) pengemudi di kendaraan lain persis apa yang saya pikirkan.

Ini adalah demo rak:

Dan demo aksi semu:

Tampilkan Rujukan kepada Pengemudi Sopan

Ini adalah sketsa konsep:

Tampilkan Rujukan kepada Pengemudi Sopan

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

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

Jadi pada langkah pertama proyek:

Buat MKR1000 berbicara

Saya beruntung bisa masuk ke forum yang disponsori oleh https://arduino.cc, yang memiliki forum pribadi untuk kami pemilik papan pra-rilis. Setelah satu hari Sabut yang padat, saya berhasil memprogram papan dan membuat semua komponen bekerja.

Pengaturan saya saat ini melibatkan versi Arduino IDE 1.6.9 hourly build. Jika Anda seperti saya, menggunakan build "hourly" dalam proyek membuat Anda "tidak nyaman" paling tidak.

Setelah saya menginstal IDE, saya mengunduh driver untuk papan dengan Board manager IDE. Saya juga memuat perpustakaan berikut menggunakan library manager IDE: Adafruit DotStar, Adafruit DotStarMatrix, Adafruit GFX, ArduinoJson, dan Windows Virtual Shields for Arduino.

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

Aturan nomor 1 dalam membangun elektronika: Jangan biarkan asap keluar dari rangkaian!

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

Ini mendorong kebutuhan untuk pengalih level 4 channel bidirectional oleh Adafruit. Kartu bluetooth dan terutama matriks DotStar benar-benar suka penuh 5 volt. Jadi, hati-hati saat menghubungkan hal-hal ini.

Pastikan komponen bekerja

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

Saya memulai dengan <insert link>Adafruit 8x32 DotStar matrix. Saya menemukan bahwa koneksi yang saya miliki sedikit longgar. Untuk membuat ini tidak menjadi masalah, saya menggunakan beberapa pin header yang saya miliki dan sekedar memasangnya dengan las.

Tampilkan Rujukan kepada Pengemudi Sopan

Dengan pin header yang terpasang dengan kuat. Saya merutekan Data dan Clock In ke pin SPI yang ditandai SDA dan SCL pada MKR1000.

Dengan pin header yang terpasang dengan kuat. Saya merutekan Data dan Clock In ke pin SPI yang ditandai SDA dan SCL pada MKR1000.

Saya memuat sketsa contoh "File > Examples > Adafruit DotStarMatric > matrixtest" ke dalam IDE. Sesuaikan DATAPIN ke 11 dan CLOCKPIN ke 12 dalam kode. Build dan solusi terpasang. Setelah sedikit dengan opsi untuk matriks saya akhirnya dengan tampilan yang bekerja.

Selanjutnya adalah membuat Virtual Shield bekerja melalui adaptor Bluetooth. Ini sangat sederhana. Saya mengikuti petunjuk yang disebutkan di repositori github https://github.com/ms-iot/virtual-shields-arduino. Perubahan satu-satunya yang harus saya lakukan adalah pin TX dan RX. Itu adalah pin 14 dan 13 seperti ditandai pada papan saya.

Saya akan mencatat bahwa dalam inkarasi sebelumnya saya harus memutuskan pin TX/RX untuk mengunggah sketsa baru. Saya senang melaporkat bahwa ini tidak lagi berlaku.

Lewati kode

Sekarang semuanya bekerja saya akan mengambil sejenak dan menjelajahi kode yang spesifik untuk proyek ini.

Untuk mengakses semua fungsi Anda perlu menyertakan yang berikut:

#include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_DotStarMatrix.h> #include <Adafruit_DotStar.h> #include <ArduinoJson.h> #include <VirtualShield.h> #include <Text.h> #include <Graphics.h> #include <Recognition.h> #include <Colors.h> 

5 include pertama seharusnya cukup menjelaskan diri sendiri.

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

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

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

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

Adafruit_DotStarMatrix matrix = Adafruit_DotStarMatrix( 32, 8, DATAPIN, CLOCKPIN, DS_MATRIX_TOP + DS_MATRIX_LEFT + DS_MATRIX_COLUMNS + DS_MATRIX_ZIGZAG, DOTSTAR_GBR); const uint16_t colors[] = { matrix.Color(255, 0, 0), matrix.Color(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 perpustakaan DotStar ukuran dan tata letak matriks. Lihat contoh matrixtest atau berkas Adafruit_DotStarMatrix.h untuk opsi yang berbeda.

Warna-warna adalah untuk perpustakaan DotStar.

3 baris terakhir menyalakan shield dan menginisialisasi objek untuk bekerja dengan sensor di ponsel.

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

void setup() { matrix.begin(); matrix.setTextWrap(false); matrix.setBrightness(40); matrix.setTextColor(colors[0]); DisplayText("Initializing...", 4, 10); // set up virtual shield events: shield.setOnRefresh(refresh); speech.setOnEvent(onSpeech); screen.setOnEvent(screenEvent); // begin the shield communication (also calls refresh()). shield.begin(); //assumes 115200 Bluetooth baudrate DisplayText("Initializing...finished", 3, 10); } 

Baris "matrix" cukup menjelaskan diri sendiri dan dengan baris-baris tersebut dieksekusi ini memberi saya kemampuan untuk sekarang mengeluarkan beberapa pesan informasi ke matriks.

Baris "shield" sekarang menyiapkan metode callback. Metode ini akan dipanggil sesuai kebutuhan saat terjadi peristiwa.

Sekarang untuk metode paling rumit dalam seluruh sketsa

void loop() { // checkSensors() checks for return events and handles them (calling callbacks). This is VirtualShield's single loop() method. shield.checkSensors(); } 

Ya, Anda mendapatkannya. Kita terus memeriksa apakah salah satu sensor telah memicu peristiwa yang perlu ditangani.

Oke sekarang, mari kita benar-benar menangani beberapa peristiwa. Pertama adalah metode refresh(). Ini akan dipanggil saat sejumlah peristiwa berbeda terjadi. Satu peristiwa yang kita pedulikan saat ini adalah saat bluetooth terhubung. Kita butuh peristiwa sehingga kita dapat menggambar ulang layar sehingga terlihat seperti yang seharusnya.

void refresh(ShieldEvent* shieldEvent) { // put your refresh code here // this runs whenever Bluetooth connects, whenever the shield.begin() executes, or the 'refresh' button is pressed in the app: screen.clear(ARGB(123,86,204)); screen.drawAt(0,0, ""); thanksId = screen.addButton(10, 50, ". Thank you ."); welcomeId = screen.addButton(10, 100, ". Welcome ."); turnLeftId = screen.addButton(10, 150, ". Left ."); stoppingId = screen.addButton(175, 50, ". Stopping ."); startingId = screen.addButton(175, 100, ". Starting ."); turnRightId = screen.addButton(175, 150, ". Right ."); backoffId = screen.addButton(10, 225, ". Back Off ."); calling911Id = screen.addButton(10, 290, ". Calling 911 ."); } 

Metode ini membersihkan layar dengan latar belakang ungu muda dan melanjutkan untuk menempatkan berbagai tombol di layar. Perhatikan spasi di sekitar kata-kata. Ini adalah keterbatasan saat ini dari fungsionalitas virtual shield karena saya benar-benar ingin memusatkan semuanya agar terlihat bagus.

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

void screenEvent(ShieldEvent* shieldEvent) { if(screen.isPressed(thanksId)) { DisplayText("Thank You", 5, 100); } if(screen.isPressed(welcomeId)) { DisplayText("You're welcome", 2, 100); } if(screen.isPressed(backoffId)) { DisplayText("Please back off", 4, 100); } if(screen.isPressed(stoppingId)) { DisplayText("...stopping...", 0, 100); } if(screen.isPressed(startingId)) { DisplayText("...starting...", 1, 100); } if(screen.isPressed(turnLeftId)) { DisplayText("Turning LEFT", 3, 100); } if(screen.isPressed(turnRightId)) { DisplayText("Turning RIGHT", 3, 100); } if(screen.isPressed(calling911Id)) { DisplayText("Calling 911", 0, 100); } } 

Sebuah peristiwa masuk, kode memeriksa tombol mana yang ditekan dan kita memanggil metode DisplayText dengan hal yang akan ditampilkan.

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

void DisplayText(String message, int colorIndex, int currDelay) { int x = matrix.width(); int maxX = -1 * (message.length() * 5 + message.length()); matrix.setTextColor(colors[colorIndex]); while( x > maxX) { matrix.fillScreen(0); matrix.setCursor(x, 0); matrix.print(message); --x; matrix.show(); delay(currDelay); } } 

Metode ini mengetahui seberapa lebar string ini sebenarnya. Kita perlu mengetahui, sehingga kita dapat memastikan string sepenuhnya digulir ke dalam dan keluar dari tampilan. Huruf-lebarnya 5 + 1 untuk spasi di antara huruf.

Bangun kotak pelindung

Pembangunan cukup sederhana. Saya menemukan kotak yang cukup besar yang lebih besar dari jejak matriks. Dapatkan selembar plywood baltic birch 1/4" yang lebih besar dari yang saya butuhkan dan potong ke ukuran.

Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan

Menggunakan teknik yang sama seperti gerinda meja. Mulai dengan meletakkan matriks pada plywood. Setelah itu diposisikan, tandai pusat horizontal dan vertikal dari koneksi (termasuk koneksi daya tambahan). Yang perlu Anda lakukan sekarang adalah menghubungkan garis untuk menemukan pusat lubang yang akan Anda bor.

Ya saya bilang 'bor', tidak 'lubur. Kali terakhir saya "membor" lubang dalam plastik, saya memiliki beberapa hasil yang sangat tidak memuaskan. Kali ini saya menggunakan Forestner bits. Saya memiliki gambar dari mereka di bawah ini. Perhatikan bahwa tepi untuk pemotongan dan pusat memiliki penggaruk untuk mengeluarkan kayu yang tidak diinginkan. Membuat "lubang" yang jauh lebih bagus. Sekarang, mulai 'membor' dan Anda mungkin ingin melanjutkan dan bor lubang penangguhan.

Dapatkan selembar kertas susur 120 Grit dan susur ringan seluruh bagian. Pastikan 'membungkus' tepi papan termasuk semua lubang yang baru saja dibuat. Pastikan untuk mengusap papan, sehingga tidak ada debu gerinda atau 'barang' lain di papan.

Sekarang saatnya bekerja pada kotak plastik.

Bor dua lubang di kedua ujung kotak. Ini adalah untuk konektor daya dan koneksi ke matriks. Jangan bor lubang daya tambahan matriks untuk saat ini.

Sekarang, terapkan beberapa lembar pita double-sided di bagian belakang kotak, dan pasang kotak ke plywood. Karena ini adalah pita 'reposition-able', saya benar-benar ingin ini menempel untuk selamanya. Saya menempatkan beberapa buku tebal di atas dan membiarkannya selama 24 jam. Mengapa 24 jam? Instruksi pita bilang tidak boleh. Itu alasan yang cukup baik untuk saya.

Saatnya untuk lubang terakhir. Anda sekarang harus memiliki posisi tepat untuk lubang koneksi daya tambahan. Bor itu, nikmati pekerjaan yang 'akurat' terlihat.

Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan

Masukkan otak ke dalam kotak

Sepertinya breadboard adalah ukuran yang tepat untuk kotak, tetapi saya ingin dapat mencabut/mencabut konektor USB dari MKR1000. Jadi, saya harus mempersingkat breadboard.

Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan

Oke setelah trauma itu, lepaskan pelindung belakang breadboard dan tempelkan. Pastikan untuk menghindari lubang koneksi daya tambahan.

Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan

Pasang matriks di bagian depan plywood dengan memasukkan koneksi melalui lubang. Amankan matriks dengan beberapa lem panas.

Mari kita bicara tentang daya

Meskipun saya telah mengatur kecerahan ke 40%, arus maksimal jika saya menyalakan semua 256 piksel adalah sekitar 7,5 Ampere. Lebih banyak daripada yang mungkin dapat diberikan oleh MKR1000. Untungnya bagi saya, tidak ada tampilan yang statis dan saya tidak menyalakan dekat dengan matriks penuh. Koneksi daya tambahan datang untuk menyelamatkan. Saya menyediakan hingga 4A. Saya pikir karena itu tidak berkelanjutan dan tidak statis, sumber daya harus baik.

Saya juga memiliki wall-wart cadangan yang saya gunakan ujungnya untuk menyediakan daya ke MKR1000 saat dihidupkan dalam kendaraan.

Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan

Saya memikirkan untuk membangun konverter daya ke dalam proyek untuk mengambil daya mobil 12V dan memberikan 5V ke proyek. Setelah banyak pemikiran, 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 ketika datang ke hal ini.

Menggantung papan

Saya berencana untuk menggunakan "Ball stretch cords" dan beberapa cangkir sedotan untuk mengamankan ini ke kaca belakang. Katakan saja, saya masih memiliki banyak pekerjaan yang harus dilakukan di bidang itu.

Tampilkan Rujukan kepada Pengemudi Sopan
Tampilkan Rujukan kepada Pengemudi Sopan

Kode

The Say Thanks code
https://github.com/pulcher/mkr1000_challenge

Skema Rangkaian

The MKR1000 is just a micro as the real MKR1000 hasn't been released yet.Tampilkan Rujukan kepada Pengemudi Sopan

Proses manufaktur

  1. UnifiedWater v1 – Kit Lengkap Sensor Kualitas Air Arduino
  2. Sistem Pemilihan Portabel dengan Konektivitas GSM
  3. Membuat Kacamata Match-Making Cerdas dengan Arduino 101 dan tinyTILE BLE
  4. Game Arcade Whac-A-Mole DIY (Edisi Tombol) – Proyek Arduino
  5. Modern Jukebox: Pemutar Musik LED Raspberry Pi & Arduino
  6. Jam Tangan Pintar DIY Arduino: Buat Jam Tangan Gaya Apple Watch Sendiri
  7. Radio Arduino Seluruh Pita DIY dengan Si4730 (LW, MW, SW, FM) – Pembuatan Hemat Biaya, Langkah demi Langkah
  8. Panduan Komprehensif Finishing PCB: Jenis, Aplikasi, dan Praktik Terbaik
  9. EDM Spark Erosion Dijelaskan: Teknologi, Metode, dan Aplikasi
  10. Panduan Lengkap Bantalan Flange: Jenis, Fitur, dan Aplikasi