Vai al contenuto
PLC Forum


scarico wc con sensore ir arduino


lga83

Messaggi consigliati

Salve a tutti ho fatto questo piccolo progetto per far scaricare in automatico acqua del wc dopo averlo usato funziona tutto benissimo, ora siccome voglio utilizzare una scheda unica la uno per utilizzarla su due bagni differente uomini donne ma non riesco a creare lo shrek mi potete aiutare, grazie questo e lo shrek funzionante. 

 

 

 

 
 

int peppe = 0;
void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
  pinMode(13, OUTPUT);
}
void loop() {
  delay(1000);
  if (digitalRead(2) == HIGH && peppe == 1) {
    //Serial.println("scarica");
    delay(1000);
   digitalWrite(3, HIGH);
   delay(5000);
    
   peppe = 0;
    digitalWrite(3, LOW);
  }
  if (digitalRead(2) == HIGH) {
    //Serial.println("attesa");
    digitalWrite(13, HIGH);
  }
  else
  {
    digitalWrite(13, LOW);
    peppe = 1;
    //Serial.println("rilevato");
  }
Link al commento
Condividi su altri siti


A parte la scortesia verso il forum ufficiale di arduino, di cui hai copiato di sana pianta una pagina (ovviamente ho pulito il tutto), mancano alcune informazioni fondamentali.

Non  c'è un commento, non c'è un'indicazione di cosa fanno ingressi ed uscite.

Tu, probabilmente hai copiato pedissequamente lo sketch da qaulche parte, hai visto che fa il suo dovere ma non sai come fare per farlo lavorare su 2 bagni.

 

Come minimo dovresti avere 2 sensori, uno per bagno, e le uscite relative 2 +2.

Poi non ti resta che duplicare pedeissequamente lo sketch funzionante cambiando ingressi ed uscite, li scrivi di seguito e dovrebbe funzionare.

Potresti avere problemi con i delay, perchè bloccano il programam per il tempo di ritardo.

 

P.S. "lo shrek" è un orchetto dei cartoni animati. I programmi dia rduino sono detti sketch; però visto che siamo italiani potremmo dire semplicemente "programma";)

Link al commento
Condividi su altri siti

Fatto quello che dici tu, ovviamente e normale che ci vogliono e sensori e relè ma se funzionano singolarmente tutto ok ma quando rilevano la presenza contemporaneamente quello delle donne scarica invece quello uomini ritorna in attesa

Link al commento
Condividi su altri siti

Cambiato ingresso donne 5 uomini 2 funziona bene ma quando rilevano la presenza contemporaneamente quelle delle donne scarica invece uomini torna in attesa x rilevare la presenza e non scarica

Link al commento
Condividi su altri siti

Devi utilizzare i millis per creare un programma peseudo-multitasking, facendo così discrimini gli utilizzatori e non sei costretto all'attesa dovuta al delay.

Per ogni secondo ci sono 1000 millis, quindi crei delle variabili per ogni bagno dove memorizzi lo stato iniziale, poi con le istruzioni condizionali confronti quel valore con i millis attuali ottenendo il tempo trascorso e senza far bloccare il programma.

Link al commento
Condividi su altri siti

2 ore fa, lga83 scrisse:

 

esto e lo sketch modificato 

int peppe = 0;

void setup() {
Serial.begin(9600);

pinMode(2, INPUT);
pinMode(3, OUTPUT);
pinMode(13, OUTPUT);
pinMode(5, INPUT);
pinMode(4, OUTPUT);
pinMode(12, OUTPUT);
}
void loop() {
delay(1000);
if (digitalRead(2) == HIGH && peppe == 1){
Serial.println("scarica uomini");
delay(1000); //tempo inizio scarico
digitalWrite(3, HIGH);
delay(10000); //durata scarico acqua
peppe = 0;
digitalWrite(3, LOW);

}
if (digitalRead(2) == HIGH) {

Serial.println("attesa uomini");
digitalWrite(13, HIGH);
}
else
{
digitalWrite(13, LOW);
peppe = 1;
Serial.println("rilevato uomini");
}


if (digitalRead(5) == HIGH && peppe == 2){
Serial.println("scarica donne");
delay(1000); //tempo inizio scarico
digitalWrite(4, HIGH);
delay(10000); //durata scarico acqua
peppe = 0;
digitalWrite(4, LOW);

}
if (digitalRead(5) == HIGH) {
Serial.println("attesa donne ");
digitalWrite(12, HIGH);
}
else
{
digitalWrite(12, LOW);
peppe = 2;
Serial.println("rilevato donne ");
}
}funziona bene separatame, ma quando i 2 sensori rilevano la presenza contemporaneamente non scaricano ma ritornano in attesa, dove sta l'errore, grazie tante.. 
  •  
Link al commento
Condividi su altri siti

Te l'ho scritto subito che avresti avuto problemi con l'istruzione delay, questa blocca il tutto.

O fai come scrive GiRock, usando l'istruzione millis(xx), oppure di fai un timer che genera un interrupt ogni tot millisecondi come faccio io.

Ogni 10ms, ad esempio, vai a vedere lo stato degli ingressi dei sensori e, secondo il loro stato elabori il programma. Invece dei ritardi fai un contatore che conta i tic da 10ms.

 

Però per fare certe cose non si può copiare pedissequamente uno sketch sensa avere un mimimo di conoscenza della macchina (arduino) e di programamzione.

Tanto per iniziare a rendere un po' più decente il tuo programma

  int peppe = 0;
  int peppa = 0;

e usa la variabile peppe per gli uomini e peppa per le donne, facendo i due pezzi di programma identici tranne che per questa variabile e per gli I/O.

Se funziona per una sezione deve funzionare anche per l'altra, magari con ritardi, ma deve funzionare.

 

Poi fa una ricerca con la parola chiave "millis() arduino" e vatti a leggere gli esempi ed i tutorials, ne compaiono migliaia, ma è sufficiente che ti legga in primi 5 della lista.

Link al commento
Condividi su altri siti

Hai letto come si usano?

L'istruzione millis() è banale.

Esempio

 

unsigned long tempo = 0;
unsigned long tempo_1 = 0;

-------

void loop()
{
----------
tempo = millis();
if ((tempo - tempo_1) > 5000)
   {
		tempo_1 = tempo;
		digitalWrite (2, HIGH);

    }

}

Queste 4 righe scriveranno alta l'uscita 12 se è trascorso un tempo maggiore di 5 secondi dal verificarsi di un evento.

Link al commento
Condividi su altri siti

  • 2 weeks later...

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...