Kuchenny Timer


8.28571
Ocena: None Średnia: 8.3 (7 głosujących)

Urządzenie to jak sama nazwa wskazuje jest timerem kuchennym. Ma za zadanie odliczać ustalone przedziały czasu podczas przygotowywania różnorodnych potraw. Przyda się każdemu oddanemu nauce studentowi i uchroni jego obiad przed spaleniem lub chociaż kuchnię przed nadmierną ilością dymu. Timer posiada pięcioprzyciskową klawiaturę na której w prosty sposób można ustawić czas od 1 minuty do 99 godzin!. Odliczanie czasu rozpoczyna się automatycznie gdy skończymy ustawiać rządany czas (po 3 sekundach). Urządzenie zbudowane jest w oparciu o mikrokontroler ATMega8. Głośny Buzzer sprawi że użytkownik napewno usłyszy alarm :)

Działanie:


Schemat ideowy Timera przedstawiony jest na rysunku poniżej:

Sercem urządzenia jest mikrokontroler U1 (ATMega8) wraz z rezonatorem kwarcowym X1 (16MHz) i dwoma kondensatorami C1 (22pF) i C2 (22pF). Stabilizator U2 (7805) oraz kondensatory C3 (100uF) i C4 (47uF) dostarczają napięcia na poziomie 5V wymaganego do poprawnej pracy mikrokontrolera i współpracujących elementów. Do złącza Zas podpinamy napięcie stałe o wartości ok 7-12V. Buzzer B1 oraz anody wyświetlacza W1 sterowane są za pomocą tranzystorów T1 - T5 (BC556) i rezystorów R1 - R8 (3,3k) oraz R17 (3,3k) i R18 (3,3k). Prąd segmentów wyświetlacza ograniczają rezystory R9 - R16 (330R). Złącze Prog (goldpin) i pojedynczy pin R służą do podłączenia programatora (kabla programującego). Klawiaturę timera podłączamy do złącza Sw (Goldpin). Klawiaturę stanowi 5 przycisków chwilowych podłączonych do masy i pinów B.0...B.4, co odpowiada przyciskom w kolejności: 1,5,10,20,CL.

Budowa:


Timer można zbudować w oparciu o płytkę drukowaną dostępną tutaj. Rysunek w odbiciu lustrzanym dostępny jest tutaj. Montaż należy rozpocząć od wlutowania dwóch zworek. Następnie montujemy wszystkie rezystory i pozostałe elementy w kolejności od najmniejszych do największych. Rezonator kwarcowy X1 powinien być w wersji "niskiej" gdyż w przeciwnym wypadku nie zmieści się pod wyświetlaczem. Pod mikrokontroler U1 dobrze jest zastosować podstawkę DIP28 a pod wyświetlacz podstawkę DIP14 przeciętą na dwie części. Buzzer B1 może być wlutowany w płytkę, tak jak to jest przedstawione na zdjęciach, jednak gdyby okazało się później że po zamknięciu w obudowie jest zbyt cichy (nawet pomimo dziury wywierconej nad nim w obudowie), można przykleić go do boku obudowy (tak jak widać na ostatniej fotografii), łącząc przewodami z płytką. Klawiaturę składającą się z 5 przycisków uSwitch 12x12mm przyklejamy bezpośrednio do przodu obudowy, tak aby były równo z jej powierzchnią. Do zasilania urządzenia dobrze jest zastosować ładowarkę mini z telefonu, ze względu na mały ciężar i wymiary. Pomocą przy budowie może okazać się schemat montażowy dostępny tutaj

Wykaz Elementów:


1x Listwa Goldpin 1x2 (Zas)
1x Listwa Goldpin 1x4 (Goldpin)
1x Listwa Goldpin 1x6 (Goldpin)
5x uSwitch 12x12mm

10x 3,3k
8x 330R
2x 22pF

1x 47uF Elektrolit
1x 100uF Elektrolit

1x Rezonator Kwarcowy 16MHz
5x BC556
1x Stabilizator 7805
1x Mikrokontroler ATMEGA8 + Podstawka
1x Buzzer z Generatorem 5V
1x Wyświetlacz LED poczwórny, wspólna anoda
1x Ładowarka mini do Telefonu

Programowanie:


Mikrokontroler do sterownika został zaprogramowany w wersji demo programu BASCOM AVR firmy MCS Electronics (http://www.mcselec.com/). Program przedstawiony jest poniżej:

'************* Konfiguracja uC *****************
'***********************************************
$regfile = "m8def.dat"
$crystal = 16000000
Config Portb = &B00000000 : Portb = &B11111111
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B11111111 : Portd = &B11111111
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
Enable Interrupts
Buzzer Alias Portc.0
'********** Konfiguracja uC Koniec  ************
'******************  Zmienne *******************
'***********************************************
Dim Flaga_4ms As Bit
Dim Mig As Bit
Dim Dwukropek As Bit
Dim Odliczanie As Bit
Dim Wyswietlanie As Bit
Dim Alarm As Bit
Dim Ktory_w As Byte
Dim Wartosc(2) As Byte                                      'godziny minuty : minuty sekundy
Dim W(4) As Byte                                            '4 cyfry wyswietlane po przeliczeniu z powyzszych
Dim Co4ms As Byte , Co1s As Byte
Dim G As Byte , M As Byte , S As Byte
Dim Buz_sygnal As Byte
Dim Sw_port As Byte , Stan_portu As Byte , Licznik_sw As Byte
Dim Autostart As Word
Dim Autooff As Word
Dim Licznik_mig As Byte
'*************  Zmienne Koniec  ****************
'**************  Petla glowna ******************
'***********************************************
Do
If Flaga_4ms = 1 Then
  Flaga_4ms = 0
 
  If Buz_sygnal > 0 Then
    Buzzer = 0
    Decr Buz_sygnal
  Else
    Buzzer = 1
  End If
 
  If Odliczanie = 0 Then
    If Autostart > 0 Then                                   'uruchomienie autostart=750
      Decr Autostart
      If Autostart = 1 Then
        Buz_sygnal = 40
        Odliczanie = 1
        Timer0 = 6
        Co4ms = 0
        S = 0
      End If
    End If
  Else
    Autostart = 0
  End If
 
  If Wyswietlanie = 1 Then
    Gosub Wyswietl
    If Odliczanie = 0 And Alarm = 0 Then
      Incr Autooff
      If Autooff = 2500 Then
        Wyswietlanie = 0
      End If
    Else
      Autooff = 0
    End If
  Else
    Portd = 255
    Portc = 255
  End If
 
  Gosub Przyciski
End If
Loop
End
'************ Petla glowna Koniec **************
'************ Przerwanie timer 0 ***************
'***********************************************
Prztimer0:                                                  'co 4ms
Timer0 = 6
Set Flaga_4ms
Incr Co4ms
If Co4ms = 250 Then
  Co4ms = 0
  If Odliczanie = 1 Then
    Dwukropek = Not Dwukropek
    Decr S
    If S = 255 Then
      S = 59
      Decr M
      If M = 255 Then
        M = 59
        Decr G
      End If
    End If
 
    If G = 0 And M = 0 And S = 0 Then
      Odliczanie = 0
      Alarm = 1
    End If
  Else
    Dwukropek = 0
  End If
End If
Return
'******** Przerwanie timer 0 Koniec ************
Przyciski:
Sw_port = Pinb And &B00011111
 
If Sw_port <> 31 And Stan_portu = Sw_port Then
    Incr Licznik_sw
    If Licznik_sw = 120 Then
      Licznik_sw = 0
      Buz_sygnal = 10
      Autooff = 0
      Wyswietlanie = 1
      Select Case Stan_portu
        Case 30:
         If Alarm = 0 Then
           Incr M
           Autostart = 750
         End If
        Case 29:
         If Alarm = 0 Then
           M = M + 5
           Autostart = 750
         End If
        Case 27:
         If Alarm = 0 Then
           M = M + 10
           Autostart = 750
         End If
        Case 23:
         If Alarm = 0 Then
           M = M + 20
           Autostart = 750
         End If
        Case 15:
         Odliczanie = 0
         Autostart = 0
         S = 0
         M = 0
         G = 0
         Alarm = 0
      End Select
 
      If M > 59 Then
        Incr G
        M = M Mod 60
      End If
 
    End If
  Else
    Stan_portu = Sw_port
    Licznik_sw = 70
  End If
Return
'*************************************************
Wyswietl:
 Incr Ktory_w
  If Ktory_w = 4 Then Ktory_w = 0
 
  If G > 0 Then
    Wartosc(1) = G
    Wartosc(2) = M
  Else
    Wartosc(1) = M
    Wartosc(2) = S
  End If
 
  W(1) = Wartosc(1) / 10
  W(2) = Wartosc(1) Mod 10
  W(3) = Wartosc(2) / 10
  W(4) = Wartosc(2) Mod 10
  If W(1) = 0 Then W(1) = 10
 
  If Alarm = 1 Then
    Incr Licznik_mig
    If Licznik_mig = 50 Then
      Licznik_mig = 0
      Mig = Not Mig
    End If
 
    If Mig = 0 Then
      W(1) = 11
      W(2) = 11
      W(3) = 11
      W(4) = 11
      Dwukropek = 0
      Buzzer = 0
    Else
      W(1) = 10
      W(2) = 10
      W(3) = 10
      W(4) = 10
      Dwukropek = 1
      Buzzer = 1
    End If
  End If
 
  Select Case Ktory_w
  Case 0:
    Set Portc.2
    W(4) = Lookup(w(4) , Tabela)
    Portd = W(4)
    Portd.7 = Dwukropek
    Reset Portc.5
  Case 1:
    Set Portc.5
    W(3) = Lookup(w(3) , Tabela)
    Portd = W(3)
    Portd.7 = Dwukropek
    Reset Portc.4
  Case 2:
    Set Portc.4
    W(2) = Lookup(w(2) , Tabela)
    Portd = W(2)
    Portd.7 = Dwukropek
    Reset Portc.3
  Case 3:
    Set Portc.3
    W(1) = Lookup(w(1) , Tabela)
    Portd = W(1)
    Portd.7 = Dwukropek
    Reset Portc.2
  End Select
 
Return
*************************************************
Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144 , 255 , 191
'znak:    0     1     2     3     4     5     6     7     8     9    pusty  -

Zdjęcia Projektu:

ZałącznikWielkość
Schemat67.59 KB
Płytka15.08 KB
Płytka (odbicie lustrzane)15.08 KB
Płytka (6 na stronie)76.61 KB
Montowanie20.21 KB
Kod Źródłowy5.39 KB
Program po Kompilacji (BIN)1.84 KB
Program po Kompilacji (HEX)5.2 KB
Nadruk na obudowę115.87 KB



Portret użytkownika EDC

Odp. Licznik do podajnika

W listingu programu , w ustawieniach jest parametr "Config debounce". Jeśli go nie ma to ustawienie domyślne tworzy deelay 25ms. Teraz wpisałem 100 (pewnie przesadziłem) więc możesz spróbować wpisać 50.
Co do zapamiętywania. Powinno zapamiętywać przy automatycznym powrocie, tylko że przy każdym programowaniu czyszczona jest zawartość pamięci jeśli nie masz włączonego FuseBit`a "EESAVE".
Mail do mnie myślałem że już jest wszędzie :P bo antyspam z 30 maili codziennie wywala. Cudownych sposobów na pierwszy milion i takie tam wbród :D
Zerknij sobie też na moją stronę może coś ciekawego podpatrzysz do jakichś przyszłych zabawek :D

Edit: Chyba tu leży błąd bo rozważałem przesuniecie skali w celach przeliczeń i jedno zero się zaplątało. Wartość
10 na wyświetlaczu gasi go.
If Kilogramy < 100 Then W(2) = 10 Else W(2) = Help_b
zamień na
If Kilogramy < 10 Then W(2) = 10 Else W(2) = Help_b

-

BARTek
Moja strona

Portret użytkownika galica01

Podmieniłem wartość i

Podmieniłem wartość i kilogramy działają poprawnie natomiast nie zapamiętuje nie bardzo rozumie to

Quote:
Powinno zapamiętywać przy automatycznym powrocie, tylko że przy każdym programowaniu czyszczona jest zawartość pamięci jeśli nie masz włączonego FuseBit`a "EESAVE".
wystarczy odłączyć prąd a przelicznik pokazuje 00 a zakres jest od 15 do 40.

Tego też nie bardzo rozumie

Quote:
W listingu programu , w ustawieniach jest parametr "Config debounce". Jeśli go nie ma to ustawienie domyślne tworzy deelay 25ms. Teraz wpisałem 100 (pewnie przesadziłem) więc możesz spróbować wpisać 50.
gdzie tą wartość zmienić bo w przyciskach się nic nie zmieniło:D

Co ciekawe zapamiętuje tylko pełne kg a tego ma nie zapamiętywać tylko ustawienia przycisków :D czyli np. wyświetlacz pokazuje 5.6kg to po restarcie jest 5.0

Portret użytkownika pioter239491

klawiatura

jeszcze jakbys dodal wzor czy tam schemat klawiatury to by bylo calkiem super :)

Portret użytkownika mirley

Re: Timer

Klawiaturę stanowi 5 przycisków chwilowych podłączonych do masy i pinów B.0...B.4, co odpowiada przyciskom w kolejności: 1,5,10,20,CL.

Poprawiłem właśnie teraz w opisie

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika Serzik

zmiana kodu

Dzień dobry! Zbieram stoper. Działa świetnie. Ale jest problem. W momencie, gdy dziecko ustawić czas na zegarze i wszyscy poszli do domu. Kiedy czas się skończy, zegar jest wyzwalany i przechowywane piszczeć aż dojdziemy do domu i go wyłączyć. Pomóż zmienić program tak, że brzęczyk był 5-10 minut, a następnie czasomierz zostanie automatycznie odcięty. Jestem dopiero zaczynasz programować (na Arduino), a sam kod nie może zostać zmieniona. Myślę, że jest to konieczne, aby wstawić go w tej części kodu, ale dokładnie nie wiecie. Proszę o pomoc!

If Alarm = 1 Then
    Incr Licznik_mig
    If Licznik_mig = 50 Then
      Licznik_mig = 0
      Mig = Not Mig
    End If
 
    If Mig = 0 Then
      W(1) = 11
      W(2) = 11
      W(3) = 11
      W(4) = 11
      Dwukropek = 0
      Buzzer = 0
    Else
      W(1) = 10
      W(2) = 10
      W(3) = 10
      W(4) = 10
      Dwukropek = 1
      Buzzer = 1
    End If
  End If