Płytka aplikacyjna APP003 – sygnalizacja świetlna na skrzyżowaniu


Tematy pokrewne   Podrozdziały
(w budowie)
  Płytka aplikacyjna APP003
Wykonanie sygnalizatora
Program dla sygnalizatora

 

 

Płytka aplikacyjna APP003

 
   
Dotychczasowe projekty służyły tylko nauce programowania portu B mikrokontrolera. Teraz nadszedł czas, aby wykonać coś praktycznego. Stworzymy projekt sterowania sygnalizatorem świetlnym na skrzyżowaniu drogowym. Tego typu sygnalizatory można umieszczać np. na kolejowych makietach modelarskich, co znacznie je wzbogaci. W takim przypadku ze względu na skalę należy zastosować małe diody SMD 6302. W naszym projekcie użyjemy nieco większych diod przewlekanych o średnicy 3mm.

Sygnalizator będzie się składał z 5 diod LED: trzech dla ruchu pojazdów (zielona, pomarańczowa i czerwona) oraz dwóch dla ruchu pieszych (zielona i czerwona). Dodatkowo będzie zastosowana zworka goldpin M do wyboru trybu pracy sygnalizatora.

Sygnalizator będzie pracował w dwóch trybach:

  1. Praca normalna – w tym trybie będą wykonywane cykle włączania świateł dla ruchu pojazdów oraz pieszych (zworka M rozwarta).
  2. Praca awaryjna – będzie mrugało światło pomarańczowe, reszta będzie zgaszona (zworka M zwarta).

Ze specyfikacji wynika, że będziemy musieli obsługiwać 6 elementów. Ponieważ mamy do dyspozycji tylko 5 linii portu B, diody LED dla pieszych będą obsługiwane pojedynczą linią. Dla tych diod zastosujemy obniżenie napięcia zasilającego za pomocą tranzystora BC547 i dzielnika oporowego, co już robiliśmy dla płytek APP002.

Górę sygnalizatora wykonamy z tektury w postaci skrzynki z osłonami na światła:

Wewnątrz rurki poprowadzimy przewody, które będą przylutowane do płytki sterującej APP003. Najpierw schemat elektryczny. Dla diod LED przyjmijmy prąd 5mA.

Spis elementów:

Element Ilość Opis
Złącze kątowe męskie 2 x 4 Goldpin 1 Połączenie z APP000
goldpin 2x1 1 Zworka trybu M
opornik 56Ω/0,125W 1 –(                )–
opornik 390Ω/0,125W 3 –(                )–
opornik 470Ω/0,125W 2 –(                )–
opornik 1kΩ/0,125W 1 –(                )–
Tranzystor BC547 1  
Dioda LED 3mm czerwona 2  
Dioda LED 3mm zielona 2  
Dioda LED 3mm pomarańczowa 1  

 

W programie Eagle zaprojektujemy dwie płytki PCB: jedną do sygnalizatora, drugą jako APP003, podłączaną do płytki bazowej APP000. Sygnalizator będzie przyklejony do APP003 za pomocą mocnego kleju – np. Poxipol. Wykonanie sygnalizatora wymaga pewnych umiejętności modelarskich.

Utwórz nowy projekt w Eagle o nazwie APP003. W projekcie utwórz schemat app003_tl.sch. Na schemat wstaw elementy:

frames  A5L-LOC  (ramka)

led  LED  LED3MM x 5  (diody LED)

wirepad  1,6/0,8 x 7  (pole lutownicze do przylutowania przewodu)

Elementy ustaw i nazwij tak jak na poniższym rysunku:

Połącz elementy połącz przewodami za pomocą narzędzia Net:

Schemat sygnalizatora jest gotowy. Przejdź do edytora PCB i ułóż na płytce elementy. Powinieneś otrzymać coś takiego:

Diody GX i RX (zielona i czerwona dla pieszych) powinny być przylutowane pod katem 90º w stosunku do pozostałych diod, ponieważ będą świeciły z boku

W projekcie APP003 utwórz nowy schemat app003.sch. Umieść na nim elementy:

frames  A5L-LOC  (ramka)

wirepad  1,6/0,8 x 7  (pole lutownicze do przylutowania przewodu)

pinhead  PINHD-2X4  PINHD-2X4/90 x 1 (goldpiny kątowe męskie do połączenia z płytką bazową, element obróć o 180º i odbij lustrzanie)

pinhead  PINHD-1X2  PINHD-1X2 x 1 (zworka M)

supply1   Vcc x 2 (zasilanie)

supply1   GND x 4 (masa)

rlc   R-EU   R-EU_0204/7 x 7 (oporniki)

transistor  BC547 x 1

Wstawione elementy rozmieść i nazwij następująco:

Elementom nadaj wartości i połącz przewodami za pomocą narzędzia Net:

Przejdź do edytora PCB, rozmieść elementy na płytce i połącz je ścieżkami:

 

 

 

Wykonanie sygnalizatora

 
   
Cały sygnalizator wykonamy z kartonu i tektury (możesz użyć bardziej trwałych materiałów). Poniżej opisujemy kolejne etapy tej pracy.

Po wykonaniu płytek PCB wlutuj w nie elementy elektroniczne. Do płytki sygnalizatora wlutuj 7 cienkich przewodów od strony ścieżek (aby nie zasłaniały diod LED). Przewody powinny być różnokolorowe, aby później ich nie pomylić przy wlutowywaniu do płytki APP003. Możesz tutaj użyć przewodów z kabla sieciowego UTP.

Po przylutowaniu przewodów zetnij ich końcówki od strony zewnętrznej i płytkę delikatnie przeszlifuj drobnym papierem ściernym, aby nic nie wystawało z jej powierzchni. Przylutuj diody LED. Diody do sygnalizacji dla samochodów przylutuj normalnie, natomiast diody do sygnalizacji dla pieszych przylutuj pod katem prostym, jak na poniższym zdjęciu.

Zapisz sobie, jaki sygnał przenosi każdy przewód, gdyż trzeba będzie je przylutować w odpowiedni sposób do płytki APP003. W dalszej kolejności przystąpimy do budowy korpusu sygnalizatora.

Przygotuj kawałek tekturki lub kartonu o grubości około 0,5 mm. Wytnij trzy otwory o średnicy 3mm (ja zrobiłem to wybijakiem do skóry)  i takim położeniu, aby swobodnie wchodziły w nie trzy diody sygnalizacyjne. Wytnij pasek z tymi otworami o szerokości dopasowanej do płytki PCB sygnalizatora.

Z paska wytnij odpowiedniej szerokości prostokąt – powinien zachodzić na cokoły diod sygnalizacji dla pieszych. Każdą wyciętą część korpusu sygnalizatora pomaluj na czarno, np. tuszem lub atramentem. Przed lepieniem wszystko dokładnie wysusz. W ten sam sposób wykonaj bok z otworami na diody sygnalizacji dla pieszych, drugi bok oraz tył korpusu. Całość zlep dobrym klejem (butapren, superglue), aby tworzyło małą skrzyneczkę.

Z końcówek przewodów ściągnij izolację na długości około 5mm. Przewody w wiązce ustaw tak, aby pasowały do otworów w płytce APP003 (na razie ich nie wyginaj, ważne aby były z dobrej strony). Teraz wykonamy rurkę, w której znajdą się te przewody. Wyszukaj kawałek pręta o średnicy 3mm. Z papieru wytnij pasek o długości 6cmm i szerokości o 1...1,5cm mniejszej niż długość przewodów sygnalizatora.

Nawiń ciasno na pręcie jedną warstwę papieru, po czym resztę posmaruj klejem i nawiń do końca. Szczególnie polecam niedoceniany przez ogół klej Brand Clear Glue. Bardzo tani (80gr) i bardzo dobry, jeśli się wie, jak należy się nim posługiwać. Jako modelarz kartonowy często z niego korzystam. Zasada jest bardzo prosta – na sklejana powierzchnię należy położyć bardzo cienką warstwę kleju, po czym na chwilę docisnąć sklejane elementy. Po wyschnięciu klej znika z papieru i tworzy mocną, twardą spoinę. Zatem rurka sklejona tym klejem będzie twarda i sztywna, jak z tworzywa. Rurkę po wyschnięciu pomaluj na czarno.

Całość zmontuj i przylutuj do płytki APP003. Na spód rurki sygnalizatora zamontuj jakiś cokół, aby ukryć przewody. Sygnalizator pomaluj lakierem bezbarwnym, aby zabezpieczyć papier przed uszkodzeniami.

 

 

 

Program dla sygnalizatora

 
   
Najpierw musimy zdefiniować funkcje poszczególnych linii portu B mikrokontrolera. Zgodnie ze schematem mamy:
PB0 – zworka M, zwarta: praca awaryjna, rozwarta: praca normalna

PB1 – światło zielone dla samochodów
PB2 – światło żółte dla samochodów
PB3 – światło czerwone dla samochodów

PB4 – światło zielone/czerwone dla pieszych:
0: świeci się dioda czerwona
1: świeci się dioda zielona

Teraz określimy cykl pracy sygnalizatora. W pracy awaryjnej (przy zwartej zworce M) mruga dioda żółta z okresem 1 sekundy. W pracy normalnej obowiązuje poniższy diagram czasowy:

S oznacza światła dla samochodów, P dla pieszych. Każda działka na wykresie to 1 sekunda. Sygnalizacja dla samochodów w 14 sekundzie ma zapalone światło czerwone i żółte przez 1 sekundę, po czym następuje zmiana na światło zielone. Sygnalizacja dla pieszych od 9 do 13 sekundy mruga światłem zielonym z okresem 1 sekundy, po czym zapala światło czerwone.

Na podstawie tego diagramu rozpiszemy działanie świateł w kolejnych sekundach cyklu pracy sygnalizatora. Następnie powiążemy sygnały świetlne ze stanem linii portu mikrokontrolera.

Faza Sekunda PB4 PB3 PB2 PB1
0 1 0 1 0 0
1 2...8 1 1 0 0
2 9...13 NA/1 1 0 0
3 14 0 1 1 0
4 15...27 0 0 0 1
5 28...29 0 0 1 0

Cały cykl pracy sygnalizatora składa się z 5-ciu faz 0...5. W fazie nr 2 światło zielone dla pieszych mruga co 1 sekundę (świeci przez 0,5 sekundy i jest zgaszone przez 0,5 sekundy).

/*
 * main.c
 *
 *  Created on: 30 paź 2015
 *      Author: Geo
 */

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

int main(void)
{
    int faza = 0,i;
    DDRB = 0b01110;          // PB4:we, PB3,PB2,PB1:wy, PB0:we
    PORTB = 1;               // Do PB0 opornik podciągający
    while(1)
    {
        if(!(PINB & 1))      // Praca awaryjna?
        {
            faza = 0;
            DDRB = 0b01110;
            PORTB = 0b00101; // Zaświecamy diodę żółtą
            _delay_ms(500);  // Czekamy 1/2 sekundy
            PORTB = 0b00001; // Gasimy diodę żółtą
            _delay_ms(500);  // Czekamy 1/sekundy
        }
        else  // Praca normalna
        {
            switch(faza)
            {
                case 0: DDRB  = 0b11110;
                        PORTB = 0b01001;
                        _delay_ms(1000);
                        break;
                case 1: PORTB = 0b11001;
                        for(i = 0; i < 7; i++) _delay_ms(1000);
                        break;
                case 2: for(i = 0; i < 5; i++)
                        {
                            DDRB = 0b11110;
                            PORTB = 0b11001;
                            _delay_ms(500);
                            DDRB = 0b01110;
                            PORTB = 0b01001;
                            _delay_ms(500);
                        }
                        break;
                case 3: DDRB  = 0b11110;
                        PORTB = 0b01101;
                        _delay_ms(1000);
                        break;
                case 4: PORTB = 0b00011;
                        for(i = 0; i < 13; i++) _delay_ms(1000);
                        break;
                case 5: PORTB = 0b00101;
                        for(i = 0; i < 2; i++) _delay_ms(1000);
                        break;
            }
            faza++;
            if(faza == 6) faza = 0;
        }
    }
}

 

W programie zastosowaliśmy nowy rozkaz switch(). Jest to tzw. instrukcja wyboru o następującej składni:

 

switch(wyrażenie)
{
  case stała1: kod;
  case stała2: kod;
  ...
  default: kod;
}

Instrukcja działa w następujący sposób:

Obliczana jest wartość wyrażenia podanego w instrukcji switch. Wartość ta jest kolejno porównywana z wartościami stałych za słowami case. Jeśli Bedzie zgodność, to mikrokontroler rozpocznie wykonywanie kodu programu od miejsca za zgodną stałą w dół instrukcji switch. Jeśli przed następną stałą chcemy przerwać wykonywanie kodu, to umieszczamy tam instrukcję break, która powoduje wyjście ze switch.

Jeśli żadna ze stałych nie pasuje do wartości wyrażenia, zostanie wykonany kod za default. Inaczej następuje wyjście ze switch.

Instrukcja swich pozwala w wygodny sposób reagować na wybrane wartości wyrażenia. W naszym programie wyrażeniem jest zawartość zmiennej faza. W zależności od tej wartości wykonywany jest kod włączający określony układ świateł na sygnalizatorze.

 

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.