Problemas com relé

Sim... se quiseres podes meter o segundo, eu não me dei ao trabalho porque vi que não o usavas.

Quando à alternancia, eu reparei que o Arduino tem algum significado para now. Também reparei que meti as variáveis como locais.
Este sketch funciona para alternar de 10 em 10 segundos.

#define TIMEOUT 10000

void setup(){

Serial.begin(19200);
}

unsigned long t_now = 0, before = 0; 
unsigned char data = 0; 

void loop(){




if((t_now = millis())-before > TIMEOUT) {
   if (data == 0) {
      Serial.print("COISAS");
      data = 1; 
      } else {
      Serial.print("OUTRAS COISAS");
      data = 0;
      }
   before = t_now; 
   }


}

bubulindo agora funcionou, ta ficando muito legal, muito obrigado....

Só tem um problema o lcd fica os 10 primeiros segundos em branco....
ainda não coloquei esse script no meu, criei um a parte exatamente com as coisas que tu me passou, então notei que vai ter um conflito

Serial.begin(19200);
substitui pelo meu 9600?

aproveitando meu relógio marca 0:3 ou seja hora menor que 10 e minuto menor que 10 ele fica em uma casa decimal, fica estranho... como arrumo apara 00:03?

Podes imprimir alguma coisa no LCD dentro do setup para evitar isso de ficar em branco. Algo como o nome do sistema, por exemplo?

Sim, podes trocar pela baud que estás a usar. Aquilo é um exemplo e eu uso 19200 como defeito.

Para imprimir com zeros à frente, experimenta assim:

if (dt->minuto <10) lcd.print("0");
lcd.print(dt-minuto);

Isto tem a ver com a forma como o arduino faz a conversão de int para string. Assim parece-me ser a solução mais simples.

como eu consigo imprimir mais de duas coisas segundo seu script?
o unico jeito que consegui foi substituindo o data = número por data ++, só que ele chega no ultimo número e trava... seguindo a mesma lógica que vc fez em cada if dando numero para o data não consigo adicionar mais que dois... aaa tive que substituir o data por datatime porque ja estava usando uma variavel com data
se colocar data = 0 no teste 3 não funciona.

if((now = millis())-before > TIMEOUT) {
if (datatime == 2) {
lcd.print(teste3);
datatime++;
}
if (datatime == 1) {
lcd.print(teste2);
datatime++;
}
if (datatime == 0) {
lcd.print(teste1);
datatime++;
}

before = now;
}

quanto a hora e minuto menor que 10 deu certinho, vlw
conseguindo agora resolver este problema em cima vou fazer o video para mostrar para vcs

criei minha forma, criei a variavel seg e de 0 a 10 imprime uma coisa e no final coloquei seg++; entao de 11 a 21 imprime outra e por ai vai, quando passa eu criei um seg = 0 e recomeça tudo denovo... funcionou legal....

:slight_smile:

Está tudo a funcionar como deve ser agora?

Aparantemente sim, como falei não consegui criar mais de duas paginas de impressão com seu modo, então fiz com um contador... não sei se é a melhor forma ou se isto irá me trazer problemas...
esta semana faço o vídeo para vocês

Com um contador também funciona...

Aliás, pensando bem... como tens um RTC e estás a sincronizar a hora de X em X tempo, podes até usar isso para ir mudando a informação que mostras no ecrã.

Parabéns pelo projecto conseguido, é sempre bom ver algo que fazemos funcionar. Eu notei agora que meti os pés pelas mãos ao comprar um LCD shield que não é compatível com o Ethernet shield. :frowning: Enfim... vou mesmo ter de pegar no ferro de soldar.

Mete fotos e vídeos para a gente se babar. :slight_smile:

Parabéns por a tua dedicação ao teu projecto. Sabe bem ver tudo a funcionar e da uma enorme satisfação veres que conseguiste o que pretendias e que um grande projecto agora se tornou simples

Pessoal primeiramente gostaria de agradecer vocês dois. Não teria conseguido sem voces.
segue o link do vídeo como prometido...

vou deixar isto rolando por alguns dias e ver se da algum problema.... ja encomendei uma caixa plastica de 12x10x6 que deve chegar em um mês e então vou ligar o sistema real.... Próxima etapa quero um ethernet shield para colocar estes dados na internet.
também quero adicionar no sistema um sistema de dosagem de quimicos no aquario, bem como controlar a temperatura do dissipador da luminária led.
o que acharam?

bubulindo, segundo o script que vc me passou em relação aos estados (ligado, desligado) como posso substituir eles por caracteres especiais? ja montei eles, e montei tambem para temperatura e relogio que ja estão funcionando... ficou bem legal.
para imprimir eles no lcd se usa o comando lcd.write(1); o 1 eu relacionei a um caracter, porém quando eu tento substituir diretamente pelo ligado por exemplo e envio o sketch para o arduino ele trava...

outra situação é, criei vários caracteres.... tem como eu criar um arquivo a parte e gravar na biblioteca? porque encheu o arquivo de caracteres especiais.

Gostei do vídeo. Acho que podias escrever Aquecedor e Refrigerador para ficar mais "bonito".

Define caracteres especiais? Será algo assim:

Tens um pedaço de código para eu entender o que está a acontecer e travar o sistema?

Como assim, um arquivo à parte? O que é para ti um arquivo? Referes-te a criar isso num ficheiro para poderes usar quando quiseres sem teres de ter isso no ficheiro de código do Arduino?

Quanto às tuas sugestões... Meter os dados na internet é bacano. Eu estou a pensar algo assim para a minha casa nova. :slight_smile: Não será muito difícil creio. :slight_smile:

Já regular a dosagem dos químicos é que não acho tão simples de fazer ou aconselhável, apenas porque podes matar os peixitos.

Como assim controlar a temperatura do dissipador da luminária? :\

isto mesmo, ja criei o character, vamos utilizar o exemplo da página porque não tenho o meu aqui em mãos:
byte smiley[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
};

void setup() {
lcd.createChar(0, smiley);
}

agora basta eu colocar lcd.write(0); que imprime...
mas quro que substitua o off:
const char estados[2][10] = {"ON ", "OFF"};
assim const char estados[2][10] = {"ON ", smiley};

quanto ao ficheiro, correto, bem isto que quero....
tipo não sei se funciona assim mas criar um ficheiro simbolos.h
e no principal escrever
#include <simbolos.h> para carregar ele....
quanto a colocar dados na internet o site exosite.com acho que faz isto não? teria outra indicação?
quanto a controlar os químicos ja existem pessoas fazendo isto e tambem o sistema pronto... basicamente eu tenho que controlar o tempo de funcionamento da bomba com o arduino para que ela dose certo.... a bomba se chama bomba peristáltica
controlar a temperatura da luminária porque o ventilador que refrigera o dissipador faz um pouco de barulho e a maior parte do tempo pode funcionar a 20% de sua capacidade.. então quero criar algo que, se tiver a determinada temperatura, ele funciona a 20% se aumentar a temperatura do dissipador, aumenta a velocidade do ventilador para 40% e por ai vai... se chegar numa temperatura critica desarma a luminária para que nada se queime... por exemplo, rompeu o fio do ventilador ou o mesmo não funciona, temperatura da luminaria aumenta sem parar e queimam os leds...., entao o arduino desligara a luminaria antes que isto aconteça.... estou pensando em colocar um lm35 colado no aluminio do dissipador juntamente com um isolante térmico para a temperatura externa não atrapalhar a leitura....

Cria o ficheiro símbolos.h.

Lá dentro cria a tua variável:

extern char smiley[8] = {
  0B00000,
  0B10001,
  0B00000,
  0B00000,
  0B10001,
  0B01110,
  0B00000,
};

extern char smileyToo[8] = {
  0B00000,
  0B10001,
  0B00000,
  0B00000,
  0B10001,
  0B01110,
  0B00000,
};

Coloca o ficheiro simbolos.h no directorio Arduino\libraries\simbolos. Vais ter de criar o directorio simbolos e provavelmente o directorio libraries.

Sai da IDE.

Volta a entrar.

Vai a Sketch-> Import Libray -> simbolos.

Há-de aparecer o tal include...

Depois usa as variáveis normalmente no teu código.

Eu usei a pachu.be. Eles já têm uma biblioteca para usar com o Arduino. É simples.

Esse controlo que pretendes chama-se PID... daí eu ter perguntado se a ventoínha era de 12V ou de 230... se for de 12V, podes arranjar uma ponte H (não é preciso tanto) ou um driver de motores tipo um transistor Darlington por exemplo, e controlar a velocidade da ventoínha por PWM. :slight_smile:

Infelizmente venho comunicar a voces que estou com os problemas iniciais
Liguei o arduino nos perifericos do aquario, por enquanto a luz e o aquecedor.
Apenas o arduino ligado funciona perfeito mas quando entro com a rede 220v da erro na leitura do sensor de temperatura, como foi criado a trava de erro de leitura, ele fica travando e dando erro de leitura alem de leituras de mais de 100 graus.... também acontece de zerar o relogio e retornar, interferencias no lcd....
me parece que os fios do 220v esta criando um campo que interfere o arduino, fechei tudo dentro de uma caixa elétrica e ficou dando esse problema... tiro a rede 220v e tudo funciona normalmente...

abri toda a caixa, passeio o fio do sensor sozinho e os erros me parecem que diminuiram.... vou acompanhar por um tempo e ver

o problema é mesmo o inicial, os drivers da luminaria led.... apenas o arduino controlando a temperatura funciona perfeitamente....
testei até tirar a luminária do arduinno e ligar ela novamente no timer digital que tenho mas a hora que conecto da problema no arduino. a unica coisa é que o arduino ta ligado numa fonte e a fonte ligada numa regua onde esta o timer da luz....
se eu ligar a luz da problema e se eu desligar funciona tudo normalmente, que droga..... n sei o que fazer....

estou editando o topico para atualizar.... o problema é o seguinte, com um driver para 3 leds (driver de 220v de entrada e saida de 9v 600mah) na rede, separado do arduino, e o arduino funcionando como controlador de temperatura funciona sem problema algum. Quando eu ligo esta crianca aqui http://www.ebay.com/itm/IP65-Waterproof-Driver-for-10-18pcs-3W-High-Power-LED-AC85-265Vto-DC36-75V-680mA-/320936909163?pt=LH_DefaultDomain_0&hash=item4ab954996b
comeca a dar problema em tudo. Ligo isto na rede tambem não no arduino... Mais tarde vou testar o driver que funciona ligado no rele que esta ligado no arduino.... E agora?

Esquema.... faz um esquema!

bubulindo nada alem do que esta no video.... apenas retirei o fio da lampada do rele e liguei diretamente no 220v, o resto é tudo igual....
a luminaria possui 3 linhas de 7 leds de 3w cada... as da ponta e alguns leds do meio sao ligados neste driver da foto e 3 leds do centro sao ligados em outro driver... a entrada 220v destes dois driver eu tirei do rele do arduino e liguei diretamente na tomada da casa, e o problema continuou, apos eu tirei os fios do driver maior e dexei apenas o de 3 leds e funciona... resumindo esta tudo igual ao video porém tirei a luminaria do rele e liguei diretamente no 220v da cada
não tem nem o que fazer no esquema.. é o arduino ligado como mostrado no video e dois fios saindo da luminaria indo para a rede da casa diretamente..... e a ligacao da luminaria esta no desenho do driver que passei o link

segue foto do esquema "rabisco"

https://www.dropbox.com/s/nlb3237244fiy8y/IMG_0634[1]

troquei o driver de 18 leds e o de 3 por dois drivers de 10 cada um, e um led ficou desligado.... (aproveitei para separar leds de coloração azul e branco) assim controlo cada um separadamente, minha idéia é ligar o azul primeiro demanha, depois de uma hora ou mais ligar o branco, denoite desligar o branco primeiro e depois desligar o azul.
Quando liguei apenas um driver 10 aconteceram os problemas, porém com menos intensidade do que o driver de 18. Quando liguei o segundo driver de 10 não aconteceu mais problemas, hoje demanha ficou uma hora ligado e eu observando e nada.... mesmo assim o sistema não está confiável... Hoje vou deixar ligado por mais tempo e observar, caso não aconteça o problema vou ligar os drivers no relé...
A temperatura marca 100 graus as vezes e arma e desarma o relé, o sensor não é reconhecido e da mensagem de erro e tambem o relógio marca se nao me engano 45:450, armando e desarmando o relé da luz.
Alguém tem idéia do que pode ser? ja que o sistema de luz está totalmente independente do arduino, compartilhando apenas o fonte AC.