SENSOR DE TEMPERATURA - ARDUINO

ENVIAR Y RECIBIR DATOS. Continuando con mis anteriores artículos Leer de Arduino y Escribir en Arduino, os enseñaré el sketch (programa que se ejecuta en arduino) que cierra el círculo. Uso el sensor de temperatura LM35...

SENSOR DE TEMPERATURA - ARDUINO

ENVIAR Y RECIBIR DATOS

Continuando con mis anteriores artículos Leer de Arduino y Escribir en Arduino, os enseñaré el sketch (programa que se ejecuta en arduino) que cierra el círculo.

Uso el sensor de temperatura LM35, que es un sensor que detecta temperaturas desde -55ºC a 150ºC, 1ºC equivale a 10mV y soporta voltajes de entre 4V y 30V. Puedes ver la ficha técnica LM35.

Al leer un sensor analógico con Arduino se utiliza la función analogRead; esto nos da un valor entre 0 y 1023, 1024 valores posibles. Si tenemos 0V nos devolverá 0 y si tenemos 5V nos devolverá 1023. Gracias a ello podemos utilizar una fórmula matemática para calcular la temperatura en función del voltaje que nos facilita el sensor.


Temperatura = Valor * 5 * 100 / 1024
                            

El circuito que necesitamos es:

Considerando que conoces un mínimo cómo funciona arduino, es fácil seguir el código.

  • setup -> inicializamos lo necesario como la comunicación por el puerto serial
  • loop -> bloque de código de ejecución infinita con el delay que se especifique
  • serialEvent -> leemos lo que nos envían por el puerto serial, recordad que era el nuevo intervalo para notificar la temperatura

Para escribir por el puerto serial usamos


    Serial.println(temperature);
                            

Y para leer lo que nos transmiten por el puerto serial usamos


    String newInterval = Serial.readString();
                            

Quedando un resultado un código similar a éste


const int SENSOR_PIN = A0;
const int BITS_PER_SECOND = 9600;
const long DEFAULT_PROBE_INTERVAL_IN_MILISECONDS = 10000L;
const long DEFAULT_DELAY_IN_MILISECONDS = 500L;
long probeIntervalInMiliseconds = 0;
long waitingTimeToNotify = 0;

void setup() {
  Serial.begin(BITS_PER_SECOND);
  if(probeIntervalInMiliseconds == 0){
    probeIntervalInMiliseconds = DEFAULT_PROBE_INTERVAL_IN_MILISECONDS;
  }
}

void loop() {
  float temperature = (5.0 * analogRead(SENSOR_PIN) * 100.0) / 1024;

  if(waitingTimeToNotify >= probeIntervalInMiliseconds){
    Serial.println(temperature);
    waitingTimeToNotify = DEFAULT_DELAY_IN_MILISECONDS;
  }else{
    waitingTimeToNotify += DEFAULT_DELAY_IN_MILISECONDS;
  }
  delay(DEFAULT_DELAY_IN_MILISECONDS);
}

void serialEvent() {
  while(Serial.available() > 0) {
    String newInterval = Serial.readString();
    char newIntervalBuf[32];
    newInterval.toCharArray(newIntervalBuf, sizeof(newIntervalBuf));
    probeIntervalInMiliseconds = atol(newIntervalBuf);
  }
}

Share Tweet Send
0 Comentarios
Cargando...