collapse

* Posts Recentes

Emulador NES em ESP32 por dropes
[Ontem às 15:31]


Arame de Estendal por almamater
[18 de Abril de 2024, 16:16]


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]


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]

Autor Tópico: Sensor de temperatura  (Lida 30075 vezes)

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

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Sensor de temperatura
« Responder #30 em: 26 de Julho de 2012, 23:38 »
Olá, o led vermelho não acende porque estás a utilizar AND quando devias utilizar OR aqui:

Código: [Seleccione]
if (sensors.getTempCByIndex(0)<=24 && sensors.getTempCByIndex(0)>=29) // se a temperatura é menor ou igual que 24 graus ou maior ou igual que 29 vai piscar o led vermelho

digitalWrite(ledvermelho, HIGH);
delay(1000);
digitalWrite(ledvermelho, LOW);
delay(1000);}

Penso que bastará substituir "&&" por "or", mas espera por mais respostas.

Edit: Também dá para usar "||" em vez de "or".
« Última modificação: 26 de Julho de 2012, 23:42 por rglove »

Offline Marvin

  • Mini Robot
  • *
  • Mensagens: 677
    • The scientist and the geek
Re: Sensor de temperatura
« Responder #31 em: 26 de Julho de 2012, 23:43 »
Tambem acho que é isso. substitui && por || e ficas com o problema resolvido.

p.s. rglove foste mais rapido fizeste-me apagar o texto hehehe
Dronetech BlogThe Scientist and the Geek

Offline rglove

  • Mini Robot
  • *
  • Mensagens: 527
Re: Sensor de temperatura
« Responder #32 em: 26 de Julho de 2012, 23:46 »
Desculpa lá Marvin xD

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Sensor de temperatura
« Responder #33 em: 27 de Julho de 2012, 14:03 »
e ninguem em ajuda :(

Isso é mentira; estás a ser injusto e pedinchas. Já te deram algumas ajudas e eu já te disse para imprimires para a porta série os valores do sensor, coisa que pareces ter ignorado. Por mim agora desenrasca-te, termino definitivamente a participação neste tópico.

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Sensor de temperatura
« Responder #34 em: 18 de Agosto de 2012, 00:31 »
Agora que resolvi um problema aparece outro :|

Ja consegui meter o led a piscar e afinal os || nao funcionam tive mesmo que escrever "or" assim ja funciona :)

Agora o led pisca, mas nao pisca com a rapidez que eu queria, está para ai a piscar de 3 em 3 segundos ja alterei e meti montes de valores no delay e nada continua sempre a piscar igual :|

Alguma sugestao?

é o ledvermelho.

Código: [Seleccione]
// Led Verde

if (sensors.getTempCByIndex(0)>=26 && sensors.getTempCByIndex(0)<=28.5) // se a temperatura é maior ou igual que 26 e menor que 28.5 graus vais acender o led verde
{
  digitalWrite(ledverde, HIGH);
}
  else // caso contrario vai estar o led verde apagado
  {
  digitalWrite(ledverde, LOW);
}

// Led Amarelo

if (sensors.getTempCByIndex(0)>=25.00 && sensors.getTempCByIndex(0)<=25.99) // se a temperatura é maior ou igual que 25.0 graus e menos ou igual que 25.9 graus vai acender o led amarelo
{
  digitalWrite(ledamarelo, HIGH);
}
  else // caso contrario o led amarelo vai estar apagado.
  {
    digitalWrite(ledamarelo, LOW);
}

// Led Vermelho

if (sensors.getTempCByIndex(0)<=24 or sensors.getTempCByIndex(0)>=29) // se a temperatura é menor ou igual que 24 graus ou maior ou igual que 29 vai piscar o led vermelho
{
  digitalWrite(ledvermelho, HIGH);
  delay(1000);
  digitalWrite(ledvermelho, LOW);
  delay(1000);
}
else
{
  digitalWrite(ledvermelho, LOW);
}

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Sensor de temperatura
« Responder #35 em: 18 de Agosto de 2012, 00:43 »
Cada conversão demora 750mS na resolução máxima, e como em vez de fazeres uma leitura para uma variavel e usar essa variavel nos if's estás a fazer leituras consecutivas para cada comparação dentro do if é normal que isso aconteça.
Avr fanboy

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Sensor de temperatura
« Responder #36 em: 18 de Agosto de 2012, 00:52 »
nao percebi :S

cada conversao ?

podes me dar um exemplo ?

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Sensor de temperatura
« Responder #37 em: 18 de Agosto de 2012, 00:54 »
Eu faço isso. Espera um pouco.

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Sensor de temperatura
« Responder #38 em: 18 de Agosto de 2012, 00:55 »
Oky :)

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Sensor de temperatura
« Responder #39 em: 18 de Agosto de 2012, 00:57 »
Cada vez que isto aparece no código:
sensors.getTempCByIndex(0)
São 750milisegundos que o arduino está á espera de resposta por parte do sensor de temperatura.
Avr fanboy

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Sensor de temperatura
« Responder #40 em: 18 de Agosto de 2012, 01:08 »
humm... entao mas a meu ver fico na mesma, tenho que fazer na mesma 3 variaveis para cada if, todos os If tem escalas de temperaturas diferentes.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Sensor de temperatura
« Responder #41 em: 18 de Agosto de 2012, 01:10 »
Aqui tens:
Código: [Seleccione]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,5,4,3,2);

#define ledverde 6
#define ledamarelo 7
#define ledvermelho 9
#define ONE_WIRE_BUS 10 // sensor de temperatura ligao ao pin 10

boolean vermelhoLigado = false;
boolean ultimoBlink = 0;

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)

OneWire oneWire(ONE_WIRE_BUS);


// Pass our oneWire reference to Dallas Temperature.

DallasTemperature sensors(&oneWire);
 

void setup()
{
// start serial port
Serial.begin(9600);

 lcd.begin(20,4);

 sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
 pinMode(ledverde, OUTPUT);
 digitalWrite(ledverde, LOW);
 pinMode(ledamarelo, OUTPUT);
 digitalWrite(ledamarelo, LOW);
 pinMode(ledvermelho, OUTPUT);
 digitalWrite(ledvermelho, LOW);
}


void loop()

{
sensors.requestTemperatures(); // Send the command to get temperatures
int temperatura = sensors.getTempCByIndex(0);

lcd.setCursor(0,0);
lcd.print("Temperatura Aquario");
lcd.setCursor(6,1);
lcd.print(temperatura);// Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
lcd.print( " C " );

int perigo = 0;

if (temperatura >= 26 && temperatura <= 28.5) perigo=0;
else if (temperatura >= 25 && temperatura <= 26) perigo=1;
else perigo=2;

switch (perigo)
{
  case 0: //Led verde
  digitalWrite(ledverde, HIGH);
  digitalWrite(ledamarelo, LOW);
  digitalWrite(ledvermelho, LOW);
  break;
  case 1: //Led amarelo
  digitalWrite(ledamarelo, HIGH);
  digitalWrite(ledverde, LOW);
  digitalWrite(ledvermelho, LOW);
  break;
  case 2: //Led vermelho
    digitalWrite(ledverde, LOW);
    digitalWrite(ledvermelho, LOW);
  if (ultimoBlink+1000 >= millis())
  {
    ultimoBlink = millis();
    if (vermelhoLigado) {digitalWrite(ledvermelho, LOW); vermelhoLigado = false;}
    else {digitalWrite(ledvermelho, HIGH); vermelhoLigado = true;}
  }
  break;
}

lcd.setCursor(0,2);
lcd.print("Temperatura Ambiente");
lcd.setCursor(6,3);
lcd.print(temperatura);//
lcd.print( " C " );
}

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Sensor de temperatura
« Responder #42 em: 18 de Agosto de 2012, 01:15 »
humm... entao mas a meu ver fico na mesma, tenho que fazer na mesma 3 variaveis para cada if, todos os If tem escalas de temperaturas diferentes.
Não, fazes só uma leitura por loop em vez de meia duzia delas.
Avr fanboy

Offline Bony

  • Mini Robot
  • *
  • Mensagens: 397
Re: Sensor de temperatura
« Responder #43 em: 18 de Agosto de 2012, 01:25 »
Pedrock, Obrigadissimo.

Mas no teu codigo surge um problema, é que no display só mostra a temperatura a 2 bits e antigamente mostrava a 4 bits :)

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Sensor de temperatura
« Responder #44 em: 18 de Agosto de 2012, 01:28 »
Tinha posto a temperatura como valor inteiro.
Vê assim:
Código: [Seleccione]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12,11,5,4,3,2);

#define ledverde 6
#define ledamarelo 7
#define ledvermelho 9
#define ONE_WIRE_BUS 10 // sensor de temperatura ligao ao pin 10

boolean vermelhoLigado = false;
boolean ultimoBlink = 0;

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
 

void setup()
{
 
 Serial.begin(9600); // start serial port

 lcd.begin(20,4);

 sensors.begin(); // IC Default 9 bit. If you have troubles consider upping it 12. Ups the delay giving the IC more time to process the temperature measurement
 pinMode(ledverde, OUTPUT);
 pinMode(ledamarelo, OUTPUT);
 pinMode(ledvermelho, OUTPUT);
}


void loop()
{
sensors.requestTemperatures(); // Send the command to get temperatures
float temperatura = sensors.getTempCByIndex(0);

lcd.setCursor(0,0);
lcd.print("Temperatura Aquario");
lcd.setCursor(6,1);
lcd.print(temperatura);// Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
lcd.print( " C " );

int perigo = 0;

if (temperatura >= 26 && temperatura <= 28.5) perigo=0;
else if (temperatura >= 25 && temperatura <= 26) perigo=1;
else perigo=2;

switch (perigo)
{
  case 0: //Led verde
  digitalWrite(ledverde, HIGH);
  digitalWrite(ledamarelo, LOW);
  digitalWrite(ledvermelho, LOW);
  break;
  case 1: //Led amarelo
  digitalWrite(ledamarelo, HIGH);
  digitalWrite(ledverde, LOW);
  digitalWrite(ledvermelho, LOW);
  break;
  case 2: //Led vermelho
    digitalWrite(ledverde, LOW);
    digitalWrite(ledvermelho, LOW);
  if (ultimoBlink+1000 >= millis())
  {
    ultimoBlink = millis();
    if (vermelhoLigado) {digitalWrite(ledvermelho, LOW); vermelhoLigado = false;}
    else {digitalWrite(ledvermelho, HIGH); vermelhoLigado = true;}
  }
  break;
}

lcd.setCursor(0,2);
lcd.print("Temperatura Ambiente");
lcd.setCursor(6,3);
lcd.print(temperatura);//
lcd.print( " C " );
}