Publicado el Deja un comentario

45. Máquina del amor

¿Que es la máquina del amor?

Un “invento” que te permitirá medir la temperatura de tu piel cuando tocas con tus dedos un sensor de temperatura, y dependiendo de tu temperatura se encenderán unnúmero diferente de leds con los siguientes significados:

  • ningún led encendido: temperatura fría (< 22 ºC)
  • un led encendido: temperatura templada (22-24 ºC)
  • dos leds encendidos: temperatura caliente (24-26 ºC)
  • tres leds encendidos: temperatura muy caliente (>26 ºC)

Material necesario

  • 3 leds
  • 3 resistencias de 220 o 330 ohm
  • 1 sensor de temperatura TMP36
  • 8 cables M-M

Montaje del circuito

Es relativamente sencillo, fíjate en la diapositiva.

Sketch de la Máquina del Amor

Sorprendentemente, en esta ocasión no vas a necesitar implementar el código. Esta vez céntrate en bajar el código del propio IDE de Arduino, pues incluye una serie de ejemplos didácticos y este es uno de ellos.

Para descargarte el código no tienes más que pulsar el menú Archivos / Ejemplos / 10. Starter Kit / p03_LoveOMeter.

Una vez descargado y montado el circuito, compílalo y ejecútalo.

Sólo tendrás que probar que funciona tocando el sensor con la yema de tus dedos.

/*
  Arduino Starter Kit example
  Project 3 - Love-O-Meter
  This sketch is written to accompany Project 3 in the Arduino Starter Kit
  Parts required:
  - one TMP36 temperature sensor
  - three red LEDs
  - three 220 ohm resistors
  created 13 Sep 2012
  by Scott Fitzgerald
  http://www.arduino.cc/starterKit
  This example code is part of the public domain.
*/
// named constant for the pin the sensor is connected to
const int sensorPin = A0;
// room temperature in Celsius
const float baselineTemp = 20.0;
void setup() {
  // open a serial connection to display values
  Serial.begin(9600);
  // set the LED pins as outputs
  // the for() loop saves some extra coding
  for (int pinNumber = 2; pinNumber < 5; pinNumber++) {
    pinMode(pinNumber, OUTPUT);
    digitalWrite(pinNumber, LOW);
  }
}
void loop() {
  // read the value on AnalogIn pin 0 and store it in a variable
  int sensorVal = analogRead(sensorPin);
  // send the 10-bit sensor value out the serial port
  Serial.print("sensor Value: ");
  Serial.print(sensorVal);
  // convert the ADC reading to voltage
  float voltage = (sensorVal / 1024.0) * 5.0;
  // Send the voltage level out the Serial port
  Serial.print(", Volts: ");
  Serial.print(voltage);
  // convert the voltage to temperature in degrees C
  // the sensor changes 10 mV per degree
  // the datasheet says there's a 500 mV offset
  // ((voltage - 500 mV) times 100)
  Serial.print(", degrees C: ");
  float temperature = (voltage - .5) * 100;
  Serial.println(temperature);
  // if the current temperature is lower than the baseline turn off all LEDs
  if (temperature < baselineTemp + 2) {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
  } // if the temperature rises 2-4 degrees, turn an LED on
  else if (temperature >= baselineTemp + 2 && temperature < baselineTemp + 4) {
    digitalWrite(2, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
  } // if the temperature rises 4-6 degrees, turn a second LED on
  else if (temperature >= baselineTemp + 4 && temperature < baselineTemp + 6) {
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
  } // if the temperature rises more than 6 degrees, turn all LEDs on
  else if (temperature >= baselineTemp + 6) {
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
  }
  delay(1);
}