Kit Mesin Slot Alien Berbasis ATmega328P
Komponen dan Perlengkapan
- Microchip Technology ATmega328 (ATmega328P-PU) – 2 unit
- Seven Segment display dengan 8 digit – 1 unit
- 8x8 matrix, 4 segment, MAX7219 – 1 unit
- I2C 2004 Serial Blue Backlight LCD Module 20 X 4 – 1 unit
- Breadboard (umum) – 2 unit
- Momentary Contact Buttons – 6 unit
- RGB Diffused Common Cathode – 1 unit
- LED (umum) – 1 unit
- Resistor 10k ohm – 6 unit
- Resistor 1k ohm – 4 unit
- Resistor 330 ohm – 3 unit
- 16 MHz Crystal – 2 unit
- Slide Switch – 1 unit
- Buzzer – 2 unit
- Capacitor 22 pF – 4 unit
- 0.10 uF Capacitor – 6 unit
- Capacitor 100 nF – 1 unit
- Capacitor 10 µF – 2 unit
- Linear Regulator (7805) – 1 unit
- Jumper wires (umum) – 1 set
- A 5v power supply – 1 unit
- Arduino Mini USB serial adapter – 1 unit
- FTDI USB to TTL Serial Adapter – 1 unit
- Solder-able Breadboard – 1 unit
- SparkFun Solder-able Breadboard - Mini – 1 unit
- Pocket Solder- 60/40 Rosin Core 0.031" diameter – 1 unit
- Clear Plastic Waterproof Electronic Project Box Enclosure – 1 unit
Alat yang Diperlukan
- Soldering iron (umum)
- Helping Hands
Aplikasi dan Layanan Online
- Arduino IDE
- Timer Free Tone Library
- LED Control Library
- LiquidCrystal/LCD Library
- LiquidCrystal I2C Library
Tentang Proyek Ini
Mesin Slot Alien Berbasis ATmega
Proyek ini adalah implementasi saya dari mesin slot ber tema alien menggunakan dua mikrokontroler ATmega328P-PU. Saya terinspirasi oleh Cory Potter's Alien Invasion Slot Machine, dan saya ingin mengembangkan ide tersebut. Mesin slot ini hanya untuk hiburan dan tujuan edukasi. Saya mencoba sebaik mungkin untuk membuat game mensimulasikan mesin slot nyata seketat mungkin. Proyek saat ini menggunakan breadboard. Kotak pelindung akan ditambahkan segera setelah bagian-bagian tiba dari China dan saya telah memiliki kesempatan untuk menyolder semuanya. Proyek ini memakan waktu sekitar dua bulan bagi saya untuk dibuat di waktu luang saya. Bagian yang paling sulit dari pembangunan bagi saya adalah memahami semua matematika yang terlibat dalam membuat game berperilaku seperti yang diharapkan industri kasino dari mesin slot sederhana setelah setengah miliar simulasi.
Cara Kerja Game
Game memiliki tiga gulungan dengan simbol unik 25 yang sama muncul di setiap gulungan (salah satu dari 4 matriks 8x8 pada komponen dengan 4 matriks 8x8 tidak digunakan.) Ada lima cara berbeda untuk menang. Jika Anda mendapatkan tiga pesawat luar angkasa, Anda menang jackpot. Jika Anda mendapatkan satu atau dua pesawat luar angkasa Anda juga menang beberapa kredit. Jika Anda mendapatkan dua atau tiga simbol yang cocok Anda juga menang. Jika Anda mendapatkan pesawat luar angkasa dan dua simbol yang cocok, seperti digambarkan di bawah ini, game membayar berdasarkan acara kemenangan dengan probabilitas terendah/pembayaran tertinggi; dengan kata lain acara kemenangan bersifat eksklusif, Anda tidak bisa menang dengan dua cara berbeda pada satu kali putaran gulungan. Ini membuat pemrograman sedikit lebih sederhana. Ada banyak tantangan lain bagi saya.
Fitur
Mesin slot memiliki beberapa fitur menarik yang diakses melalui layar LCD I2C 20 x 4 menggunakan dua tombol navigasi dan satu tombol pilih. Tombol-tombol menggunakan algoritma de-bouncing yang cukup canggih yang memanfaatkan kemampuan interupsi eksternal mikrokontroler. Ini adalah menu utama.
Karena ada enam baris dalam menu Anda harus menggulir ke bawah menggunakan tombol 'navigate down' untuk melihat seluruh menu. Ada tombol khusus untuk 'memutar' gulungan. Selain itu Anda juga dapat memilih 'Play' dari menu utama. Anda dapat mengubah taruhan Anda kapan saja.
Fitur yang paling menarik adalah game dapat dimainkan dalam mode 'auto'; yaitu Anda memilih opsi mode auto dari menu pengaturan pada layar LCD dan game bermain berulang kali sampai Anda memilih opsi lagi atau 1 juta putaran telah terjadi. Ini adalah fungsi kritis untuk pengujian game. Anda juga dapat menonaktifkan suara di sini.
Melalui menu pada LCD juga memungkinkan untuk melihat semua metrik yang dihasilkan dari simulasi. Metrik ini juga dioutput dan dapat dilihat di serial monitor jika Anda menghubungkan mikrokontroler Anda ke monitor melalui pin RX dan TX menggunakan kabel USB. Daftar metrik yang ditampilkan mencakup saldo kredit Anda, jumlah kali Anda mencapai jackpot, dan jumlah kali Anda menang kredit dengan cara lain. Ini memungkinkan saya untuk menjalankan simulasi berdasarkan berbagai pembayaran, dan berguna untuk menetapkan dan membuktikan tabel pembayaran. Tabel pembayaran itu sendiri tidak dapat dikonfigurasi; setelah diatur seharusnya tetap sama. Saya pikir akan mungkin untuk membuat indeks volatilitas dapat dikonfigurasi dengan menggunakannya untuk mendorong tabel pembayaran, tetapi itu akan memerlukan banyak pekerjaan lebih.
Opsi Reset memungkinkan Anda untuk mengatur ulang semua metrik (kecuali tulisan EEprom) kembali ke nol. Chip akan bekerja untuk sekitar 100.000 tulisan ke EEprom. Karena ada 512k EEprom yang tersedia pada chip, dan kita hanya menggunakan sebagian kecil dari itu, akan mungkin untuk benar-benar memindahkan lokasi metrik di EEprom saat kita mendekati 100.000 tulisan. Saya belum menerapkan fitur ini tetapi itu akan menjadi cara untuk memperpanjang umur chip.
Akhirnya, hold, atau persentase dari setiap taruhan yang dipertahankan oleh rumah (seiring waktu), dapat dikonfigurasi. Ingatlah setelah melakukan operasi Reset hold perlu diatur lagi.
Saldo kredit pemain selalu ditampilkan pada layar seven segment delapan digit.
Matematika
Banyak pekerjaan dilakukan untuk memastikan game realistis. Probabilitas dihitung dan tabel pembayaran dirancang sehingga game memiliki Volatility Index (VI) yang dapat diterima. Indeks ini mengukur seberapa dapat diprediksi perilaku mesin. Mesin dengan VI yang lebih tinggi cenderung membuat pemain (atau rumah) lebih banyak uang. Ini kurang dapat diprediksi daripada mesin dengan VI yang lebih rendah. Benar bahwa game yang sama persis akan ada di kasino yang berbeda (atau bahkan kasino yang sama) dengan VI yang berbeda. VI diubah dengan memanipulasi jadwal pembayaran. Untuk game kami, berikut adalah probabilitas dan pembayaran untuk setiap jenis kemenangan.
Ingatlah bahwa odds (kanan jauh) dan pembayaran (kiri jauh) sangat berbeda. Jika game ini diprogram sehingga tabel pembayaran cocok atau mengikuti odds secara dekat, VI-nya akan terlalu tinggi. Hold dihitung sebagai persentase dari pembayaran, dan adalah bagian dari taruhan yang dipertahankan oleh rumah/kasino. Seperti yang dinyatakan Anda dapat mengatur hold melalui menu LCD. Ingatlah bahwa hukum yang berbeda di berbagai yurisdiksi memiliki regulasi yang mengatur hold maksimum untuk mesin slot di yurisdiksi tersebut. Hold maksimum yang umum adalah 15%. Pahamilah bahwa menetapkan hold ke maksimum yang diizinkan oleh hukum tidak selalu memaksimalkan keuntungan yang dihasilkan oleh mesin tersebut, karena hold yang lebih tinggi mungkin menurunkan minat pemain untuk menggunakan mesin. Saya curiga, namun, banyak pemain mengabaikan hold, yang biasanya tertanam dalam cetakan kecil, dan kurva permintaan untuk mesin relatif vertikal (berarti biaya penggunaan mesin, hold, sebagian besar diabaikan), dan keuntungan yang dihasilkan oleh mesin jauh lebih bergantung pada lokasi atau penempatan mesin serta desain game itu sendiri. Tapi itu hanya spekulasi. Saya yakin ada beberapa penebas tebak cerdas di luar sana yang sensitif terhadap hold.
Spreadsheet, yang tersedia dengan kode, dengan tiga tabel dibuat untuk membuktikan bahwa game bekerja dengan benar (tabel pertama muncul di atas). Langkah pertama dalam membangun spreadsheet adalah untuk menghitung odds dari setiap jenis kemenangan dengan akurat (kolom Calculated Probability).
Three Spaceships
Probabilitas bahwa tiga pesawat luar angkasa akan muncul adalah invers dari total kombinasi yang mungkin. Jumlah kombinasi kemenangan, satu, dibagi total kombinasi yang mungkin, 15625. Ada 25 simbol unik pada setiap gulungan, jadi probabilitas adalah 1 / (25 x 25 x 25), atau 0.000064. Itu membuat odds, 1/probability - 1, sama 1 hingga 15624. Saya belajar cara menghitung odds dari probabilitas di sini.
Three Symbols Match (except spaceships)
Probabilitas bahwa tiga simbol, selain pesawat luar angkasa, akan cocok adalah 24 (jumlah simbol unik pada setiap gulungan dikurangi pesawat luar angkasa) dibagi jumlah kombinasi yang mungkin. 24 adalah pembilang karena ada 24 kombinasi tiga simbol yang cocok. 24/15625 = 0.001536. Itu membuat odds sekitar 1 hingga 650.04.
Two Spaceships
Ada 24 x 3 total kombinasi dari dua pesawat luar angkasa yang cocok. Itu karena ada tiga cara untuk membuat dua pertandingan pesawat luar angkasa. Berikan X = pesawat luar angkasa dan Y = simbol lain, XXY, XYX, dan YXX. Ada 24 nilai yang mungkin untuk Y. Jadi 24 X 3 / 15625 = 0.004608. Odds adalah 1 hingga 216.01.
One Spaceship Appears
Untuk setiap gulungan ada 24 x 24 kombinasi yang mungkin untuk pesawat luar angkasa tunggal muncul.
Sebuah pesawat luar angkasa dapat muncul pada gulungan mana pun, jadi Anda perlu mengalikan jumlah kombinasi yang tersedia pada gulungan tunggal dengan tiga gulungan. Jadi probabilitas adalah 24 x 24 x 3 / 15625 = 0.110592. Odds adalah 1 hingga 8.04.
Two Symbols Match
Untuk dua simbol yang diberikan, selain pesawat luar angkasa, ada 23 (25 dikurangi satu pesawat luar angkasa dikurangi satu simbol yang akan membuatnya menjadi pertandingan tiga simbol) x 3 gulungan x 24 simbol yang bukan pesawat luar angkasa. Probabilitas adalah (23 X 3 X 24)/15625 = 0.105984. Odds adalah 1 hingga 8.44.
Sekarang saya memiliki probabilitas untuk setiap jenis kemenangan saya dapat menggunakan spreadsheet untuk merancang tabel pembayaran dengan cara yang membuat volatility index dapat diterima (< ~20). Untuk memahami cara melakukannya saya sangat bergantung pada posting ini. Saya memasukkan nilai di kolom House Income dari tabel pertama, menggunakan proses coba dan error, sampai VI di bawah 20 dan Total di sel J10 mendekati nol sebanyak mungkin. Dengan nilai-nilai tersebut saya menetapkan THREE_SPACESHIP_PAYOUT, THREE_SYMBOL_PAYOUT, TWO_SPACESHIP_PAYOUT, ONE_SPACESHIP_PAYOUT, dan TWO_SYMBOL_PAYOUT di SlotMachine.ino sesuai. Kemudian, pertama dengan menggunakan hold nol persen, saya menjalankan lima simulasi 1.000.001 putaran, dan memasukkan nilai dari menu metrik ke baris dan kolom yang sesuai di tabel Actual Results (tabel ketiga).
Saya mengamati bahwa Probabilitas Actual secara dekat melacak Probabilitas yang Dihitung, dan kolom Pct Diff Prob wajar. Saya juga mencocokkan nilai di baris House Pays dengan rentang nilai dari kolom Income High dan Income Low di baris 1.000.000 dari tabel Understanding Potential Income (tabel kedua), dan mengamati bahwa nilai dari tabel Actual Results berada di dalam rentang yang ditentukan oleh kolom Income High dan Income Low. Tabel Understanding Potential Income menentukan rentang pendapatan yang diharapkan untuk nilai hold tertentu dengan interval kepercayaan 90%. Dalam contoh di bawah ini hold diatur ke 0, sehingga kemungkinan menang sama dengan kemungkinan kalah. Jika Anda bermain game 1 juta kali ada kemungkinan 90% bahwa Income akan berada antara 16.432 dan - 16.432.
Setelah bekerja dengan spreadsheet dan program dan menjalankan jutaan simulasi saya dapat menyelesaikan kekurangan dalam program, untuk menyelesaikan kekurangan dalam spreadsheet dan untuk menetapkan nilai untuk tabel pembayaran yang menjaga VI < 20. Akhirnya saya mengubah hold menjadi 15% dan menjalankan serangkaian 5 simulasi lagi untuk memverifikasi bahwa pendapatan game sejalan dengan harapan jika akan diterapkan dalam situasi dunia nyata Berikut adalah tabel pendapatan untuk hold 15%.
Dan berikut adalah hasil aktual.
Jika Anda ingin benar-benar memahami semua matematika di balik pengaturan nilai pembayaran saya mendorong Anda untuk memeriksa rumus dalam spreadsheet. Jika Anda menemukan kesalahan silakan beri tahu saya; saya bukan matematikawan (atau programmer C) oleh profesi, jadi disclaimer standar berlaku.
Kode
Saya tidak akan mengajarkan kode Anda baris demi baris. Ini sangat banyak dikomentari dan tidak ada yang rumit di mana pun. Jadi gunakan kekuatan, baca sumbernya. Jika Anda tidak terbiasa dengan manipulasi register pada ATmega386 dan ingin memahami lebih banyak tentang cara menulis kode untuk mikrokontroler AVR tanpa bergantung pada pustaka Arduino, saya mendorong Anda untuk mendapatkan salinan buku Elliott William yang luar biasa, "Make: AVR Programming". Jika Anda berlangganan safaribooksonline.com, Anda akan menemukannya di sana. Jika tidak, itu tersedia di sini di Amazon. Dalam program-program ini saya menggunakan fungsi Arduino di beberapa tempat, dan di tempat lain saya memanipulasi register secara langsung. Maaf atas itu.
Hal pertama yang mungkin Anda perhatikan adalah program ini menggunakan variabel global secara ekstensif. Ada diskusi yang baik tentang topik ini di Stack Overflow. Saya tidak akan mempromosikan atau membela penggunaan berlebihan variabel global di sini, tetapi saya mendorong Anda untuk memahami semua perspektif tentang topik ini dan mengakui bahwa ada argumen yang kuat untuk menggunakannya pada proyek aplikasi embedded dengan satu programmer dan sumber daya yang terbatas.
Saya memanfaatkan beberapa perpustakaan, tanpa yang proyek ini akan mustahil bagi saya. Perpustakaan Timer Free Tone digunakan untuk memantulkan frekuensi yang berbeda melalui speaker piezo pasif. Di SlotMachine.h Anda akan memperhatikan bahwa ada sekelompok defines untuk nada musik. Anda dapat menggunakannya untuk menyusun melodi apa pun yang Anda inginkan. Saya hanya menggunakan beberapa dari mereka untuk memutar bagian dari tema dari "Close Encounters of the Third Kind" saat mikrokontroler SlotMachine dimulai dan fungsi setup dijalankan. Saya memilih perpustakaan timer free karena saya pikir saya akan membutuhkan timer untuk sesuatu, tetapi akhirnya saya tidak menggunakan timer sama sekali. Ini tersedia jika Anda membutuhkannya. Perpustakaan LED Control digunakan di SlotMachine.ino dan slotCreditDisplaySlave.ino. Di yang pertama digunakan untuk mengontrol tiga matriks LED 8 x 8 yang berfungsi sebagai gulungan mesin slot. Di slotCreditDisplaySlave.ino perpustakaan memfasilitasi akses ke layar seven segment delapan digit yang menampilkan saldo kredit pemain. Ini akan menjadi waktu yang baik untuk menyebutkan bahwa saya mencoba untuk menghindari penggunaan chip AVR lain (ATmega328) hanya untuk menampilkan saldo kredit, tetapi saya tidak dapat menemukan cara untuk mengontrol matriks 8 x 8 dan layar seven segment delapan digit dari satu mikrokontroler. Jadi pada akhirnya saya harus membuat slave I2C untuk melayani tujuan itu. Pasti kasus bahwa Anda dapat menggunakan AVR yang lebih murah untuk melakukan pekerjaan menampilkan saldo kredit, tetapi untuk menjaga kesederhanaan untuk artikel ini saya memilih untuk menggunakan chip ATmega328P-PU lain. Di sisi yang cerah, saat Anda menang jackpot besar kredit akan terus bertambah di layar kredit slave sementara Anda dapat lanjutkan memutar kembali. Perpustakaan LiquidCrystal/LCD dan LiquidCrystal I2C diperlukan untuk memfasilitasi akses ke layar LCD 20 baris x 4 baris. Seperti yang disebutkan Anda dapat mengganti dengan LCD 20 x 2 jika itu yang Anda miliki, hanya dengan mengubah definisi LCD_SCREEN_HEIGHT dari 4 menjadi 2. Pastikan layar LCD yang Anda dapatkan untuk proyek ini mampu I2C. Jika tidak Anda perlu mendapatkan papan serial I2C SPI adapter untuk adapter plate LCD1602, nomor bagian PCF8574, yang digambarkan di bawah ini, dan menyoldernya ke layar LCD1602 Anda.
Game dapat berada dalam sejumlah keadaan yang sama, dan variabel machineState melacak keadaan. Misalnya, dapat 'spinning' dan dalam 'auto mode' pada saat yang sama. Saya tidak benar-benar menggunakan konsep ini secara ekstensif di dalam program; tidak sebanyak yang saya lakukan dalam program lain, setidaknya. Namun ada beberapa cabang kondisional berdasarkan keadaan. Ada juga konsep acara, dan acara dikirim dan ditangani dalam fungsi ProcessEvents. Ini mungkin akan lebih baik jika ada antrian acara, tetapi saya tidak pergi sejauh itu.
Ada daftar kekurangan yang diketahui dan 'to dos' di bagian komentar SlotMachine.ino. Kadang-kadang saat Anda 'memutar' gulungan (dengan menekan tombol spin atau memilih opsi 'Play' dari menu LCD) satu atau bahkan dua gulungan tidak bergerak. Itu karena generator angka acak di belakang layar memilih simbol yang sudah ditampilkan untuk gulungan tersebut. Ini dapat diperbaiki untuk membuat game tampak lebih realistis, tetapi ini bukan benar-benar kekurangan. Gulungan tidak selesai berputar dari kiri ke kanan, seperti yang dilakukan pada sebagian besar mesin slot. Ini dilakukan dengan sengaja, untuk menjaga kesederhanaan. Akan mungkin untuk membuat gulungan selesai berputar dari kiri ke kanan dengan mengurutkan tiga angka acak yang dihasilkan untuk setiap putaran dalam urutan menaik sebelum gulungan sebenarnya berputar, dan saya tidak mengacarinya.
Sejauh 'todos', pada suatu titik saya ingin menambahkan perlindungan brown out dan watch dog protection, hanya untuk melalui latihan dan belajar cara melakukannya. Ingatlah bahwa 80% ruang yang dialokasikan untuk variabel global sudah terpakai. Ini adalah titik di mana hal-hal dapat mulai menjadi tidak stabil dengan ATmega386 dan program Arduino. Kami berada di titik itu dengan program ini. Saya harus melakukan beberapa anggaran untuk menjaga semuanya tetap berfungsi, dan saya tidak akan merekomendasikan menambahkan variabel global tambahan ke program. Ini akan membuat sulit untuk menambahkan fungsionalitas lebih lanjut ke bagian Settings menu, misalnya, karena menu mengkonsumsi banyak ruang variabel global. Saya coba untuk menyelesaikan masalah variabel global dengan memindahkan menu ke memori program, tetapi saya tidak dapat mengurangi ruang yang digunakan oleh globals, saya pikir karena kompiler perlu mem-pallocate semua ruang untuk menu bagaimanapun. Pekerjaan lebih banyak dapat dilakukan untuk memperindah game sedikit; saya dapat menggunakan lebih banyak LED RGB dan piezo buzzer, merayakan kemenangan sedikit lebih, mungkin membuat suara yang lebih baik saat uang hilang, tetapi saya akan meninggalkan itu kepada siapa pun yang ingin bereksperimen.
Saya harus mendesain semua simbol untuk game. Beberapa dari mereka akan mengingatkan Anda pada game arcade klasik 'Space Invaders', dan saya mungkin telah meminjamnya dari mana-mana. Sisanya saya desain sendiri, dan beberapa dari mereka kurang terlihat profesional. Saya menggunakan situs ini untuk membantu mendesain simbol. Jika Anda ingin menyesuaikan simbol Anda dapat melakukannya di SlotMachine.h, dan bermain-main dengan mereka sesuai keinginan Anda. Ini tidak akan mempengaruhi logika program. Untuk simbol saya mewakili angka dalam basis 2 / biner sehingga Anda dapat mendesainnya dengan editor teks Anda.
Kode tersedia di sini di GitHub.
Membangun Mesin Slot
Saya menggunakan papan FTDI USB ke serial untuk memprogram kedua mikrokontroler ATmega328P-PU secara in-place. Koneksi ini tidak digambarkan dalam skematik Fritzing. Untuk instruksi tentang cara menyiapkan papan breakout FTDI pada breadboard tanpa solder Anda ikuti tautan ini. Anda mungkin perlu mencari di google sedikit untuk menyiapkan. Saya percaya posting ini juga membantu saya troubleshoot masalah yang saya hadapi saat mencoba membuat mikrokontroler secara otomatis reset di awal pemrograman melalui papan breakout FTDI. Ingatlah untuk menempatkan kapasitor 100 nF dalam seri dengan koneksi antara pin reset ATmega328 (posisi 1/PC6/reset pin) dan RTS pada papan breakout FTDI sehingga Anda tidak perlu menahan tombol reset saat Anda ingin memprogram chip. Jika Anda memilih untuk menggunakan Arduino Uno Anda untuk memprogram chip, instruksi ditemukan di sini. Jika Anda hanya akan memprogram chip sekali dengan kode yang disediakannya mungkin paling cepat dan mudah untuk hanya memprogramnya dari Arduino Uno.
Kedua mikrokontroler diatur dengan chip 'Arduino' (ATmega328P-PU) pada breadboard. Jika Anda berencana untuk akhirnya membangun proyek ini dengan menyolder komponen bersama, atau jika Anda hanya ingin menyalin apa yang telah saya lakukan di sini saat Anda breadboard proyek, Anda akan ingin memahami cara mengatur Arduino pada breadboard. Ikuti instruksi yang luar biasa di sini untuk melakukan itu. Instruksi ini mencakup prosedur yang perlu diikuti jika Anda perlu memuat bootloader Arduino pada kedua chip, yang Anda kemungkinan besar perlu lakukan jika Anda membeli chip dari pemasok di China dan/atau melalui e-bay, seperti yang disarankan di dalam daftar bagian. Untuk melakukannya Anda akan memerlukan programmer AVR seperti AVRISP mk II atau USBTiny ISP. Anda juga dapat hanya menggunakan Arduino Anda, jika Anda memiliki satu, untuk membakar bootloader. Semua opsi Anda dijelaskan saat Anda mengikuti tautan di atas.
Bagian
Jika Anda memiliki beberapa komponen yang lebih kecil dalam inventaris Anda sudah (resistor, kapasitor, kristal, dan regulator) maka Anda dapat mencoba menghabiskan < $40 pada bagian untuk pembangunan ini. Jika Anda menambahkan biaya kotak pelindung dan perfboard, itu mungkin mendekati $60. Saya telah mencoba untuk menyertakan pemasok yang saya gunakan untuk semua bagian. Saya menggunakan AliExpress.com, Amazon.com, dan ebay.com untuk sebagian besar bagian dan alat saya, dan semua bagian ini mudah didapat di salah satu lokasi tersebut. Juga, jika Anda tidak ingin membeli layar LCD 20 x 4, dan Anda sudah memiliki layar LCD 20 x 2 yang tersedia, Anda dapat dengan mudah mengubah LCD_SCREEN_HEIGHT di SlotMachine.ino dari 4 menjadi 2.
Ini adalah kotak pelindung yang saya pesan, yang akan saya sisipkan komponen-komponen:
Barang ini tersedia di sini untuk $13.80. Itu sedikit mahal menurut saya. Saya berharap semuanya akan muat dan bagian atas sangat transparan sehingga saya tidak perlu memotong lubang di dalamnya untuk melihat gulungan dan layar saldo kredit. Kami akan melihat bagaimana itu ketika tiba! Saran diterima.
Perangkat Lunak
Semua perpustakaan yang terdaftar di bagian bagian akan perlu diinstal ke lingkungan pengembangan Arduino Anda jika Anda ingin mengkompil kode sehingga Anda dapat mengunggahnya ke chip ATmega Anda. Halaman ini menjelaskan cara menginstal perpustakaan Arduino.
Alat Tangan
- Soldering iron
- Helping Hands
Skematik
Skematik Fritzing tersedia di sini, dan file .fzz disertakan dengan kode di GitHub.
Di bawah ini saya menyertakan beberapa arahan tentang kabel mikro-kontroler, karena diagram Fritzing ramai. Ini tidak mewakili semua koneksi yang diperlukan, tetapi seharusnya dapat menghapus kebingungan. Saya tidak melengkapi semua pin yang tidak digunakan dengan ground, tetapi saya mungkin akan melakukannya dalam produk akhir. Jika Anda kesulitan mengikuti diagram Fritzing terkait pengaturan sirkuit untuk suplai daya, ingatlah untuk melihat di sini, di bawah Menambahkan sirkuit untuk suplai daya. Ingatlah untuk menambahkan saklar antara ground rail breadboard dan sirkuit suplai daya sehingga Anda dapat mematikan dan menyala sirkuit tanpa harus mencabut atau memutuskan suplai daya. Itu akan penting saat kita meletakkan semuanya ke dalam kotak pelindung.
Slot Machine
- Pin 1 - RTS pada papan breakout FTDI USB ke Serial, tombol reset
- Pin 2 - TXD pada papan breakout FTDI USB ke Serial
- Pin 3 - RXD pada papan breakout FTDI USB ke Serial
- Pin 4 - resistor 1K ohm - tombol 'spin' momentary
- Pin 5 - resistor 330 ohm - pin biru LED RGB
- Pin 6 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 7 VCC - rail daya breadboard, kapasitor 0.1uF
- Pin 8 GND - rail ground breadboard, kapasitor 0.1uF
- Pin 9 XTAL1 - kristal 16MHz, kapasitor 22pF ke rail ground breadboard
- Pin 10 XTAL2 - kristal 16MHz, kapasitor 22pF ke rail ground breadboard
- Pin 11 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 12 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 13 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 14 - DIN pada matriks 8x8
- Pin 15 - resistor 330 ohm - pin merah LED RGB
- Pin 16 - resistor 330 ohm - pin hijau LED RGB
- Pin 17 - piezo buzzer positif - piezo buzzer negatif - rail ground breadboard
- Pin 18 - CS pada matriks 8x8
- Pin 19 - CLK pada matriks 8x8
- Pin 20 AVCC - rail daya breadboard, kapasitor 0.1uF
- Pin 21 AREF - rail daya breadboard
- Pin 22 GND - rail ground breadboard
- Pin 23 - biarkan pin ini floating, digunakan untuk seeding generator angka acak
- Pin 24 - resistor 1K ohm - tombol 'navigate up' momentary
- Pin 25 - resistor 1K ohm - tombol 'navigate down' momentary
- Pin 26 - resistor 1K ohm - tombol 'select' momentary
- Pin 27 SDA - Pin 27 SDA pada ATmega328P-PU slave display I2C
- Pin 28 SCL - Pin 28 SCL pada ATmega328P-PU slave display I2C
Display Slave
- Pin 1 - RTS pada papan breakout FTDI USB ke Serial, tombol reset
- Pin 2 - TXD pada papan breakout FTDI USB ke Serial
- Pin 3 - RXD pada papan breakout FTDI USB ke Serial
- Pin 4 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 5 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 6 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 7 VCC - rail daya breadboard, kapasitor 0.1uF
- Pin 8 GND - rail ground breadboard, kapasitor 0.1uF
- Pin 9 XTAL1 - kristal 16MHz, kapasitor 22pF ke rail ground breadboard
- Pin 10 XTAL2 - kristal 16MHz, kapasitor 22pF ke rail ground breadboard
- Pin 11 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 12 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 13 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 14 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 15 - piezo buzzer positif - piezo buzzer negatif - rail ground breadboard
- Pin 16 - CS pada layar seven segment
- Pin 17 - CLK pada layar seven segment
- Pin 18 - DIN pada layar seven segment
- Pin 19 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 20 AVCC - rail daya breadboard, kapasitor 0.1uF
- Pin 21 AREF - rail daya breadboard
- Pin 22 GND - rail ground breadboard
- Pin 23 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 24 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 25 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 26 - tidak digunakan, pertimbangkan untuk di-ground
- Pin 27 SDA - Pin 27 SDA pada ATmega328P-PU slot machine
- Pin 28 SCL - Pin 28 SCL pada ATmega328P-PU slot machine
Ringkasan
Proyek ini sangat menyenangkan untuk dibangun. Bagian yang paling sulit adalah memahami semua matematika yang diperlukan untuk membuat tabel pembayaran yang berfungsi. Saya berharap Anda juga dapat bersenang-senang dengan proyek ini, jika Anda memutuskan untuk membangunnya. Jika Anda memiliki masalah, pertanyaan, atau, yang paling penting, menemukan kekurangan dalam kode atau dalam matematika, silakan hubungi saya sehingga saya dapat memperbaiki masalah apa pun! Alamat email saya adalah dan-murphy@comcast.net. Saya akan membuat bagian II dari artikel ini ketika saya melampirkan semua komponen.
Kode
File SlotMachine.ino, SlotMachine.h, dan slotCreditsDisplaySlave.ino tersedia di bagian bawah halaman asli.
Skematik
Gambar skematik dan file spreadsheet tersedia di bagian bawah halaman asli.