samf92 Inviato 12 Dicembre 2020 Condividi Inviato 12 Dicembre 2020 Ciao a tutti. Premesso che sono le mie prime prove con arduino quindi abbiate pazienza😅😅 Dovrei creare la ventilazione per la cabina DIY della mia stampante. La velocita della ventola viene modificata da arduino in base alla temperatura. Ho questo sketch:#include <LiquidCrystal.h>LiquidCrystal lcd(7, 8, 9, 10, 11, 12);float temp; // set temp as a whole numberint tempPin = A0; //arduino pin used for temperature sensorint tempMin = 23; // the temperature to start the buzzerint tempMax = 25; // temperature full speedint fan = 3; // the pin where fan is connectedint fanSpeed = 0; // fan speed variablevoid setup() { pinMode(fan, OUTPUT); // declaring fan pin 6 as output pinMode(tempPin, INPUT); // declaring tempPin A0 as input lcd.begin(16, 2); // LCD intialize lcd.clear(); // clears lcd lcd.print("Fan Speed:"); // prints "Fan Speed" 75-255 PWM lcd.setCursor(0,1); // Sets cursor for next line lcd.print("Temp:"); // Prints "Temperature" below "Fan Speed" Serial.begin(9600); // begins the serial monitor}void loop() { temp = analogRead(tempPin); float voltage = float(5000.0d/1024.0d)*(float)temp; float temp = voltage/10.0d; // formula for degrees celcius Serial.println(temp); // prints temp in serial monitor lcd.setCursor(12,1); // 12 character to the right on the first column lcd.print(temp); // prints the number on the 12 character delay(1000); // delay in between reads for stability if(temp < tempMin) { // if temp is lower than minimum temp fanSpeed = 0; // fan is not spinning digitalWrite(fan, LOW); // pin 6 output is low } if((temp >= tempMin) && (temp <= tempMax)) //if temperature is higher than the minimmum range { fanSpeed = map(temp, tempMin, tempMax, 75, 255); // the actual speed of fan analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed Serial.println(fanSpeed); // prints fan speed in serial monitor lcd.setCursor(12,0); // sets cursor lcd.print(fanSpeed); // prints lcd.print(" "); // fixes an error of random number display } }tutto funziona come dovrebbe tranne che quando si raggiunge la temperatura MAX la ventola non parte mai a piena velocità resta a valore 168 su 255 e sono erogati 8v invece di 12v.Qualcuno saprebbe darmi qualche suggerimento su perchè questo accade??Ho provato con un altro sketch a specificare velocità 255 e funziona, alla ventola arrivano 12v. Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
Whitedavil Inviato 12 Dicembre 2020 Condividi Inviato 12 Dicembre 2020 Scusa, se non lo sai tu cosa fa il codice che hai scritto.... Secondo te dobbiamo saperlo noi? 1 Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
samf92 Inviato 12 Dicembre 2020 Autore Condividi Inviato 12 Dicembre 2020 Ciao Whitedavil. Veramente come ho scritto all'inizio sono le prime prove con arduino e il codice non l'ho scritto io, ho cercato di fare un pò di collage con sketch che ho trovato leggendo nei vari forum solo che non capisco perchè non raggiunga la velocità MAX. Speravo solo che qualcuno più esperto di me potesse aiutarmi a capire cosa c'è che non va. Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
Killrob Inviato 12 Dicembre 2020 Condividi Inviato 12 Dicembre 2020 lo sketch è formalmente corretto, non ci vedo nulla che non vada Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
jagger75 Inviato 12 Dicembre 2020 Condividi Inviato 12 Dicembre 2020 premetto che sto seguendo dei corsi tutorial su arduino da 2 mesi percio inizio ora anche io pero vorrei un chiarimento per capire la ventola dovrebbe partire quando il sensore sente 23gradi e andare alla massima velocità quando sente piu di 25gradi? come dovrebbe funzionare cosi capisco anche io lo sketch? 🙂 dovrebbe salire gradualmente? float temp = voltage/10.0d; // formula for degrees celcius di sicuro dirò una castroneria ma non dovrebbe essere 12 questa regola perche se si ferma a 10V cosrrisponde hai tuoi 168 su 255 sempre se cio capito qualcosa ahhahaha spiegatemi che voglio cpaire pure io 😉 Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
samf92 Inviato 12 Dicembre 2020 Autore Condividi Inviato 12 Dicembre 2020 Si, la ventola parte a una temperatura di 23 e in teoria dovrebbe andare al MAX raggiunti i 25 cosa che al momento non accade. Ho usato questi parametri per fare qualche test in casa altrimenti non partirebbe mai, ovviamente poi antra calibrata sulla temperatura ambine della cabina di stampa. float temp = voltage/10.0d; // formula for degrees celcius Questa formula l'ho trovata in questo video: Misurare la temperatura con LM35 e Arduino - #67 Serve per trasformare la lettura del sensore termico LM35 in gradi celsius, non centra con la corrente che arriva alla ventola che invece è regolata da arduino tramite un transistor. Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
Whitedavil Inviato 12 Dicembre 2020 Condividi Inviato 12 Dicembre 2020 Non programmo arduino, ma la funzione MAP dovrebbe servire a creare una scala tra tempmin e tempmax in funzione del valore attuale e dovrebbe restituire un ipotetico valore in byte da 75 a 255. Probabilmente quella funzione, che non vedo dichiarata da nessuna parte, è sbagliata. Per la cronaca: float temp = voltage/10.0d; // formula for degrees celcius Questa è corretta perché il sensore lm35 in uscita ti fornisce 10mV a grado centrigrado. A 25 gradi hai in uscita 250mV,dividi per 10 e leggi diretto... Che poi il convertitore A/D è 10bit approssima di 0.4 gradi, è un'altro discorso... 😅 Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
samf92 Inviato 12 Dicembre 2020 Autore Condividi Inviato 12 Dicembre 2020 Ok...intanto grazie. Comunque poverò a fare qaulche test con la finzione MAP in caso se trovo la soluzione carico il nuovo sketch, se mai a qualcuno servisse. Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
Killrob Inviato 12 Dicembre 2020 Condividi Inviato 12 Dicembre 2020 5 ore fa, samf92 dice: if((temp >= tempMin) && (temp <= tempMax)) //if temperature is higher than the minimmum range { fanSpeed = map(temp, tempMin, tempMax, 75, 255); // the actual speed of fan analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed Serial.println(fanSpeed); // prints fan speed in serial monitor lcd.setCursor(12,0); // sets cursor lcd.print(fanSpeed); // prints lcd.print(" "); // fixes an error of random number display } }tutto funziona come dovrebbe tranne che quando si raggiunge la temperatura MAX la ventola non parte mai a piena velocità resta a valore 168 su 255 e sono erogati 8v invece di 12v.Qualcuno saprebbe darmi qualche suggerimento su perchè questo accade??Ho provato con un altro sketch a specificare velocità 255 e funziona, alla ventola arrivano 12v. eccola, l'ho evidenziata, ci imposta la fanspeed con la funzione map() 1 ora fa, Whitedavil dice: Non programmo arduino, ma la funzione MAP dovrebbe servire a creare una scala tra tempmin e tempmax in funzione del valore attuale e dovrebbe restituire un ipotetico valore in byte da 75 a 255. Probabilmente quella funzione, che non vedo dichiarata da nessuna parte, è sbagliata. Per la cronaca: float temp = voltage/10.0d; // formula for degrees celcius Questa è corretta perché il sensore lm35 in uscita ti fornisce 10mV a grado centrigrado. A 25 gradi hai in uscita 250mV,dividi per 10 e leggi diretto... Che poi il convertitore A/D è 10bit approssima di 0.4 gradi, è un'altro discorso... 😅 qui la funzione: https://www.arduino.cc/reference/en/language/functions/math/map/ Cita Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Partecipa alla conversazione
Puoi pubblicare ora e registrarti più tardi. Se hai un account, accedi ora per pubblicarlo con il tuo account.