🏆 Lekcja 22: Mini-projekt podsumowujący

Połączenie I/O, timerów, PWM, wyświetlacza i przycisków w jednym projekcie. Wybierz jeden z 8 tematów. To są propozycje bez rozwiązania — uczniowie realizują samodzielnie.

1) Zasady realizacji

  • Wybierz 1 projekt z listy (A–H).
  • Projekt ma działać na ATmega328P w stylu bare-metal (rejestry).
  • W projekcie ma być użyty co najmniej: timer + przycisk + wyświetlacz 7-seg albo PWM albo ADC (zależnie od projektu).
  • Nie używaj długich _delay_ms() do logiki — odmierzanie czasu realizuj tickiem/timerem.
  • ISR ma być krótki (flagi/bufor), logika w main.
Oddajesz: 1) kod źródłowy, 2) krótki opis działania (5–10 zdań), 3) listę użytych pinów.

2) 8 mini-projektów do wyboru

A) Stoper 0.00–99.99 s na 7-seg

timery multipleks 7-seg przyciski

Stoper z dokładnością do 0.01 s. Wyświetlacz pokazuje format XX.XX (kropka jako separator).

Wymagania minimalne:
  • START/STOP (klik)
  • RESET (klik)
  • odliczanie czasu na bazie tick 1 ms (bez blokowania)
Rozszerzenie (dla chętnych):
  • HOLD: długie przytrzymanie zamraża wskazanie
  • zapis „lap” (np. 3 ostatnie czasy przewijane przyciskiem)

B) Timer kuchenny (odliczanie) z alarmem

timery brzęczyk przyciski 7-seg

Ustawianie czasu (np. 0–9999 s) i odliczanie w dół do zera. Po dojściu do 0000 alarm dźwiękowy.

Wymagania minimalne:
  • przycisk: + (zwiększa), - (zmniejsza), START
  • alarm na brzęczyku (np. melodia 3–5 tonów)
  • sygnalizacja trybu (miganie kropki lub całego wyświetlacza)
Rozszerzenie:
  • przytrzymanie przycisku przyspiesza zmianę wartości (auto-repeat)
  • pauza i wznowienie

C) „Miernik napięcia” — ADC + prezentacja na 7-seg

ADC filtracja 7-seg

Odczyt napięcia z potencjometru/czujnika i wyświetlanie w mV (np. 0000–5000).

Wymagania minimalne:
  • odczyt ADC (single conversion)
  • przeliczenie na mV na podstawie Vref
  • filtr: średnia z N próbek (min. 4)
Rozszerzenie:
  • tryb „min/max” (zapamiętanie skrajnych wartości)
  • próg alarmu: przekroczenie → beep / miganie

D) Sterownik jasności LED (PWM) z dwoma trybami

PWM przyciski timery

Regulacja jasności LED przez PWM. Tryb ręczny (przyciski) i tryb automatyczny (płynne rozjaśnianie/ściemnianie).

Wymagania minimalne:
  • + / - zmienia duty (0..255)
  • START przełącza tryb ręczny/auto
  • zmiana jasności bez blokujących opóźnień
Rozszerzenie:
  • krzywa „gamma” (nieliniowe mapowanie duty)
  • zapis ostatniej jasności (EEPROM — opcjonalnie)

E) Licznik impulsów (INT0/INT1) + prezentacja wyniku

przerwania zewnętrzne debounce 7-seg

Zliczanie impulsów z wejścia INT0 (np. przycisk, czujnik, generator) i wyświetlanie liczby zdarzeń.

Wymagania minimalne:
  • INT0 jako źródło zliczania
  • debounce/lockout czasowy (np. 30 ms)
  • RESET licznika przyciskiem
Rozszerzenie:
  • pomiar częstotliwości: licz impulsy w oknie 1 s i pokaż „Hz” jako liczba
  • INT1 jako drugi kanał (oddzielny licznik)

F) „Menu” na 7-seg: 3 funkcje w jednym urządzeniu

stan maszyny 7-seg przyciski timery

Urządzenie ma 3 tryby pracy (np. licznik, stoper, miernik ADC). Użytkownik przełącza tryby przyciskiem.

Wymagania minimalne:
  • minimum 3 stany programu (FSM)
  • przycisk MODE przełącza tryb, START steruje funkcją
  • czytelna sygnalizacja aktualnego trybu (np. miganie dp / inna animacja)
Rozszerzenie:
  • zapamiętanie ostatniego trybu po restarcie (EEPROM)
  • krótka animacja wejścia w tryb

G) „Gra refleks” — reakcja na sygnał

timery przyciski 7-seg losowość

Po losowym czasie pojawia się sygnał (np. LED / dp). Uczeń ma nacisnąć przycisk jak najszybciej. Wynik reakcji wyświetlany w ms na 7-seg.

Wymagania minimalne:
  • losowy czas startu (np. 1–5 s) na bazie licznika czasu / szumu ADC
  • pomiar czasu reakcji w ms
  • wyświetlanie wyniku i reset gry
Rozszerzenie:
  • ranking: 5 najlepszych wyników
  • kara za „fałszywy start” (klik przed sygnałem)

H) Termometr „symulowany” — ADC + alarm + tryby prezentacji

ADC alarm 7-seg przyciski

Zamiast czujnika temperatury możesz użyć potencjometru jako „wejścia temperatury”. Wyświetlaj wynik w °C jako liczba 0–100 (symulacja). Dodaj próg alarmu ustawiany przyciskiem.

Wymagania minimalne:
  • odczyt ADC + mapowanie na 0..100
  • tryb prezentacji: TEMP / THR (przełączany przyciskiem)
  • alarm (miganie/beep) gdy TEMP > THR
Rozszerzenie:
  • histereza alarmu (żeby nie „pykało” na granicy)
  • min/max temperatury w sesji

3) Wymagania formalne (ocenianie)

  • Poprawność działania (40%) — projekt spełnia minimalne wymagania, nie zawiesza się.
  • Jakość kodu (30%) — czytelne funkcje, brak chaosu, komentarze tylko tam gdzie trzeba.
  • Architektura (20%) — ISR krótki, logika w main, brak blokujących opóźnień w „sterowaniu”.
  • Rozszerzenie (10%) — dowolny element „dla chętnych” z listy albo własny pomysł.
Uczciwa zasada:
Minimalny projekt ma być prosty i stabilny. Rozszerzenia robisz dopiero, gdy baza działa w 100%.

4) Co ma być w sprawozdaniu (krótko)

  1. Nazwa projektu (A–H) + tytuł własny
  2. Opis działania (5–10 zdań)
  3. Lista użytych pinów (wejścia/wyjścia)
  4. Co działa z wymagań minimalnych + jakie rozszerzenie zrobiłeś