Ciao tutti,
sto iniziando un nuovo progetto e utilizzo la sonda TMP36GZ per monitorare la temperatura.
Ho trovato questo codice
/*
* FILE: TMP36.11GIU16
* PURPOSE:
* PROBE: TMP36
* AUTHOR: Antonio Cannavale
* COMFORT:
*/
int val_ADC = 0;
float temp = 0;
void setup() { // Start setup
Serial.begin(9600); // Start the serial connection with the computer
delay(500); // Delay to let system boot
while (!Serial) {
; // Wait for serial port to connect. Needed for native USB port only
}
delay(1000); // Wait before accessing sensor
} // End setup
void loop() { // Start loop
val_ADC = analogRead(0); //Getting voltage from sensor at Analog PIN A0
temp = ((val_ADC * 0.00488) – 0.5)/0.01; // Convert voltage in Celsius
Serial.print(val_ADC); // Print
Serial.println(" mV");
Serial.print(temp);
Serial.println (" C");
delay(120000);
} // End loop
Ma il programma mi da questo errore.
Arduino:1.6.5 (Windows 8.1), Scheda:"Arduino Uno"
TMP36.11GIU16:23: error: stray '' in program
TMP36.11GIU16.ino: In function 'void loop()':
TMP36.11GIU16:23: error: expected ')' before 'u2013'
stray '' in program
Questo report potrebbe essere più ricco
di informazioni con
"Mostra un output dettagliato durante la compilazione"
abilitato in "File > Impostazioni"
Con cosa hai fatto il copia/incolla nel tuo IDE? Perché ti sei portato dietro dei caratteri speciali (... per di più invisibili) tipici della formattazione del testo ...
Prova a fare una cosa ...
... cancella il tuo programma nell'IDE, prendi quello che hai incollato qui (usa il tastino [Select], copia e incolla nell'IDE) e vedrai che l'errore scompare.
cyberhs:
L'errore indica la presenza alla riga 23 di un carattere "randagio", per l'esattezza un "" che, peraltro, non vedo in nessuna parte del listato..
Prova a riscriverla: alle volte, copiandola da un sito, possono essere presenti caratteri invisibili.
Funziona.
Ho cancellato e riscritto a mano la riga 23.
Vi chiedo un'altra cosa.
La formula è corretta?
Perfetto.
l'ho sostituita con la mia, mi sembra commentata meglio.
Inoltre ho anche inserito il condensatore da 0.1uF di tipo poliestere tra Vs e GND, come consiglato dal data sheet. Ma ho una domanda. Dove lo devo mettere, vicino al TMP36?
Se il TMP36 è saldato su PCB lo saldi vicino, se c'è un cavo che collega TMP36 al PCB allora il condensatore va saldato sui pin del TMP36.
PS: Occhio che con alimentazione da USB avrai una lettura ADC poco affidabile, molto meglio alimentare arduino da jack o da VIN fornendo a questo 5.0Vdc
MauroTec:
Se il TMP36 è saldato su PCB lo saldi vicino, se c'è un cavo che collega TMP36 al PCB allora il condensatore va saldato sui pin del TMP36.
Il TMP36 è libero, nel senso che ho ascquistato solo il transistor. Comunque sia va saldato vicino al TMP36.
MauroTec:
PS: Occhio che con alimentazione da USB avrai una lettura ADC poco affidabile, molto meglio alimentare arduino da jack o da VIN fornendo a questo 5.0Vdc
Alimento arduino solo con USB perche non dispongo di un lcd per vedere i valori di temperatura. Posso utilizzare anche l'alimentazione a jack pur collegando arduino a USB?
Alimento arduino solo con USB perche non dispongo di un lcd. Posso utilizzare anche l'alimentazione a jack pur collegando arduino a USB?
Si, con jack e USB connessi assieme, l'alimentazione viene presa dal jack.
La tensione presa dal jack viene stabilizzata a 5Vdc ad opera di un LDO.
Mentre l'alimentazione da USB vale sempre 5Vdc, ma la stabilizzazione è affidata ai circuiti si alimentazione interni al PC.
La 5Vdc proveniente da USB può fluttuare rapidamente passando da 4.9Vdc a 4.6Vdc per poi risalire al valore iniziale.
Mi scappa un'altra domanda.
Quando arduino legge si accende per pochi millesimi di secondi il led TX, come posso fare accendere un led esterno con la stessa funzione del led TX?
Fai un esempio di led connesso ad un pin e che vuoi che lampeggi a condizione che; devi formulare una espressione condizionale.
Esempio:
// al posto di ? scrivi il numero del pin
// const byte button = ?;
// const byte led0 = ?;
// booleane led0State = false;
// ovviamente nella funzione setup() (qui mancante) devi configurare i pin con pinMode() ecc.
void loop() {
// questa è la condizione
if (digitalRead(button) == HIGH) {
// qui l'azione legata alla condizione
led0State ^= 1; // (1 xor 1 = 0), (0 xor 1 = 1)
digitalWrite(led0, led0State);
} else {
digitalWrite(led0, LOW);
}
}
led0State ^= 1 usa lo xor per invertire lo stato di led0State.
Ciao tutti,
ancora una domanda.
Com'è possibile che il termostato di casa indica 23.3°C mentre il sensore mostra 20.3°C?
Posso aggiustare la tensione del pin Vout?
antoniocnn:
Com'è possibile che il termostato di casa indica 23.3°C mentre il sensore mostra 20.3°C?
Possibilissimo per tutta una serie di motivi, prima di tutto la precisione di questi sensori che tipicamente è +/- 1° (@25°), è chiaramente scritto sul data sheet, risoluzione e precisione sono due cose diverse, inoltre la lettura dipende dal valore di Aref, se alimenti tramite USB difficilmente sono 5V esatti, il che introduce un ulteriore fattore di errore.
Sommando gli effetti degli errori sul TMP36 e l'errore, che c'è sicuramente, sul sensore del termostato ecco che è possibile arrivare ad uno scarto di 3°, non ultimo il fatto che dentro casa è facile rilevare differenze di un paio di gradi tra punti diversi, la misura di paragone dovresti farla tenendo il TMP36 vicino al sensore del termostato.
astrobeed:
Possibilissimo per tutta una serie di motivi, prima di tutto la precisione di questi sensori che tipicamente è +/- 1° (@25°), è chiaramente scritto sul data sheet, risoluzione e precisione sono due cose diverse, inoltre la lettura dipende dal valore di Aref, se alimenti tramite USB difficilmente sono 5V esatti, il che introduce un ulteriore fattore di errore.
Alimento arduino con un alimentatore esterno, tengo il cavo USB collegato perché non dispongo di un lcd per cui uso il monitor seriale per monitorare la temperatura.
astrobeed:
Sommando gli effetti degli errori sul TMP36 e l'errore, che c'è sicuramente, sul sensore del termostato ecco che è possibile arrivare ad uno scarto di 3°, non ultimo il fatto che dentro casa è facile rilevare differenze di un paio di gradi tra punti diversi, la misura di paragone dovresti farla tenendo il TMP36 vicino al sensore del termostato.
Proverò a tenere il transistor vicino al termostato per valutare meglio le differenze, tenendo conto delle indicazioni che mi hai dato.
In quella libreria, come in tutte le pagine web che parlano della cosa, c'è un grave errore, viene assunto in modo assoluto il valore di 1.1 V per il riferimento interno degli AVR.
Il generatore 1.1V degli AVR è tutto meno che preciso, il suo valore ha una tolleranza di +/-10%, ovvero la sua tensione può essere un qualunque valore compreso tra 1V e 1.2V, per poter usare in modo efficace il "voltmetro segreto" è necessario misurare la tensione del riferimento 1.1V e inserire il corretto valore nel calcolo.
Per misurare il valore del generatore a 1.1V basta attivarlo e fare la misura sul pin Aref con un buon multimetro elettronico, questo perché il pin viene fisicamente collegato al generatore interno quando è attivo.