• Welcome to LusoRobótica - Robótica em Português.
 

Sensor de temperatura

Started by Bony, 28 de February de 2012, 22:06

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Bony

Exacto dahh era trocar o int pelo float :| que pergunta a minha xD

Entretanto o Led vermelho agora quando ligo o circuito liga.se pk a temperatura esta abaixo dos 24 mas dps apaga-se nao se liga mais :|

Pedrock

Não sei se reparaste, mas com as alterações que fiz, acende abaixo dos 25. Antes se tivesse a, por exemplo, 24.5, não acendia nenhum.
Já corrigi o problema do vermelho, era um erro estúpido, pus um bolean em vez de unsigned long LOL
E não tinha percebido que havia dois sensores, por isso a temperatura ambiente era a do aquário. Corrigi isso também:
#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;
unsigned long 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(sensors.getTempCByIndex(1));//
lcd.print( " C " );
}

Bony

Agora sim :D Finalmente tudo funciona como eu quero, bem deu luta...

Considero este projecto terminado.

Obrigadissimo mais uma vez :D

Já meto aqui umas fotos e uns videos e uma pequena descrisao do projecto para depois ficar tb como consulta quando alguem tiver uma duvida.

Pedrock

Quote from: Bony on 18 de August de 2012, 01:52
Agora sim :D Finalmente tudo funciona como eu quero, bem deu luta...

Considero este projecto terminado.

Obrigadissimo mais uma vez :D

Já meto aqui umas fotos e uns videos e uma pequena descrisao do projecto para depois ficar tb como consulta quando alguem tiver uma duvida.
;D
Um video era fixe. Como é que fizeste para tornar o sensor à prova de água?

Bony

Primeiramente comecei por isolar com fita isolado cada pin do sensor isto dps de ja estar soldado ao fio depois com Manga Termo-Retráctil revesti o sensor e como mesmo assim nao estava mto convencido ainda meti cola quente :)

Pedrock

Quote from: Bony on 18 de August de 2012, 02:05
Primeiramente comecei por isolar com fita isolado cada pin do sensor isto dps de ja estar soldado ao fio depois com Manga Termo-Retráctil revesti o sensor e como mesmo assim nao estava mto convencido ainda meti cola quente :)
Ah ok. Se tivesse um aquário fazia uma coisa assim...   8)

Bony

Só tem um contra... assim sai prai umas 20 x mais caro do que comprares um já feito proprio para o aquario. Só o sensor custa quase tanto com um termometro para o aqua.

Neste caso comprei 2, mais o display mais as tretas todas para fazer o arduino. Mas prefiro assim sempre se aprende umas coisas :)

Pedrock

Podes por o arduino a ligar um "aquecedor" caso a temperatura esteja baixa ou alguma espécie de "arrefecedor" caso esteja demasiado quente.

Bony

fica a ideia para um futuro projecto :P mas neste caso ja tenho 2 termoestatos para aquecer a agua !

r16

Fixe agora era fazeres um sensor de ph... coisa que eu tambem queria para a minha horta hidroponica.

Hugu

eu vendo cabos ja com os sensores de tempª isolados numa capsula de metal e com isolamento para mergulhar em agua.

Bony

Quote from: r16 on 18 de August de 2012, 02:38
Fixe agora era fazeres um sensor de ph... coisa que eu tambem queria para a minha horta hidroponica.

loOl do que te fostes lembrar...

Por acaso esse projecto está em cima da mesa :)

até ja andei a investigar sobre isso :P

brevemente

Bony

Quote from: Hugu on 18 de August de 2012, 02:50
eu vendo cabos ja com os sensores de tempª isolados numa capsula de metal e com isolamento para mergulhar em agua.

Ola Hugo, sim eu na altura que iniciei o projecto ainda cheguei a falar cntg sobre isso, mas tu nao tinhas em stock na altura... salvo erro... foi assim uma coisa !

Hugu

Quote from: Bony on 18 de August de 2012, 03:28
Quote from: Hugu on 18 de August de 2012, 02:50
eu vendo cabos ja com os sensores de tempª isolados numa capsula de metal e com isolamento para mergulhar em agua.

Ola Hugo, sim eu na altura que iniciei o projecto ainda cheguei a falar cntg sobre isso, mas tu nao tinhas em stock na altura... salvo erro... foi assim uma coisa !
ya lembra e até tava convencido que te tinha enviado um cabo a ti.. se n foi a ti k vendi um cabo foi a outro moço kk...

Pedrock

#59
Descubri porque é que não funcionava bem.
Testa assim:
#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;
unsigned long 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 (millis()-ultimoBlink>= 1000)
    {
      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(sensors.getTempCByIndex(1));//
lcd.print( " C " );
}


EDIT:
Agora é que está certo.