Get the Flash Player to see this player.

time2online Joomla Extensions: Simple Video Flash Player Module
Światło na pilota

W poprzednim artykule opisałem jak odczytać kod z pilota. Mając te informację potrafimy zbudować praktycznie każde urządzenie sterowane pilotem począwszy od migających diodek, uruchamianych silników i grzałek, a skończywszy na sterowaniu komputerem i robotami. W dziale java zademonstrowałem jak zrobić sterownik do komputera, który będzie wychwytywał z portu COM1 różne sygnały i odpowiednio do nich wykonywał polecenia. Jak widać, żeby sterować komputerem trzeba oprócz wiedzy typowo sprzętowej należy także orientować się troszkę w językach programowania na tyle, żeby odebrać z portu liczby i coś z nimi zrobić.

Do zbudowania własnego urządzenia na pilota będzie nam potrzebna wiedza techniczna o tranzystorach, triakach i optotriakach. Najprościej myśląc są to bramki, które przepuszczają prąd w zależności od tego jaki sygnał otrzymają. Triaki przepuszczają prąd zmienny, a tranzystory prąd stały. Optotriaki , to takie triaki, który odizolowuje fizycznie dwa układy. Są tranzystory pnp i npn, różnią się one tylko sposobem załączenia, jedne odpala napięcie inne grand. Mając taką wiedzę można zdziałać cuda. Ponieważ sterowanie układami ogranicza się do wystawiania napięć na nóżkach. W naszym przykładzie będziemy sterować żarówką. Najprostszy program przewiduje włączenie i wyłączenie światła, czyli załączenie  lub wyłączenie napięcia na nóżce mikrokontrolera do której przylutowaliśmy optotriaka.

triak

Jeśli to wasz pierwszy kontakt z elektroniką, to zastanawiacie się skąd wiedziałem, że tak to trzeba przylutować. Odpowiedź na to pytanie jest bardzo prosta, bo tak było w nocie aplikacyjnej, którą można znaleźć np. tu http://kubuntu.free.fr/wiki/data/fp/moc3041.pdf.

Oczywiście to co przedstawiłem powyżej jest niczym innym jak budową przekaźnika. Nie musicie kupować tych elementów, aby zrobić własny przełącznik wystarczy kupić gotowy przekaźnik. Wybrać odpowiednie napięcie i tyle. Ale powyższy schemat pomoże wam zrozumieć jak dobierać poszczególne elementy i rozbuduje waszą wiedzę.

Tworzenie własnych urządzeń nie różni się niczym od układania klocków lego. Najpierw myślimy co chcemy zrobić, potem szukamy elementów, a na końcu budujemy. Oczywiście z czasem zaczniecie czuć, gdzie jaki element wcisnąć, ale najpierw popalicie troszkę układzików i przesiedzicie masę czasu przed internetem, tu polecam http://www.elektroda.pl . Na naszym obrazku Element1 jest naszą żarówką, może być równie dobrze grzałką, albo silnikiem. Wymieniając żarówkę na coś innego trzeba zmienić tylko i wyłącznie triaka na takiego, który nam odpowiada.

Jako, że jest to pierwsze urządzenie, które pokazuje, to postaram się je opisać dokładnie. Cały układ podłączony jest do Portu A nóżka druga (PA1, bo liczone od zera) przez rezystor 330Ohm, po to żeby nie spalić diody w optotriaku. Optotriak odizolowuje cały układ od naszego mikrokontrolera. Jeśli wystąpi jakieś przebicie to spali się tylko optotriak. Gdy pojawi się napięcie na nóżce PA1 zaczyna płynąć prąd i dioda w optotriaku zaczyna świecić. Gdy dioda świeci optotriak zaczyna przepuszczać prąd. Rezystory R1 i R6 ograniczają prąd płynący przez optotriak. Z noty wynika, że ten prąd nie może być większy jak 1A w naszym przypadku to I=U/R, czyli 0,33A. Oczywiście jest to wartość skuteczna prądu, więc skacze w górę i w dół. Rezystor R2 jest praktycznie nie potrzebny, ogranicza on prąd bazy triaka, więc warto go tam umieścić. Widzimy, że gdy przez optotriak przepłynął prąd, to na bazie traika BTA12/600B pojawiło się napięcie i tym samym triak się otworzył co spowodowało zaświecenie się żarówki. Do omówienia został jedynie opornik R5 i kondensator C1, są one praktycznie nie potrzebne do prawidłowego działania urządzenia. Mają one na celu wygładzać skoki napięcia, które mogłyby zniszczyć nasz układ przy naprawdę dużym pechu. Jeśli widzicie gdzieś kondensator przylutowany miedzy napięciem a grandem, to jest to tak zwany kondensator odszumiający, czyli wygładzający szpilki. Z czasem będziecie lutować je, gdzie tylko się da. One nigdy nie szkodzą, a czasem pomagają. Pamiętajcie także o tym, aby nie instalować zbyt blisko mikrokontrolera urządzeń na prąd zmienny. Ponieważ w naszym procesorze mogą indukować się niepożądane prądy i wpływać na pracę urządzenia. Przy pierwszym moim urządzeniu na prąd zmienny, podczas wgrywania programu w mikrokontrolerze zostały zmienione fusebity i procesor został zblokowany.

#include <inttypes.h>
#include <avr/io.h>
#include <stdlib.h> 
#include <avr/interrupt.h>    // funkcje sei(), cli()
#include <avr/signal.h>     // definicje SIGNAL, INTERRUPT
#include <stdio.h> 
#include <math.h>
#include <avr/io.h>
#include <util/delay.h>
#include "LCD.h"

volatile uint8_t Data,Last,value = 0;


void IR_Initiate(void)
{
 DDRD  &= ~(1<<PD3);           // konfiguracja PD3 jako wejście
 PORTD |= (1<<PD3);           // enable internal pull-up resistors
 MCUCR |= (1<<ISC11);  //zewnetrzene przerwanie zbocze opadajace
 MCUCR &= ~_BV(ISC10); // to samo co wyzej
 GICR |= (1<<INT1);//Włączenie przerwania rozpoczęcia
}



SIGNAL(SIG_INTERRUPT1)
{
 TCCR2 |= (1<<WGM21)|(1<<CS22)|(1<<CS20); // pre 128
 GICR &= ~(1<<INT1); //wyłączenie przerwania
 Data&=0;
 Last&=0;
 OCR2 = 85;//Pierwsza pętla 1,35ms
 TIMSK |= (1<<OCIE2); //przerwanie porownania OCR z wartoscia licznika2
 TCNT2=0;
 PORTD |= (1<<PD3);           // enable internal pull-up resistors

}

SIGNAL(SIG_OUTPUT_COMPARE2)
{
 Last++;
 if (Last>=7)
 {
 Data = Data * 2; //mnozy przez 2 (przesuwa bity w lewo)
 if(bit_is_clear(PIND,PD3 )){Data++;};
 }
 OCR2 = 112; // pętla 1,8ms
 if (Last>=14)
 {
 
 TIMSK &= ~(1<<OCIE2); //wylaczenie przerwanie porownania OCR z wartoscia licznika2
 if (Data!=0)
 {
 LCD_clear();
 LCD_uint16xy(Data,0, 1);
 if(Data==59)  //prawo 
 {
 PORTD &=0b11111100;
 }
 if(Data==12)  //prawo 
 {
 PORTD |=0b00000011;
 }
 
 }
 GICR |= _BV(INT1);//Włączenie przerwania rozpoczęcia
 
 } 
}

int main(void)
{
 DDRD = 255;
 DDRB = 255;
 PORTB = 255;
 PORTD = 0xFF;
 
 IR_Initiate(); //podczerwien
 sei();                // włącz obsługę przerwań 
 LCD_start();
while (1) 
{
 _delay_ms(1500);
 
}
}

Kliknij, aby pobrać program