proyecto - Sensor de temperatura Arduino
sensor de temperatura lm35 arduino lcd (3)
La entrada analógica 0 no es el pin 0.
Deberías usar los símbolos definidos:
A0, A1, ..., A7
para entradas analógicas.
Tratar
int sensorPin = A0;
y tu programa debería funcionar
Si tiene curiosidad acerca de los valores reales, en su Arduino IDE instale la apariencia en el archivo
.. / hardware / arduino / variantes / estándar / pins_arduino.h
Estoy tratando de construir un pequeño programa con Arduino usando un sensor de temperatura.
Pensé que sabía cómo hacerlo, pero estoy obteniendo algunas salidas raras.
Aquí está mi código:
int sensorPin = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
int reading = analogRead(sensorPin);
float voltage = reading * 5.0 / 1024;
float temperatureC = (voltage - 0.5) * 100;
Serial.print(temperatureC); Serial.print(" degrees C, ");
Serial.print(voltage); Serial.println(" volts");
delay(1000);
}
Este código me da el resultado:
-26.56 degrees C, 0.23 volts
-26.56 degrees C, 0.23 volts
-27.05 degrees C, 0.23 volts
-26.56 degrees C, 0.23 volts
-26.07 degrees C, 0.24 volts
-26.07 degrees C, 0.24 volts
¿Por qué es -
en grados? y ¿Por qué puedo cambiarlo a cualquier pin que quiera y aún así me dará un resultado similar?
Primero, debes usar los símbolos definidos A0
int sensorPin = A0;
in the next
float voltage = reading * (5.0 / 1024);
Hay un ejemplo en File/Examples/Basic/AnalogReadSerial
Usted está leyendo esta entrada correctamente. Para que no obtengas títulos negativos, tendrás que procesarlo de manera diferente.
Con este:
float temperatureC = (voltage - 0.5) * 100;
Cualquier valor < 0.5
resulta en multiplicar un número negativo por 100.
Intenta dividir esto usando propiedad conmutativa.
-
(voltage - 0.5) * 100
es lo mismo que(voltage * 100) - (0.5 * 100)
. - Esto se puede simplificar aún más a
(voltage * 100) - 50
.
Aún así, para todos los valores donde la voltage < 0.5
la temperatura será negativa.
- Yo sugeriría que multiplique la
temperatureC
por-1
para que sea positiva y no ponga el sensor cerca de nada que sea `~> = 50 grados Celsius.
Además, como jdr5ca señaló aquí , en realidad no está obteniendo datos del sensor todavía ... :(
Probablemente estés recibiendo ruido (o basura) de lo que sea pin0.
EDITAR
Es una buena práctica usar paréntesis para hacer el orden de las operaciones más claro.
- es decir:
-
float voltage = reading * 5.0 / 1024;
- debiera ser
-
float voltage = reading * (5.0 / 1024);
-