Buongiorno a tutti, premetto che e' appena una settimana che ho iniziato a conoscere Arduino e sto seguendo vari tutorial in quanto non ho mai programmato perche' ho sempre trovato il linguaggio difficile da comprendere.
Non volendo in questi giorni mi si e' guastata la scheda di una macchina da caffè e visto che trattasi di un prodotto obsoleto ho pensato di rimetterla in sesto con arduino XD. Ho provato a stendere una prima parte di sketch ma non mi funziona a dovere.
Provo a spiegare:
Microswicht: li ho nominati SW1 - SW2 - SW3 - SW4 - SW5 - SW6 - SW7.
Motore gruppo che deve girare sia orario che antiorario, e queste due uscite le ho nominate: PRESSACAFFE e PRESSARIPOSO
Motore poma acqua, nominato POMPA
Motore macina caffè nominato MACINA
Elettromagnete per il passaggio del caffe' macinato nominato ELETTROMAGNETE
Resistenza per il riscaldamento acqua nominata RISC
Per adesso fermiamoci e vediamo cosa non và.
All'accensione Arduino deve controllare lo stato dei microswitch che deve essere il seguente:
SW1 - SW2 - SW3 - SW6 (interruttori chiusi)
SW5 - SW6 (interruttori aperti)
se e' tutto ok deve attivare l'uscita del pin13 dove e' collagata la resistenza e tramite il sensore LM35 deve controllare la temperatura, cioe' deve spegnere la resistenza quando la temperatura è di 130° e accendere la resistenza quando scende al di sotto di questo valore.
Ho provato impostando un valore di temperatura di 30° giusto per iniziare a fare delle prove, ma non mi funziona.
Vi allego lo schema e la parte di codice con la speranza che sia stato chiaro nella spiegazione.
ho dimenticato di allegare lo sketch...
int lm35 = A0;
float temp = 0;
int risc = 13;
int macina = 12;
int pressariposo = 11;
int pressacaffe = 10;
int elettromagnete = 9;
int pompa = 8;
int sw1; // variabile cassetto vuoti
int sw2; //variabile serbatoio acqua
int sw3; //variabile presenza gruppo
int sw4; //variabile vapore
int sw5; //variabile eccitazione elettromagnete
int sw6; //fine corsa riposo gruppo
int sw7; //fine corsa pressa caffè
// inizializzazione dei pin di uscita.
void setup() {
Serial.begin(9600);
pinMode(risc, OUTPUT);
pinMode(macina, OUTPUT);
pinMode(pressariposo, OUTPUT);
pinMode(pressacaffe, OUTPUT);
pinMode(elettromagnete, OUTPUT);
pinMode(pompa, OUTPUT);
pinMode(1,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
}
void loop() {
sw1=digitalRead(1); // sw1 legge il pin digitale 1
sw2=digitalRead(2); // sw2 legge il pin 2
sw3=digitalRead(3);
sw4=digitalRead(4);
sw5=digitalRead(5);
sw6=digitalRead(6);
sw7=digitalRead(7);
temp = ( 5.0 * analogRead(lm35) * 100.0) / 1024.0;
Serial.println(temp);
if ((temp <= 30) and (sw1==HIGH)) {
delay(1000);
digitalWrite(risc, HIGH);
}
else
digitalWrite(risc, LOW);
}
innanzi tutto, i pin 0 e 1 sono riservati alla seriale e quindi ( visto che usi la seriale ) non li puoi usare
pero' se ti mancano pin puoi usare gli A0----A5 come normali digitali
quindi ecco il primo errore! provvedo!! va bene se sostituisco la riga sw1=digitalRead(1); con sw1=analogRead(1); ?
No
A0 corrisponde a 14 fino a A5 uguale 19.
Se attacchi il pulsante al pin A1 devi scrivere
sw1=digitalRead(15);
Ciao Uwe
perfetto, mi sei stato di grande aiuto, adesso funziona!!!
Allego la parte di codice che ho compilato fino a questo momento.
Adesso viene la seconda parte;
Mentre arduino esegue questo loop alla pressione di un tasto che chiameremo "ESPRESSO", arduino deve attivare l'uscita "MACINA" fino alla chiusura di sw8 (stato alto) sempre che sw6 risulta chiuso (stato alto), altrimenti deve prima attivare l'uscita "PRESSARIPOSO" fino alla chiusura di sw8 (stato alto) per poi attivare "MACINA" fino alla chiusura di sw8 (stato alto).
Lo so' pian piano lo sto facendo insieme a voi il codice, ma da solo sono sicuro che non ci riesco perche' si e' aggiunta la priorita' di far funzionare la macchina da caffe' ancor prima di conoscere arduino!
Vi ringrazio anticipatamente a voi tutti sperando di poter essere utile anche io in altre occasioni.....
sketch caffè.docx (2.77 KB)
ops! ho dimenticato che premendo il tasto "ESPRESSO" tra le varie condizioni prima di attivare "MACINA" anche la temperatura deve trovarsi entro un certo range tra il massimo stabilito all'inizio del loop e un minimo di x gradi da me stabilito.
Bene, penso di essere arrivato a un buon punto, adesso pero' ho problemi nelle ultime righe e non riesco a risalire dove stà l'inghippo o meglio nelle ultime righe vorrei che quando il micro nominato sw7 è allo stato alto si deve accendere la pompa per 6,5 secondi per poi spegnersi e attivare contemporaneamente l'uscita nominata pressariposo fino a quando si chiudono i contatti di sw6. Provando il circuito mi resta accesa la pompa finche' non chiudo sw7...................dove sbaglio? Brunello , Uwe dove siete!!!! Help me!!!! =(
/*
GAGGIA SYNCRONY DIGITAL
*/
// Elenco variabili.
int lm35 = A0;
float temp = 0;
int risc = 13;
int macina = 12;
int pressariposo = 11;
int pressacaffe = 10;
int elettromagnete = 9;
int pompa = 8;
int sw1; // variabile cassetto vuoti
int sw2; //variabile serbatoio acqua
int sw3; //variabile presenza gruppo
int sw4; //variabile vapore
int sw5; //variabile eccitazione elettromagnete
int sw6; //fine corsa riposo gruppo
int sw7; //fine corsa pressa caffè
int sw8; //switch caffè in polvere pronto
int sw9; //tasto espresso
// inizializzazione dei pin di uscita, setup.
void setup() {
Serial.begin(9600);
pinMode(risc, OUTPUT);
pinMode(macina, OUTPUT);
pinMode(pressariposo, OUTPUT);
pinMode(pressacaffe, OUTPUT);
pinMode(elettromagnete, OUTPUT);
pinMode(pompa, OUTPUT);
pinMode(17,INPUT);
pinMode(16, INPUT);
pinMode(15,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(5,INPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
}
// Loop
void loop() {
sw1=digitalRead(15); // sw1 legge il pin digitale 1
sw2=digitalRead(2); // sw2 legge il pin 2
sw3=digitalRead(3);
sw4=digitalRead(4);
sw5=digitalRead(5);
sw6=digitalRead(6);
sw7=digitalRead(7);
sw8=digitalRead(16);
sw9=digitalRead(17);
temp = ( 5.0 * analogRead(lm35) * 100.0) / 1024.0;
Serial.println(temp);
if ((temp <= 30) and (sw1==HIGH) and (sw2==HIGH) and (sw3==HIGH) and (sw5==LOW) and (sw6==HIGH) and (sw7==LOW)) {
delay(1000);
digitalWrite(risc, HIGH);
}
if ((temp >= 35) and (sw1==HIGH) and (sw2==HIGH) and (sw3==HIGH) and (sw5==LOW) and (sw6==HIGH) and (sw7==LOW)) {
delay(1000);
digitalWrite(risc, LOW);
}
if ((sw9==HIGH) and (sw6==HIGH) and (temp>= 37)) {
digitalWrite(macina, HIGH);
}
if (sw8==HIGH) {
digitalWrite(macina, LOW);
digitalWrite(elettromagnete, HIGH);
delay(500);
digitalWrite(elettromagnete, LOW);
delay(500);
digitalWrite(elettromagnete, HIGH);
delay(500);
digitalWrite(elettromagnete, LOW);
delay(500);
digitalWrite(pressacaffe, HIGH);
}
if (sw7==HIGH) {
digitalWrite(pressacaffe, LOW);
digitalWrite(pompa, HIGH);
delay(6500);
digitalWrite(pompa, LOW);
digitalWrite(pressariposo, HIGH);
}
if (sw6==HIGH) {
digitalWrite(pressariposo, LOW);
}
}
Non ti voglio confondere le idee. Il tuo obbiettivo immediato e fare funzionare la macchina e questo lo comprendo ma io non riesco a scrivere una riga di codice e neanche immaginarla con questo approccio.
Per me si tratta di sequenze di stati da eseguire un ciclo per volta. Forse è il caso che descrivi cosa deve fare
con uno peseudo codice che descrive nel dettaglio ogni cosa. Lo pseudo codice è un misto di azioni, condizioni, stati, ecc descritti in modo comprensibile a chiunque, qualcosa del tipo:
Se pressostato ALTO (La caldaia è in pressione) {
Se presenzacaffe ALTO (commento, riferimento a..) {
statomacchina = PRONTAPEREROGARE
}
}
( Cicla e testa il pulsante eroga solo se la macchina è pronta per erogare, altrimenti esce dal ciclo)
Cicla0 {
Se statomacchina == PRONTAPEREROGARE {
Se PULSANTEEROGA == ALTO {
statomacchina = EROGA
Esci da Cicla0
}
} else {
Esci da Cicla0
}
}
if (sw7==HIGH) { // eseguito questo a seguito di quale evento ritorna LOW?
digitalWrite(pressacaffe, LOW);
digitalWrite(pompa, HIGH);
delay(6500);
digitalWrite(pompa, LOW);
digitalWrite(pressariposo, HIGH);
}
if (sw6==HIGH) {
digitalWrite(pressariposo, LOW);
}
}
L'uso dello pseudo codice aiuta la codifica a più mani.
Ciao.
Certo, condivido pienamente, purtroppo diciamo che si e' creata una situazione particolare che non mi ha dato tempo di fare le cose con calma. Ad ogni modo ho risolto, in effetti nelle ultime righe andavano insertiti una serie di intervalli di tempo.
In questi giorni spero che esca un po di tempo per mettere in pratica il mio primo sketch
Saluti Angelo
Ho cambiato il titolo del thread, "help" non.. aiuta.