Bilancia

Buongiorno a tutti,
sono nuova nel mondo Arduino e sto cercando piano piano di imparare qualcosa!!!
In particolare dovrei eseguire un progetto prova in cui la bilancia, che finora sono riuscita a calibrare grazie allo sketch seguente, che ogniqualvolta raggiunge il peso giusto, ( ho una ricetta in cui il primo ingrediente pesa 80 g, il secondo 150, il terzo 2 e via dicendo...) si accende il led. Qualcuno può aiutarmi a compilare lo sketch? inoltre ho creato i vari collegamenti tra breadboard e arduino (allegata l'immagine...può andare?)

Vi ringrazio e mi scuso in anticipo per la mia ignoranza :smiley:

2.ino (1.02 KB)

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.

Guglielmo

P.S.: Qui una serie di link utili, NON necessariamente inerenti alla tua domanda:
- serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- pinout delle varie schede by xxxPighi: Pinout
- link generali utili: Link Utili

ciao sub_sar,

in pratica vorresti che, dato una ricetta multi point (cioè con diversi target di peso), ti dicesse se il peso richiesto è stato versato e richiedesse il successivo fino a che tutti i componenti sono stati versati?

Nella tua presentazione non indichi di che competenze disponi per la parte di programmazione.
Così su due piedi ti posso dire che una possibile soluzione al tuo problema è l'utilizzo di un array contenente i vari valori da raggiungere, un indice per sapere a quale ingrediente sei arrivata in modo da accendere il led quando hai raggiunto il peso desiderato per i vari ingredienti.
Poi ti servirà un controllo che se dopo aver acceso il led il peso torna a zero allora dovrai procedere con il peso (quindi indice dell'array dei pesi) successivo.
Quando arrivi all'ultimo tornerai all'elemento zero dell'array e il tutto si ripeterà.
Chiarisci meglio se hai compreso la traccia che ti ho proposto e il tuo livelli di conoscenza del c e della programmazione in genere.
Inoltre alla riga 21 c'è un errore

peso = bilancia.get_units(20), 3;

credo debba diventare

peso = bilancia.get_units(20);

ORSO2001:
ciao sub_sar,

in pratica vorresti che, dato una ricetta multi point (cioè con diversi target di peso), ti dicesse se il peso richiesto è stato versato e richiedesse il successivo fino a che tutti i componenti sono stati versati?

esatto

per quanto riguarda la programmazione le mie competenze sono quasi nulle purtroppo!
p.s grazie per la correzione nel codice!

Ok, procediamo per gradi allora, io come al solito in ottemperanza al regolamento non ti scriverò il codice ma ti fornirò suggerimenti in modo che tu posso cercare di scriverlo e metere qui il codice per eventuali correzioni.
Prima cosa partiamo da una cosa di base invece di pensare a N pesi facciamo un peso solo e accendiamo il led.
Definisciti una variabile (Es. pesoDaRaggiungere) e più o meno come hai fatto per scrivere sul monitor seriale se il peso cambia controlla che il peso attuale sia uguale a quello da raggiungere, nel qual caso accendi il led, a questo punto le strade sono due:

  1. dopo averlo acceso devi stare li a leggere la bilancia finché il peso non viene rimosso, solo dopo che la bilancia è scarica spegni il led
  2. i pesi da aggiungere sono da considerarsi senza rimuovere il peso precedente, nel qual caso dopo aver acceso il led aspetti tot secondi e lo spegni in modo da segnalare all'utete che la bilancia è pronta per il prossimo ingrediente.
    Quando sei riuscita a fare questo (o quando ti blocchi con qualche problema) estendere il codice in modo da considereare tutti i pesi che vorrai

c'è una cosa da dire, di cui non ero sicuro ed ho controllato la libreria HX711, i metodi di questa libreria ritornano o double o float...nel tuo sketch usi delle int per "registrare" i dati...non va bene.

aggiungo che fare verifiche tra float non è "semplice" se non si conosce la materia...non è impossibile basta tener presenti alcune cose.

questo giusto per precisare

sub_sar:
per quanto riguarda la programmazione le mie competenze sono quasi nulle purtroppo!

Hm, non la vedo facile, allora... Considera che, a meno che tu non voglia dedicare un diverso Arduino ad ogni singola ricetta, l'ideale sarebbe avere un "archivio" di ricette (quindi una shield per le schedine di memoria SD), per cui tu la scegli da un elenco (pulsanti, LCD), e a quel punto hai la lista degli ingredienti e relativo peso (array di valori ingrediente-peso).

Dopo aver "studiato" un pochino e tramite vari tentativi, sono riuscita a compiere due azioni in due sketch differenti: la prima riguarda la possibilità di accendere con un bottone il led(0) di una strip led mentre la seconda permette di accendere il led di verde quando si raggiunge un peso specifico (nel mio caso 166,99 -170.01 g). Ora il mio scopo sarebbe unire i due sketch, ovvero compiere queste azioni: accendere il led 0 con il pulsante e una volta raggiunto il peso il led si illuminerà di verde.
Come posso fare?

Scusa la franchezza ma senza vedere uno straccio di sketch come pensi che possiamo fornirti una risposta???

perdonami… ho dimenticato di allegare il tutto.

19.ino (1.39 KB)

sketch15.ino (1.45 KB)

Ok, allora non è complicato, lo spiego a parloe e poi tu provi a farlo e casomai metti il codice qui.
In sostanza entro al lopp devi fare una "macchina a stati finiti" (puoi usarlo come ricerca), detta semplice quando accendi il led perché è stato premuto il pulsante ti setti una nuova variabile di tipo booleano (ad esempio) subito dopo (fuori dall'if che accende il led) testi se questa variabile ha il valore true, nel caso all'interno di questo if metti tutta la parte della verifica del peso e relativa accensione della strip led.
Una volta raggiunto il peso e illuminato di verde cosa deve succedere?

Grazie mille per l'aiuto! Davvero prezioso! Successivamente dovrò fare in modo che il led si spenga e il led successivo allo 0 (quindi 1, poi il 2 e via dicendo) diventi anch'esso rosso e poi verde quando raggiunge un altro valore di peso prestabilito.

Riposto lo sketch con le modifiche che mi hai suggerito

19.ino (1.72 KB)

Il codice che hai postato non fa ciò che ho capito che tu vorresti fare, riporto qui quello che ho capito, nel caso conferma o correggi:
Avvio la bilancia non devo fare nulla finché l'utente non preme il pulsante.
Quando l'utente ha premuto il primo led siaccende di rosso, a quel punto inizio a controllare il peso, quando ho raggiunto il peso esatto il primo led si accende di verde
Ho capito bene? Se si il tuo codice non corrisponde a quanto sopra esposto.
A questo punto mi sono perso, i pesi successivi sono in aggiunta a quello presente, ovvero non rimuovo ciò che è sulla bilancia oppure ogni ingrediente fa storia a se ovvero peso il primo lo tolgo peso il secondo lo tolgo, ecc.??
In ogni caso visto che stai parlando di pesate multiple con relativi pesi ti dico già di studiare come funzionano gi Array del C perché ti torneranno molto utili, è impensabile di scrivere codice ripetuto solo per cambiare il peso da raggiungere.

Esatto, hai capito bene. In realtà funziona solo che per vedere il peso devo avviare il monitor seriale. Grazie comunque per i tuoi consigli