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

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Komponen dan Perlengkapan

Dadu Arduino Teraktifkan Goyang dengan Matriks LED
Arduino Nano R3
× 1
Matriks Titik 3mm 8x8 MAX7219
× 1
Modul Saklar Miring dan Antarmuka Digital
× 1
Dadu Arduino Teraktifkan Goyang dengan Matriks LED
Saklar Geser
× 1
Modul Penguat Daya MT3608 DC 2A Step Up 2v-24v ke 5v/9v/12v/28V
× 1

Alat dan Mesin yang Diperlukan

Dadu Arduino Teraktifkan Goyang dengan Matriks LED
Pakuin (Generic)
Dadu Arduino Teraktifkan Goyang dengan Matriks LED
Pistol Lem Panas (Generic)

Aplikasi dan Layanan Online

Dadu Arduino Teraktifkan Goyang dengan Matriks LED
Arduino IDE
Dadu Arduino Teraktifkan Goyang dengan Matriks LED
Autodesk Fusion 360

Tentang Proyek Ini

Kira-kira satu tahun yang lalu, anak saya dan saya membuat dadu elektronik dengan Arduino dan beberapa LED. Proyek ini masih ideal untuk pemula. Tahun ini kami telah banyak belajar, jadi saatnya untuk pembaruan.

Dadu ini masih merupakan proyek starter yang sempurna. Fungsinya jelas bagi semua orang dan mudah memahami berbagai area: mikrokontroler, elektronika sederhana, dan pemrograman.

Versi 2.0

Dadu ini juga fantastis untuk melangkah lebih jauh: menghubungkan area lain.

Saat ini hampir semua sudah ada sebagai komponen siap pakai. Hal ini terlihat dengan jelas saat mencari starter kit untuk Arduino atau Raspberry Pi. Komponen seperti LED, tombol tekan, dan berbagai jenis sensor dibangun pada papan sirkuit dan dapat dihubungkan serta digunakan hanya dengan beberapa kabel ke GPIO.

Printer 3D sederhana, namun mencukupi, tersedia di ebay dengan harga kurang dari 140 €. Hampir semua variasi bracket, pemasang, atau casing dapat dibuat dengan printer ini.

Ada banyak peluang untuk mengembangkan proyek Anda sendiri. Contohnya adalah dadu 2.0 kami yang baru.

Sensor Miring

Kami mengimplementasikan dadu dengan cara yang sama sekali berbeda. Di dalamnya, Arduino Nano bekerja karena alasan ruang. Masih ada saklar on-off, tetapi tidak ada tombol. Pengocokan dilakukan dengan menggoyangkan seluruh kubus.

Untuk tujuan ini, digunakan sensor miring atau sensor getaran. Mereka bekerja seperti tombol. Dalam tabung kaca, bola bergerak. Jika bola mengenai kontak sambungan, sirkuit tertutup. Kontak ini, terkadang sangat singkat, digunakan untuk sinyal.

Gerakan bola logam dapat terdengar cukup jelas jika Anda menggoyangkan sensor.

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Biasanya posisi pemasangan menentukan sensor miring. Sensor diharapkan memicu sinyal pada posisi sudut tertentu. Dalam kasus kami, hal ini terjadi dengan menggoyangkan casing. Di sini situasi tidak terlalu penting, karena saat menggoyangkan ke arah mana pun sinyal akan dipicu. Untuk berjaga-jaga, kami menggunakan dua sensor dalam proyek ini, yang disusun berselisih 90 ° satu sama lain. Dengan demikian kami selalu mendapatkan sinyal goyang yang andal.

Interrupt

Agar dapat mengenali saat goyang, pin input sensor miring harus di-query dalam sketsa. Namun, tergantung kapan hal ini terjadi secara waktu dan apa lagi yang harus dilakukan sketsa, selalu ada kemungkinan satu atau lebih peristiwa tidak terdeteksi.

Solusi yang lebih baik adalah menggunakan interrupt hardware. Hal ini didefinisikan oleh fungsi attachInterrupt. Sebagai parameter, ditentukan subprogram yang akan dipanggil pada sinyal.

Arduino menyediakan dua interrupt hardware: pin D2 dan D3.

Tampilan

Tentu saja, tampilan gambar dadu dapat dilakukan kembali dengan 7 LED individual. Namun, juga lebih menarik untuk menggunakan komponen jadi di sini.

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Pilihan kami untuk proyek ini adalah matriks LED 8x8 dengan driver IC MAX7219. Matriks ini sangat hemat ruang, biaya hanya sedikit, dan mudah untuk di-kodekan.

Tergantung di mana Anda membelinya, Anda harus menyolder dan merakit bagian-bagian tunggal. Biasanya bukan masalah. Kesalahan satu-satunya yang dapat dilakukan adalah memasang matriks LED terbalik ke dalam soket.

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Hal ini ditunjukkan oleh gambar di atas. Di sini cukup untuk menarik matriks dengan hati-hati dari soket dan memutarnya 180 °.

Beberapa Fisika

Matriks LED tidak hanya harus menunjukkan gambar dadu sebagai hasilnya. Matriks harus menawarkan beberapa efek pementasan. Enam mata dadu bergerak pada matriks: mereka memantul dari tepian dan perlahan kehilangan kecepatan.

Melalui dua sensor miring, kita dapat melihat seberapa banyak goyang yang dilakukan. Informasi ini kami berikan pada mata dadu sebagai "kecepatan" untuk gerakannya.

Kami juga menggunakan efek serupa saat menampilkan hasil dadu. Mata dadu bergulir dari posisi acak ke posisi yang benar dalam gambar kubus.

Sumber Daya

Pertama, kami telah memasang dua sel baterai tombol 3V CR2032 untuk alasan ruang. Pada awalnya terlihat cukup bagus juga. Arduino dan matriks LED berpartisipasi dan semuanya bekerja. Namun, setelah beberapa menit operasi, daya sel baterai tombol menurun.

Jika Anda mematikan Arduino setelah setiap dadu, Anda dapat menggunakannya dengan cara itu. Itu tidak sempurna, jadi kami memasang dua baterai AAA yang lebih baik. Namun, baterai ini hanya menyediakan 3V bersama-sama. Jadi kami masih perlu konverter step-up yang menaikkan tegangan ke 5V. Koneksi masih dilakukan pada pin VIN Arduino.

Desain Perabot

Opsi terbaik untuk casing yang sesuai adalah desain sendiri dan produksi melalui pencetakan 3D. Ada banyak aplikasi untuk konstruksi. Kami telah menggunakan Autodesk Fusion 360 untuk proyek ini. Fitur-fiturnya hebat dan pencetakan 3D terintegrasi dengan baik dengan perangkat lunak Print Studio. Jika Anda tertarik pada Autodesk Fusion 360, Anda akan menemukan beberapa saran dalam artikel blog Parametric Enclosures (hanya dalam bahasa Jerman).

Casing kami terdiri dari 3 bagian:

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Matriks LED terlihat lebih bagus dengan tutup plexiglas kelabu di depannya. Hal ini membuat LED yang mati tidak dapat dikenali dan gambar menjadi lebih jelas.

Sketsa

Untuk mengontrol Matriks LED, diperlukan perpustakaan LedControl. Jika belum terinstal, dapat diunduh dari arduino.cc https://playground.arduino.cc/Main/LedControl.

Kemudian kami melakukan definisi variabel lainnya. Pertama, kami menentukan bagaimana mata dadu ditampilkan pada matriks. Mata dadu terdiri dari 4 titik LED. Dalam array, sudut kiri atas ditentukan sebagai koordinat X / Y (-1 berarti di luar layar).

int DicePic[8][6][2] = { … { //1: {4,4}, //1. Punkt {-1,-1}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //2: {2,2}, //1. Punkt {6,6}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, … 

Tentu saja, semuanya mungkin di sini. Biarkan imajinasi Anda berjalan liar. Tidak selalu harus berupa gambar mata tipikal.

Catatan lain Anda akan menemukan langsung dalam kode.

Rangkaian

Kami meletakkan Arduino kami pada strip soket, sebagai semacam shield. Lima kontak matriks LED terhubung dengan cara yang sama. Jika Arduino berada di tengah, ruang digunakan secara optimal. Oleh karena itu, sebaiknya gunakan pin 5, 6, 7 untuk CS, CLK dan DIN untuk matriks. Di sini hanya titik solder yang harus dihubungkan. Koneksi ke 5V dan GND melalui jumper kecil.

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Kami juga menghubungkan dua sensor miring dengan kabel pendek. Mereka terhubung ke pin 2 dan 3 dan 5V dan GND.

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Sekarang semuanya dapat dirangkit. Plexiglas pertama kali dikaitkan dengan lem panas. Kami melakukan hal yang sama dengan matriks LED. Titik lem panas kecil sudah cukup.

Selanjutnya, saklar on/off dipasang, dikunci dengan lem panas dan dihubungkan ke kabel yang sesuai.

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Pemasangan Sumber Daya

Sumber daya sedikit dirakit. Tergantung opsi dan komponen yang Anda miliki, kontak untuk plus dan minus dapat disesuaikan sesuai kebutuhan.

Kami menggunakan pegas dan pin dari kotak baterai yang sudah digunakan. Untuk memasang ke dasar casing kami menggunakan kabel dan sedikit lem panas lagi.

Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Konverter penguat step-up sebaiknya disesuaikan ke sekitar 5V sebelum pemasangan. Untuk itu, resistansi harus diputar sedikit.

Kemudian casing atas dan bawah dipasang bersama. Karena kecocokan 0.1 mm, menyambungkan tanpa pengamanan tambahan sudah cukup. Dan mereka masih dapat dibuka kembali untuk penggantian baterai.

Dan kemudian selesai!

Kesenangan dadu 2.0 dapat dimulai!

Apa yang Dibutuhkan

Informasi Lebih Lanjut

Jika Anda ingin membaca lebih banyak, kunjungi situs web kami techpluscode.de/arduino-wuerfel-2-0.

Maaf, blog tambahan ini hanya tersedia dalam bahasa Jerman ;-)

Kode

wuerfel8x8.inoArduino
Kode untuk dadu goyang
/* Blog-Artikel: Schttel-Wrfel mit LED Matrix und Bewegungssimulation https://techpluscode.de/schuettel-wuerfel-mit-led-matrix-und-bewegungssimulation/ techpluscode.de Copyright 2019 von Thomas Angielsky */ //Bibliothek fr die Ansteuerung der 8x8 LED-Matrix einbinden //Include lib for the 8x8 LED matrix #include "LedControl.h" int PinTiltX = 2; //Pin fr Tiltsensor X int PinTiltY = 3; //Pin fr Tiltsensor Y //Pins der LED-Matrix //Pins of the LED matrix int PinCLK = 7; int PinCS = 6; int PinDIN = 5; LedControl lc = LedControl(PinDIN, PinCLK, PinCS, 1); //Koordinaten der Wrfelaugen in der LED-Matrix //Coordinates of the Dice points in the LED matrix int DicePic[8][6][2] = { { //leere Matrix und Startposition: {9,9}, //1. Punkt {9,8}, //2. Punkt {9,7}, //3. Punkt {9,6}, //4. Punkt {9,5}, //5. Punkt {9,4} //6. Punkt }, { //1: {4,4}, //1. Punkt {-1,-1}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //2: {2,2}, //1. Punkt {6,6}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //3: {2,6}, //1. Punkt {6,2}, //2. Punkt {4,4}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //4: {2,2}, //1. Punkt {2,6}, //2. Punkt {6,2}, //3. Punkt {6,6}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt }, { //5: {2,2}, //1. Punkt {2,6}, //2. Punkt {6,2}, //3. Punkt {6,6}, //4. Punkt {4,4}, //5. Punkt {-1,-1} //6. Punkt }, { //6: {2,1}, //1. Punkt {2,4}, //2. Punkt {2,7}, //3. Punkt {6,1}, //4. Punkt {6,4}, //5. Punkt {6,7} //6. Punkt }, { //Start: {-1,-1}, //1. Punkt {-1,-1}, //2. Punkt {-1,-1}, //3. Punkt {-1,-1}, //4. Punkt {-1,-1}, //5. Punkt {-1,-1} //6. Punkt } }; //Variablen der Wrfelaugen: Position, Richtung, Geschwindigkeit fr X und Y //Variables of the dice: position, direction, speed for X and Y float DiceXpos[6]; float DiceXdir[6]; volatile byte DiceXspeed[6]; float DiceYpos[6]; float DiceYdir[6]; volatile byte DiceYspeed[6]; int DiceValue; unsigned long timestamp; byte Mode; int volatile shakes; int ShakesPerSecond; int step; void InterruptChecks() { //Schttel-Anzahl zhlen //Count Shakes shakes=shakes+1; //Serial.println(millis()); timestamp=millis(); } void SetSpeedX() { if (Mode==0) { //alle Wrfel in X beschleunigen //Speed-up dice in X for (int i = 0; i < 6; i++) { if (DiceXspeed[i]<255) {DiceXspeed[i]=DiceXspeed[i]+5;} } } InterruptChecks(); } void SetSpeedY() { if (Mode==0) { //alle Wrfel in Y beschleunigen //Speed-up dice in Y for (int i = 0; i < 6; i++) { if (DiceYspeed[i]<255) {DiceYspeed[i]=DiceYspeed[i]+5;} } } InterruptChecks(); } void ShowLed(int x, int y, bool onoff) { //LED nur anzeigen, wenn im sichtbaren Bereich //show only, when x/y in matrix if ((x<8) and (y<8) and (x>=0) and (y>=0)) { lc.setLed(0, x, y, onoff); } } void ShowDot(int x, int y, bool onoff) { //Wrfel-Auge anzeigen oder ausblenden //Show or hide dice point ShowLed(x-1, y-1, onoff); ShowLed(x, y-1, onoff); ShowLed(x-1, y, onoff); ShowLed(x, y, onoff); } void ShowDicePic(int value) { //Wurf anzeigen //Show dice boolean done; //alle Punkte von der aktuellen Position aus zur Zielposition von DiceValue bewegen //move all points from current position to destination of DiceValue for (int i = 0; i < 6; i++) { DiceXspeed[i]=100; DiceYspeed[i]=100; //Werte fr X berechnen //Calc x values DiceXdir[i]=0; if (int(DiceXpos[i])>DicePic[value][i][0]) {DiceXdir[i]=-1;} else if (int(DiceXpos[i])<DicePic[value][i][0]) {DiceXdir[i]=1;} DiceYdir[i]=0; if (int(DiceYpos[i])>DicePic[value][i][1]) {DiceYdir[i]=-1;} else if (int(DiceYpos[i])<DicePic[value][i][1]) {DiceYdir[i]=1;} } //Serial.println(value); //Serial.println("Bewegung Start // Start moving"); //Punkte bewegen do { //Serial.println("Bewegung // Moving"); for (int i = 0; i < 6; i++) { if (int(DiceXpos[i])!=DicePic[value][i][0]) { DoStep(DiceXpos[i],DiceXdir[i],DiceXspeed[i],false); } if (int(DiceYpos[i])!=DicePic[value][i][1]) { DoStep(DiceYpos[i],DiceYdir[i],DiceYspeed[i],false); } } lc.clearDisplay(0); for (int i = 0; i < 6; i++) { ShowDot(int(DiceXpos[i]), int(DiceYpos[i]), true); } delay(50); //Sind alle Augen an ihrer Zielposition //Dice points are on destition position done=true; for (int i = 0; i < 6; i++) { if (int(DiceXpos[i])!=DicePic[value][i][0]) {done=false;} if (int(DiceYpos[i])!=DicePic[value][i][1]) {done=false;} } } while (done==false); //Serial.println("Bewegung Ende // End moving"); lc.clearDisplay(0); for (int i = 0; i < 6; i++) { ShowDot(DicePic[value][i][0],DicePic[value][i][1], true); } } void DoStep(float &pos, float &dir, volatile byte &sp, bool check) { pos=pos+float(sp)/255*dir; if (check==true) { if (pos>7) { pos=7; dir=dir*(-1); } if (pos<1) { pos=1; dir=dir*(-1); } } // Geschwindigkeit wird pro Schritt langsamer // Velocity decreases every step if (sp>0) {sp=sp-1;} } void MoveDots() { //alle Wrfel einen Schritt weiter bewegen //move dice points one step further for (int i = 0; i < 6; i++) { //neue Koordinaten berechnen //calc new coordinates DoStep(DiceXpos[i],DiceXdir[i],DiceXspeed[i],true); DoStep(DiceYpos[i],DiceYdir[i],DiceYspeed[i],true); } //Wrfel-Augen anzeigen //show dice points lc.clearDisplay(0); for (int i = 0; i < 6; i++) { ShowDot(int(DiceXpos[i]), int(DiceYpos[i]), true); } } void setup() { //Der MAX7219 ist beim Starten im Power-Saving Modus, //er muss aufgeweckt werden. //The MAX7219 is in power-saving mode on startup, //we have to do a wakeup call lc.shutdown(0, false); //Helligkeit auf einen Mittelwert //Set the brightness to a medium values lc.setIntensity(0, 8); //und Display lschen //and clear the display lc.clearDisplay(0); randomSeed(analogRead(0)); DiceValue=0; for (int i = 0; i < 6; i++) { DiceXpos[i]=DicePic[7][i][0]; DiceYpos[i]=DicePic[7][i][1]; DiceXdir[i]=random(3)-1; DiceYdir[i]=random(3)-1; DiceXspeed[i]=random(126)+120; DiceYspeed[i]=random(126)+120; } //Pins einstellen //Setup the pins pinMode(PinTiltX, INPUT_PULLUP); pinMode(PinTiltY, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(PinTiltX),SetSpeedX,CHANGE); attachInterrupt(digitalPinToInterrupt(PinTiltY),SetSpeedY,CHANGE); lc.clearDisplay(0); timestamp=millis(); Mode=1; ShowDicePic(6); delay(1000); lc.clearDisplay(0); Mode=0; Serial.begin(9600); step=0; shakes=0; } void loop() { delay(50); step=step+1; if (step>20) { //1 sek ist vorbei //1 sec is over step=0; ShakesPerSecond=shakes; shakes=0; } if (Mode==0) { MoveDots(); if (millis()-timestamp>2000) { //seit 2 sek kein Schtteln mehr //there is no shaking since 2 sec Mode=1; DiceValue=random(6)+1; ShowDicePic(DiceValue); } } if (ShakesPerSecond>5) { //Es wird wieder geschttelt //shaking again Mode=0; } } 

Bagian Khusus dan Enclosure

Skematik

Ini sketsa saya untuk rangkaian.Dadu Arduino Teraktifkan Goyang dengan Matriks LED

Proses manufaktur

  1. Sejarah, Desain, dan Manufaktur Dadu: Dari Alat Kuno hingga Permainan Modern
  2. Panel Saklar & LED Berbasis Arduino untuk Microsoft Flight Simulator 2020
  3. Proyek Dadu Digital Arduino: Buat Generator Angka Acak berbasis LCD
  4. Membuat Spybot Arduino yang Dikontrol melalui Bluetooth
  5. FlickMote: Remote IR Kendali Gestur untuk Rumah Cerdas
  6. DIY Arduino TV B-Gone: Remote Universal untuk Semua TV
  7. Bangun Jam Master LED Kustom dengan Alarm – Terlihat dari Jarak 12 Meter
  8. Buat Game Tetris dengan Arduino Nano pada Matriks LED DIY 16×8
  9. Find Me: Pelacak Item Cerdas dengan Arduino dan Bluetooth
  10. Solusi Daya Teroptimasi untuk Proyek Arduino