Controllo temperatura con arduino (sketch funzionante ultimo post)

ok ricevuto.
pensavo che lm 317 fosse un smosfet.
ho questo che di certo e’ un mosfet…chiedo aiuto nel cablarlo
ho messo tutti colori diversi in modo da capirci.
da quel che penso l arancione e’ il controllo quindi va in d9…gli altri?

A occhio cosi’

mosfet.jpg

ok… fantastico…sembra funzionare.
ci lavoro un altro po’ per vedere di impostare dei led e poi in ogni caso vi faccio sapere

confermo che tutto sembra funzionare come deve.
Quando apro il monitor seriale vedo la lettura del potenziometro e la lettura del termistore, domanda:

ora c’e’ da affrontare il problema dell accensione dei led: un mio amico ha aggiunto la parte per i led ma purtroppo non funziona, o meglio si accende il primo led (quello impostato a 80) ma gli altri no!
lo allego
qualcunoha idea di dove e’ l errore?

FTOJLAFI83LGWI4-modif.ino (5.17 KB)

Prova a cambiare:

. . .
    if (Temp > TemperatureThreshold80){
. . .
    else if(Temp > TemperatureThreshold160){
. . .
    else if(Temp > TemperatureThreshold180){
. . .
    else if(Temp > TemperatureThreshold200){
. . .
    else if(Temp > TemperatureThreshold210){
. . .
    else if(Temp > TemperatureThreshold215){
. . .

rispettivamente con

. . .
    if (Temp > TemperatureThreshold80){
. . .
    if(Temp > TemperatureThreshold160){
. . .
    if(Temp > TemperatureThreshold180){
. . .
    if(Temp > TemperatureThreshold200){
. . .
    if(Temp > TemperatureThreshold210){
. . .
    if(Temp > TemperatureThreshold215){
. . .

e cambia l’ultimo else in

    if (Temp < TemperatureThreshold80) {

Ciao,
P.

grande!!! funziona perfettamente ora.

vi chiedo se mi aiutate a fare gli ultimi aggiustamenti!:

se possibile appena viene data corrente far lampeggiare tutti e 5 i led a verifica che funzionino...come nel quadro comandi di un automobile.

inoltre al momento io posso far variare la temperatura a mio piacimento, siccome per l utilizzo che ne devo fare la temperatura che mi interessa e' tra i 180 e i 210 e' possibile far in modo che con il potenziometro al minimo vada a 180 e con il potenziometro al massimo vada a 210? in pratica limitare interpolando l azione del potenziometro tra 180 e 210

grazie mille

Posta sempre l'ultimo sketch modificato, altrimenti corriamo il rischio di suggerirti correzioni che non funzionano o danno errore.

Ciao,
P.

hai ragione…i lampeggi in realta mi sono accorto che li aveva gia messi il mio amico ma sono veramente pochi e veloci…aggiungerne qualcuno in piu’(io penso di sapere come fare ma in queste cose meglio non andare a tentativi…purtroppo non me4 ne racapezzo niente in questo mondo anche se ascoltando voi sto imparando molto)

FTOJLAFI83LGWI4-modif.ino (5.19 KB)

Perché non ci dici come pensi di fare?

Non devi aver paura di sbagliare. Qui nessuno è "nato imparato". Tutti abbiamo commesso errori e da questi, in generale, abbiamo imparato.

Coraggio!

Ciao,
P.

aspetta non fraintendere davvero non ho un idea di questo linguaggio ...leggo lo script e per deduzione penso di capire qualcosa...nel senso che non sono di quelli ...ahh ragazzi mi fate questo? disinteressandomene completamente...ci guardo e cerco di capire pero' effettivamente non ne ho un idea...comunque per risponderti penso che per fare dei lampeggi piu' facilmente visibili bisogna aumentare il delay che attualmente e' impostato a 50 e metterlo magari a 200!

purtroppo mi sono accorto di una cosa sembra che il potenziometro non funzioni piu'...nel senso che lo metto al minimo o a 300 non cambia nulla e tende sempre a scaldare mentre invece ricordo che le prove che avevo fatto davano effetto variandolo...ho provato a caricare anche il firmware originale che e' quello con cui avevo fatto le prove ma anche con quellos embra non funzionare piu'...puo' essere che ho rotto il mosfet perche magari non l ho dissipato abbastanza?e' plausibile che se si rompe il mosfet lui stia sempre a porte spalancate e quindi l apprato scalda indistintamente? oppure pensi ci possano essere errori nel codice?

motorimicro:
aspetta non fraintendere davvero non ho un idea di questo linguaggio ...leggo lo script e per deduzione penso di capire qualcosa...nel senso che non sono di quelli ...ahh ragazzi mi fate questo? disinteressandomene completamente...ci guardo e cerco di capire pero' effettivamente non ne ho un idea...comunque per risponderti penso che per fare dei lampeggi piu' facilmente visibili bisogna aumentare il delay che attualmente e' impostato a 50 e metterlo magari a 200!

Esatto, intuizione corretta, prova a modificarlo e a caricare il programma, dovresti vedere i lampeggi più lenti e visibili.

si fatto,variando il delay ora e' come deve essere...ora rimedio un altro mosfet perche secondo me e' quello che e' andato...

invece per interpolare il potenziometro vanno scritte nuove righe di script o basta variare i valori ?

quando scrivo basta variare i valori e' perche mi viene da pensare a questa riga che e' presente nel void setup e nel void loop:

SetPoint = map(analogRead(ThresholdPin),0,1023,0,300);

qui per l intuito e' un po scarso ...se potete dirmi la vostra

Anche in questo caso hai individuato l'istruzione corretta da modificare, la modifica è molto semplice quindi invece di suggerirtela direttamente ti metto il link al reference della funzione leggilo e vedrai che ti sarà chiaro cosa devi modificare, se poi hai dubbi metti la modifica che faresti prima di inserirla nel codice, ma non temere anche se sbagli non puoi danneggiare nulla

motorimicro:
...SetPoint = map(analogRead(ThresholdPin),0,1023,0,300);...

Quella riga ti dice questo:
Il pin di arduino legge il valore analogico della tensione (0-5V) e lo "trasforma" in un valore che va da 0 (0V) a 1023 (5V).
Considera queste scale equivalenti:

Applicando questa tensione al pin di arduino
0V        0,49      0,98      1,47      1,96      2,44      2,93      3,42      3,91      4,40         5,00
+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--
Si ottengono questi valori
0         100       200       300       400       500       600       700       800       900          1023
+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--

L'istruzione "map" cambia il MIN e MAX della scala inferiore e "ridistribuisce" i valori intermedi. Nel caso dell'istruzione

SetPoint = map(analogRead(ThresholdPin),0,1023,0,300);
Le scale diventano
0V        0,49      0,98      1,47      1,96      2,44      2,93      3,42      3,91      4,40        5,00
+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+--
0                   58                  117                 176                 235                   300
Si ottengono questi valori

Penso che tu abbia capito come funziona map. Puoi dare il MIN e il MAX entro i quali saranno compresi i tuoi valori.

Ciao,
P.

P.S. Ottimo il suggerimento di fabpolli!

ora me li studio un po e poi vi dico cosa farei....intanto una domanda per voi...come vi dicevo ho il sospetto che si sia bruciato il mosfet perche mal dissipato, in quanto mi accorgo che quando accendo l apparato la resistenza comincia a scaldare indipendentemete dal potenziometro.non ho rimediato un mosfet in sostituzione ma un bjt ...andra' bene ugualmente?

Risposta impossibile da fornire in assenza del modello del mosfet sostituito e anche del modello del BJT sostitutivo.

per il bjt ho tagliato la testa al toro...l ho provato e funziona

mentre invece per lo script
io penso che debba variare lo 0 ed il 300.

se ad esempio i valori tra cui vorrei lavorare fossero 180e 230

modifico la riga sia sul void setup e sul void loop in questo modo:

SetPoint = map(analogRead(ThresholdPin),0,1023,180,230);

cosi facendo con il potenziometro al minimo lei va a 180 °c, al massimo a 210 °c

Posso suggerirti di postare lo schema elettrico definitivo con i valori e le sigle dei componenti?
Così si riesce a seguire meglio i collegamenti che stai facendo.
Intendo uno schema tipo quello che avevi fatto a mano, non quello fatto al computer che è meno immediato da seguire.
Va bene anche ri-fatto a mano, magari un pelo più ordinato, ma proprio un pelo, giusto per non avere intrecci fitti e componenti sovrapposti.

(ora vi faccio lo schema del cablaggio)

ho fatto la prova …e si…funziona…passettino dopo passettino si sta aggiustando tutto…
cmq ancora qualche problema c’e’

in primis e proprio non capisco perche non si accende l ultimo led quello dei 220 (cablaggio e led funzionano)

poi succede che siccome la lettura del termistore e’ variabile succede che magari si accende il led dei 180 ma comincia a lampeggiare anche quello dei 190 o addirittura pure quello dei 200 con un effetto ottico che da l impressione che l apparato e’ un po ballerino.
per risolvere il problema penso si debba mettere a livello hardware sui capi dei led un consensatore per stabilizzarlo
mentre a livello software bisognerebbe fargli fare la media su un intervallo di tempo e farlo accendere quando la media cade tra un intervallo di valori…quest’ultima cosa non la vedo cosi’ semplice…mi viene da pensare che si potrebbe dare un occhiata allo script (marlin)che e’ stato scritto per le stampanti 3d (qui davvero la cosa per me rimane lontano dalle mie capacita’ ve lo lascio in allegato ma mi rendo conto che la cosa si fa complicata)

ultimo problema sarebbe quello di far andare il mosfet un po piu lentamente perche scalda da paura cosi’ impostato…si puo’ fare da script o solo da hardware?

Marlin.ino (1.83 KB)

FTOJLAFI83LGWI4-marco.ino (5.21 KB)

ecco lo schema