Hashtag più usati
1 | #include |
2 | #drone |
3 | #dlcitalia |
4 | #ets2 |
5 | #eurotrucksimulator2 |
6 | #arduino |
7 | #xiaomi |
8 | #aukey |
9 | #farmingsimulator |
Ultimi argomenti attivi
» Comunicazione termine servizio Arduino BT ControlDa Admin Mar Mag 10, 2022 12:55 pm
» Robot aspirapolvere per Alexa: Dreame D9
Da Admin Mar Feb 09, 2021 9:42 am
» Come costruire un robot smart con Arduino
Da Admin Mar Nov 17, 2020 12:15 pm
» TOPPS Trading Cards Match Attax Champsion League/Europa League 2020/21
Da Admin Mar Nov 10, 2020 3:21 pm
» Guida per utilizzare Arduino BT Control v1.2
Da Admin Gio Lug 09, 2020 12:01 pm
» Recensione Umidigi A3 Pro - Smartphone sotto i 100€
Da Admin Gio Apr 04, 2019 12:22 pm
» [Arduino] aiuto programma
Da Glak Mar Mar 12, 2019 9:30 am
» ERRORE NELLA COMPILAZIONE NEXTION
Da papat Mar Feb 26, 2019 7:11 am
» Comandare la Smart TV con Alexa senza broadlink (gratis)
Da Admin Mar Feb 19, 2019 4:31 pm
I postatori più attivi del mese
Nessun utente |
allarme antincendio che funziona a metà con arduino
2 partecipanti
Pagina 1 di 1
allarme antincendio che funziona a metà con arduino
Salve a tutti del forum, sono Costantino.
Ho copiato qui sul forum l'impianto antincendio di Poderak e fatto alcune modifiche:
ho portato i sensori gas a due e i sensori fiamma a quattro, tolto i led e aggiunto due relè, uno per i sensori gas e uno per i sensori fiamma.
Il tutto funziona solo che la scheda legge un'allarme per volta, cioè mi spiego meglio:
quando un sensore va in allarme, l'altro sensore non funziona fino a quando l'allarme finisce.
ora mi chiedo se il problema sia dovuto ad un errore nella compilazione dello sketch o è proprio un limite della scheda che può leggere un'allarme per volta.
questo è lo sketch che ho compilato:
Ho copiato qui sul forum l'impianto antincendio di Poderak e fatto alcune modifiche:
ho portato i sensori gas a due e i sensori fiamma a quattro, tolto i led e aggiunto due relè, uno per i sensori gas e uno per i sensori fiamma.
Il tutto funziona solo che la scheda legge un'allarme per volta, cioè mi spiego meglio:
quando un sensore va in allarme, l'altro sensore non funziona fino a quando l'allarme finisce.
ora mi chiedo se il problema sia dovuto ad un errore nella compilazione dello sketch o è proprio un limite della scheda che può leggere un'allarme per volta.
questo è lo sketch che ho compilato:
- Codice:
int gas1 = A0; //pin in cui ho collegato il sensore gas1
int gas2 = A1; //pin in cui ho collegato il sensore gas2
int flame1 = A2; //pin in cui ho collegato il sensore fiamma1
int flame2 = A3; //pin in cui ho collegato il sensore fiamma2
int flame3 = A4; //pin in cui ho collegato il sensore fiamma3
int flame4 = A5; //pin in cui ho collegato il sensore fiamma4
int valg1=0; //variabile che contiene lettura sens. gas1
int valg2=0; //variabile che contiene lettura sens. gas2
int valf1=0; //variabile che contiene lettura sens. fiamma1
int valf2=0; //variabile che contiene lettura sens. fiamma2
int valf3=0; //variabile che contiene lettura sens. fiamma3
int valf4=0; //variabile che contiene lettura sens. fiamma4
int rele1=4; //pin digitale del rele1
int rele2=5; //pin digitale del rele2
void setup() {
pinMode(gas1, INPUT); //imposto il sensore come input
pinMode(gas2, INPUT); //imposto il sensore come input
pinMode(flame1, INPUT); //imposto il sensore come input
pinMode(flame2, INPUT); //imposto il sensore come input
pinMode(flame3, INPUT); //imposto il sensore come input
pinMode(flame4, INPUT); //imposto il sensore come input
pinMode(rele1, OUTPUT); //imposto il sensore come output
pinMode(rele2, OUTPUT); //imposto il sensore come output
Serial.begin(9600);
}
void loop() {
valg1 = analogRead(gas1); //leggo e inserisco il valore del sensore gas1 in valg1
valg2 = analogRead(gas2); //leggo e inserisco il valore del sensore gas1 in valg2
valf1 = analogRead(flame1); //leggo e inserisco il valore del sensore flame1 in valf1
valf2 = analogRead(flame2); //leggo e inserisco il valore del sensore flame1 in valf2
valf3 = analogRead(flame3); //leggo e inserisco il valore del sensore flame1 in valf3
valf4 = analogRead(flame4); //leggo e inserisco il valore del sensore flame1 in valf4
Serial.print("Sensore gas1: "); //stampo su serial monitor i valori
Serial.println(valg1);
Serial.print("Sensore gas2: "); //stampo su serial monitor i valori
Serial.println(valg2);
Serial.print("Sensore flame1: "); //stampo su serial monitor i valori
Serial.println(valf1);
Serial.print("Sensore flame2: "); //stampo su serial monitor i valori
Serial.println(valf2);
Serial.print("Sensore flame3: "); //stampo su serial monitor i valori
Serial.println(valf3);
Serial.print("Sensore flame4: "); //stampo su serial monitor i valori
Serial.println(valf4);
if (valf1>780&&valf2>780&&valf3>780&&valf4>780&&valg1<120&&valg2<120) { //i sensori sono in stato di riposo
digitalWrite(rele1, HIGH);
digitalWrite(rele2, HIGH);
}
if(valf1<780||valf2<780||valf3<780||valf4<780) { //in questo stato un sensore fiamma è in allarme
for (int i=0; i<10; i++) { //ripeto l'allarme per 10 volte
digitalWrite(rele1, LOW); //il rele
delay(1000); //ritardo di 1000 millisecondi
}
}
if(valg1>120||valg2>120) { //in questo stato un sensore è in allarme
for (int i=0; i<10; i++) { //ripeto l'allarme per 10 volte
digitalWrite(rele2, LOW); //il rele
delay(1000); //ritardo di 1000 millisecondi
}
}
}
decos- Sono un nuovo membro
- Messaggi : 2
Crediti : 4
Reputazione : 0
Data d'iscrizione : 13.04.18
Re: allarme antincendio che funziona a metà con arduino
Ciao @decos,
ho visto il tuo codice è sembra tutt'ok. Il fatto che ti faccia uno o l'altro è perché utilizzi la funzione delay. La funzione deley "congela" l'Arduino da qualsiasi altra funzione.
Le soluzioni sono due:
- Quella più barbarica: inserisci un controllo dell'altro allarme mentre fa il ciclo for (ma in questo caso inserisci codice doppio).
- Quella più consigliata ma un po' complicata: usi la funzione millis al posto di delay. Ecco una guida che potrebbe interessarti: premi qui.
A presto
ho visto il tuo codice è sembra tutt'ok. Il fatto che ti faccia uno o l'altro è perché utilizzi la funzione delay. La funzione deley "congela" l'Arduino da qualsiasi altra funzione.
Le soluzioni sono due:
- Quella più barbarica: inserisci un controllo dell'altro allarme mentre fa il ciclo for (ma in questo caso inserisci codice doppio).
- Quella più consigliata ma un po' complicata: usi la funzione millis al posto di delay. Ecco una guida che potrebbe interessarti: premi qui.
A presto
Re: allarme antincendio che funziona a metà con arduino
Ciao a tutti
Ho capito che la funzione delay durante il suo processo blocca la scheda, ma non sono riuscito a sostituirla con millis, quello che segue è lo sketch che sono riuscito a fare ma purtroppo non funziona
non capisco dove sbaglio
Ho capito che la funzione delay durante il suo processo blocca la scheda, ma non sono riuscito a sostituirla con millis, quello che segue è lo sketch che sono riuscito a fare ma purtroppo non funziona
non capisco dove sbaglio
- Codice:
nt gas1 = A0; //pin in cui ho collegato il sensore gas1
int gas2 = A1; //pin in cui ho collegato il sensore gas2
int flame1 = A2; //pin in cui ho collegato il sensore fiamma1
int flame2 = A3; //pin in cui ho collegato il sensore fiamma2
int flame3 = A4; //pin in cui ho collegato il sensore fiamma3
int flame4 = A5; //pin in cui ho collegato il sensore fiamma4
int valg1=0; //variabile che contiene lettura sens. gas1
int valg2=0; //variabile che contiene lettura sens. gas2
int valf1=0; //variabile che contiene lettura sens. fiamma1
int valf2=0; //variabile che contiene lettura sens. fiamma2
int valf3=0; //variabile che contiene lettura sens. fiamma3
int valf4=0; //variabile che contiene lettura sens. fiamma4
int rele1=4; //pin digitale del rele1
int rele2=5; //pin digitale del rele2
unsigned long rele1Time;
unsigned long rele2Time;
boolean rele1on;
boolean rele2on;
void setup() {
pinMode(gas1, INPUT); //imposto il sensore come input
pinMode(gas2, INPUT); //imposto il sensore come input
pinMode(flame1, INPUT); //imposto il sensore come input
pinMode(flame2, INPUT); //imposto il sensore come input
pinMode(flame3, INPUT); //imposto il sensore come input
pinMode(flame4, INPUT); //imposto il sensore come input
pinMode(rele1, OUTPUT); //imposto il sensore come output
pinMode(rele2, OUTPUT); //imposto il sensore come output
rele1on = false;
rele2on = false;
Serial.begin(9600);
}
void loop() {
valg1 = analogRead(gas1); //leggo e inserisco il valore del sensore gas1 in valg1
valg2 = analogRead(gas2); //leggo e inserisco il valore del sensore gas1 in valg2
valf1 = analogRead(flame1); //leggo e inserisco il valore del sensore flame1 in valf1
valf2 = analogRead(flame2); //leggo e inserisco il valore del sensore flame1 in valf2
valf3 = analogRead(flame3); //leggo e inserisco il valore del sensore flame1 in valf3
valf4 = analogRead(flame4); //leggo e inserisco il valore del sensore flame1 in valf4
Serial.print("Sensore gas1: "); //stampo su serial monitor i valori
Serial.println(valg1);
Serial.print("Sensore gas2: "); //stampo su serial monitor i valori
Serial.println(valg2);
Serial.print("Sensore flame1: "); //stampo su serial monitor i valori
Serial.println(valf1);
Serial.print("Sensore flame2: "); //stampo su serial monitor i valori
Serial.println(valf2);
Serial.print("Sensore flame3: "); //stampo su serial monitor i valori
Serial.println(valf3);
Serial.print("Sensore flame4: "); //stampo su serial monitor i valori
Serial.println(valf4);
if (valf1>700&&valf2>700&&valf3>700&&valf4>700&&valg1<120&&valg2<120) { //i sensori sono in stato di riposo
digitalWrite(rele1, HIGH);
digitalWrite(rele2, HIGH);
}
if(valf1<700||valf2<700||valf3<700||valf4<700) { //in questo stato un sensore fiamma è in allarme
for (int i=0; i<10; i++) { //ripeto l'allarme per 10 volte
digitalWrite(rele1, LOW); //il rele
rele1on = true;
rele1Time = millis();
}
}
if(valg1>120||valg2>120) { //in questo stato un sensore gas è in allarme
for (int i=0; i<10; i++) { //ripeto l'allarme per 10 volte
digitalWrite(rele2, LOW); //il rele
rele2on = true;
rele2Time = millis();
}
}
if(rele1on)
if(millis() - rele1Time > 30000) {
digitalWrite(rele1, LOW);
rele1on = false;
}
if(rele2on)
if(millis() - rele2Time > 30000) {
digitalWrite(rele2, LOW);
rele2on = false;
}
}
decos- Sono un nuovo membro
- Messaggi : 2
Crediti : 4
Reputazione : 0
Data d'iscrizione : 13.04.18
Re: allarme antincendio che funziona a metà con arduino
Ciao
piccolo consiglio. Prova prima a utilizzarlo in un semplice blink di led e poi cerca di applicarlo in questo progetto. In questo modo prendi dimestichezza con la funzione millis che all'inizio non è molto semplice
piccolo consiglio. Prova prima a utilizzarlo in un semplice blink di led e poi cerca di applicarlo in questo progetto. In questo modo prendi dimestichezza con la funzione millis che all'inizio non è molto semplice
Argomenti simili
» allarme antincendio non funziona
» Display I2C Arduino non funziona?
» Come funziona il display touch di Arduino?
» Sensore SCT 013 Trasformatore di corrente CC per Arduino, come funziona?
» Come realizzare un impianto antincendio con Arduino - v1.0
» Display I2C Arduino non funziona?
» Come funziona il display touch di Arduino?
» Sensore SCT 013 Trasformatore di corrente CC per Arduino, come funziona?
» Come realizzare un impianto antincendio con Arduino - v1.0
Pagina 1 di 1
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.