Pages: 1 [2] 3 4 ... 9   Go Down
Author Topic: Problemas com relé  (Read 15946 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hugo muito obrigado pela atenção que me foi dada rapidamente. Fritar a agua porque está ligado um aquecedor no aquario controlado pelo arduino. Quero manter a agua a 26 graus (aqui no inverno faz próximo de 5) porém no verão faz em média 36 graus e então os ventiladores ligam automaticamente. Imagina no verão o sensor desconectar e o arduino colher informações errada e esquentar a agua sem parar.
Poderias me dar uma dica de programação para travar o arduino e soltar um alarme com luz por exemplo
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3217
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Uma possibilidade é colocares dois sensores. Se forem muito diferentes um do outro, paras o sistema.

Outra hipótese, imagina que o teu sensor mede temperaturas de -10 a 100 graus (com 0 Ohm nos -10 graus e a resistência máxima nos 100 graus). Se por algum motivo a temperatura calculada for 0 ou maior que 50, paras o sistema e dás um erro.

Se tens um divisor resistivo, o que acontecerá se desligares o sensor de temperatura é o AD ler 0 ou 1024 (porque vai estar ligado ao ground ou 5V directamente. Podes assumir que se leres algum valor entre 0 e 10 ou 1014 e 1024, o sistema está em erro. Isto é literalmente a mesma solução mas com limites diferentes. Qual a melhor depende da escala que tens no teu sensor de temperatura.
 

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

vlw bubulindo, vou verificar quais as leituras que ele pode fazer e caso estiver fora disto (desplugado ou em curto) eu corto o sistema. depois posto o code aqui para vcs me ajudarem a melhorar-lo porque sou bem iniciante.

paralelamente disto algume tem ideia do porque meu lcd fica com sujeira na tela? não consigo limpar nem utilizando impressao sem caracteres nem utilizando o clear, só preciso testar se o sistema entra em pane também. Notei que as vezes com algum toque nos fios acontece isto então colei todos os plugs com cola quente mas não resolveu, após algum tempo ele começa a imprimir coisas estranhas e não volta ao normal
liguei o lcd como demonstrado nas imagens do google, apenas troquei um potenciometro por um resistor no brilho para melhor vizualizar.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3217
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Eu estive aqui a ler a thread toda e fiquei sem entender o que se passa.

Primeiro dizes que o relé shield actua cargas elevadas (o tal aquecedor) sem problemas. Isso é correcto? Se for uma carga qualquer que não a lâmpada não há problema?

Depois falas em driver para a luminária. Que driver é esse? Não estás a usar o relé com a luminária?

Tens fotos de tudo? Um esquema de como estás a ligar as coisas? Até agora não conseguimos ver como está tudo ligado, logo torna-se difícil de entender exactamente qual o problema.

Experimenta correr o teu código durante X tempo sem nada potente ligado. Ou seja, o arduino, relé shield e LCD (tens um LCD shield também?). O problema acontece? Se sim, tira o shield dos relés e volta a experimentar.

Se não aconteceu nada, então deve ser o relé shield. Temos de ver como estás a ligar tudo para tentar perceber o que está a acontecer.
Não faz sentido que o que está no lado do contacto do relé interfira com o que está na bobine. Logo deve ser algo nas ligações que não está correcto.

Se puderes colocar o código aqui, também ajuda a entendermos o que pode estar a acontecer... tanto quanto sabemos pode até ser o programa que se passa com alguma operação.

Mete aqui as informações que pedi e a probabilidade de resolveres o problema aumenta consideravelmente.

P.S.: Não, não tenho skype ou messenger.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Iniciei tudo do zero
peguei o sketch do exemplo do ds18b20 (sensor de temperatura)
agora vou deixar ele ligado pegando as temperaturas e ver como se comporta o sistema, ficando tudo ok em alguns dias eu vou adicionando as coisas ate dar o problema, ai saberei onde esta o problema. Para acompanhar segue o exemplo do ds com a adicao do lcd:

#include <OneWire.h>
#include <LiquidCrystal.h>
#define Luz_Fundo  6

LiquidCrystal lcd(8, 7, 5, 4, 3, 2);
OneWire  ds(A15);  // on pin 10

void setup(void) {
  Serial.begin(9600);
  pinMode(Luz_Fundo,OUTPUT); //define o pino como saída
   lcd.begin(16, 2); //inicia o lcd com 2 linhas e 16 colunas
   digitalWrite(Luz_Fundo,HIGH); // Liga a luz do display.
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
 
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
    return;
  }
   ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
 
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
 
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad

 for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data = ds.read();
 }
  // convert the data to actual temperature
unsigned int raw = (data[1] << smiley-cool | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  lcd.setCursor(0,0);
  lcd.print(celsius);
}
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sobre o problema com o rele quando eu liga-lo novamente então avaliamos.
sobre o sistema é o seguinte...
da corrente AC da casa passa para o Driver do led que transforma em CC com 54V e mantém sempre a mesma amperagem, são especificos para led...
mas vamos esperar eu chegar novamente la.... até agora esta marcando a temperatura no lcd normalmente e quando eu desplugo da porta A15 ele escreve no serial print o no more adresses e trava o sistema como eu queria....

se ficar tudo estável vou ligar os reles com leds pequenos ligados direto no arduino com um resistor. um led verde (simulando um refrigerador) e um led vermelho (simulando um aquecedor). assim confirmo que o script esta tudo ok, estando ok eu ligo o aquecedor de 400W ai parto para a Luminaria Led do aquario
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

como ficou algumas horas sem problema algum com o lcd decidi dar um passo
coloquei o seguinte comando no script:

                if (celsius <= 27.0)digitalWrite(aquecedor, LOW);
        if (celsius >= 27.5)digitalWrite(aquecedor, HIGH);
        //statusHeater = digitalRead(aquecedor);
        
        if (celsius >= 28.0)digitalWrite(resfriador, LOW);
        if (celsius <= 27.5)digitalWrite(resfriador, HIGH);
        //statusFan = digitalRead(resfriador);

Meu relé é invertido, o LOW liga e o HIGH desliga.

Ou seja quando baixar de 27 graus ele liga o LED VERMELHO e quando passa de 28 graus ele liga o LED VERDE
Está tudo ok ate o momento, a primeira pergunta.....

Coloquei o comando para o resfriador e o aquacedor logo abaixo do no more adresseses pois achei que travava, porém não é isto que acontece, o relé fica ligando e desligando..... fiz a leitura da entrada como vc falou e ficou perto dos 280 com o sensor desplugado e 1021 com ele plugado... ou seja quando ele fizer a leitura perto dos 280 eu quero que desligue o aquecedor e o resfiador e ligue uma luz de alerta... como fazer isto?
Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1531
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
fiz a leitura da entrada como vc falou e ficou perto dos 280 com o sensor desplugado e 1021 com ele plugado...
Nao estou a entender tens um sensor one-wire da dallas  e aqui falas pelo que me parece de leituras do ADC?
Tens mais que um tipo de sensor?
Quote
void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
Teres estas variaveis globais declaradas aqui nao é boa pratica.
Por exemplo o byte present a cada volta na loop vai receber o valor 0, imagina que a usas no codigo abaixo logo de seguida ela é reniciada o que se torna inutil!
A nao ser que tenhas um bom motivo para as teres ai retira-as para fora antes do Void Setup por exemplo

« Last Edit: January 30, 2013, 05:33:47 pm by HugoPT » Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3217
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

meio fgrau de histerese vai dar sarilho...

que sensor tens afinal?

Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1531
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Também concordo, podes fazer uma amostragem das temperaturas durante um x tempo de depois calcular a media das temperaturas, desta forma suavizas o "mexer" rápido dos reles que respondem logo com essa margem tão pequena
Logged

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3217
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Coloquei o comando para o resfriador e o aquacedor logo abaixo do no more adresseses pois achei que travava, porém não é isto que acontece, o relé fica ligando e desligando..... fiz a leitura da entrada como vc falou e ficou perto dos 280 com o sensor desplugado e 1021 com ele plugado... ou seja quando ele fizer a leitura perto dos 280 eu quero que desligue o aquecedor e o resfiador e ligue uma luz de alerta... como fazer isto?

Quando compilas o programa, aparecem alguns warnings? (provavelmente não por causa dos settings do Arduino)
Existe a remota possibilidade de estares a usar a variável float sem inicializares... daí dar problemas.

Eu não tenho a certeza do que é que o return faz dentro da loop, por isso nada como fazer assim:

Code:
if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    digitalWrite(LED_ERRO, HIGH); //ligar uma luzinha para dar erro...
    while (!ds.search(addr) {  //enquanto não encontrar o sensor, fica preso aqui a procurar.
        ds.reset_search();
        delay(250);
    }//return;
  }

Ou então, uma solução mais "civilizada"...

Code:
#include <OneWire.h>
#include <LiquidCrystal.h>
#define Luz_Fundo  6

LiquidCrystal lcd(8, 7, 5, 4, 3, 2);
OneWire  ds(A15);  // on pin 10

void setup(void) {
  Serial.begin(9600);
  pinMode(Luz_Fundo,OUTPUT); //define o pino como saída
   lcd.begin(16, 2); //inicia o lcd com 2 linhas e 16 colunas
   digitalWrite(Luz_Fundo,HIGH); // Liga a luz do display.
}

void loop(void) {
  byte i;
  byte present = 0;
  byte type_s;
  byte data[12];
  byte addr[8];
  float celsius;
 
  if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    ds.reset_search();
    delay(250);
//    return;
  } else { //se o sensor estiver bom... corre esta parte do programa.
   ds.reset();
  ds.select(addr);
  ds.write(0x44,1);         // start conversion, with parasite power on at the end
 
  delay(1000);     // maybe 750ms is enough, maybe not
  // we might do a ds.depower() here, but the reset will take care of it.
 
  present = ds.reset();
  ds.select(addr);   
  ds.write(0xBE);         // Read Scratchpad

 for ( i = 0; i < 9; i++) {           // we need 9 bytes
    data = ds.read();
 }
  // convert the data to actual temperature
unsigned int raw = (data[1] <<  | data[0];
  if (type_s) {
    raw = raw << 3; // 9 bit resolution default
    if (data[7] == 0x10) {
      // count remain gives full 12 bit resolution
      raw = (raw & 0xFFF0) + 12 - data[6];
    }
  } else {
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw << 3;  // 9 bit resolution, 93.75 ms
    else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
    else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
    // default is 12 bit resolution, 750 ms conversion time
  }
  celsius = (float)raw / 16.0;
  Serial.print("  Temperature = ");
  Serial.print(celsius);
  Serial.print(" Celsius, ");
  lcd.setCursor(0,0);
  lcd.print(celsius);
} //fim do else.
}

Como o Hugo disse, ter as variáveis ali por inicializar não é boa prática.

Quanto ao teu controlo de temperatura... se apenas tivesses uma fonte de energia (aquecedor, arrefecedor), o controlo de termostato funcionaria (duvido que fosse óptimo) com uma histerese tão pequena (dependendo onde tens o sensor e onde tens o actuador). No entanto, com duas fontes de energia isso vai provocar fazer com que o sistema descontrole completamente.
Qual é a gama de conforto que os peixes necessitam? Certamente que serão entre 3 a 5 graus, não? Porque não usar essa gama para a tua histerese?

Outra questão:
Qual é em média a temperatura da tua casa? Eu acredito que não tenhas um ar condicionado para arrefecer no verão, já aquecer no Inverno certamente que terás algo que coloque a temperatura da casa acima daqueles 5 que falaste anteriormente. Tens ideia de qual é a temperatura da casa durante o Inverno? Efectivamente esse será o teu limite baixo para o sistema de controlo.

Tu falaste em ventoínhas para arrefecer a água. Que ventoínhas são essas? São ventoínhas de 230V? Ou ventoínhas de 12? Se tiveres ventoínhas de 12V, poderias implementar diferentes controlos para a temperatura da água.
Por exemplo, para aquecer colocar um controlo tipo termostato (on/off) com o relé e resistência e para arrefecer usar um PWM para controlar a ventoínha e podias ver um PID por exemplo...
Isto não são coisas necessárias... apenas ideias para melhorar o sistema.


Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

muito obrigado a vocês dois pela grande ajuda.
Quando chegar em casa vou atualizar com as dicas que vocês passaram, colocar aqueles valores em cima do void e o codigo atualizado do bubulindo.

Quero fazer um controle total de um aquario marinho para corais, por isto preciso de meio grau de variação. Mas isto não é problema, a agua mantem a temperatura e não fica variando. Ou apenas o ventilador liga ou apenas o aquecedor liga.

Ficou a noite inteira rodando o seguinte hardware.

Um led vermelho simulando o aquecedor
um led verde simulando um ventilador
um sensor de temperatura ds18b20
rele shield
lcd shield
Rodou sem erro algum.
Para fechar esta primeira etapa, preciso apenas que trave tudo quando o ds for desconectado, vou utilizar a dica hoje e ver se funciona.

Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

para identificar vou postar a etapa final do sistema de controle de temperatura que eu quero.

Um ventilador de 220v no lugar do led verde que utilizo hoje
um aquecedor de 400w no lugar do led vermelho que utilizo hoje
o ds18b20

quando este sistema rodar sem problemas por alguns dias eu inicio o controle da luminária também... mas agora vamos por etapa para não embaralhar tudo, apenas a temperatura por enquanto.
Verifiquei que o sensor com este novo código está mais lento para lançar a temperatura, eu coloco o dedo para aquecer o sensor e demora bastante até retornar a temperatura ambiente... antes era mais rápido.

Ao final podemos disponibilizar este controle de temperatura para todos, garanto que mais gente interessado em controlar o aquario.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 85
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

acabei de chegar em casa e esta funcionando 100% ainda.

bubulindo, coloquei como vc descreveu porém funciona apenas quando o arduino inicia, e não quando ele esta em funcionamento... por exemplo está ligado no aquário e então o cabo desconecta, rompe a ligação... ele vai achar que esta em 0 graus e continuar esquentando, este é meu medo e por isto quero esta trava.
outra coisa, se eu inicio ele sem o cabo ele alerta e trava ali porém o relé que estava ligado continua ligado.... tentei colocar o comando ali para o relé desligar mas não deu em nada.
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3217
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok...

Nada mais simples:

Code:
if ( !ds.search(addr)) {
    Serial.println("No more addresses.");
    Serial.println();
    digitalWrite(LED_ERRO, HIGH); //ligar uma luzinha para dar erro...
    digitalWrite(aquecedor, HIGH);  //desliga aquecedor
    digitalWrite(resfriador, HIGH);   //desliga resfriador.         
    while (!ds.search(addr) {  //enquanto não encontrar o sensor, fica preso aqui a procurar.
        ds.reset_search();
        delay(250);
    }//return;
  }

Se desligares os relés quando entrar em erro, isso não acontece.

Os relés não estão sempre a ligar/desligar?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Pages: 1 [2] 3 4 ... 9   Go Up
Jump to: