niedziela, 27 marca 2011

DIY: Ozdoba świąteczna z plexi by Rafal.J.645

Autor: Rafal.J.645
Redakcja: Dondu

Witam.

Chciałbym przedstawić i jednocześnie zgłosić do konkursu swój projekt :-). Jest nim dokładnie ozdoba świąteczna wykonana z podświetlanej plexi.





Podstawa została wyfrezowana z drewna sosnowego,  a następnie polakierowana. Dekielek zakrywający sterownik został wycięty ze sklejki i również polakierowany.


Frezowanie podstawy z drewna sosnowego.



Frezowanie otworu pod przycisk.



Wyfrezowana podstawa, góra.


Wyfrezowana podstawa, dół.

Polakierowana podstawa.


Polakierowany dekielek.


Elementy z plexi zostały najpierw wygrawerowane na laserze, a później wycięte na docelowy kształt i wymiar na frezarce CNC. W ozdobie znajdują się cztery warstwy plexi, każda podświetlona na inny kolor; pierwsza na niebiesko (łańcuchy na choince, bombki, napis „Wesołych świąt” i mój podpis ;) ), druga na czerwono (bombki), trzecia na żółto (gwiazdka na czubku choinki i na niebie), no i ostatnia, najważniejsza na zielono, czyli choinka.

Kolejność nie jest przypadkowa, tylko została przemyślana, tak, by patrząc pod kątem jak najlepiej się wszystko prezentowało (każda warstwa ma 3mm grubości, więc patrząc z boku wszystko się trochę rozjeżdża, jednak przy takiej kolejności nie jest to wielkim problemem). Gotowe elementy z plexi są wciśnięte w podstawę, siedzą tak ciasno, że nie było potrzeby wklejania ich.


Grawerowanie plexi laserem.




Wycinanie wygrawerowanych plexi na frezarce.



Gotowe elementy z plexi
(jeszcze z folią ochronną po jednej stronie).


Płytki PCB zostały wyfrezowane na frezarce CNC (obecnie nie stosuję innych metod wytwarzania PCB).  Na dwóch płytkach są diody z rezystorami, które podświetlają plexi.  Te płytki są dwustronne i niestety posiadają dużą ilość przelotek, więc bardzo pomocna byłaby metalizacja otworów, ale nie potrafię tego robić, a gdybym zlecał płytki, to nie zdążyłbym skończyć projektu na czas.

Podczas lutowania należy zwrócić też uwagę na to, że na płytkach musimy przylutować diody w innej kolejności, gdyż jedna z płytek jest odwrócona w poziomie o 180* względem drugiej. Na drugiej płytce PCB znajduje się sterownik na mikrokokontrolerze Attiny2313. Wszystkie płytki zostały polakierowane specjalnym lakierem, żeby zapobiec utlenianiu miedzi.

Całość zasilana jest z zasilacza impulsowego o napięciu wyjściowym 5VDC.


Frezowanie PCB na frezarce CNC.


Gotowa płytka sterownika. 


Gotowe, polutowane płytki z diodami w obudowie. 



Podłączony sterownik w obudowie. 


Tył ozdoby, przycisk i przewód zasilający. 



Schemat połączeń diod LED. 


Schemat sterownika. 

Płytka PCB z diodami. 

Płytka PCB sterownika. 

Do pobrania pliki PCB: Swiateczna-ozdoba-PCB.zip (kopia)


Program

Program został napisany w języku C. Jest to bardzo prosty program. Umożliwia regulacje jasności podświetlenia przyciskiem (3 poziomy + wyłączenie), a także co kilka sek. wykonuje krótkie mignięcie żółtymi diodami (imituje migające gwiazdy na niebie). Program nie zawiera żadnej zewnętrznej biblioteki. Jakbym miał więcej czasu na pewno wymyśliłbym jakieś ciekawe opcje i efekty, no ale tak się złożyło, że miałem bardzo ograniczony czas na ten projekt : (.

main.c
/*
 * ozdoba_świąteczna.c
 *
 * Created: 2013-12-21 21:18:40
 *  Author: Rafał
 */ 

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define K_ZIELONY_PIN (1<<PB0) //pin zielonych diod
#define K_ZIELONY_OFF PORTB &= ~K_ZIELONY_PIN 
#define K_ZIELONY_ON PORTB |= K_ZIELONY_PIN

#define K_ZOLTY_PIN (1<<PB1) //pin żółtych diod
#define K_ZOLTY_OFF PORTB &= ~K_ZOLTY_PIN 
#define K_ZOLTY_ON PORTB |= K_ZOLTY_PIN

#define K_CZERWONY_PIN (1<<PB2) //pin czerwonych diod
#define K_CZERWONY_OFF PORTB &= ~K_CZERWONY_PIN
#define K_CZERWONY_ON PORTB |= K_CZERWONY_PIN

#define K_NIEBIESKI_PIN (1<<PB3) //pin niebieskich diod
#define K_NIEBIESKI_OFF PORTB &= ~K_NIEBIESKI_PIN
#define K_NIEBIESKI_ON PORTB |= K_NIEBIESKI_PIN

#define PRZYCISK_PIN  (1<<PD5) //pin przycisku 

volatile uint8_t NIEB_W, CZER_W, ZOLTY_W, ZIEL_W; //zmienne przechowujące warość wypełania PWM (50 = 100% wypełienia)
uint8_t przycisk_wcisniety; //zmienna do obsługi przycisku
uint8_t poziom = 0; //zmienna przechowująca poziom podświtlenia
volatile uint8_t i = 0, j = 0; //zmienne pomocnicze

int main(void)
{
 //Ustawnienia pinów
 
 DDRB |= K_ZIELONY_PIN;
 DDRB |= K_ZOLTY_PIN;
 DDRB |= K_CZERWONY_PIN;
 DDRB |= K_NIEBIESKI_PIN;
 
 DDRD &= ~PRZYCISK_PIN;
 PORTD |= PRZYCISK_PIN;

 //Ustawnienia pinów*

    //Ustawniena TIMERA
 
 TCCR0B = (1<<CS00); 
 TCNT0 = 0x00;
 TIMSK = (1<<TOIE0);
 sei();

    //Ustawniena TIMERA*

 

    while(1)
    {
  //obsługa przycisku
  
  if(!(PIND & PRZYCISK_PIN ) && przycisk_wcisniety  == 0) { // jeśli przycisk jest cały czas wciśnięty, to dzięki zmiennej przycisk_wcisniety operacje zostną wykonane tylko raz
   przycisk_wcisniety=1;
   
   poziom ++;
   if(poziom > 3) poziom = 0;
    
  } 
  else if((PIND & PRZYCISK_PIN ) &&  przycisk_wcisniety == 1)
  {
   przycisk_wcisniety=0;
  }
    
  //obsługa przycisku*
   
  //Ustawienie wartoći PWM programowego (50 = 100% wypełnienia) zależeni od poziomu podświetlenia
   
  if (poziom == 0) 
  {
   NIEB_W = 15;
   CZER_W = 40;
   ZOLTY_W = 50;
   ZIEL_W = 50;
  } 
  else if (poziom == 1)
  {
   NIEB_W = 10;
   CZER_W = 30;
   ZOLTY_W = 40;
   ZIEL_W = 40;
  }
  else if (poziom == 2)
  {
   NIEB_W = 5;
   CZER_W = 20;
   ZOLTY_W = 30;
   ZIEL_W = 30;
  } 
  else 
  {
   NIEB_W = 0;
   CZER_W = 0;
   ZOLTY_W = 0;
   ZIEL_W = 0;
  }    
  
  //Ustawienie wartoći PWM programowego (50 = 100% wypełnienia) zależeni od iloć naciśnięć przycisku*
     
    }
}
 ISR(TIMER0_OVF_vect)
{ 
 i ++ ;

    //PWM Programowy
 
 if(i < NIEB_W) K_NIEBIESKI_ON; 
 else K_NIEBIESKI_OFF;

 if(i < CZER_W) K_CZERWONY_ON; //PWM Programowy
 else K_CZERWONY_OFF;
 
 if (j > 7) // miganie żółtych diod (krótkie mignięcia co kilka sek.)
 {
  if(i < ZOLTY_W) K_ZOLTY_ON;
  else K_ZOLTY_OFF;
 }
 else
 {
  K_ZOLTY_OFF;
 }
  
 
 if(i < ZIEL_W) K_ZIELONY_ON; 
 else K_ZIELONY_OFF;

 //PWM Programowy*
 
 
 if (i > 50) 
 {
  i = 0; 
  j ++; // zmienna odpowiadająca za miganie żółtych diod
 } 
}

Do pobrania: main.c (kopia)

Efekt końcowy moim zdaniem jest całkiem niezły, taka ozdoba bardzo fajnie reprezentuje się, szczególnie na parapecie ;).


Gotowa ozdoba, przód.




Gotowa ozdoba, tył.



Gotowa ozdoba, dół.


I na koniec krótki filmik pokazujący zmianę poziomu podświetlenia i migotanie gwiazd ;).




No i to byłoby na tyle, mam nadzieję, że się spodobało  ;)
Wesołych Świąt!
Rafal.J.645






Uwagi redakcji

Prosty projekt więc i uwag technicznych niewiele może być. Dobrą zasadą jest nie pozostawianie niepodłączonych wejść, co w przypadku tego projektu dotyczy ULN2803. Wejścia należało podłączyć do masy lub Vcc, by nie były antenkami: Zakłócenia w pracy mikrokontrolerów

W programie wielokrotne IF-y można zastąpić przez switch() lub tablice w pamięci FLASH.

4 komentarze:

  1. MISTRZOSTWO!! każdy kolejny projekt ciekawszy!

    OdpowiedzUsuń
  2. Mnie tam bardziej interesuje projekt tej frezarki. Frezowanie PCB to rzeczywiście fajny bajer. Czym ją sterujesz jeśli to nie tajemnica?

    OdpowiedzUsuń
  3. Interesują mnie dwie rzeczy:
    1. Czy jest możliwość udostępnienia projektu tej choinki i życzeń(do grawerowania)
    2. Czy mógłbś mi napisac coś więcej o frezarce wykozystanej do stworzenia tego projektu(jakieś zdjęcia, ew. model...) ?

    OdpowiedzUsuń
    Odpowiedzi
    1. Wysłałem mail do autora, ale niestety nie odpowiedział na pytania. :(

      Usuń