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

Mengocok Dadu Arduino

Komponen dan persediaan

Arduino Nano R3
× 1
3mm 8x8 Dot Matrix MAX7219
× 1
Modul sakelar kemiringan dan antarmuka digital
× 1
Sakelar Geser
× 1
MT3608 DC 2A Meningkatkan Modul Daya 2v-24v ke 5v/ Konverter Peningkatan 9v/12v/28V
× 1

Alat dan mesin yang diperlukan

Besi solder (generik)
Pistol lem panas (generik)

Aplikasi dan layanan online

Arduino IDE
Autodesk Fusion 360

Tentang proyek ini

Sekitar setahun yang lalu putra saya dan Saya membangun dadu elektronik dengan Arduino dan beberapa LED. Ini masih merupakan proyek yang ideal untuk pemula. Kami telah belajar banyak tahun ini, jadi ini saatnya untuk memperbarui.

Dadu masih merupakan proyek awal yang sempurna. Fungsinya jelas bagi semua orang dan mudah untuk memahami berbagai bidang:mikrokontroler, elektronik sederhana, dan pengkodean.

Versi 2.0

Dadunya juga fantastis, untuk melangkah lebih jauh:menghubungkan area lain.

Saat ini ada komponen siap pakai untuk hampir semuanya. Ini paling baik dilihat saat mencari starter kit untuk Arduino atau Raspberry Pi. Komponen seperti LED, tombol tekan, dan semua jenis sensor dibangun di atas papan sirkuit sehingga dapat dihubungkan dan digunakan hanya dengan beberapa kabel ke GPIO.

Sederhana, namun cukup, printer 3D tersedia di ebay dengan harga kurang dari 140 €. Hampir semua variasi braket, pemasangan, atau casing dapat dibuat dengannya.

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

Sensor Kemiringan

Kami menerapkan dadu dengan cara yang sama sekali berbeda. Di dalam, Arduino Nano bekerja karena alasan ruang. Masih ada tombol on-off, tapi tidak ada tombol. Pemotongan dadu dilakukan dengan mengocok seluruh kubus.

Untuk tujuan ini, sensor kemiringan atau sensor getaran digunakan. Mereka bekerja seperti tombol. Di dalam tabung kaca, sebuah bola bergerak. Jika menyentuh kontak koneksi, sirkuit ditutup. Kontak ini, terkadang sangat singkat, digunakan untuk sinyal.

Pergerakan bola logam dapat didengar dengan cukup baik jika Anda menggoyangkan sensor.

Biasanya posisi pemasangan sangat menentukan untuk sensor kemiringan. Ini seharusnya memicu sinyal pada posisi sudut tertentu. Dalam kasus kami, ini terjadi dengan mengguncang kasing. Di sini situasinya tidak begitu penting, karena ketika bergetar ke segala arah, sebuah sinyal dipicu. Untuk amannya, kami menggunakan dua sensor dalam proyek, yang diatur dengan offset 90 ° satu sama lain. Jadi kami selalu mendapatkan sinyal goyang yang andal.

Interupsi

Agar dapat mengenali saat bergetar, pin input sensor kemiringan harus ditanyakan dalam sketsa. Namun, bergantung pada kapan ini terjadi dan apa lagi yang harus dilakukan sketsa, selalu ada kemungkinan bahwa satu atau lebih peristiwa tidak diperhatikan.

Solusi yang lebih baik adalah dengan menggunakan interupsi perangkat keras. Ini didefinisikan oleh fungsi attachInterrupt. Sebagai parameter, subprogram ditentukan yang akan dipanggil pada sinyal.

Arduino menyediakan dua interupsi perangkat keras:pin D2 dan D3.

Tampilan

Tentu saja, tampilan gambar dadu bisa lagi dilakukan dengan 7 LED individu. Tetapi juga lebih menarik untuk menggunakan komponen yang sudah jadi di sini.

Pilihan kami untuk proyek ini banyak pada matriks LED 8x8 dengan IC driver MAX7219. Dibutuhkan sedikit ruang, hanya membutuhkan sedikit uang dan mudah untuk dikodekan.

Tergantung di mana Anda membelinya, Anda harus menyolder bersama dan merakit bagian-bagiannya. Itu biasanya tidak masalah. Satu-satunya kesalahan yang dapat dilakukan adalah menempatkan matriks LED yang dipilin ke dalam soket.

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

Beberapa Fisika

Matriks LED seharusnya tidak hanya menampilkan gambar dadu sebagai hasilnya. Ini harus menawarkan beberapa efek pertunjukan. Keenam mata dadu bergerak pada matriks:mereka memantul dari tepi dan perlahan kehilangan kecepatan.

Melalui dua sensor kemiringan, kita dapat melihat seberapa banyak guncangan yang dilakukan. Informasi ini kami berikan pada mata dadu sebagai "kecepatan" untuk pergerakan mereka.

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

Catu Daya

Pertama, kami telah memasang dua sel tombol 3V CR2032 untuk alasan ruang. Pada awalnya itu terlihat cukup bagus juga. Matriks Arduino dan LED dimainkan dan semuanya bekerja. Namun, setelah beberapa menit beroperasi, kekuatan sel tombol akan rusak.

Jika Anda mematikan Arduino setelah setiap dadu, Anda bisa menggunakannya dengan cara itu. Itu tidak sempurna, jadi kami memasang dua baterai AAA yang lebih baik. Namun, ini hanya memberikan 3V bersama. Jadi kita masih membutuhkan konverter step-up, yang menaikkan tegangan menjadi 5V. Koneksi masih berlangsung di pin VIN Arduino.

Desain Perumahan

Pilihan terbaik untuk rumah yang sesuai adalah desain dan produksi sendiri melalui pencetakan 3D. Ada banyak aplikasi untuk konstruksi. Kami telah menggunakan Autodesk Fusion 360 untuk proyek ini. Ini memiliki fitur hebat dan pencetakan 3D terintegrasi dengan baik dengan perangkat lunak Print Studio. Jika Anda tertarik dengan Autodesk Fusion 360, Anda akan menemukan beberapa saran di artikel blog Parametric Enclosures (hanya bahasa Jerman).

Perumahan kami terdiri dari 3 bagian:

  • Huruf besar
  • Casing bawah dengan dudukan baterai untuk sel AAA
  • Sampul kaca (tidak harus)

Matriks LED terlihat lebih baik dengan penutup kaca plexiglass di depannya. Hal ini membuat tidak mungkin untuk mengenali LED mati dan gambar lebih jelas.

Sketsa

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

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

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

Tentu saja, semuanya mungkin di sini. Biarkan imajinasi Anda menjadi liar. Itu tidak selalu harus menjadi gambaran mata yang khas.

Komentar lain yang akan Anda temukan langsung di kode.

Perakitan

Kami meletakkan Arduino kami di strip soket, sebagai semacam perisai. Lima kontak matriks LED terhubung dengan cara yang sama. Jika Arduino terpusat, ruang paling baik digunakan. Oleh karena itu yang terbaik adalah menggunakan pin 5, 6, 7 untuk CS, CLK dan DIN untuk matriks. Di sini hanya titik solder yang harus dihubungkan. Sambungan ke 5V dan GND melalui jumper kecil.

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

Sekarang semuanya bisa dirakit. Plexiglass pertama-tama diperbaiki dengan lem panas. Kami melakukan hal yang sama dengan matriks LED. Setitik kecil lem panas sudah cukup.

Selanjutnya, sakelar hidup / mati dipasang, diamankan dengan lem panas dan terhubung ke kabel yang sesuai.

Memasang Catu Daya

Catu dayanya agak kacau. Bergantung pada opsi dan komponen yang Anda miliki, kontak untuk plus dan minus dapat disesuaikan.

Kami menggunakan pegas dan pin dari kompartemen baterai bekas. Untuk menempelkan ke bagian bawah casing kami menggunakan kabel dan sedikit lem panas lagi.

Konverter peningkat step-up paling baik disesuaikan ke kira-kira. 5V sebelum pemasangan. Untuk itu resistensinya harus dipelintir sedikit.

Kemudian huruf besar dan huruf kecil disatukan. Karena kecocokan 0,1 mm, menyambungkan bersama tanpa pengamanan lebih lanjut sudah cukup. Dan masih bisa dibuka lagi untuk ganti baterai.

Dan kemudian selesai!

Permainan dadu 2.0 bisa dimulai!

Yang Anda Butuhkan

  • Arduino Nano (atau ESP8266)
  • 2 x sensor kemiringan (dengan resistor terintegrasi)
  • Matriks LED 8x8 dengan IC MAX7219, SPC
  • Strip soket
  • Tombol Nyala / Mati
  • PCB
  • 2 x baterai AAA

Informasi Lebih Lanjut

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

Maaf blog yang diperluas ini hanya tersedia dalam bahasa Jerman;-)

Kode

  • wuerfel8x8.ino
wuerfel8x8.inoArduino
Kode untuk dadu bergoyang
/*Artikel Blog:Schttel-Wrfel mit LED Matrix dan Bewegungssimulationhttps://techpluscode.de/schuettel-wuerfel-mit-led-matrix-und-bewegungssimulation/techpluscode.deHak Cipta 2019 von Thomas Angielsky *///Bibliothek fr die Ansteuerung der 8x8 LED-Matrix einbinden//Sertakan lib untuk matriks LED 8x8#include "LedControl.h"int PinTiltX =2; //Pin fr Tiltsensor Xint PinTiltY =3; //Pin dari Tiltsensor Y//Pin dari LED-Matrix//Pin dari matriks LEDint PinCLK =7; int PinCS =6;int PinDIN =5;LedControl lc =LedControl(PinDIN, PinCLK, PinCS, 1);//Koordinat der Wrfelaugen di der LED-Matrix//Koordinat titik Dadu dalam matriks LEDint DicePic[8][ 6][2] ={ { //lihat Matriks dan Posisi Awal:{9,9}, ///1. Punk {9,8}, //2. Punk {9,7}, ///3. Punk {9,6}, //4. Punk {9,5}, //5. Punk {9,4} //6. Punk }, { //1:{4,4}, //. Punk {-1,-1}, //2. Punk {-1,-1}, ///3. Punk {-1,-1}, //4. Punk {-1,-1}, //5. Punk {-1,-1} //6. Punk }, { //2:{2,2}, //. Punk {6,6}, //2. Punk {-1,-1}, ///3. Punk {-1,-1}, //4. Punk {-1,-1}, //5. Punk {-1,-1} //6. Punk }, { //3:{2,6}, //. Punk {6,2}, //2. Punk {4,4}, ///3. Punk {-1,-1}, //4. Punk {-1,-1}, //5. Punk {-1,-1} //6. Punk }, { //4:{2,2}, //. Punk {2,6}, //2. Punk {6,2}, ///3. Punk {6,6}, //4. Punk {-1,-1}, //5. Punk {-1,-1} //6. Punk }, { //5:{2,2}, //. Punk {2,6}, //2. Punk {6,2}, ///3. Punk {6,6}, //4. Punk {4,4}, //5. Punk {-1,-1} //6. Punk }, { //6:{2,1}, //. Punk {2,4}, //2. Punk {2,7}, ///3. Punk {6,1}, //4. Punk {6,4}, //5. Punk {6,7} //6. Punkt }, { //Mulai:{-1,-1}, //. Punk {-1,-1}, //2. Punk {-1,-1}, ///3. Punk {-1,-1}, //4. Punk {-1,-1}, //5. Punk {-1,-1} //6. Punkt } };//Variablen der Wrfelaugen:Posisi, Richtung, Geschwindigkeit fr X und Y//Variabel dadu:posisi, arah, kecepatan untuk X dan Yfloat DiceXpos[6];float DiceXdir[6];byte volatil DiceXspeed[ 6];float DiceYpos[6];float DiceYdir[6];byte volatil DiceYspeed[6];int DiceValue;stempel waktu panjang yang tidak ditandatangani;Mode byte;int volatile shakes;int ShakesPerSecond;int step;void InterruptChecks() { //Schttel -Anzahl zhlen //Hitung Getar getar=getar+1; //Serial.println(milis()); timestamp=millis();}void SetSpeedX() { if (Mode==0) { //semua Wrfel di X beschleunigen //Percepat dadu di X for (int i =0; i <6; i++) { if (DiceXspeed[i]<255) {DiceXspeed[i]=DiceXspeed[i]+5;} } } InterruptChecks();}void SetSpeedY() { if (Mode==0) { //semua Wrfel di Y beschleunigen / /Percepat dadu di 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, ketika x/y dalam matriks if ((x<8) dan (y<8) dan ( x>=0) dan (y>=0)) { lc.setLed(0, x, y, mati); }}void ShowDot(int x, int y, bool onoff) {//Wrfel-Auge anzeigen oder ausblenden//Tampilkan atau sembunyikan titik dadu ShowLed(x-1, y-1, onoff); ShowLed(x, y-1, mati); ShowLed(x-1, y, mati); ShowLed(x, y, onoff);}void ShowDicePic(int nilai) {//Wurf anzeigen//Tampilkan diceboolean selesai; //alle Punkte von der aktuellen Position aus zur Zielposition von DiceValue bewegen //memindahkan semua titik dari posisi sekarang ke tujuan DiceValue untuk (int i =0; i <6; i++) { DiceXspeed[i]=100; Kecepatan Dadu[i]=100; //Menulis fr X berechnen //Menghitung nilai x DiceXdir[i]=0; if (int(DiceXpos[i])>DicePic[nilai][i][0]) {DiceXdir[i]=-1;} else if (int(DiceXpos[i])DicePic[nilai][i][1]) {DiceYdir[i]=-1;} else if (int(DiceYpos[i])7) { pos=7; dir=dir*(-1); } jika (pos<1) { pos=1; dir=dir*(-1); } } // Geschwindigkeit wird pro Schritt langsamer // Kecepatan berkurang setiap langkah jika (sp>
0) {sp=sp-1;}}void MoveDots() { //semua Wrfel einen Schritt weiter bewegen //memindahkan dadu poin satu langkah selanjutnya untuk (int i =0; i <6; i++) { //neue Koordinat berechnen //hitung koordinat baru DoStep(DiceXpos[i],DiceXdir[i],DiceXspeed[i],true); DoStep(DiceYpos[i],DiceYdir[i],DiceYpos[i],true); } //Wrfel-Augen anzeigen //tampilkan poin dadu lc.clearDisplay(0); for (int i =0; i <6; i++) { ShowDot(int(DiceXpos[i]), int(DiceYpos[i]), true); } }void setup() { //Der MAX7219 ist beim Mulai dalam Modus Hemat Daya, //er muss aufgeweckt werden. //MAX7219 dalam mode hemat daya saat startup, //kita harus melakukan panggilan bangun lc.shutdown(0, false); //Helligkeit auf einen Mittelwert //Menyetel kecerahan ke nilai sedang lc.setIntensity(0, 8); //und Tampilan lschen //dan hapus tampilan lc.clearDisplay(0); randomSeed(analogRead(0)); Nilai Dadu=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; Kecepatan Dadu[i]=random(126)+120; } //Pin einstellen //Setup pin PinMode(PinTiltX, INPUT_PULLUP); pinMode(PinTiltY, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(PinTiltX),SetSpeedX,CHANGE); attachInterrupt(digitalPinToInterrupt(PinTiltY),SetSpeedY,CHANGE); lc.clearDisplay(0); stempel waktu=milis(); Modus=1; TampilkanDicePic(6); penundaan (1000); lc.clearDisplay(0); Modus=0; Serial.begin(9600); langkah=0; getar=0;}void loop() { delay(50); langkah=langkah+1; if (langkah>20) { //1 sek ist vorbei //1 dtk selesai langkah=0; ShakesPerSecond=getar; getar=0; } if (Mode==0) { MoveDots(); if (millis()-timestamp>
2000) { //seit 2 detik kein Schtteln mehr //tidak ada getaran sejak 2 detik Mode=1; Nilai Dadu=acak(6)+1; ShowDicePic(Nilai Dadu); } } if (ShakesPerSecond>5) { //Es wieder geschttelt //mengguncang lagi Mode=0; }}

Suku cadang dan penutup khusus

Skema

Ini sketsa saya untuk sirkuit.

Proses manufaktur

  1. Dadu
  2. Beralih/Panel LED dengan Arduino untuk FS2020
  3. Arduino Digital Dice
  4. Arduino Spybot
  5. FlickMote
  6. TV Buatan Sendiri B-Gone
  7. Jam Master
  8. Game Arduino Nano Tetris di Matriks 16x8 Buatan Sendiri
  9. Temukan Saya
  10. Arduino Power