This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
LM35 y Contador binario
#1
Buenas a todos,

En uno de los trabajos que tengo que hacer para la universidad, a estas altura de la vida estudiando otra vez :nuse: , me han puesto un ejercicio en el cual tengo que medir la temperatura con un LM35 y representarla en un contador binario con 4 leds.

Os pongo como lo he resuelto y acepto comentarios para ir mejorando en programación que estoy un poco verde.

Código:
int led1 = 13;     // Posición 0 binario
int led2 = 12;     // Posición 1 binario
int led3 = 11;     // Posición 2 binario
int led4 = 10;     // Posición 3 binario

int sensor_temp = 0;             // Sensor de temperatura conectado a pin A0 de Arduino
float temperatura = 0;           // Variable para almacenar la temperatura en grados
int valor_sensor = 0;             // Variable para almacenar el valor crudo del sensor de temperatura (de 0 - 1024)

const int tempMin = 14;           // Temperatura mínima a mostrar
const int tempMax = 30;          // Temperatura máxima a mostrar
                              
void setup() {
  Serial.begin(9600);           // Empezar comunicacion serie con el PC
                                          // Seteamos puertos como salida para leds + entrada para el sensor de temperatura
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);

  pinMode(sensor_temp,INPUT);
}

void loop ()  {
  valor_sensor = analogRead(sensor_temp);                        // Leer el calor del sensor (valor de 0 a 1024)
  temperatura = (5.0 * valor_sensor * 100.0)/1024.0;       // Calcular temperatura en ºC con formula
  int rango = map(temperatura, tempMin, tempMax, 0, 15);  
  Serial.print(temperatura);                                                // Mandar temperatura al serial monitor
  Serial.println("C");                   // Mandar el simbolo de grados y pasar a la siguiente linea
  delay(1000);                           // Espera 1 segundo antes de empezar de nuevo


  switch (rango) {
    case 0:
    temperatura1();
    break;

    case 1:
    temperatura2();
    break;

    case 2:
    temperatura3();
    break;

    case 3:
    temperatura4();
    break;

    case 4:
    temperatura5();
    break;

    case 5:
    temperatura6();
    break;

    case 6:
    temperatura7();
    break;

    case 7:
    temperatura8();
    break;

    case 8:
    temperatura9();
    break;

    case 9:
    temperatura10();
    break;

    case 10:
    temperatura11();
    break;

    case 11:
    temperatura12();
    break;

    case 12:
    temperatura13();
    break;

    case 13:
    temperatura14();
    break;

    case 14:
    temperatura15();
    break;
  
    case 15:
    temperatura16();
    break;
  }

delay(1);
}


  
  void temperatura1() {
  if (temperatura <= 15)  // si la temperatura es  menor o igual a 15  se encendera 0000
  {
    digitalWrite (led1, LOW);
    digitalWrite (led2, LOW);
    digitalWrite (led3, LOW);
    digitalWrite (led4, LOW);
  }
}

  void temperatura2() {
  if (temperatura > 15 && temperatura <= 16) // si la temperatura es mayor de 15 y menor o igual a 16 se encendera 0001
  {
    digitalWrite (led1, HIGH);
    digitalWrite (led2, LOW);
    digitalWrite (led3, LOW);
    digitalWrite (led4, LOW);
  }
}

void temperatura3() {
  if (temperatura > 16 && temperatura <= 17) // Si la temperatura es mayor de 16 y menor o igual a 17 se encendera 0010
  {
    digitalWrite (led1, LOW);
    digitalWrite (led2, HIGH);
    digitalWrite (led3, LOW);
    digitalWrite (led4, LOW);
  }
}

void temperatura4() {
  if (temperatura > 17 && temperatura <= 18) // si la temperatura es mayor de 17 y menor o igual a 18 se encendera 0011
  {
    digitalWrite (led1, HIGH);
    digitalWrite (led2, HIGH);
    digitalWrite (led3, LOW);
    digitalWrite (led4, LOW);
  }
}

void temperatura5() {
  if (temperatura > 18 && temperatura <= 19) // si la temperatura es mayor de 18 y menor o igual a 19 se encenderan  0100
  {
    digitalWrite (led1, LOW);
    digitalWrite (led2, LOW);
    digitalWrite (led3, HIGH);
    digitalWrite (led4, LOW);
  }
}

  void temperatura6() {
  if (temperatura > 19 && temperatura <= 20)  // si la temperatura es mayor de 19 y menor o igual a 20  se encendera 0101
  {
    digitalWrite (led1, HIGH);
    digitalWrite (led2, LOW);
    digitalWrite (led3, HIGH);
    digitalWrite (led4, LOW);
  }
}

  void temperatura7() {
  if (temperatura > 20 && temperatura <= 21) // si la temperatura es mayor de 20 y menor o igual a 21 se encendera 0110
  {
    digitalWrite (led1, LOW);
    digitalWrite (led2, HIGH);
    digitalWrite (led3, HIGH);
    digitalWrite (led4, LOW);
  }
}

void temperatura8() {
  if (temperatura > 21 && temperatura <= 22) // Si la temperatura es mayor de 21 y menor o igual a 22 se encendera 0111
  {
    digitalWrite (led1, HIGH);
    digitalWrite (led2, HIGH);
    digitalWrite (led3, HIGH);
    digitalWrite (led4, LOW);
  }
}

void temperatura9() {
  if (temperatura > 22 && temperatura <= 23) // si la temperatura es mayor de 22 y menor o igual a 23 se encendera 1000
  {
    digitalWrite (led1, LOW);
    digitalWrite (led2, LOW);
    digitalWrite (led3, LOW);
    digitalWrite (led4, HIGH);
  }
}

void temperatura10() {
  if (temperatura > 23 && temperatura <= 24) // si la temperatura es mayor de 23 y menor o igual a 24 se encenderan  1001
  {
    digitalWrite (led1, HIGH);
    digitalWrite (led2, LOW);
    digitalWrite (led3, LOW);
    digitalWrite (led4, HIGH);
  }
}

  void temperatura11() {
  if (temperatura > 24 && temperatura <= 25)  // si la temperatura es mayor de 24 y menor o igual a 25  se encendera 1010
  {
    digitalWrite (led1, LOW);
    digitalWrite (led2, HIGH);
    digitalWrite (led3, LOW);
    digitalWrite (led4, HIGH);
  }
}

  void temperatura12() {
  if (temperatura > 25 && temperatura <= 26) // si la temperatura es mayor de 25 y menor o igual a 26 se encendera 1011
  {
    digitalWrite (led1, HIGH);
    digitalWrite (led2, HIGH);
    digitalWrite (led3, LOW);
    digitalWrite (led4, HIGH);
  }
}

void temperatura13() {
  if (temperatura > 26 && temperatura <= 27) // Si la temperatura es mayor de 26 y menor o igual a 27 se encendera 1100
  {
    digitalWrite (led1, LOW);
    digitalWrite (led2, LOW);
    digitalWrite (led3, HIGH);
    digitalWrite (led4, HIGH);
  }
}

void temperatura14() {
  if (temperatura > 27 && temperatura <= 28) // si la temperatura es mayor de 27 y menor o igual a 28 se encendera 1101
  {
    digitalWrite (led1, HIGH);
    digitalWrite (led2, LOW);
    digitalWrite (led3, HIGH);
    digitalWrite (led4, HIGH);
  }
}

void temperatura15() {
  if (temperatura > 28 && temperatura <= 29) // si la temperatura es mayor de 28 y menor o igual a 29 se encenderan  1110
  {
    digitalWrite (led1, LOW);
    digitalWrite (led2, HIGH);
    digitalWrite (led3, HIGH);
    digitalWrite (led4, HIGH);
  }
}

void temperatura16() {
  if (temperatura > 29 && temperatura <= 30) // si la temperatura es mayor de 28 y menor o igual a 30 se encenderan  1111
  {
    digitalWrite (led1, HIGH);
    digitalWrite (led2, HIGH);
    digitalWrite (led3, HIGH);
    digitalWrite (led4, HIGH);
  }
}

Todo aquello que me digais será bien recibido :aplauso:

Ahora voy a montarlo en la protoboard y probar.
  Responder
#2
Lo de representarlo por el serial monitor es para ver como voy al probar.
  Responder
#3
No pude ver Buenos en todo. Pero lo ultimo me suena raro...
  Responder
#4
No pude ver bien todo digo. Pero lo ultimo me suena raro...
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  Arduino Yun LM35 javiec 3 1,889 28-11-2015, 02:23 AM
Último mensaje: biketrial981
  Contador de créditos ElHera 47 7,505 08-02-2015, 06:17 PM
Último mensaje: ElHera
  contador bolas airsoft harian33 15 4,611 24-06-2014, 08:00 PM
Último mensaje: harian33