Wiki Info
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.
Ricerca Avanzata
Answers
Se necessiti di aiuto, clicca il pulsante "Cerco Aiuto" (disponibile anche per i non iscritti).
Ultimi argomenti attivi
» Comunicazione termine servizio Arduino BT Control
Da 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

Andare in basso

allarme antincendio che funziona a metà con arduino Empty allarme antincendio che funziona a metà con arduino

Messaggio Da decos Mer Apr 18, 2018 10:32 pm

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:


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
decos
Sono un nuovo membro
Sono un nuovo membro

Messaggi Messaggi : 2
Crediti Crediti : 4
Reputazione Reputazione : 0
Data d'iscrizione Data d'iscrizione : 13.04.18

Torna in alto Andare in basso

allarme antincendio che funziona a metà con arduino Empty Re: allarme antincendio che funziona a metà con arduino

Messaggio Da Admin Gio Apr 19, 2018 8:59 am

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 Ciao!
Admin
Admin
♔ Amministratore

Messaggi Messaggi : 4370
Crediti Crediti : 12173
Reputazione Reputazione : 187
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 26

https://wikiinfo.forumattivo.it

Torna in alto Andare in basso

allarme antincendio che funziona a metà con arduino Empty Re: allarme antincendio che funziona a metà con arduino

Messaggio Da decos Mar Apr 24, 2018 11:03 pm

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   Sad
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
decos
Sono un nuovo membro
Sono un nuovo membro

Messaggi Messaggi : 2
Crediti Crediti : 4
Reputazione Reputazione : 0
Data d'iscrizione Data d'iscrizione : 13.04.18

Torna in alto Andare in basso

allarme antincendio che funziona a metà con arduino Empty Re: allarme antincendio che funziona a metà con arduino

Messaggio Da Admin Lun Mag 07, 2018 5:36 pm

Ciao Very Happy

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 Wink
Admin
Admin
♔ Amministratore

Messaggi Messaggi : 4370
Crediti Crediti : 12173
Reputazione Reputazione : 187
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 26

https://wikiinfo.forumattivo.it

Torna in alto Andare in basso

allarme antincendio che funziona a metà con arduino Empty Re: allarme antincendio che funziona a metà con arduino

Messaggio Da Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.