LusoRobótica - Robótica em Português

Robótica => Tutoriais => Tópico iniciado por: dio123 em 06 de Novembro de 2009, 23:33

Título: temperatura no display 7 segmentos
Enviado por: dio123 em 06 de Novembro de 2009, 23:33
LM35 com display 7 segmentos

Este é o meu tutorial, não está  perfeito, mas tentei ser  mais esclarecedor possivel.

O objectivo deste tutorial é usar um sensor de temperatura, eu usei um LM35, e mostrar no display 7 segmentos para representar a  temperatura actual. Para nao ocupar as portas todas do arduino usei 4511, que é um descodificador BCD e que nos permite usar apenas 4 portas.
A primeira parte é apenas mostrar temperaturas de 1º até 30ºc.

MATERIAL usado:
1x Arduino
1x LM35 ou LM35Z
1x beardboard
2x 4511
2x display 7 segmentos

Na imagem seguinte mostra o circuito.
Mas atenção devem usar uma resistencia para cada segmento do display. Eu usei umas de 330ohms pois eram as que tinha a mão.


(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg156.imageshack.us%2Fimg156%2F2725%2Ftutorialk.th.png&hash=f175925d6fd6664c20cbb6f9a452ddb8091a54cd) (http://img156.imageshack.us/i/tutorialk.png/)


programa para arduino anexado.

Gostaria de saber as vossas opiniões, e amanha espero ja puder colocar um video.

video nao tem grande qualidade mas foi o melhor que consegui.
lm35 e display 7 segmentos (http://www.youtube.com/watch?v=t3adFG1zIyU#)
Código: [Seleccione]
int a1 =2;
int b1 =3;
int c1  =4;
int d1 =5;
int a2 =6;
int b2 =7;
int c2  =8;
int d2 =9;
int analogPin = 5;
int valAnalog ;       // variavel para armazenar o valor analogico lido
int temp ;
void setup() {
  pinMode(a1, OUTPUT);
  pinMode(b1, OUTPUT);
  pinMode(c1, OUTPUT);
  pinMode(d1, OUTPUT);
  pinMode(a2, OUTPUT);
  pinMode(b2, OUTPUT);
  pinMode(c2, OUTPUT);
  pinMode(d2, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  valAnalog = analogRead(analogPin);   // Le o pino de entrada analogica 5
  temp= ( 5 * valAnalog * 100) / 1024 ; // calcula a temperatura 
  Serial.println(temp);
 
  switch (temp) {
    case 1:
    digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
   break;
   case 2:
  digitalWrite(a1, LOW);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
   break;
  case 3:
  digitalWrite(a1, HIGH);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
   break;
   case 4:
   digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
   break;
  case 5:
  digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break;
 
  case 6:
  digitalWrite(a1, LOW);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break;
 
  case 7:
  digitalWrite(a1, HIGH);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break;
    case 8:
  digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, HIGH);
    digitalWrite(d1, LOW);
   break;
   case 9:
  digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, HIGH);
    digitalWrite(d1, LOW);
    break;
   
    case 10:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
    break;
   
    case 11:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
    break;
    case 12:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, LOW);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
    break;
    case 13:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
  digitalWrite(a1, HIGH);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
    break;
    case 14:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break;
    case 15:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break;
    case 16:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, LOW);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break;
    case 17:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, HIGH);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break;
    case 18:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, HIGH);
    digitalWrite(d1, LOW);
    break;
    case 19:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, LOW);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
   
    digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, HIGH);
    digitalWrite(d1, LOW);
    break;
  case 20: 
    digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
   
    break;
  case 21:    // your hand is close to the sensor
      digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
    break;
  case 22:    // your hand is a few inches from the sensor
      digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, LOW);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW); 
    break;
  case 23:    // your hand is nowhere near the sensor
      digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, HIGH);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
    break;
    case 24:
      digitalWrite(a2, LOW);
      digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break;
   
        case 25:
      digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);     
    break;   
    case 26:
      digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, LOW);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
    break; 
    case 27:
      digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);;
    digitalWrite(a1, HIGH);
    digitalWrite(b1, HIGH);
    digitalWrite(c1, LOW);
    digitalWrite(d1, HIGH);
   
    break;   
    case 28:
      digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, HIGH);
    digitalWrite(d1, LOW);
   
    break; 
    case 29:
      digitalWrite(a2, LOW);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, HIGH);
    digitalWrite(b1, LOW);
    digitalWrite(c1, HIGH);
    digitalWrite(d1, LOW);
    break;   
    case 30:
    digitalWrite(a2, HIGH);
    digitalWrite(b2, HIGH);
    digitalWrite(c2, LOW);
    digitalWrite(d2, LOW);
    digitalWrite(a1, LOW);
    digitalWrite(b1, LOW);
    digitalWrite(c1, LOW);
    digitalWrite(d1, LOW);
    break;
  }
}
Título: Re: temperatura no display 7 segmentos
Enviado por: TigPT em 07 de Novembro de 2009, 12:40
Sim senhor... quero ver o vídeo disso a funcionar :D

(Obrigado por partilhares o projecto.)

PS - Quanto às resistencias, quem pretender "desenrascar" pode meter só uma de maior capacidade à na ligação do display a ground. (perto de 2,5K)

Fica com menos luz quando tem poucos segmentos ligados mas evita meter todas as resistências se não tiverem facilidade de acesso a estas.
Título: Re: temperatura no display 7 segmentos
Enviado por: dio123 em 07 de Novembro de 2009, 18:01
já tem o video.

comentem...
Título: Re: temperatura no display 7 segmentos
Enviado por: amando96 em 07 de Novembro de 2009, 18:07
está altamente, quero tentar fazer um igual  ;D


PS: breadboard  :P
Título: Re: temperatura no display 7 segmentos
Enviado por: TigPT em 07 de Novembro de 2009, 18:20
Muito bom, gostei bastante. Parabéns mais uma vez.

Agora é meter tudo numa caixinha e já sabes a temperatura a qualquer hora.
Título: Re: temperatura no display 7 segmentos
Enviado por: rafhit em 10 de Novembro de 2009, 22:06
boas!
ando a tentar fazer o peojecto 13 do earthshine design (mais simples! xD)
e a leitura que obtenho é sempre esta:
Analog in reading: 6 - Calculated Temp: 0.6
...

o codigo é este:
Citar
// Project 13 - Serial Temperature Sensor

int potPin = 0;
float temperature = 0;
void setup()

  Serial.begin(9600);
  Serial.println("LM35 Thermometer     ");
  analogReference(INTERNAL);

void printTenths(int value) {
  // prints a value of 123 as 12.3
    Serial.print(value / 10);
    Serial.print(".");
    Serial.println(value % 10);

void loop() {
  int span = 20;
  int aRead = 0;
  for (int i = 0; i < span; i++) {
    aRead = aRead+analogRead(potPin);
  } 
  aRead = aRead / 20; 
  
  temperature = ((100*1.1*aRead)/1024)*10;  
  // convert voltage to temperature
  Serial.print("Analog in reading: ");
  Serial.print(long(aRead)); 
  // print temperature value on serial monitor
  Serial.print(" - Calculated Temp: ");
  printTenths(long(temperature));
  
  delay(500);
}


o sensor é o LM35DT! não sei se colocava o post aqui ou criava um topic novo, peço descupa...
Título: Re: temperatura no display 7 segmentos
Enviado por: microbyte em 10 de Novembro de 2009, 22:16
Xiii... Agora é que reparei nisto...

Ainda esta semana estive a montar um circuito para fazer isto... De qualquer modo, estive a olhar para o teu código e é bastante diferente do meu, pelo que tenciono fazer um tutorial também. Depois podes comparar o teu código com o meu, verás que da forma que fiz, o código fica mais limpinho e não usas tantos PINs do Arduino. (Isto porque o CI que usei é diferente)


Cumps.
Título: Re: temperatura no display 7 segmentos
Enviado por: rafhit em 10 de Novembro de 2009, 23:33
humm tive a reparar agora -_-'
e o sensor que tenho é o LM350 e nao o LM35DT (os malandros da dimofel enganaram-me!)
lol
quanto aos pinos que akele codigo usa do arduino sao so os de 5v, ground e o analog 0!