Projek Arduino Electronic Die




Komponen yang diperlukan :

1. Arduino board

2. Breadboard

3. Kable Jumper 

4. 8 220-ohm resistors

5. Seven-segment LED display

6. 74HC595 shift register

7. Momentary tactile four-pin pushbutton


Cara kerja :

Dalam projek ini kita akan membuat dadu menggunakan tampilan LED tujuh segmen. Ketika tombol ditekan, sebuah pulsa dikirim ke Arduino, dan LED "bergetar" dan menampilkan angka acak antara 1 dan 6.

Proyek ini menggunakan register geser 74HC595, sirkuit terpadu kecil (IC) dan penghitung logika sekuensial yang memungkinkan Arduino membuat lebih banyak koneksi daripada biasanya dengan pin yang dimilikinya, dengan "menggeser" dan menyimpan data. Register geser memiliki 16 pin; di salah satu ujungnya Anda akan menemukan titik atau setengah lingkaran, yang menandai pin 1 di sebelah kiri. Pin kemudian diberi nomor berlawanan arah jarum jam dari sini. Gambar menunjukkan pinout, dan Tabel menjelaskan fungsi setiap pin.


Kabel yang terpasang pada pin 2 Arduino terhubung ke tombol tekan kami dan, ketika ditekan, akan membuat pulsa. Untuk menggunakan dadu, tekan tombol untuk membuat angka pada dadu bergoyang dan menampilkan angka acak.

Cara membuat rangkaian :
1. Masukkan LED tujuh segmen ke breadbord Anda, pastikan itu mengangkangi bagian tengah; jika tidak, pin yang berlawanan satu sama lain akan terhubung dan korsleting. Hubungkan pin 3 ke rel GND, dan hubungkan resistor 220-ohm ke pin yang tersisa kecuali pin 8, yang tidak digunakan. Resistor diperlukan untuk mencegah LED segmen terbakar. Lihat Gambar untuk pengaturan ini.
2. Masukkan register geser 74HC595 ke papan tempat memotong roti dengan penanda setengah lingkaran IC di sisi kiri. Pin kiri bawah harus pin 1. IC Anda perlu mengangkangi break tengah, seperti yang ditunjukkan pada Gambar.


3. Buat sambungan yang ditunjukkan pada tabel berikut dengan hati-hati antara tampilan LED tujuh segmen dan register geser 74HC595.

4. Sekarang hubungkan sisa pin register geser ke Arduino seperti yang ditunjukkan pada tabel berikut.
5. Masukkan tombol tekan ke dalam breadbord dengan pin mengangkangi break tengah, seperti yang ditunjukkan pada Gambar. Hubungkan satu sisi ke pin 2 pada Arduino dan sisi lainnya ke GND.

6. Konfirmasikan bahwa pengaturan Anda cocok dengan diagram sirkuit pada Gambar, dan unggah kode di "Sketsa".

Sketch program arduino :
Sketsa pertama mengatur pin untuk mengontrol chip 74HC595 yang menggerakkan LED tujuh segmen. Saat tampilan LED tujuh segmen dinyalakan, titik akan menyala. Saat Anda menekan tombol, LED akan menyala dengan animasi berputar pendek untuk menandakan bahwa dadu sedang bergetar. Sesaat nomor acak antara 1 dan 6 akan ditampilkan. Tekan tombol lagi untuk menghasilkan lemparan dadu berikutnya.



const int latchPin = 8; // Pins connected to shift register
const int clockPin = 12;
const int dataPin = 11;
const int buttonPin = 2; // Pin connected to switch wire
// 1 to 6 and DP (decimal point) on 7-segment display
unsigned char lookup_7seg[] = {0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x80};
// Shaking die pattern on 7-segment display
unsigned char shake_dice[] = {0x63, 0x5C};

// Rolling die on 7-segment display
unsigned char roll_dice[] = {0x1C, 0x58, 0x54, 0x4C};
// Vary duration of time before die number is received
int rand_seed;
int rand_num = 0; // Generate random number
unsigned char shake_toggle = 0; // For shaking dice animation
int index = 0; // For rolling dice animation
int shake_speed; // Accelerates dice shake speed
void setup() {
pinMode(latchPin, OUTPUT); // Output pins for controlling the
// shift register
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(buttonPin, INPUT); // Read switch wire state
digitalWrite(latchPin, LOW); // Display DP on 7-segment display
// at startup
shiftOut(dataPin, clockPin, MSBFIRST, lookup_7seg[6]);
digitalWrite(latchPin, HIGH);
randomSeed(analogRead(0)); // Generate random seed
}

void loop() {
if (digitalRead(buttonPin)) {
shake_speed = 150; // Reset die shaking speed
delay(30);
// Generate number for random speed and show shaking animation
while (digitalRead(buttonPin)) {
rand_seed++; // Generate random number
// Animate shaking die
if (shake_toggle) {
AnimateDice(0, shake_dice);
shake_toggle = 0;
}
else {
AnimateDice(1, shake_dice);
shake_toggle = 1;
}
delay(80 + shake_speed); // Accelerate animation speed
if (shake_speed > 0) {
shake_speed -= 10;
}
}
// Animate rolling die
for (int rolls = 0; rolls < (rand_seed % 10 + 14); rolls++) {
AnimateDice(index, roll_dice);
delay((1 + rolls) * 20);
index++;
if (index > 3) {
index = 0;
}
}

rand_num = random(0, 6); // Generate number thrown on die
DiceNumber(rand_num);
}
}
// Display the die number on 7-segment display
void DiceNumber(unsigned char num) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, lookup_7seg[num]);
digitalWrite(latchPin, HIGH);
}
// Display one frame of the shaking or rolling dice
void AnimateDice(int seg, unsigned char *table) {
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, table[seg]);
digitalWrite(latchPin, HIGH);
}

Demikianlah projek arduino Electronic Die, selamat mencoba san semoga bermanfaat.