Appunti di TDP Documentazione del progetto semaforo Gestione di un impianto semaforico Ing. Giovanni Cirio 1 di 21 21/12/12 Appunti di TDP Gli alunni che hanno collaborato alla realizzazione dell’impianto semaforico sono: 2. Aonzo Davide 3. Batenko Glib 4. Cavallo Alberto 5. Cirio Gabriele 6. Crispino Christian 7. Di Gangi Andrea 8. Di Lieto Alfonso 9. Donzellini Roberto 10. Forgione Andrea 11. Germinario Andrea 12. Leone Fabio 13. Manti Piero 14. Mavilia Manuel 15. Mazzurini Michel 16. Mel Gabriele 17. Ramasso Mauro 18. Schiavo Andrea 19. Sciutto Alex 20. Vacca Rossano I professori che hanno partecipato alla realizzazione dell’impianto semaforico sono: 21.Prof. Cirio Giovanni per la progettazione 22.Prof. Bianco Fernando per il laboratorio 23.Prof. Lodrini Angie per le parti in inglese Ing. Giovanni Cirio 2 di 21 21/12/12 Appunti di TDP Realizzazione di un impianto semaforico automatizzato. Si è deciso all'inizio dell'anno scolastico, di realizzare, di concerto fra classe e docenti interessati, un impianto semaforico automatizzato, un parcheggio con contaposti automatico e un autovelox posto in una strada laterale. Ci è parso utile capirne il funzionamento in quanto sono impianti presenti nella vita quotidiana di ogni singolo cittadino. L'incrocio è formato da quattro strade intersecate e regolamentate mediante lanterna semaforica, quattro svincoli a destra privi di semaforo, un parcheggio con display visualizzante la capienza residua e infine, in una strada secondaria, un rilevatore di velocità la quale sarà poi visualizzata su un display. La gestione dei vari dispositivi elettronici è affidata a un PC poiché è già pronto all'uso ma in un ambiente industriale si userebbe una scheda dedicata a microprocessore. Il linguaggio software di progettazione usato è il C++ poiché esso è conosciuto e utilizzato a livello mondiale in molti campi (universitario, di ricerca ecc.) ed è molto versatile. In ambito industriale è preferibile utilizzare l'Assembler poiché l'hardware interessato è caratterizzato dalla presenza di un microprocessore programmabile in linguaggio macchina. Le fasi di lavoro sono: 1) Realizzazione del plastico in ogni sua parte; 2) Montaggio dei vari circuiti elettronici; 3) Programmazione in C++; 4) Prove e verifiche di funzionamento ; 5) Stesura della documentazione; 6) Redazione del manuale d'uso. Ing. Giovanni Cirio 3 di 21 21/12/12 Appunti di TDP Schema a blocchi del progetto: (Mel) Ing. Giovanni Cirio 4 di 21 21/12/12 Appunti di TDP Ing. Giovanni Cirio 5 di 21 21/12/12 Appunti di TDP Schema a blocchi della gestione del parcheggio (Mel) Alimentat ore 12 ; 5 [V d.c] Monitor -PC Planimetria Software di gestione L P T 1 8+4 Bit L A T C H Elementi incrocio: Lampade e avvisatori acustici 30 Bit A D 2 A 1 C Tast iera C P C 1 A 2 D 1 B 2 D B 1 D P C 2 B (Germinario, Mel, Forgione 5^B) Specifiche di funzionamento dell’incrocio semaforico: L’impianto è composto principalmente da 6 stati: Stato 1 A1= Verde A2= Rosso B1= Verde B2= Rosso C1= Rosso C2= Rosso Cp= Verde D1= Rosso D2= Rosso Dp= Verde Ing. Giovanni Cirio Stato 2 Stato 3 Stato 4: Stato 5 Stato 6 A1= Giallo A2= Rosso B1= Giallo B2= Rosso C1= Rosso C2= Rosso Cp= Giallo D1= Rosso D2= Rosso Dp= Giallo A1= Rosso A2= Verde B1= Rosso B2= Verde C1= Rosso C2= Verde Cp= Rosso D1= Rosso D2= Verde Dp= Rosso A1= Rosso A2= Giallo B1= Rosso B2= Giallo C1= Rosso C2= Verde Cp= Rosso D1= Rosso D2= Verde Dp= Rosso A1= Rosso A2= Rosso B1= Rosso B2= Rosso C1= Verde C2= Verde Cp= Rosso D1= Verde D2= Verde Dp= Rosso A1= Rosso A2= Rosso B1= Rosso B2= Rosso C1= Giallo C2= Giallo Cp= Rosso D1= Giallo D2= Giallo Dp= Rosso 6 di 21 21/12/12 Appunti di TDP Tempo = 50s Tempo = 10s Tempo = 30s Tempo = 10s Tempo = 40s Tempo = 10s Progettazione del software di gestione: Si memorizzano i 6 stati in 4 byte che vengono inviati alla porta dati e scritti nei 4 latch ls373. La corrispondenza bit-lampada è la seguente: byte4 d7 byte3 d0 d7 byte2 d0 d7 byte1 d0 d7 d0 V G R V G R V G R V G R V G R V G R V G R V G R V G R V G R Dp D2 D1 Cp C2 C1 B2 B1 A2 La porta controllo invece abilita la scrittura nei diversi latch con la corrispondenza: C3 C2 C1 C0 latch4 latch3 latch2 latch1 Struttura dati: memorizziamo i 4 byte dello stato 1 nella variabile stato1[4] e cosi via stato1[] Byte 1 12 stato2[] Byte 1 1 1 1 1 147 Byte 2 1 Byte 3 1 1 48 Byte 3 Byte 4 1 1 33 Byte 4 1 97 stato4[] Byte 1 24 Byte 2 38 Byte 3 12 Byte 4 1 73 stato6[] Byte 1 1 66 Byte 2 1 1 134 Byte 3 12 Byte 4 1 1 Byte 2 1 stato3[] Byte 1 1 1 Byte 2 1 1 Byte 3 1 Byte 4 1 1 1 1 stato5[] Byte 1 1 Byte 2 1 Byte 3 1 Byte 4 1 1 1 1 1 1 1 138 1 146 40 1 1 1 17 1 1 81 1 20 1 1 1 1 1 1 1 38 1 10 1 73 1 1 1 1 1 69 1 1 34 1 10 La scrittura dello statoi sulla porta dati avverrà con un pseudocodice tipo out(pcontrollo,0001); out(pdati,statoi[1]); // abilita e scrive nel latch1 Ing. Giovanni Cirio 7 di 21 21/12/12 A1 Appunti di TDP out(pcontrollo,0010); out(pdati,statoi[2]); out(pcontrollo,0100); out(pdati,statoi[3]); out(pcontrollo,1000); out(pdati,statoi[4]); // // // “ “ “ latch2 latch3 latch4 Pseudocodice: byte stato1[4]=[12, 147, 48, 33]; stato2[4]=[138, 146, 40, 17]; stato3[4]=[97, 24, 38, 12]; stato4[4]=[81, 20, 38, 10]; stato5[4]=[73, 66, 134, 12]; stato6[4]=[73, 34, 69, 10]; int normale; // usata come flag per terminare i vari eventi avviati dai pulsanti GUI: WxButtonAvvio WxButtonSpento WxButtonLampeggiante WxEdit7 WxEditStato1 WxEditStato1 WxEditStato1 WxEditStato1 WxEditStato1 WxEditStato1 WxButtonReset Inizializziamo i tempi standard 50 10 30 10 40 10 -> -> -> -> -> -> WxEditStato1 WxEditStato2 WxEditStato3 WxEditStato4 WxEditStato5 WxEditStato6 Ai pulsanti associamo il pseudocodice: void semaforoFrm::WxButtonAvvioClick(wxCommandEvent& event) { normale=1; do { out(pcontrollo,0001); out(pdati,stato1[1]); out(pcontrollo,0010); out(pdati,stato1[2]); out(pcontrollo,0100); out(pdati,stato1[3]); out(pcontrollo,1000); out(pdati,stato1[4]); aspetta(WxEditStato1); out(pcontrollo,0001); out(pdati,stato2[1]); out(pcontrollo,0010); out(pdati,stato2[2]); out(pcontrollo,0100); out(pdati,stato2[3]); out(pcontrollo,1000); out(pdati,stato2[4]); aspetta(WxEditStato2); Ing. Giovanni Cirio 8 di 21 21/12/12 Appunti di TDP out(pcontrollo,0001); out(pdati,stato3[1]); out(pcontrollo,0010); out(pdati,stato3[2]); out(pcontrollo,0100); out(pdati,stato3[3]); out(pcontrollo,1000); out(pdati,stato3[4]); aspetta(WxEditStato3); out(pcontrollo,0001); out(pdati,stato4[1]); out(pcontrollo,0010); out(pdati,stato4[2]); out(pcontrollo,0100); out(pdati,stato4[3]); out(pcontrollo,1000); out(pdati,stato4[4]); aspetta(WxEditStato4); out(pcontrollo,0001); out(pdati,stato5[1]); out(pcontrollo,0010); out(pdati,stato5[2]); out(pcontrollo,0100); out(pdati,stato5[3]); out(pcontrollo,1000); out(pdati,stato5[4]); aspetta(WxEditStato5); out(pcontrollo,0001); out(pdati,stato6[1]); out(pcontrollo,0010); out(pdati,stato6[2]); out(pcontrollo,0100); out(pdati,stato6[3]); out(pcontrollo,1000); out(pdati,stato6[4]); aspetta(WxEditStato6); } } while(normale=1); void semaforoFrm::WxButtonSpentoClick(wxCommandEvent& event) { out(pcontrollo,0001); out(pdati,0); out(pcontrollo,0010); out(pdati,0); out(pcontrollo,0100); out(pdati,0); out(pcontrollo,1000); out(pdati,0); } void semaforoFrm::WxButtonLampeggianteClick(wxCommandEvent& event) { normale=0; do { out(pcontrollo,0001); out(pdati,146); // gialli accesi out(pcontrollo,0010); out(pdati,36); out(pcontrollo,0100); out(pdati,73); out(pcontrollo,1000); out(pdati,18); aspetta(3); out(pcontrollo,0001); out(pdati,0); // gialli spenti out(pcontrollo,0010); out(pdati,0); out(pcontrollo,0100); out(pdati,0); out(pcontrollo,1000); out(pdati,0); } while(normale==0) } void semaforoFrm::WxButtonResetClick(wxCommandEvent& event) { 50 -> WxEditStato1 10 -> WxEditStato2 30 -> WxEditStato3 10 -> WxEditStato4 40 -> WxEditStato5 10 -> WxEditStato6 } Ing. Giovanni Cirio 9 di 21 21/12/12 Appunti di TDP Codice realizzato per windows98: inizio: CLS REM dichiadazione delle variabili DIM m AS INTEGER 'm e' un num intero che sta per modalita': 1,2 ecc.. WRITE "Seleziona numero della modalita di funzionamento del semaforo e premi INVIO" WRITE "1 avvio funzionamento normale" WRITE "2 modalita' lampeggio" WRITE "3 tutto spento" WRITE "4 esci dal programma" INPUT m REM-----------------------------------------------------------------------IF m = 1 THEN DO CLS REM invio stato_1 OUT 890, 10 OUT 888, 12 OUT 890, 9 OUT 888, 147 OUT 890, 15 OUT 888, 48 OUT 890, 3 OUT 888, 33 WRITE "Running stato_1" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 100000 STEP 1 NEXT CLS REM invio stato_2 OUT 890, 10 OUT 888, 138 OUT 890, 9 OUT 888, 146 Ing. Giovanni Cirio 10 di 21 21/12/12 Appunti di TDP OUT 890, 15 OUT 888, 40 OUT 890, 3 OUT 888, 17 WRITE "Running stato_2" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 100000 STEP 1 NEXT CLS REM invio stato_3 OUT 890, 10 OUT 888, 97 OUT 890, 9 OUT 888, 24 OUT 890, 15 OUT 888, 38 OUT 890, 3 OUT 888, 12 WRITE "Running stato_3" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 100000 STEP 1 NEXT CLS REM invio stato_4 OUT 890, 10 OUT 888, 81 OUT 890, 9 OUT 888, 20 OUT 890, 15 OUT 888, 38 OUT 890, 3 OUT 888, 12 WRITE "Running stato_4" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 100000 STEP 1 NEXT CLS REM invio stato_5 Ing. Giovanni Cirio 11 di 21 21/12/12 Appunti di TDP OUT 890, 10 OUT 888, 73 OUT 890, 9 OUT 888, 66 OUT 890, 15 OUT 888, 134 OUT 890, 3 OUT 888, 12 WRITE "Running stato_5" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 100000 STEP 1 NEXT CLS REM invio stato_6 OUT 890, 10 OUT 888, 73 OUT 890, 9 OUT 888, 34 OUT 890, 15 OUT 888, 69 OUT 890, 3 OUT 888, 10 WRITE "Running stato_6" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 100000 STEP 1 NEXT LOOP WHILE INKEY$ <> "q" ON 1 GOTO inizio: RETURN REM-----------------------------------------------------------------------ELSEIF m = 2 THEN REM invio_stato_giallo_acceso DO CLS OUT 890, 10 OUT 888, 146 OUT 890, 9 Ing. Giovanni Cirio 12 di 21 21/12/12 Appunti di TDP OUT 888, 36 OUT 890, 15 OUT 888, 73 OUT 890, 3 OUT 888, 18 WRITE "GIALLO ACCESO" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 40000 STEP 1 NEXT CLS REM invio stato_giallo_spento OUT 890, 10 OUT 888, 0 OUT 890, 9 OUT 888, 0 OUT 890, 15 OUT 888, 0 OUT 890, 3 OUT 888, 0 WRITE "GIALLO SPENTO" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 30000 STEP 1 NEXT LOOP WHILE INKEY$ <> "q" ON 1 GOTO inizio: RETURN REM-----------------------------------------------------------------------ELSEIF m = 3 THEN REM modalita' SEMAFORO SPENTO DO CLS OUT 890, 10 OUT 888, 0 OUT 890, 9 OUT 888, 0 OUT 890, 15 OUT 888, 0 OUT 890, 3 OUT 888, 0 Ing. Giovanni Cirio 13 di 21 21/12/12 Appunti di TDP WRITE "E' in esecuzione modalita TUTTO SPENTO" WRITE "Per tornare al menu' principale premere tasto q" FOR i = 1 TO 100000 STEP 1 NEXT FOR i = 1 TO 100000 STEP 1 NEXT LOOP WHILE INKEY$ <> "q" ON 1 GOTO inizio: RETURN REM-----------------------------------------------------------------------ELSEIF m = 4 THEN CLS WRITE "Premere un tasto per terminare programma" ELSEIF (m > 4) THEN WRITE "il numero selezionato e errato! Riprova!" FOR i = 1 TO 100000 STEP 1 NEXT ON 1 GOTO inizio: RETURN END IF END Ing. Giovanni Cirio 14 di 21 21/12/12 Appunti di TDP Interfaccia latch J1 74LS373 OE D7 D6 D5 D4 D3 D2 D1 D0 E Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 74LS373 OE D7 D6 D5 D4 D3 D2 D1 D0 E Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 74LS373 OE D7 D6 D5 D4 D3 D2 D1 D0 E Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 74LS373 OE D7 D6 D5 D4 D3 D2 D1 D0 Ing. Giovanni Cirio 15 di 21 E Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0 21/12/12 Appunti di TDP Circuito Stampato in doppia faccia: Ing. Giovanni Cirio 16 di 21 21/12/12 Appunti di TDP Funzionamento interfaccia latch La porta parallela è formata dalla porta controllo e porta dati, che mandano dati in uscita, e dalla porta stato. La porta controllo è collegata agli enable dei latch, che a livello alto abilitano la scrittura nei relativi flip flop, a livello basso disabilitano la scrittura nei relativi flip flop. La porta dati è collegata agli ingressi degli 8 flip flop del 373. la scrittura nei 4 latch avviene nel seguente modo: attraverso la porta controllo si abilita il latch numero 1, -outp(valore, pcontrollo), e successivamente si invia lo stato numero 1 alla porta dati, -outp(valore, pdati). Si abilita a questo punto il latch numero 2 e si scrive il byte relativo allo stato 2, così per gli altri stati. Siccome la scrittura avviene con tempi dell'ordine del micro secondo, la successiva scrittura nei quattro latch appare istantanea. Ciò significa che abbiamo la possibilità di gestire 32 bit di uscita. A tali bit è collegata l'interfaccia che pilota i led dell'impianto semaforico descritta più avanti. Alimentatore: schema elettrico Funzionamento: L’alimentatore è composto dai seguenti elementi collegati in cascata: 1) Trasformatore: Riduce la tensione di rete in ingresso da 220V a 18V. 2) Raddrizzatore: Costituito da un ponte di diodi che funge da raddrizzatore a doppia semionda, il funzionamento del dispositivo è il seguente: due diodi lasciano passare le semionde positive e due le semionde negative costituendo cosi un polo positivo e un polo negativo. Ing. Giovanni Cirio 17 di 21 21/12/12 Appunti di TDP 3) Filtro: Costituito da condensatori collegati in parallelo nello stadio prima del regolatore di tensione e in quello successivo. La sua funzione è quella di, nelle loro fasi di scarica, congiungere le semionde positive nella loro parte alta, dando un primo livellamento alla tensione in ingresso ed in uscita dal regolatore di tensione. 4) Regolatore di tensione: E’ un dispositivo integrato che livella e stabilizza la tensione alla propria uscita. La tensione in uscita dal regolatore è determinata dal tipo di integrato che può fornire varie tensioni e varie correnti. Pilotaggio lampade: Schema elettrico Funzionamento del pilotaggio di un diodo led (Leone) Quando l'onda quadra in ingresso al circuito raggiunge ampiezza 5V la resistenza Rb viene attraversata da una corrente che porta in conduzione il transistor. L'alimentazione Vcc genera una corrente che attraversa il led ,illuminandolo, il collettore e dall'emettitore giunge a massa. Quando l'onda quadra si presenterà, con valore zero volt sulla base del transistor, lo stesso andrà in interdizione e per tanto la corrente di collettore si annullerà spegnendo il led. Dimensionamento delle resistenze Rb e Rc considerando una tensione di alimentazione di 12V: Il transistor funziona con la seguente legge: Ic = hfe* Ib hfe ≈ 200 per il transistor usato BC107 al silicio (Vbe=0.7) Ing. Giovanni Cirio 18 di 21 21/12/12 Appunti di TDP Dimensioniamo Rb e Rc. Dall'ingresso: Vin=Rb*Ib+Vbe considerimo, per sicurezza Vin = 4 4=Rb*Ib+0,7 Sappiamo che un led si illumina con correnti di circa 20 mA, perciò Ic = 20mA, usando dei BC107-BC108, che hanno il parametro hfe≈200, possiamo ricavare la corrente di base, facendo il calcolo Ib= Ic 20 10−3 = =0.1mA mentre per Hfe 200 Rb= Vin−Vbe 3.3 = =33KOhm Ib 0.1 10−3 Per calcolare Rc scrivo l'equazione della maglia di uscita: Vcc=Vled+Rc*Ic+Vce Vled vale circa 2V per tutti i diodi led, mentre Ic vale 20 mA. Vce è la caduta di tensione tra collettore ed emettitore, possiamo scegliere noi il loro valore, di solito in questo tipo di applicazioni si pone uguale a 0V, cioè scegliamo Vce=0. L'equazione diventa: 12V=2V+Rc*20mA+0 dalla quale si ricava Rc = 10/20mA= 500 Ohm Documentazione in lingua inglese Realization of an automated traffic light system. This project decided at the beginning of the school year together with interested classes and teachers was to realize an automated traffic light system, a parking with automated place counter and an speed limit controlling device placed in a lateral road. It seemed to be useful understanding the functioning because this system is common in our daily life. The crossing is composed by four intersected road and restricted by a spider light, four side streets without traffic light, a parking with a screen which displays who the last free parking place, and finally, in a secondary street, a speed detector that will be visualized on a screen. The management of these various electronic devices is given to a PC because it is ready to be used but in an industrial environment we should use a microprocessor dedicated card. The language used for processing the software is C++ because it is known and used all around the world in many fields(universitary,researching ecc.)because it is versatile. In industries it is better use the Assembler because the interested hardware is characterized by the presence of programmable microproccesor . The phases of work are: 1) 2) 3) 4) 5) 6) Realization of the scale model in each part; Assembly of the various electronic circuits; Programming in C++; Tests of functioning; Drawing up of the documents; Writing the use handbook. Ing. Giovanni Cirio 19 di 21 21/12/12 Appunti di TDP Pilotage Lamps: Electric diagram Functioning of the led diode pilotage When the input square wave in the circuit catches the amplitude of 5 V the resistance Rb will be crossed by a current which carries the transistor to function. The Vcc feeding generates a current that crosses the led, illuminating it, the collector and the emitter reach the mass. When we obtain the square wave, with a zero volt value on the base of the transistor, this want let the current flow, and therefore the current of the collector will be cancelled turning off the led. Let’s dimension Rb and Rc resistance considering a voltage feeding of 12 V: The transistor works with the following law: Ic = hfe*Ib hfe ≈ 200 for the silicon transistor used BC107(Vbe= 0.7) Let’s dimension Rb and Rc. From the imput: Vin=Rb*Ib+Vbe we consider, for safety Vin = 4 4=Rb*Ib+0.7 We know that one led illuminates with currents of approximately 20 mA, so Ic = 20 mA, using BC107 and BC108, which have the parameter hfe ≈ 200, we can gain the base current, doing this calculation Ib= Ic 2010−3 = =0.1 mA Hfe 200 while for Rb= Vin−Vbe 3.3 = =33KOhm Ib 0.110−3 For calculating Rc I write the equation of the output mesh: Vcc=Vled+Rc*Ic+Vce Vled value is approximately 2V for all the led diode, while Ic value is 20 mA. Vce is the fall of voltage between collector and emitter, we can choose their value, usually in this kind of applications it is equal to 0V, so we choose Vce=0V. The equation became: 12V=2V+Rc*20mA+0 from which we gains Rc = 10/20mA= 500Ohm Feeder supply voltage: A feeding device is composed by these following elements linked in a cascade: 1)Transformer: It reduces the voltage of the input net from 220V to 18V. 2)Rectifier: It is composed by a diode bridge that works as a double semiwave rectifier, the Ing. Giovanni Cirio 20 di 21 21/12/12 Appunti di TDP function of the device is the following: two diodes let the positive semiwaves pass and the two negative semiwaves so constituting one positive and one negative pole. 3)Filter: It is composed by condensers linked in parallel in the stage first of the voltage regulator and in the following one. His function is to combine the positive semiwaves in their high part(in the discharge phase), giving a first balance to the input and output voltage by the voltage regulator. 4)Voltage regulator: It is an integrated device that balances and levels off the voltage at its own output. The output voltage from the regulator is determined by the kind of integrated device that can supply different voltages and currents. Ing. Giovanni Cirio 21 di 21 21/12/12