Zabawka edukacyjna V2

Zabawka edukacyjna V2

Witam wszystkich.
Zabawę z Arduino jak i ogólnie z elektroniką zacząłem nie tak dawno.
Począwszy od startowego projektu BLINK z LED, poprzez mini sterownik sygnalizacji świetlnych (drogowych),
zainspirowany projektem Łukasza https://majsterkowo.pl/swiateczna-zabawka-edukacyjna-dla-dzieci/ postanowiłem spróbować własnych sił w rozbudowie tego projektu.

Miałem problemy z dźwiękiem, dlatego go z filmu wyeliminowałem, ale proszę mi wierzyć – urządzenie piszczy jak powinno :)

Instrukcja obsługi gry:

Czas gry jest stały i wynosi 60 sekund.
Na starcie gracz otrzymuje 100 punktów.
Każdy błąd pozbywa gracza 25 punktów,
natomiast każda zaoszczędzona sekunda daje +4 punkty (czyli im szybciej ukończy się grę tym lepiej), więc lepiej jest stracić trochę czasu i przejść grę dokładnie, niż zrobić to szybko i z błędami.

Aby rozpocząć należy wcisnąć przycisk START,
po którym należy poczekać od 2 do 8 sekund na rozpoczęcia gry.

Błędy można “wykasować” wracając na start (czas niestety leci…) :)

60 sekundowa bezczynność gry oznajmia się pikaniem (alarm)

Dodatkowo wykorzystałem w ramach nauki EEPROM, który liczy kompletne zagrania (od startu, aż po metę).

Tyle z instrukcji obsługi.

Strona techniczna:

zabawka_fritzing

Proszę zwrócić uwagę, że na płytce stykowej użyte przyciski wyłącznie do testowania, które w fazie końcowej zostały zamienione spinaczami, drutem i manipulatorem.

Na początku próbowałem podświetlić LCD, prąd mikroprocesora nie dawał oczywiście rady więc umieściłem tranzystor do sterowania prądem wprost z baterii, jednak nawet same baterie na wiele czasu by nie wystarczały i dałem sobie spokój.

Wykorzystane części:

1x Atmega8A-Pu
2x 220 Ohm
4x 10K Ohm
2x 47 uF kondensator elektrolityczny
2x 100 nf kondensator ceramiczny
1x LM7805 stabilizator
1x LED
1x Buzzer
1x Wyświetlacz 16×2
1x Przełącznik
1x microswitch

Wszystko zasilane 4x LR6 1,5V

 

DSC_7717

 

DSC_7712

 

 

Kod programu:

Program jest może i trochę chaotycznie napisany, pewnie można go w dobry sposób zoptymalizować, ale co najważniejsze, że działa :)

 

Żona na początku śmiała się dość ironicznie z mojego pomysłu.. teraz walczy wraz ze mną o każdą sekundę ;)

Ocena: 4.75/5 (głosów: 51)

Podobne posty

15 komentarzy do “Zabawka edukacyjna V2

  • Witam raz jeszcze. Wraz z artykułem przesyłam prośbę, abyście przeanalizowali cały opis pod względem technicznym i śmiało napisali co jest zrobione źle, co byście zmienili/poprawili. Nie boję się krytyki, tym bardziej naukowej z której wiele mogę się jeszcze nauczyć.

    Odpowiedz
    • Chcesz krytyki? Prosze bardzo, wyladuje swoje frustracje zwiazane z wlasnym projektem ;-):

      1) Zmarnowales kilkaset z 2048 bajtow SRAM na napisy – uzywaj makr PROGMEM i trzymaj je we Flashu a nie w RAMie. Arduino ma do tego uproszczone makro F(“foo”) ktore dziala np. ze Serial.print(), nie wiem czy zadziala bezposrednio z lcd.print() (bo nie wiem czego ta funkcja oczekuje jako argumentu i czy jest przeladowana).
      2) Niezmienne wartosci jak numer pinu definiuj jako const. W ten sposob tez oszczedzasz RAM (po co ma tam siedziec cos, co sie nigdy nie zmienia?) i ulatwiasz kompilatorowi optymalizacje.
      3) Z tego co widze na pierwszy rzut oka, nie masz debouncingu przyciskow/wejsc, ani hardware’owego (np. uklad RC+mostek schmitta) ani software’owego

      A poza tym bardzo fajne, skad wziales pudelko? Ja drugi miesiac probuje ze sklejki zlozyc idealnie rowny (i rozbieralny, tzn. skrecany nie klejony na epoksyd ;)) prostopadloscian z wyfrezowanymi otworami np. na DB9 i stwierdzam, ze zegarmistrzem ani chirurgiem to na pewno nie zostane ;/

      Odpowiedz
  • Projekt bardzo fajny ;] Fajnie, że można rywalizować na czas ;] Jak wersja V2 to może w wersji V3 dodasz zapis na kartę SD osiągane rekordy ;]

    Poza tym to wiem, że przewody z taśmy SATA są wygodne bo tworzą szerokie pasy złączonych przewodów, ale posiadają jedną szczególną wadę – jednolity kolor.

    O ile nie ma problemu z podłączeniem wyświetlacza do stworzonego sterownika za pomocą nierozszczepionej taśmy połączeniem “gniazdo-taśma-gniazdo” to w Twoim przypadku, kiedy z jednej strony jest podłączony wyświetlacz, a z drugiej strony taśma jest rozszczepiana na różne wyprowadzenie mikrokontrolera, może to powodować trudności przy większych projektach. Oznaczenie przewodów wskazane ;]

    Wiem, że płytka uniwersalna nie daje wiele możliwości manewru, ale docelowo (jakby już płytkę drukować) fajnie jest zrobić gniazdo z którego taka taśma wyjdzie na wyświetlacz ;]

    Podoba mi się, że robisz stałe i zmienne globalne, ale pamiętaj o komentarzach do linii. Potrafią być bardzo pomocne przy późniejszych modyfikacjach. Nie wpływają one na wielkość pliku wynikowego dla mikrokontrolera bo kompilator odrzuca komentarze.

    A z drugiej strony jednolity kolor przewodów to niezłe utrudnienie dla chińczyków ;P

    Odpowiedz
    • Ostatnio programowałem gdy miałem około 12 lat i trwało to może ze 3-4 lata (19 lat temu). Commodore64 i język BASIC to było coś :) i coś tam w głowie zostało :)

      Kabelki kolorowe pomysł dobry, wiem, że takowe istnieją, ale nawet o tym nie myślałem – mały projekt nie wymaga zbyt wiele. Co do większych projektów…. prawda.

      Płytki drukowane – myślę, że i na to przyjdzie czas, a nawet musi :) Jeśli będzie V3 będzie i to :)

      Odpowiedz
  • Fajny pomysł. Mam pytanie czy pan sam wytrawia te płytki czy kupuje, jak pan je sam robi to czy by mógł pan dodać poradnik jak je zrobić?
    Jeśli pan kupuje te płytki to może chciaż dałem panu pomysł na kolejny poradnik ; )

    Odpowiedz
    • Płytka, którą wykorzystałem jest “płytką uniwersalną” do kupienia bez problemu np. na allegro za nieduże pieniądze. Mam w planach naukę wytrawiania płytek, ale jeszcze nie w tej chwili :)

      Odpowiedz
  • Obwód zasilania jest błędny. Po pierwsze szkoda baterii na stabilizator liniowy, który nadmiar napięcia zamienia w ciepło. Po drugie nie można stabilizatora na 5V zasilać ze źródła o napięciu 6V (4×1,5V) – jest to elementarny błąd. Wymagana różnica napięć to min. 2V. Pomijam, że baterie będą się rozładowywać i ich napięcie będzie z czasem spadać. Można ten stabilizator wyrzucić i w szereg włączyć diodę 1N4001, która zapewni spadek 0,6 – 0,7V. Napięcie świeżych baterii może wynosić w sumie 6,4V, dioda obniży jest do ok. 5,8V, a to już wartość bezpieczna dla atmegi i wyświetlacza.

    Odpowiedz
  • Skoro już powstał taki poradnik to może też wrzuce moją wersje zabawki, przygotowaną na święta 2012 :)
    Zasada działania identczna, lecz zmienione troszke podejście: aby wygrać należy przejść “tor” bezbłędnie. Przegrana ma swój dzwięk, a wygrana swój.
    Filmik:
    https://youtu.be/aREPsr4eBNg

    Zdjęcie wnętrza:
    http://img11.imageshack.us/img11/7559/img1091dw.jpg

    Użyte częsci to: Atmega168, bateria 9V, stabilizator napiecia, tranzystor do głośniczka, i głośniczek z recyklingu. Te grubsze części na obydwu końcach choinki zrobione są ze starej anteny do telewizora.

    PS ciekawe czy ktoś rozpozna melodyjki przegranej i wygranej :)

    Odpowiedz
  • Uwaga – Tryb Krytyki Włączony :>

    Po pierwsze – na jaką cholerę wartości cyfrowe (0 i 1) zapisujesz jako int?
    Marnujesz RAM, co w programowaniu ATmegi jest wręcz niedopuszczalne
    Po drugie – wartości stałe, jak numery pinów przechowuj jako const – oszczędzasz ram
    Po trzecie – napisy przechowuj albo jako const albo PROGMEM we flashu – po co marnować RAM
    Po piąte – po co zapisujesz wartości przycisków jako zmienne, funkcja digitalRead jak i analogRead same zwracają wartość, czyli sporo zmiennych moglbys wywalić, np zamiast ” buttonStateKoniec = digitalRead(buttonPinKoniec);
    if(buttonStateKoniec == HIGH) {
    czaskoniec = czas;
    }”

    mozesz zrobić
    if(digitalRead(buttonPinKoniec){
    //zawartość if’a
    }
    Chyba tyle, program przejrzę ponownie i wtedy się znowu przyczepię :>
    Nie zrozum tego jako hejtu tylko jako dobre rady, bo kiedyś przy jakimś dużym projekcie będzie ci brakować RAMu nawet na ATmedze328 i wtedy przypomną ci się moje rady.
    To by było na tyle.

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?