Autorul poate fi contactat la adresa: Login pentru adresa
Proiectul presupune simularea unei intersectii semaforizate in cruce. Se vor desena drumurile si si vor fi plasate LED-uri in structuri de tip semafor. Semafoarele pentru masini vor fi reprezentare prin 3 LED-uri, rosu, galben si verde, iar cele de pietoni prin 2 LED-uri, rosu si verde. Va exista totodata si o fotorezistenta, prin care vom verifica daca exista masina la semafor, caz in care semaforul se va face verde dupa un numar de secunde. La fiecare semafor de pieton va exista de asemenea un buton, asemanator cu cele de la semafoarele din oras.
Pentru a se urmari functionarea intersectiei se vor folosi figurine HotWheels. Observatorul va putea modifica starea semafoarelor din functionarea de zi in functionarea de noapte (mod galben intermitent) prin apasarea unui buton.
Butoanele vor fi apasate de pietonii care doresc sa traverseze strada. Acestia vor astepta un timp mai scurt sau mai lung, in functie cat timp a fost verde semaforul de la masini. Mai mult, in cazul in care nu se afla nicio masina in asteptare la semafor, fotorezistorul va detecta acest lucru. Semaforul masinilor se va face verde doar in cazul in care exista minim o masina care asteapta. Semaforul pietonilor se va face verde la 2 secunde dupa schimbarea culorii semaforului masinilor in rosu.
Componenta | Cantitate | Pret/bucata | Pret total | Precizari |
---|---|---|---|---|
Placa de baza | 1 | 8(placuta) + 40(componente) | 48 | |
Butoane | 9 | 0.24 | 2.16 | |
LED-uri rosii | 15 | 0.29 | 4.35 | |
LED-uri verzi | 15 | 0.3 | 4.5 | |
LED-uri galbene | 15 | 0.35 | 5.25 | |
Fire mama-mama | 50 | 7 lei(set 10) + 15 lei (set 40) | 22 | Nu am avut nevoie de toate |
Fire tata-tata | 10 | 7 lei(set 10) | 7 lei | 7 |
Fotorezistente | 6 | 3 | 18 | Cumparate de pe roboromania |
Rezistente LED-uri - 1k | 3 | 0.2 | 0.6 | Luate de la facultate |
Rezistente fotorezistente - 10k | 6 | 0.12 | 0.72 | |
Cablu alimentare | 1 | 3 | 3 | |
Distanțieri | 4 | 0.5 | 2 | |
Plexiglas | 1 | 8 | 8 | |
Suport LED | 25 | 0.3 | 7.5 | |
Pret total proiect | 133 lei |
Fotorezistorii au fost conectati la porturile PA0..4, iar butoanele la porturile PB3..5.
Ledurile intersectiei au fost legate sub forma de matrice pentru a facilita aprinderea lor, dar si pentru a folosi mai putini pini. Am legat LED-urile astfel:
Fiecare semafor de pietoni are butoane. Exista, in plus, un buton pentru a activa modul de noapte, adica galben intermitent, care va incepe dupa 3 flash-uri scurte ale tuturor semafoarelor.
Schema electrica a fost realizata in Eagle.
Mediu de dezvoltare
Am folosit Atmel Studio 7.0 pentru a scrie proiectul si pentru a-l compila. Pentru a incarca proiectul pe placa am folosit HID bootloader.
Biblioteci
#include <avr/io.h> #include <string.h> #include <avr/interrupt.h> #include <util/twi.h> #include <util/delay.h> #include <stdint.h> #include <stdbool.h> /**** Headere preluate din solutiile laboratorului 5 ***/ #include "i2c_master.h" #include "vector.h" #include "spi.h" #include "usart.h" #include "I2C_master.h" #include "MPL3115A2.h" #include "LSM9DS0.h" /**** Header propriu, folosit pentru fotorezistori ****/ #include "light_sensors.h"
Algoritmul de functionare
Aceasta este algortimul de functionare normal, in cazul in care este minim o masina la fiecare semafor.
In cazul in care numarul este inegal, se va face verde acel semafor la care sunt mai multe masini. Acest lucru se va detecta prin masurarea luminii din sala si compararea ei cu lumina masurata la fiecare semafor de masina. Acest semafor va sta verde 8 secunde, dupa care se va verifica din nou numarul de masini sau daca a fost apasat butonul pentru pietoni de la celalalt set de semafoare.
Funcţii implementate
Am implementat functii care aprind o anumita culoare de la un anumit semafor, dar si functii care aprind aceeasi culoare de la toate semafoarele, pentru a le folosi atunci cand toate semafoarele dau 3 flash-uri scurte inainte de intermitent, dar si pentru a implementa functia de galben intermitent. Apoi am implementat functii care faciliteaza aprinderea pentru o pereche de semafoare o culoare.
Totodata, avem o functie care trateaza intreruperile provocate de butoane.
Pentru fotorezistori am folosit functiile implementate in solutia din laborator.
void IO_init(); void turnOnBlue(int color); void turnOffBlue(int color); void turnOnGrey(int color); void turnOffGrey(int color); void turnOnPurple(int color); void turnOffPurple(int color); void turnOnWhite(int color); void turnOffWhite(int color); void turnOnAllRed(); void turnOffAllRed(); void turnOnAllGreen(); void turnOffAllGreen(); void turnOnAllYellow(); void turnOffAllYellow(); void turnOnSemaphores(char *where, int color); void turnOffSemaphores(char *where, int color); void flashAll(); ISR(PCINT1_vect); void intermitent(); void semaphore_cycle();
Mai sus se poate observa Hardware-ul final, compus din 2 placi de plexiglas, cea de sub fiind transparenta pentru a se putea observa cu usurinta firele.
Model de functionare al intersectiei poate fi observat in urmatorul filmulet: Scurta demonstratie
A fost unul dintre proiectele la care am lucrat cu foarte multa placere. Initial am fost reticenta, deoarece acesta a fost primul proiect care a avut o parte de Hardware, dar pe parcursul saptamnilor in care am lucrat la el, a inceput sa imi placa, mai ales ca eu am fost cea care a ales proiectul la care urma sa lucrez.
Am intampinat mici dificultati la inceput, deoarece nu eram obisnuita cu folosirea LetCon-ului si nici cu legarea firelor si a rezistentelor intre ele.
In momentul in care am inceput sa implementez partea de Software, am descoperit ca unii dintre pinii de pe placuta nu functionau, fapt ce a dus la pierderea de foarte mult timp, deoarece initial am cautat bug-uri in cod.
Am cumparat destul de multe piese in plus, deoarece nu stiam exact de ce o sa am nevoie.
Resurse Software
Resurse Hardware
Atmega 324 Datasheet Board Layout