Controllo temperatura con arduino (sketch funzionante ultimo post)

Salve a tutti,

premetto che non sono un intenditore di programmazione arduino, il fatto e' che prima o poi arrivero' anche li,per il momento disegno 3d, torni ,fresatrici cnc, stampanti 3d.

ho scaricato un progetto da internet e chiedo se qualcuno potrebbe aiutarmi ad inserire qualche riga di codice per far accendere dei semplici led.

l apparato hardware funziona cosi':
viene data alimentazione ed un elemento scaldante che comincia a scaldare, un termistore rileva la temperatura;la temperatura puo' essere variata da un potenziometro,
vorrei aggiungere led per avere un riscontro grossolano visivo delle temperature raggiunte

lo sketch del progetto scaricato "originale" prevedel'uso di un lcd che io non utilizzero',il progettista mi informa che cmq basta non applicarlo e lo sketch funzionera' ugualmente.

al suo sketch originale vorrei semplicemente aggiungere dei led con la seguente funzione.

led1 segnala che il resistore si sta scaldando
led2 temperatura raggiunta 180 gradi
led3 temperatura raggiunta 190 gradi
led4 temperatura raggiunta 200 gradi
led5 temperatura raggiunta 210 gradi
led6 temperatura raggiunta 220 gradi

quando ad esempio il led 180 gradi si accende vorrei che rimanesse acceso anche quando poi si accendono gli altri

in allegato lo sketch originale che ha il nome ftojlaf....

in allegato potete trovare un altro .ino scritto da un mio amico con l' intento di inserire i led che pero' non riusciamo a far funzionare,lo allego perche magari la parte riguardante i led e' magari correttamente scritta e magari qualcuno riesce a fonderli insieme con qualche copia incolla...io ci ho provato ma non conoscendo il linguaggio di programmazione commetto sicuramente banali errori di sintassi che non mi fanno procedere.
lo sketch scritto dal mio amico si chiama sketch_ferra

grazie a tutti, Marco

FTOJLAFI83LGWI4.ino (2.69 KB)

sketch_ferra.ino (3.78 KB)

Nel vostro programma avete modificato la lettura del pin analogico che nel programma originale fa uso di una funzione che converte il valore letto in temperatura

ActualTemp = double(Thermister(analogRead(ThermistorPin)));

Che renderebbe poi le varie soglie più facili da interpretare, ma non è un grosso problema, vedendo quello che avete scritto c'è qualcosa che non torna i valori ritornati dai pin analogici vanno da 0 a 1023 quindi ActualLed < 1200 sarà sempre vero ergo led sempre accesi.
Ma una domanda mi sorge spontanea ma man mano che il valore della temperatura sale sale anche il valore letto (che avete stampato su monitor seriale)? Oppure è inverso ovvero da freddo avete 1023 e a caldo 0 (o un valore prossimo allo zero)?
Senza quest'informazione potrei suggerire un codcie errato, preferisco attendere la risposta

cerchero di rispondere in quanto uno script e' di internet l altro di un mio amico infatti io non sono l autore di nulla in quanto non me ne intendo gran che'.

per quanto riguarda la prima obbiezzione sono daccordo con infatti leggendo lo script mi sembrava strana anche a me sta cosa in quanto io ci avrei messo un maggiore e non un minore...cioe se maggiore di 10 accendi il primo led,se maggiore di 100 accendi anche il secondo e via via fino all 'ultimo!

il monitor seriale non l ho montato nella parte hardware quindi non leggo nessun monitor e l intenzione e' quello di non mettere nessun monitor per il momento, da qui lesigenza di aver led che indichino la temperatura raggiunta.

rimango a disposizione per altri chiarimenti, spero di aver risposto alle domande

Per monitor seriale non si intende il display lcd (che hai chiarito di non voler mettere) ma del tool incluso nell'IDE di Arduino che mostra i messaggi che tu metti nel programma con i comandi Serial.print
Quindi quando programmi Arduino per mettere il tuo programma, se lo lasci attaccato all'usb e apri il moitor seriale verdai i messaggi che il programma invia e da li potrai capire i valori restituiti dal sensore e rispondere alla domanda posta, ovvero se va da 0 a 1023 o viceversa da 1023 a 0.
Se non puoi/vuoi lasciare Arduino attaccato al PC per leggere i messaggi di debug dovrai andare a tentoni e modificare (tu o il tuo amico) il programma alla cieca e rischi comunque di perdee un sacco di tempo nel farlo

ok perfetto ora ho capito...al momento non ho con me l hardware ma dopo nel pomeriggio vado a prenderlo e mi faro spiegare anche come utilizzare il monitor per monitorare cosa succede nell hardware quindi conto di darle una risposta precisa in serata.intanto grazie mille

eccomi....da monitor seriale leggo 591 a temperatura ambiente
a primo impatto mi sembra che sia un valore bello alto in quanto poi gli rimane da 512 a 1023 per gestire tutto il resto del gap da temperatura ambiente a 220 gradi.
mi e' venuta in mente un altra cosa bisognerebbe aggiungere come temperatura massima 220.
ti allego lo sketch che ho modificato nel pomeriggio insieme a quel mio amico

ecco l ultima versione...i valori che ho messo in actual temp sono provvisori intanto per vedere se funzionano i led
comunque confermo che piu si scalda e piu' il valore del termistore sale

ultimo aggiornamento: tutto freddo tutto disconnesso.
accendo e collego alla corrente con il potenziometro al minimo che segna 14 lui comincia a scaldare indipendentemente da tutto (ultimo valore misurato 900 all incirca sara' stato sui 70 gradi riuscivo a toccarlo per pochissimo senza scottarmi). non so se e' un errore di collegamenti o di script...aspetto le tue opinioni...buonaserata

ho provato a caricare il firmware originale, noto che il valore del termistore cambia e che appena acceso si aggira intorno ai 29
per il resto stesse impressioni che il potenziometro non influenzi alcun che' variandolo...forse pochi ampere disponibili in alimentazione? 24watt contro i 40 watt massimi che la resitenza scaldante sopporta

sketch_mar27a.ino (3.63 KB)

Il codice sembra migliore adesso, almeno la parte che gescisce i led, non acora corretto ma migliorato si.
Per capire come mai il potenziometro "sembra" non influenzare l'uscita ti dico che ti devi focalizzare su queste domande:
A che potenziometro fai riferimento?
E' connesso a qualche pin? Se si, a che pin è connesso? Dove lo leggi? Come usi il valore letto?
La parte che riscalda come viene pilotata?

Altro suggerimento per gestione dei led, se ActualTemp scende sotto il valore minimo il primo led rimane comunque acceso, è voluto oppure è una cosa da sistemare?

e' voluto che rimangano accesi ...qui sotto lo schema di collegamento

Hai messo le resistenze su ciascun led vero?

le ho messe ora da 330 omh ma non so perche con le resistenze in serie non funzionano i led

un chiarimento per il collegamento hardware...
nel disegno allegato c'e' il filo giallo del mosfet , il blu del temistore(sensore che rileva la temperatura) ed l arancione del potenziometro...potete dirmi in base al pezzo di script che vi ho dato sempre in allegato dove vanno collegati all arduino nano?

al momento ho fatto cosi'

giallo (mosfet) in d9
blu (potenziometro) in a1
rosso (termistore) in a0

Schermata 2019-03-30 alle 13.19.50.png

Ti manca la resistenza verso massa sul pin A1

quale resistenza? sullo shema non c'e' nulla! da quanti ohm?

inoltre mi e' capitato di leggere questo:

  • For Reading a 100K thermistor.
    *============================================================
  • (Gnd) ---- (100k-Resistor) -------|------- (100K-Thermistor) ---- (+5v)
  • |
  • Analog Pin 0
    *============================================================
    */

....per caso ci va anche una resistenza da 100kohm che va dal pin a0 verso massa?

Scusa, volevo dire A0

Certamente che ci vuole

ah ok...quindi quello che ho appena notato anche io...quindi mando una resistenza da 100k da a0 in massa...giusto?

Si, ma il valore dipende anche dal termistore

il valore del termistore e' quello che mi da il grafico...100k
come mosfet posso usare un lm317?

mi confermate anche che il cablaggio di blu giallo rosso sono corretti in arduino per come li ho fatti!

come mosfet posso usare un lm317?

Un LM317 non è un mosfet, ma un regolatore di tensione
Il cablaggio è giusto, ma un paio di cose:

  1. i pin chiamali nel modo corretto, quindi A0 e A1, non 0 e 1
  2. metterei una piccola resistenza 100/220 ohm, tra il pin D9 e il gate del mosfet ( per sicurezza )