Lampka RGB

Lampka RGB

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

 

Witam.

 

Pewnego dnia siedząc w szkole zauważyłem roślinkę w  szklance. Roślina ta nie miała ziemi lecz żelkulki z  kwiaciarni. Nagle przyszła mi do głowy pewna myśl aby taki wazon podświetlić ledami.  Ledy i kulki posiadałem więc szybko zacząłem  prace.  Po rozpuszczeniu kulek w słoiku z wodą miksturę wlałem do szklanki zwiniętej mamie.  Szklanka była dość łysa więc na wierzch położyłem jakąś roślinę. Efekt był taki.

lampka

Jak widać całkiem dobrze. Następnie została tylko elektronika i obudowa.

Układ jest dość prosty jego prostotę ukażę w rysunku którego wykonałem w programie fritzing. Przepraszam za jakość ale to mój pierwszy projekt w tym programie.

lampka rgb

Oznaczenia rezystorów na rysunku powyżej są błędne dlatego podaję ich wartości.

 Łączący pierwszą nóżkę BUZ’a z masą – 10R

Łączący pierwszą nóżkę BUZ’a z Atmegą 8 – 47K

lampka 002

Na płytce widać jeszcze kilka zbędnych elementów, ponieważ w najbliższym czasie chcę wykonać płytkę drukowaną.

Potem musimy zrobić jeszcze podstawkę.

Najlepiej wykonać ją z jakiegoś sztywnego plastiku i owinąć  ją jakąś wstążką. Moja wygląda tak.

lampka 3

Nie jest ona perfekcyjna ale spełnia swoją rolę.

Teraz przyszła pora na programowanie. Kod napisany jest w BASCOMIE, bo to jedyny język który ogarniam.

Dodatkowo należy przestawić fusebity w Atmedze aby jej wewnętrzny oscylator działał na 8Mhz.

UWAGA

Kod nie jest mój. Znalazłem go gdzieś w necie  i przerobiłem. Sam nie mogłem wymyślić jak zrobić tak aby kolory nie świeciły się w tych samych momentach, dlatego zaczerpnąłem kod z neta. Jest on przystosowany do 3 kolorów lecz ja wykorzystuję tylko dwa biały i czerwony. W bliskiej przyszłości planuję dodać kolor niebieski albo zielony.

Oto kod programu.

 

$regfile = "m8def.dat"
$crystal = 8000000

Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output

Dim A As Byte
Dim S As Byte
Dim D As Byte

Enable Interrupts
Enable Timer2
Enable Timer1

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8
Config Timer2 = Pwm , Prescale = 8 , Compare = Toggle , Pwm = On , Compare Pwm = Clear Down

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Cls

S = 0.01
D = S + 35
Deflcdchar 1 , 32 , 32 , 32 , 32 , 31 , 32 , 32 , 32        ' replace ? with number (0-7)
Deflcdchar 2 , 32 , 32 , 32 , 32 , 30 , 2 , 2 , 2           ' replace ? with number (0-7)
Deflcdchar 3 , 2 , 2 , 2 , 2 , 30 , 32 , 32 , 32            ' replace ? with number (0-7)
Deflcdchar 4 , 8 , 8 , 8 , 8 , 15 , 32 , 32 , 32            ' replace ? with number (0-7)
Deflcdchar 5 , 32 , 32 , 32 , 32 , 15 , 8 , 8 , 8           ' replace ? with number (0-7)

Lcd " TEST  KOLOROW "
Waitms 150

Cls
Locate 1 , 2
Ocr1a = 255
Ocr1b = 0
Ocr2 = 0
Lcd " Red"
Waitms 150
Cls
Ocr1a = 0
Ocr1b = 255
Ocr2 = 0
Lcd " Green"
Waitms 150
Cls
Ocr1a = 0
Ocr1b = 0
Ocr2 = 255
Lcd " Blue"
Waitms 150

Do

   Waitms D
Locate 1 , 15 : Lcd " "
   Locate 1 , 16 : Lcd " "
Locate 2 , 16 : Lcd " "
   Locate 2 , 15 : Lcd " "
Locate 2 , 14 : Lcd " "
   Locate 2 , 13 : Lcd " "
Locate 2 , 12 : Lcd " "
   For A = 0 To 255
Ocr1a = A
   Ocr2 = 255 - A
Waitms S
   Locate 1 , 2 : Lcd "Blue"
Locate 1 , 12 : Lcd "Red"
   Locate 2 , 7 : Lcd "Green"
If A = 42 Then
   Locate 1 , 6 : Lcd Chr(1)
End If
   If A = 84 Then
Locate 1 , 7 : Lcd Chr(1)
   End If
If A = 126 Then
      Locate 1 , 8 : Lcd Chr(1)
End If
   If A = 168 Then
Locate 1 , 9 : Lcd Chr(1)
   End If
If A = 210 Then
      Locate 1 , 10 : Lcd Chr(1)
End If
   If A = 248 Then
Locate 1 , 11 : Lcd Chr(1)
   End If
Next A

'blue -> red

Waitms D
   Locate 2 , 6 : Lcd " "
Locate 2 , 5 : Lcd " "
   Locate 2 , 4 : Lcd " "
Locate 2 , 3 : Lcd " "
   Locate 2 , 2 : Lcd " "
Locate 2 , 1 : Lcd " "
   Locate 1 , 1 : Lcd " "
For A = 0 To 255
   Ocr1b = A
Ocr1a = 255 - A
   Waitms S
Locate 1 , 12 : Lcd "Red"
   Locate 2 , 7 : Lcd "Green"
Locate 1 , 2 : Lcd "Blue"
   If A = 36 Then
Locate 1 , 15 : Lcd Chr(1)
   End If
If A = 72 Then
      Locate 1 , 16 : Lcd Chr(2)
End If
   If A = 108 Then
Locate 2 , 16 : Lcd Chr(3)
   End If
If A = 144 Then
      Locate 2 , 15 : Lcd Chr(1)
End If
   If A = 180 Then
Locate 2 , 14 : Lcd Chr(1)
   End If
If A = 216 Then
      Locate 2 , 13 : Lcd Chr(1)
End If
   If A = 248 Then
Locate 2 , 12 : Lcd Chr(1)
   End If
Next A

'red  ->  green

Waitms D
   Locate 1 , 6 : Lcd " "
Locate 1 , 7 : Lcd " "
   Locate 1 , 8 : Lcd " "
Locate 1 , 9 : Lcd " "
   Locate 1 , 10 : Lcd " "
Locate 1 , 11 : Lcd " "
   For A = 0 To 255
Ocr2 = A
   Ocr1b = 255 - A
Waitms S
   Locate 1 , 12 : Lcd "Red"
Locate 2 , 7 : Lcd "Green"
   Locate 1 , 2 : Lcd "Blue"
If A = 36 Then
      Locate 2 , 6 : Lcd Chr(1)
End If
   If A = 72 Then
Locate 2 , 5 : Lcd Chr(1)
   End If
If A = 108 Then
      Locate 2 , 4 : Lcd Chr(1)
End If
   If A = 144 Then
Locate 2 , 3 : Lcd Chr(1)
   End If
If A = 180 Then
      Locate 2 , 2 : Lcd Chr(1)
End If
   If A = 216 Then
Locate 2 , 1 : Lcd Chr(4)
   End If
If A = 248 Then
      Locate 1 , 1 : Lcd Chr(5)
End If
   Next A

   'green -> blue

   Waitms D
Locate 1 , 15 : Lcd " "
   Locate 1 , 16 : Lcd " "
Locate 2 , 16 : Lcd " "
   Locate 2 , 15 : Lcd " "
Locate 2 , 14 : Lcd " "
   Locate 2 , 13 : Lcd " "
Locate 2 , 12 : Lcd " "
   For A = 0 To 255
Ocr1b = A
   Ocr2 = 255 - A
Waitms S
   Locate 1 , 2 : Lcd "Blue"
Locate 1 , 12 : Lcd "Red"
   Locate 2 , 7 : Lcd "Green"
If A = 85 Then
   Locate 1 , 6 : Lcd Chr(1)
End If
   If A = 170 Then
Locate 1 , 7 : Lcd Chr(1)
   End If
If A = 248 Then
      Locate 1 , 8 : Lcd Chr(2)
End If

Next A

'Blue - > Green

Waitms D
   Locate 2 , 6 : Lcd " "
Locate 2 , 5 : Lcd " "
   Locate 2 , 4 : Lcd " "
Locate 2 , 3 : Lcd " "
   Locate 2 , 2 : Lcd " "
Locate 2 , 1 : Lcd " "
   Locate 1 , 1 : Lcd " "
For A = 0 To 255
   Ocr1a = A
Ocr1b = 255 - A
   Waitms S
Locate 1 , 12 : Lcd "Red"
   Locate 2 , 7 : Lcd "Green"
Locate 1 , 2 : Lcd "Blue"
   If A = 36 Then
Locate 1 , 10 : Lcd Chr(5)
   End If
If A = 72 Then
      Locate 1 , 11 : Lcd Chr(1)
End If

Next A

'green -> red

Waitms D
   Locate 1 , 6 : Lcd " "
Locate 1 , 7 : Lcd " "
   Locate 1 , 8 : Lcd " "

   For A = 0 To 255
Ocr1b = A
   Ocr1a = 255 - A
Waitms S
   Locate 1 , 12 : Lcd "Red"
Locate 2 , 7 : Lcd "Green"
   Locate 1 , 2 : Lcd "Blue"
If A = 36 Then
      Locate 1 , 15 : Lcd Chr(1)
End If
   If A = 72 Then
Locate 1 , 16 : Lcd Chr(2)
   End If
If A = 108 Then
      Locate 2 , 16 : Lcd Chr(3)
End If
   If A = 144 Then
Locate 2 , 15 : Lcd Chr(1)
   End If
If A = 180 Then
      Locate 2 , 14 : Lcd Chr(1)
End If
   If A = 216 Then
Locate 2 , 13 : Lcd Chr(1)
   End If
If A = 248 Then
      Locate 2 , 12 : Lcd Chr(1)
End If
   Next A

   'red -> green

   Waitms D
Locate 1 , 10 : Lcd " "
   Locate 1 , 11 : Lcd " "

   For A = 0 To 255
Ocr2 = A
   Ocr1b = 255 - A
Waitms S
   Locate 1 , 12 : Lcd "Red"
Locate 2 , 7 : Lcd "Green"
   Locate 1 , 2 : Lcd "Blue"
If A = 36 Then
      Locate 2 , 6 : Lcd Chr(1)
End If
   If A = 72 Then
Locate 2 , 5 : Lcd Chr(1)
   End If
If A = 108 Then
      Locate 2 , 4 : Lcd Chr(1)
End If
   If A = 144 Then
Locate 2 , 3 : Lcd Chr(1)
   End If
If A = 180 Then
      Locate 2 , 2 : Lcd Chr(1)
End If
   If A = 216 Then
Locate 2 , 1 : Lcd Chr(4)
   End If
If A = 248 Then
      Locate 1 , 1 : Lcd Chr(5)
End If
   Next A

   'green -> blue

Loop
End

 

Po zaprogramowaniu procesora lampka jest praktycznie gotowa. Pozostało tylko podziwiać efekt.

lampka 004

Proszę o wyrozumiałość, ponieważ jest to mój pierwszy wpis na tym forum, a ja mam tylko 13 lat.

LINK do filmu z lampką.

Mam nadzieję, że się podobało i ktoś postanowi coś takiego zrobić.

 

Pozdrawiam.

Alan Bejnarowicz

 

 

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Ocena: 3.6/5 (głosów: 5)

Podobne posty

6 komentarzy do “Lampka RGB

  • Kod programu wrzuć jako kod (w edytorze masz bodajże taki przycisk: ), w fritzing troszkę przesadziłeś. Z tego co ja wyczytałem to przy MOSFET N używasz rezystora pull-down, i w ciemno możesz dawać z zakresu 47k-100k. A 10R to chyba powinno byc połączenie uC z MOSFETEM :) Na ostatnim zdjeciu słabo widać :C Ale jako że masz 13 lat, to 4 dostaniesz :)

    Odpowiedz
  • Może ocenię cię trochę za ostro, ale moim zdaniem kilka elementów to przejaw formy nad treścią.
    Zamiast stosować 12v jako zasilanie, można użyć od razu zasilacza 5v – można wtedy pominąć stabilizator napięcia.
    Podobnie z tranzystorami mocy BUZ 11. Nie rozumiem sensu używania tego tranzystora do sterowania diodą. Nie wiem jakich diod używasz, ale dla zdecydowanej większości wystarczyłby dwadzieścia razy tańszy BC547.
    W kodzie masz zaznaczone, że używasz kwarcu 8MHz, na schemacie go nie widać.
    Jeśli chodzi o schemat – totalny chaos, nie widać kompletnie niczego, brak filtrowania zasilania, zamiast tranzystorów dałeś elementy ‘v reg’ o których nic nie wiadomo, nie zaznaczyłeś wartości rezystancji.
    Mogłeś zaznaczyć, w jakim języku jest kod napisany, w takiej formie się raczej nikomu nie przyda.

    Ale mimo wszystko efekt końcowy mi się podoba ;)

    Odpowiedz
    • Witam. Na obrazku nie widać rezonatora, ponieważ procek ma przestawione fusy. Zasilany jest 12v , bo taśmy led są na 12v. Jeszcze jak ktoś mógłby mi powiedzieć jak zrobić takie okienko do kodu, bo tak poprostu wklejony kod ciężko się czyta.

      Odpowiedz
  • Ode mnie 5 nie za to, że projekt powalił mnie na kolana pomysłowością i wykonaniem ale za udowodnienie wszystkim, iż to nie wiek definiuje wiedzę człowieka. Chęci, wytrwałość i umiejętność wyszukiwania informacji w internecie to klucz do sukcesu. Regularnie czytam forum, mimo mojej podstawowej wiedzy z zakresu elektrotechniki czy mechaniki zadawane czasem pytania swoim poziomem powalają mnie na kolana. Zastanawiam się wtedy czy to jeszcze kwestia lenistwa czy już powszechna ignorancja. Nie poprzestawaj na tym projekcie, mile mnie zaskoczyłeś. Powodzenia w kolejnych realizacjach ;)

    Odpowiedz
  • 5+ ode mnie za pomysł, wykonanie i wiedzę. Ja w Twoim miałem za sobą pierwszy wzmacniacz lampowy.
    Efekty świetlne to naprawdę widowiskowa rzecz, którą każdy zauważa, a nie każdy ma pojęcie jak to zrobić.

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?