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: Projecto alarme para Casa  (Lida 60013 vezes)

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

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Projecto alarme para Casa
« Responder #105 em: 28 de Janeiro de 2014, 03:11 »
Um detalhe a ver é que as variáveis para guardarem os millis() tem de ser unsigned long, e não apenas long. Isto dá problemas em sketches que fiquem a correr muito tempo (quando os valores deixam de caber num long).

Tentei dar uma olhadela no código mas parece-me que complicaste a coisa... Tens uma máquina de estados com um monte de variáveis, acho que a coisa ficava bem mais simples e fácil de entender usando menos variáveis e enumerações ou defines para marcar os estados. Algo do tipo:
Código: [Seleccione]
#define ALARME_DESARMADO 0
#define ALARME_ARMADO 1
#define ALARME_A_TOCAR 2
#define ...................

byte estado = ALARME_DESARMADO;

void loop()
{
    if (estado == ALARME_DESARMADO)
    {
        // Fazer cenas aqui...
    }
    if (estado == ALARME_ARMADO)
    {
        // Fazer cenas aqui...
    }
    ..................................
}

Tens variaveis tipo sensor, x, r, p, torna-se confuso perceber o que cada uma delas faz e exactamente em que posto está o sistema...

E estas por exemplo:
Código: [Seleccione]
  unsigned long currentMillis = millis();
  agora  = millis();

que estão claramente em duplicado... :p
« Última modificação: 28 de Janeiro de 2014, 03:15 por tarquinio »

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: Projecto alarme para Casa
« Responder #106 em: 04 de Fevereiro de 2014, 16:57 »
Desde  já agradeço,

Tive a tentar melhorar o codigo torna-lo mais simples, mas mesmo assim nao ficou nao limpo como pensei, mas está mais organizado.
O que está acontecer é que nem sempre o codigo apanha o sinal a ser recebido.  Mas é quando o led está a mudar de estado. 
Torna-se uma questão de sorte de acertar e  o arduino ler o sinal recebido.

Exprimentei tirar a a parte do led a piscar e ai já funciona bem, pelo menos  nao falhou uma unica leitura.

Deixo aqui o novo codigo.

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: Projecto alarme para Casa
« Responder #107 em: 12 de Fevereiro de 2014, 19:11 »
O problema já mesmo no piscar o led.
O alarme é armado e desarmado na perfeição quando uso Serial.println(" "); para simular que a sirene está a tocar. E recebo os 3 sinais para desarmar o alarme.

O problema está quando tiro Serial.println e coloco o exemplo  blink without delay ai nem sempre o alarme desarma e é raro  receber os 3 sinais para desarmar o alarme.
A pouco encontrei blink com timer e experimentei, e parece funcionar, pelo menos ai não falhou nenhuma vez, mas também nem sempre recebo os 3 sinais para desarmar o sinal. 

Como posso resolver o problema?

Agradeço.



Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Projecto alarme para Casa
« Responder #108 em: 12 de Fevereiro de 2014, 19:51 »
Eu tentaria fazer a coisa ainda com mais estados e menos variáveis. Por exemplo tens estas:
Código: [Seleccione]
byte recebeu = 0;
byte estado = 0;
byte estado_sensor = 0;
int sensor = 0; // sensor
int p = 0; // variavel para o if

Acho que podias combinar várias destas variáveis apenas numa e acrescentar mais estados. ECom muitas variáveis acabas por te perder um bocado e depois às vezes há variáveis que uma pessoa já nem sabe bem o que faz.

Por exemplo isto:
Código: [Seleccione]
sensor = 0; // apagar movimentos do sensor
não esta a ser usado para nada.

A variável "recebeu" é o que é lido do input, e depois está a ver usada uma data de vezes em vários testes pelo código... Eu teria visto logo que valor é que ela tem, e passado do estado X para o estado Y, se fosse caso disso. E provávelmente a mesma coisa para o "estado_sensor".

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: Projecto alarme para Casa
« Responder #109 em: 20 de Fevereiro de 2014, 19:14 »
Estive a melhorar o código , está em anexo para ver.
Descobri que o problema pode estar na sirene.
O circuito é este: http://cl.ly/image/1D0j16281N25/Untitled.png

Testei com um led em vez da sirene e recebo sempre os 4 códigos para desarmar o alarme.
Depois liguei a sirene e nem sempre desarma o alarme, e quando desarma só recebo um código.

Tou alimentar com um transformador 9v 1A.  Apesar de a sirene ser 12v a 9v já faz um barulhão desgraçado.

Será  que o problema está na alimentação?


Agradeço desde já pela ajuda.

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Projecto alarme para Casa
« Responder #110 em: 21 de Fevereiro de 2014, 01:07 »
Pois se o mesmo programa faz coisas diferentes consoante tens ligado um led ou uma sirene, então o problema pode vir daí. Se a sireme puxar muita corrente e baixar a tensão no arduino, podem acontecer cenas esquisitas... N sabes quanto é que a sierene gasta?

Offline dio123

  • Mini Robot
  • *
  • Mensagens: 1.032
Re: Projecto alarme para Casa
« Responder #111 em: 21 de Fevereiro de 2014, 09:40 »
No auto-colante a sirene é de 20w 12v =  dá +/- 1.6 amperes.
O transformador é dos ajustaveis 1A, e estou alimentar o circuito com 9v.

Tenho de confirmar novamente o consumo da sirene a 9v. Mas tinha ideia que quando medi era - 800ma.
O Transformador nao consegue dar perto de 1A. Provavel, apesar do transformador nao ser do chineses.

A sirene ao tocar, confirmei que há uma queda de  tensão, essa queda pode ser suficiente para o receptor nao apanhar o sinal como deve de ser.

Tenho testar o consumo da sirene ou limitar o consumo , ou comprar um transformador com maior amperagem.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Projecto alarme para Casa
« Responder #112 em: 21 de Fevereiro de 2014, 14:54 »
E mediste esses 800mA com quê?
Devia ser com um osciloscópio..
Avr fanboy