Kostka do gry na Arduino
Jeśli jesteś tutaj nowy, możesz rozpocząć subskrypcję mojego kanału RSS. Dzięki temu nie przegapisz nowych wpisów. Dziękuję za wizytę!
Ostatnio zebrało mi się na gry planszowe. W hurtowni z zabawkami, przy okazji innych zakupów, nabyłem więc chińczyka. Klasyczna, sprawdzona gra - takie lubię najbardziej. Kosztowała kilkanaście złotych, a dostarcza fajnej rozrywki przesączonej sentymentami.
W zestawie była plansza, pionki oraz kostka. Podczas gry okazało się jednak, że dołączona kostka zachowuje się dość dziwnie - nie chciała się kulać tak jak powinna.
W takiej sytuacji, korzystając z wolnej chwili, postanowiłem zbudować sobie kostkę elektroniczną. Nie wiem, czy będę jej używał, ponieważ zwykła kostka tworzy część klimatu związanego z grami planszowymi, ale fajnie sobie coś takiego zbudować, poświęcając na to zaledwie kilkanaście minut.
Kostka
Kostka zbudowana została z wykorzystaniem:
- Boarduino (może być zwykłe Arduino, Freeduino itp.),
- stykowej płytki prototypowej,
- przycisku,
- wyświetlacza siedmiosegmentowego (pierwsza wersja), 7 LEDów (druga wersja),
- rezystorów,
- przewodów
Pierwsza wersja
Opis / wygląd
Pierwsza wersja kostki zbudowana została z wykorzystaniem wyświetlacza siedmiosegmentowego. Na poniższym obrazku możesz zobaczyć, który segment wyświetlacza, połączony jest z którym z wyjść cyfrowych Boarduino (przez rezystory). Zastosowany wyświetlacz jest wyświetlaczem o wspólnej anodzie. Stanem zapalającym dany segment jest więc logiczne zero.

Połączenia

Kostka do gry na Arduino - wersja z wyświetlaczem siedmiosegmentowym
Dodatkowo do pinu 12 podłączony jest przycisk. Pin 12 skonfigurowany jest jako pin wejściowy z wewnętrznym podciąganiem do zasilania (wewnętrzny pullup włącza instrukcja: digitalWrite(buttonPin, HIGH)).
Kod
int ledPin = 13; int buttonPin = 12; int i = 0; char seg[] = {0x04,0x57,0x0A,0x03,0x51,0x21,0x20,0x17,0x00,0x01}; void setup() { pinMode(ledPin, OUTPUT); pinMode(buttonPin, INPUT); digitalWrite(buttonPin, HIGH); DDRD = 0xFF; randomSeed(analogRead(0)); PORTD = seg[0]; } void loop() { while(digitalRead(buttonPin) == LOW); while(digitalRead(buttonPin) == HIGH); digitalWrite(ledPin, LOW); for(int r = 0; r < 30; r++) { PORTD = seg[random(1,7)]; delay(50 * (r >> 3)); } digitalWrite(ledPin, HIGH); }
Jak widać kod nie jest skomplikowany. Dla uproszenia, wykorzystany został bezpośredni dostęp do portów mikrokontrolera (bez korzystania z funkcji typu digitalWrite, digitalRead). Dzięki instrukcji delay(50 * (r >> 3)) wyrzucona kostka niejako zwalnia tzn. na początku liczba zmienia się szybko, następnie coraz wolniej, aż w końcu zatrzymuje się i możemy odczytać wylosowaną liczbę. Miałem nagrać filmik i pokazać jak to działa, ale mój aparat coś kiepsko działa i nic z tego nie wyszło.
Druga wersja
Opis / wygląd
Druga wersja kostki zbudowana została z wykorzystaniem diod LED. Połączenia widoczne są poniżej. Stanem zapalającym daną diodę LED jest logiczne zero.

Połączenia

Kostka do gry na Arduino - wersja z diodami LED
Kod
Fajne jest to, że kod drugiej wersji kostki prawie nie różni się od pierwszej wersji. Jedyna zmiana to linia definiująca stan portu dla danej liczby:
char seg[] = {0x04,0x57,0x0A,0x03,0x51,0x21,0x20,0x17,0x00,0x01};
została zmieniona na:
char seg[] = {0xFF,0xBF,0x77,0x37,0x71,0x31,0x41};
Podsumowanie
Fajnie byłoby zrobić do tego jakąś obudowę, zaprojektować płytkę itd. Można też trochę poeksperymentować z animacją rzutu kostką. A Ty masz jakieś pomysły, a może własne projekty związane z grami planszowymi?

(głosów: 2, średnia ocen: 4)