martes, 29 de noviembre de 2016

2016/11/29. BLOQUE 1. Sistemas embebidos (Arduino)

El objetivo de esta primera aplicación dentro del estudio de caso es la creación de un sistema físico real del cual poder extraer datos para subir y almacenar en la nube. Dado que el análisis de sistemas embebidos no es objeto de estudio de esta asignatura, se propone un sistema muy simple basado en un microcontrolador Arduino Uno y un sensor de temperatura LM35.

El sensor LM35 es un sensor de temperatura analógico cuyas características se indican en el siguiente datasheet:


Para realizar una lectura simple de la temperatura, únicamente es necesario leer la información contenida en la primera página del datasheet. Concretamente, debemos fijarnos en identificar:
  • los pines según el tipo de encapsulado de nuestro sensor (TO-92)
  • la relación entre la temperatura y la señal analógica de tensión que entregada en el pin Vout: +10.0mV/ºC
  • la máxima temperatura que puede medir: 150ºC

Conectamos el sensor a Arduino de la siguiente forma:





















Abrimos Arduino IDE para escribir el programa que se cargará en el microcontrolador. Aparecen dos funciones predefinidas:
  • setup(). Se ejecuta después de un encendido o de un reset. Esta función se ejecuta una única vez.
  • loop(). Se ejecuta una vez haya finalizado setup(). Esta función se ejecuta de forma cíclica e ininterrumpida.
void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

Para poder visualizar el dato de la temperatura en la pantalla del ordenador, se puede hacer uso de una comunicación serie. Una comunicación serie consta de dos extremos; siendo Arduino uno de dichos extremos, ¿cuál será el otro? Pues una aplicación en el ordenador. ¿Qué aplicación? Pues una que sea capaz de "hablar serie". Arduino IDE dispone de una aplicación para esta tarea: el monitor serie. El monitor serie no depende de Arduino y puede utilizarse para establecer una comunicación serie desde el ordenador con cualquier dispositivo o aplicación que "hable serie".

#define LM35 A0

int ADC_bits = 10;
float AREF = 5.0; // V
float LM35_output_scale_factor = 0.01; // V/ºC

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

  pinMode(LM35, INPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  
  // getting the ADC reading
  int adc_reading = analogRead(LM35);  
  Serial.print("ADC value on pin A0: "); Serial.println(adc_reading);
    
  // converting that reading to voltage
  float voltage = adc_reading * AREF/pow(2,ADC_bits);
  Serial.print("Estimated voltage on pin A0: "); Serial.println(voltage);
    
  // calculating the temperature
  float temperature = (1/LM35_output_scale_factor) * voltage;
  Serial.print("Temperature based on estimated voltage: "); Serial.println(temperature);

  Serial.println("------------------");
  delay(1000);
}

No hay comentarios:

Publicar un comentario