Arduino Forum

International => Italiano => Generale => Topic started by: motorimicro on Mar 28, 2019, 12:42 pm

Title: Controllo temperatura con arduino (sketch funzionante ultimo post)
Post by: motorimicro on Mar 28, 2019, 12:42 pm
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
Title: Re: un aiuto per lo script
Post by: fabpolli on Mar 28, 2019, 01:05 pm
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
Code: [Select]

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
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 28, 2019, 04:22 pm
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
Title: Re: un aiuto per lo script
Post by: fabpolli on Mar 28, 2019, 04:35 pm
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
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 28, 2019, 04:40 pm
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
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 28, 2019, 07:30 pm
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
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 28, 2019, 07:47 pm
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
Title: Re: un aiuto per lo script
Post by: fabpolli on Mar 29, 2019, 09:21 am
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?
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 29, 2019, 12:06 pm
e' voluto che rimangano accesi ...qui sotto lo schema di collegamento
Title: Re: un aiuto per lo script
Post by: fabpolli on Mar 29, 2019, 12:12 pm
Hai messo le resistenze su ciascun led vero?
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 29, 2019, 08:43 pm
le ho messe ora da 330 omh ma non so perche con le resistenze in serie non funzionano i led
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 30, 2019, 01:24 pm
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
Title: Re: un aiuto per lo script
Post by: brunello22 on Mar 30, 2019, 01:41 pm
Ti manca la resistenza verso massa sul pin A1
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 30, 2019, 02:11 pm
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?
Title: Re: un aiuto per lo script
Post by: brunello22 on Mar 30, 2019, 02:16 pm
Scusa, volevo dire A0
Title: Re: un aiuto per lo script
Post by: brunello22 on Mar 30, 2019, 02:23 pm
Certamente che ci vuole
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 30, 2019, 02:25 pm
ah ok...quindi quello che ho appena notato anche io...quindi mando una resistenza da 100k da a0 in massa...giusto?
Title: Re: un aiuto per lo script
Post by: brunello22 on Mar 30, 2019, 02:28 pm
Si, ma il valore dipende anche dal termistore
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 30, 2019, 02:31 pm
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!
Title: Re: un aiuto per lo script
Post by: brunello22 on Mar 30, 2019, 02:41 pm

Quote
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 )
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 30, 2019, 02:55 pm
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?
Title: Re: un aiuto per lo script
Post by: brunello22 on Mar 30, 2019, 03:24 pm
A occhio cosi'

(http://forum.arduino.cc/index.php?action=dlattach;topic=606525.0;attach=301711)
Title: Re: un aiuto per lo script
Post by: motorimicro on Mar 30, 2019, 06:45 pm
ok... fantastico...sembra funzionare.
ci lavoro un altro po' per vedere di impostare dei led e poi in ogni caso vi faccio sapere

 
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 01, 2019, 11:41 pm
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?
Title: Re: un aiuto per lo script
Post by: pgiagno on Apr 02, 2019, 08:39 am
Prova a cambiare:

Code: [Select]
. . .
    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

Code: [Select]
. . .
    if (Temp > TemperatureThreshold80){
. . .
    if(Temp > TemperatureThreshold160){
. . .
    if(Temp > TemperatureThreshold180){
. . .
    if(Temp > TemperatureThreshold200){
. . .
    if(Temp > TemperatureThreshold210){
. . .
    if(Temp > TemperatureThreshold215){
. . .

e cambia l'ultimo else in

Code: [Select]

    if (Temp < TemperatureThreshold80) {


Ciao,
P.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 11:34 am
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
Title: Re: un aiuto per lo script
Post by: pgiagno on Apr 02, 2019, 11:42 am
Posta sempre l'ultimo sketch modificato, altrimenti corriamo il rischio di suggerirti correzioni che non funzionano o danno errore.

Ciao,
P.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 11:45 am
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)
Title: Re: un aiuto per lo script
Post by: pgiagno on Apr 02, 2019, 11:53 am
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.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 12:06 pm
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?
Title: Re: un aiuto per lo script
Post by: fabpolli on Apr 02, 2019, 12:42 pm
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.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 01:32 pm
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
Title: Re: un aiuto per lo script
Post by: fabpolli on Apr 02, 2019, 02:02 pm
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 (https://www.arduino.cc/reference/en/language/functions/math/map/) 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
Title: Re: un aiuto per lo script
Post by: pgiagno on Apr 02, 2019, 02:21 pm
...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:

Code: [Select]

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

Code: [Select]
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!
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 04:07 pm
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?
Title: Re: un aiuto per lo script
Post by: fabpolli on Apr 02, 2019, 04:24 pm
Risposta impossibile da fornire in assenza del modello del mosfet sostituito e anche del modello del BJT sostitutivo.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 04:29 pm
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 



Title: Re: un aiuto per lo script
Post by: maubarzi on Apr 02, 2019, 06:19 pm
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.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 06:31 pm
(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?
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 08:09 pm
ecco lo schema
Title: Re: un aiuto per lo script
Post by: pgiagno on Apr 02, 2019, 08:23 pm
Posta la sigla di quel mosfet che, per come è collegato non mi convince per niente, per niente, proprio PER NIENTE.

Ciao,
P.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 08:36 pm
la sigla e' E13007

nel frattempo ho studiato un po' e fatto prove.
ho messo la resistenza sul gate e ho visto che il bjt lavora molto meno anzi quella che ho messo lo faceva lavorare troppo poco...allora l ho tolta e cominciato a far prove sullo script ed ora sto testando e mi sembra funzionare ma perfavore confermatemelo che per far andare piu piano il mosfet(o bjt) devo cambiare lo script in questo modo:

prima cera scritto cosi alla riga 177
analogWrite(HeaterPin,output)

io ho cambiato cosi
analogWrite(HeaterPin,128)    per farlo lavorare al 50%

giusto?
Title: Re: un aiuto per lo script
Post by: maubarzi on Apr 02, 2019, 08:51 pm
Mosfet e transistor sono due cose diverse e funzionano in modo diverso.
Invece di aggiungere componenti a caso sarebbe il caso di vedere un po' come funzionano queste cose e di fare qualche calcolo per domensionare correttamente i vari componenti.
Comprese, magari, le resistenze sui led. Da quanto le hai messe?

Se al posto del mosfet stai usando il bjt MJE13007, allora quello dello schema è collegato male.
La resistenza scaldante da quanto è?
Così calcoliamo la corrente necessaria e in base alle caratteristiche del MJE13007 ci calcoliamo la corrente da mandare in base per pilotarlo e ci mettiamo una resistenza per limitarla al valore trovato.

Dal datasheet, la piedinatura del MJE13007 è questa:
(https://forum.arduino.cc/index.php?action=dlattach;topic=606525.0;attach=302201)

Ecco, il tempo di completare il testo durante la partita e siete già andati avanti...
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 09:27 pm
le resistenze sui led sono da 330 ohm.

partiamo in ordine, sicuramente c'e' un errore sullo script in quanto il led d13 non si accende quando viene raggiunto il valore 220

in allegato lo sketch
la foto del monitor seriale
e fidatevi di me che il led non si accende


qualcuno sa dove e' l errore?

Title: Re: un aiuto per lo script
Post by: pgiagno on Apr 02, 2019, 09:32 pm
ecco lo schema
Se le connessioni sono come le hai disegnate sono sbagliate.Da questo (https://www.onsemi.com/pub/Collateral/MJE13007-D.PDF) data sheet si vede che,guardando la sigla del transistor, il terminale di sinistra è la BASE e tu l'hai connessa a massa, il terminale centrale è il COLLETTORE e tu l'hai connesso al pin di controllo di arduino, il terminale di destra è l'EMETTITORE e tu l'hai collegato al carico.

Le connessioni esatte sono; BASE al pin di Arduino attraverso una resistenza di ALMENO 1kohm; EMETTITORE a GND; COLLETTORE al carico (resistenza scaldante).

I terminali del mosfet sono IN GENERALE da sinistra a destra: GATE, DRAIN, SOURCE e vanno connessi in questo modo: GATE al pin di Arduino attraverso una resistenza di protezione di 100 ohm; il DRAIN al carico (resistenza scaldante); il SOURCE a GND.

Ciao,
P.
Title: Re: un aiuto per lo script
Post by: pgiagno on Apr 02, 2019, 09:41 pm
...qualcuno sa dove e' l errore?
Cambia

Code: [Select]
     else if(Temp > TemperatureThreshold220){

con

Code: [Select]
     if(Temp > TemperatureThreshold220){


Ciao,
P.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 09:42 pm
le resistenze sui led sono da 330 ohm.

partiamo in ordine, sicuramente c'e' un errore sullo script in quanto il led d13 non si accende quando viene raggiunto il valore 220

in allegato lo sketch
la foto del monitor seriale
e fidatevi di me che il led non si accende


qualcuno sa dove e' l errore?

Title: Re: un aiuto per lo script
Post by: maubarzi on Apr 02, 2019, 09:57 pm
Le connessioni esatte sono; BASE al pin di Arduino attraverso una resistenza di ALMENO 1kohm; EMETTITORE a GND; COLLETTORE al carico (resistenza scaldante).
Quali sarebbero le caratteristiche della resistenza scaldante?
Con una resistenza in base da 1K avresti una corrente di base di circa 3,5mA (Considerando una Vbe di 1,5V circa)
Considerando una Hfe (guadagno) di circa 30 avresti sulla resistenza scaldante circa 100mA
Se non metti nessuna resistenza tra arduino e la base del transistor, potresti rischiare di cucinare arduino. Puoi confidare sulle sue limitazioni interne ma è da incrociare le dita.
Quel transistor potenzialmente arriva a 8A con una corrente di base pari a 8A/30=266mA quindi se glie ne dai lui se li prende ;)

Se la resistenza scaldante richiede 100mA ok, se ne chiede di più mi sa che va ricalcolata la resistenza in base, se ne chiede 500 forse è il caso di pensare di cambiare transistor e tornare al mosfet.

Una volta sistemata la parte hardware passiamo al software.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 02, 2019, 10:13 pm
effettivamente collegamenti bjt fatti proprio alla c..o non c'e' altro modo di dirlo,grazie per avemelo fatto notare.
grande pgiamo ora si accende anche il led d13

la resistenza scaldante e' una 40 watt 12 volt di quelle che si usano per le stampanti 3d

siccome sento che il bjt scalda molto mi chiedevo ,appunto come accennato anche da voi ,come farlo andare "piu' piano"

penso appunto si possa fare mettendo una resistenza sul gate
ma a scopo didattico dato che il gate lo piloto con un pwm invece di mandargli 255 non posso mettere un valore inferiore? la sintassi in  questo specifico sketch quale sarebbe?
forse questa ?  analogWrite(HeaterPin,128)         per farlo lavorare al 50%   (riga 177)
Title: Re: un aiuto per lo script
Post by: maubarzi on Apr 02, 2019, 10:29 pm
C'è qualcosa che non mi torna.
La resistenza è da 40W 12V per la legge P = V*I, ricaviamo I = P/V = 40W/12V = 3,3A
Con un guadagno di 30, la corrente in base dovrebbe essere 3,3A/30 = 110mA
Decisamente troppo per un pin di arduino che al massimo massimo tiene 40mA.
Arduino scalda pure lui?
Il transistor è caldo o scotta proprio? Arriverebbe fino a 8A opportunamente raffreddato con le sue alette di raffreddamento, quello che mi lascia perplesso è la corrente di base erogata da Arduino.
Hai messo la resistenza suggerita da @pgiagno?

forse questa ?  analogWrite(HeaterPin,128)         per farlo lavorare al 50%   (riga 177)
Si, ma solo a scopo didattico, per sistemare basta regolare bene la resistenza di base per limitare la corrente del transistor.
Poi, ovviamente, passerà meno corrente sulla resistenza scaldante che scalderà meno.
Title: Re: un aiuto per lo script
Post by: rslogix52 on Apr 02, 2019, 10:51 pm
Ciao per fare lavorare bene il transistor bisogna aumentare la corrente di base per far lavorare il transistor in zona di saturazione in modo da avere una vce molto bassa ,non in zona lineare dove il transistor lavora come una resistenza e comandandolo in PWM . Per fare questo bisogna cambiare il transistor con un darlinton affinché arduino 
lo possa comandare oppure tornare a un mosfeth opportuno.
rslogix52
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 03, 2019, 10:45 am
io direi di fare cosi'...dato che il bjt che ho messo e' stato un rimedio in quanto non disponevo di un irlz44 come da progetto originale chiedo a rslogix52 se quest ultimo  componente (irlz44) e' adatto allo scopo e poi metterei questo aspetto in standby in attesa che mi arrivi  il componente (dalla cina...ci vorra un po') cosi magari possiamo riprendere quello che mi sembra l ultimo aspetto  problematico del codice e poter cosi'rimanere in discorso programmazione.

ora sul codice sembra funzionare tutto....
accendo corrente, si accendono i led per 6 secondi,poi rimane acceso solo uno ad indicare "io sto scaldando" e poi a seguire al raggiungimento delle temperature 180  190  200 210  220 °c  si accendono in serie i vari led associati.
il problema e' che nella pratica  succede che

il led 180°c comincia a lampeggiare perche ci si sta avvicinando alla temperatura poi diventa stabilmente acceso ma comincia a lampeggiare il secondo ed il terzo poi si stabilizza anche il secondo  etc etc


questo e' dovuto dal fatto che il valore di lettura del termistore e' variabile quindi magari ci restituisce 8 letture 182 che fanno accendere il primo led e due 191 ed ecco che il secondo lampeggia!

per risolvere questo problema ho pensato che si possa fare in logica in questo modo:

invece di far accendere il led alla lettura "diretta" del termistore bisognerebbe farlo accendere alla lettura di una media di valori raccolta in intervallo di tempo:

quindi per T secondi leggo il termistore e restituisco il valore media Vm , se Vm e' maggiore di tot allora accendi il led
se il led si e' accesso allora lascialo acceso ed esegui una nuova lettura del valore Vm e cosi via

in questo modo mi sembra di risolvere.
un aiuto potrebbe essere quello di guardare come hanno fatto nelle stampanti 3d.(ho allegato il firmware qualche post fa)

qui a livello di sintassi e programmazione la cosa diventa un po complicata e piu di discutere la logica non posso dare il mio contributo.

cmq grazie a tutti
Title: Re: un aiuto per lo script
Post by: fabpolli on Apr 03, 2019, 11:01 am
Visto che sembri volenteroso ti posso suggerire una soluzione abbastyanza facile che dovresti riuscire ad applicare senza troppi problemi, non sarà la fine del mondo ma potrebbe sanare almeno in parte il problema dei led lampeggianti.
Allora nel tuo loop hai già un ritardo di 100 ms (delay alla fine) quindi senza complicare troppo la faccenda potresti gestire la cosa in questo modo:
Ti crei una variabile uguale a ActualTemp (Es. sommaTemp) e una nuova variabile di tipo byte (Es pippo) che ti serviranno per gestire la media.
Nel loop subito dopo la lettura del termistore
Code: [Select]

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

prendi il valore della variabile e la sommi alla variabile sommaTemp, subito dopo incremendi di uno la variabile pippo.
Quando pippo è arrivato a cinque (Se pippo == 5) allora:

Tutto il resto rimanue uguale, prova a buttare giù il codice, mettilo qui (anche solo la parte che modifichi tar i tag code) oppure se ti senti abbastanza sicuro fai una prova direttamente sul campo
Title: Re: un aiuto per lo script
Post by: rslogix52 on Apr 03, 2019, 11:29 am
Ciao.
Il mosfeth è un l Logic-Level Gate Drive quindi va bene però sul gate devi mettere una resitenza da 100Hom e una di 1khom tara il gate e il gnd
e comandarlo in pwm.
rslogix52
Title: Re: un aiuto per lo script
Post by: rslogix52 on Apr 03, 2019, 11:41 am
Ciao qui c'è uno schema di come collegare il mosfet devi non considerare il diodo al posto del motore collegare la resistenza di riscaldo, molto probabilmente devi montare un dissipatore sul mosfet
rslogix52
Title: Re: un aiuto per lo script
Post by: maubarzi on Apr 03, 2019, 11:47 am
Con il tuo circuito mi pare strano che si sia bruciato un irlz44.
Potresti provare a riverificare il tutto con quello che pensi si sia bruciato, stando attendo a collegarlo nel modo corretto.
Se lo hai messo storto (invertendo D e S) si dovrebbe comportare come un diodo e quindi condurre sempre con una piccola caduta di tensione ai suoi capi.
Ti allego lo schema dei piedini.
Il G va collegato ad Arduino, D verso la resistenza scaldante e S verso massa.

(https://forum.arduino.cc/index.php?action=dlattach;topic=606525.0;attach=302256)

Per quanto riguarda il software, hai oscillazioni sulla lettura di ampiezza superiore alle soglie di intervallo che vuoi gestire, da cosa dipendono? Mi suonano un po' strani i calcoli del metodo Thermister, non vedo dove si tiene conto della resistenza verso massa che assieme al termistore fa il partitore di tensione su cui viene fatta la lettura analogica.
I calcoli sono basati sulla resistenza attuale del termistore che varia in base alla temperatura.
Per ricavarla, si conoscendo la resistenza nominale del termistore e la resistenza verso massa, la tensione ai capi del partitore e la tensione letta da arduino.
Da qui si parte con i parametri del termistore per convertire il tutto in gradi.
Ora, non vorrei sbagliarmi, ma mi pare che il codice non faccia proprio questo, giusto?
Poi, per ridurre eventuali oscillazioni in lettura, personalmente abbasserei la resistenza verso massa in modo da renderla meno influente rispetto alla resistenza nominale del partitore per avere un range di letture valido più ampio. Ad es. se le due resistenze fossero uguali potrei avere letture che vanno da 2,5V a 5V per l'intera gamma di temperature sopportata dal termistore, Se invece ipoteticamente facessi arrivare quasi a zero la resistenza per renderla trascurabile, potrei arrivare ad avere un range da 0V a 5V.
Ora, zero non va bene ma 4,7K direi di si. Avresti un range da circa 0,25V a 5V.
Ma poi ne devi tenere conto nei calcoli.
Title: Re: un aiuto per lo script
Post by: rslogix52 on Apr 03, 2019, 11:50 am
Ciao qui c'è uno schema di come collegare il mosfet devi non considerare il diodo al posto del motore collegare la resistenza di riscaldo, molto probabilmente devi montare un dissipatore sul mosfet
schema (https://www.gammon.com.au/motors)
spero che sia la volta buona
rslogix52
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 03, 2019, 08:42 pm
inizialmente era un 1d13ac  che si e' bruciato penso...ma ora ho ordinato un irlz44, quindi da ora ragioniamo come se avessimo quello e mi pare che mi dite che vada bene!

ho allegato lo schema seguendo le indicazioni di rslogix per l inserimento delle resistenze cosi vediamo se ci siamo capiti!(queste resistenze potrebbero influenzare il funzionamento di rilevamento della temperatura?)

mentre per il ragionamento che fa maubarzi per le oscillazioni io non so proprio cosa rispondere quindi lascio a voi discuterne

mentre per la proposta di modifica di fabpolli non saprei proprio dove cominciare cmq prima di cimentarmi su questo vorrei sapere anche io cosa ne pensate  di quello che dice maubarzi perche sarebbe eventualmente la soluzione piu semplice.

Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 03, 2019, 08:50 pm
mi sono dimenticato di allegare!
piccola precisazione ho seguito solo le indicazioni per le resitenze ma ho mantenuto validi i collegamenti del progetto iniziale!
vi riallego tutto!
Title: Re: un aiuto per lo script
Post by: rslogix52 on Apr 03, 2019, 08:56 pm
Ciao
Quote
queste resistenze potrebbero influenzare il funzionamento di rilevamento della temperatura?
le resistenze sono necessarie per un buon funzionamento del mosfet. La resistenza di 100hom serve a non caricare troppo l'uscita di arduino poiché il gate del mosfet si comporta come un condensatore, quella di 10khom invece serve a non fare innescare involontariamente il mosfet. Non influenzano la lettura della temperatura.
rslogix52
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 03, 2019, 09:48 pm
perfetto quindi sull hardware ci siamo , scusa la resistenza da 1kohm oppure 10kohm? perche' nell altro post hai scritto 1kohm!

direi allora che rimane solo da stabilizzare la lettura del sensore!

vediamo se maubarzi e fabpolli concordano su una strada da seguire!
Title: Re: un aiuto per lo script
Post by: rslogix52 on Apr 03, 2019, 09:54 pm
10khom sul link che ho inserito c'è spiegato.
rxlogix52
Title: Re: un aiuto per lo script
Post by: maubarzi on Apr 03, 2019, 10:10 pm
La puoi mettere anche più grande, ne ho viste da 47K o addirittura da 100K.
Serve solo per avere una connessione a massa all'avvio o al reset, quando le uscite sono in alta impedenza e quindi lascerebbero la connession senza un riferimento di tensione preciso con il rischio di attivare il mosfet e farlo condurre facendo circolare corrente sul carico.
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 03, 2019, 11:31 pm
perfetto!!! io direi a questo punto di aprire una nuova discussione specifica per stabilizzare la lettura di temperatura, cosi' facendo se c'e' qualcuno che si vuole intromettere nel discorso parte da un punto fisso che sarebbe il riassunto di tutte le discussioni avute fin qui.
domani faccio un post riassuntivo con schemi e sketch di tutte le nostre conclusioni !!!!

grazie davvero a tutti per l aiuto datomi fin qui!
cmq mettero' anche il link della nuova discussione....spero di ritrovarvi tutti li!
Title: Re: un aiuto per lo script
Post by: motorimicro on Apr 04, 2019, 04:20 pm
qui di seguito script e tutto ilo materiale aggiornato con le modifiche che sono seguite a questi post.
piccola descrizione:
tramite il potenziometro si regola la temperatura della resistenza scaldante man mano che la temperatura sale si accendono i led. al momento il tutto e' impostato per funzionare tra i 180 ed i 220 gradi.
apro una nuova discussione la questione per stabilizzare la lettura della temperatura:

https://forum.arduino.cc/index.php?topic=608003.0