collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: temperatura no display 7 segmentos  (Lida 12058 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
temperatura no display 7 segmentos
« 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.





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.

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;
  }
}
« Última modificação: 07 de Novembro de 2009, 18:00 por dio123 »

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re: temperatura no display 7 segmentos
« Responder #1 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.
« Última modificação: 07 de Novembro de 2009, 12:43 por TigPT »

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: temperatura no display 7 segmentos
« Responder #2 em: 07 de Novembro de 2009, 18:01 »
já tem o video.

comentem...

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.631
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: temperatura no display 7 segmentos
« Responder #3 em: 07 de Novembro de 2009, 18:07 »
está altamente, quero tentar fazer um igual  ;D


PS: breadboard  :P

Offline TigPT

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 5.372
    • Tiago Rodrigues
Re: temperatura no display 7 segmentos
« Responder #4 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.

Offline rafhit

  • Mini Robot
  • *
  • Mensagens: 55
Re: temperatura no display 7 segmentos
« Responder #5 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...

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: temperatura no display 7 segmentos
« Responder #6 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.

Offline rafhit

  • Mini Robot
  • *
  • Mensagens: 55
Re: temperatura no display 7 segmentos
« Responder #7 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!