Introduction: IMPIANTO INTERVENTO AUTOMATICO IN CASO DI EMERGENZA FALLA – BY DAVIDE CALVO

Come svuotare un compartimento allagato dall’acqua con arduino

Buongiorno a tutti, sono a presentarvi oggi un progetto realizzato da uno dei ragazzi che mi segue, il progetto che simula, grazie all’utilizzo di arduino e di un elettrovalvola, un impianto atto a rilevare una falla e in grado di attivare una pompa per svuotare il compartimento compromesso, è stato realizzato da Davide Calvo come tesina di maturità.

Davide ha realizzato questo progetto praticamente da solo, richiedendo il mio aiuto solamente per sistemare alcune parti del codice di programmazione.

La navigazione via mare ha da sempre portato i marittimi ad affrontare la furia del mare.A bordo di una nave si verificano svariate emergenze, ma, grazie ai sistemi di sicurezza, si riesce quasi sempre a fronteggiarle o, almeno, a minimizzarne gli effetti. Una delle emergenze più pericolose a bordo è costituita dalla falla, la più temuta e difficile da fronteggiare. Per falla si intende qualsiasi apertura occasionale che si può generare nell’opera viva di una nave, e che genera l’allagamento dei locali interni ad essa. Tuttavia, grazie a sistemi d’intervento automatico predisposti per la sicurezza si riesce spesso ad evitare l’affondamento o almeno a rallentarlo dando cosi il tempo agli occupanti di porsi in salvo. Il primo sistema automatico che entra in funzione in caso di falla è quello che, tramite sensori, è in grado di rilevare il livello d’acqua imbarcato. Esso, superata una certa soglia, avverte la sala macchine ed il ponte con segnali sonori e luminosi, così da avvertire l’equipaggio dell’anomalia. Successivamente, lo stesso sistema può attivare anche le pompe di sentina che tenteranno di riversare in mare l’acqua imbarcata. Un sistema di controllo automatico con queste caratteristiche, seppure solo a scopo dimostrativo, è quello realizzato con l’aiuto di un microcontrollore programmabile “Arduino”. Arduino è una piattaforma open-source utilizzata per la costruzione di progetti di elettronica e automazione. Arduino consiste in una scheda fisica programmabile con micro-controllore e di una parte software, o IDE (Integrated Development Environment), che eseguito sul computer, viene usato per scrivere e caricare codice informatico in linguaggio “C” nella scheda fisica Lo schema di collegamento del sistema di rilevazione e di controllo automatico è riportato nella figura di seguito

Per realizzare il sistema suddetto sono stati utilizzati:– Per rilevare il livello, un sensore ad ultrasuoni, che non ha necessità di venire a contatto con il fluido, di conseguenza esso è preciso ed affidabile.– Per generare i segnali di livello e d’allarme per la sala macchine od il ponte di comando useremo:– display lcd (che comunica costantemente anche in situazione di quiete il livello)– un buzzer (o ronzatore). Il buzzer è un componente elettromeccanico che, quando è percorso da corrente elettrica, emette un suono simile, appunto, ad un ronzio.– due LED :verde e rosso. Il Led è un componente elettronico che, quando attraversato da una corrente, emette una luce, accendendosi immediatamente.– Per simulare le pompe che eliminano l’acqua imbarcata, invece, utilizzeremo una pompa per tergicristalli auto.– Per simulare la nave è stata utilizzata una vaschetta in plexiglass.. DESCRIZIONE DI FUNZIONAMENTOIn situazione di quiete, possiamo osservare che il nostro led verde risulterà acceso, sul nostro display leggeremo il livello del liquido nella cassa ed un dicitura con scritto( liv.normale)In caso di una falla il sensore rileverà l’aumento comunicando in un primo momento con l’equipaggio con un messaggio sul display dicendo (liv.in aumento).Se il livello continuerà ad innalzarsi la nostra scheda programmabile provvederà ad attivare un led rosso, ed un segnale sonoro cosi da avvisare l’equipaggio.Sul display leggeremo livello critico, sarà allora che la logica programmata attivare anche le pompe di sentina cercando di sopperire alla falla Di seguito trovate invece lo sketch:

#define trigger_pin 7#define echo_pin 6#define buzzer_pin 13#define porta_rele1 10#define led_verde 8#define led_rosso 9#include LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // Setto i pin digitali pinMode( trigger_pin, OUTPUT );pinMode( echo_pin, INPUT );pinMode( led_rosso, OUTPUT );pinMode( led_verde, OUTPUT );pinMode( porta_rele1, OUTPUT);pinMode( buzzer_pin,OUTPUT);digitalWrite(porta_rele1, HIGH); lcd.begin(16,2);} void loop() { if( getDistance() < 9){ digitalWrite(led_rosso, HIGH); digitalWrite(led_verde, LOW); digitalWrite(buzzer_pin,HIGH); tone(buzzer_pin,1000,2000); svuota(); } else { digitalWrite(led_rosso, LOW); digitalWrite(led_verde, HIGH); } // Stampo sul display LCD la distanza rilevata printLCD(getDistance()); } void printLCD(float distance) { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Liv.Sentina: "); lcd.print(14-distance); lcd.setCursor(0,1); if(distance > 13) {lcd.print(“Liv.Normale “);} else if(distance > 9) { //distanza compresa tra 5 e 11lcd.print(“Liv.In Aumento “);} else if(distance < 9) { //distanza minore di 5 lcd.print("Liv.Critico"); } delay(100); } //questa funzione attiva la pompa attraverso il releé e la ferma solamente quando la distanza diventa maggiore di 11 void svuota() { while(getDistance() < 11) { digitalWrite(porta_rele1, LOW); printLCD(getDistance()); delay(500); } digitalWrite(porta_rele1, HIGH); } float getDistance() { float soundSpeed = 334; float microSecondsPerCm = 10000 / soundSpeed; digitalWrite(trigger_pin, LOW); delayMicroseconds(2); digitalWrite(trigger_pin, HIGH); delayMicroseconds(10); digitalWrite(trigger_pin, LOW); long duration = pulseIn(echo_pin, HIGH); float distance = duration / microSecondsPerCm /2; delay(100); return distance; }