Projeto - Automação residencial com Arduíno e Asterisk (Up 06/03 - Código do projeto)

Fala galera tudo Tranquilo?

Estou atualizando o status deste projeto, seguem os componentes que pretendo utilizar:

O projeto consiste em automatizar uma residencia utilizando Arduino e Asterisk

Componentes:

* 1 Arduino Mega 256:
http://img.dxcdn.com/productimages/sku_144185_2.jpg

* 1 Placa de 16 reles par interagir com o ARDUINO:
http://img.dxcdn.com/productimages/sku_143789_1.jpg

* 16 Medidores de tensão:
http://img.dxcdn.com/productimages/sku_161183_4.jpg

* 1 Desktop convencional rodando Asterisk e os scripts do Arduino.

A ideia do projeto é utilizar ramais autenticados no Asterisk para controle residencial.

Dai surgem diversas dúvidas:

- Como devem ser feitas as ligações entre as placas (arduino, placa de relês, medidor de tensão e a alimentação)? Sou MUITO leito nessa parte. Alguém pode disponibilizar um esquema bem simples para isso? Onde e como eu conecto as partes?
- Antes de executar qualquer comando (ligar/desligar) deve primeiramente ser verificado o status do circuito (medidor de tensão) Como eu faço esse caminho reverso? 

À medida que eu for avançando eu atualizo a galera.

Obrigado.

Exibições: 3803

Responder esta

Respostas a este tópico

Oi igor,

trabalhamos com um supervisorio chamado scadabr, ele é a fada madrinha da automação livre de encargos, fiquei muito interessado no seu trabalho e creio que com a sua capacidade de automação e telefonia ip, poderiamos fazer maravilhas

logo entro em contato com vc

 

grande abraço

 

ps: procure conhecer este software supervisorio(scadabr), ou caso tenha um proprio podemos trabalhar nas suas duvidas

Acredito que seria um interruptor em Via e vem mais vou ver com a galera aqui do trampo blz

Muito bom!!

Adriano Como funciona esse ScadaBR?

e Wellinton Frank, se você conseguir me passar um modelo de interruptor seria SHOW!!

O interruptor pode ser esses de Minuteira. Que é o mesmo esquema da campainha.

Ele não é uma gangorra que fica para um lado (ligado) ou para o outro (desligado). Ele apenas emite um pulso enquanto pressionado.

E a partir daí é com a sua placa de aquisição. Que pelo teu conhecimento em Python e a simplicidade do projeto (não to vendo aí mais do que uns 2 Registradores para as saidas e uns multiplexadores pros interruptores), pode ser um PIC, um Atmega ou se vc quiser colocar a mão na massa, um Arduino, que você programa em C++ de "alto nível".

Outra solução, que (talvez) seja viável no caso de já existir a instalação elétrica é utilizar sensores como retorno (com alguma eletronica aí pra converter os 110-220v em 5v), e saber se a lampada ja está ligada ou não.

Nos 2 casos, o firmware mudaria pouca coisa. A complexidade seria mais de hardware que de firmware.

Ligar os contatos do relé em paralelo com os interruptores já resolve a questão das lâmpadas e se você ler o nível de tensão

nestes contatos nem precisará acioná-lo caso a lâmpada já esteja ligada...

A ideia é que o projeto possa ser instalado em uma residencia. Ou seja, ele deve ser adaptável à instalação de uma residencia comum. Sendo assim Jonas Freitas, acredito que esse tipo de interruptor não seria o ideal. Porém eu gostei muito da sua sugestão da placa. Você pode me passar maiores informações à respeito?

Américo Lopes, se eu ligar os contatos do relê em paralelo ao interruptor, isso não fará com que o comando de acender apague a luz caso ela esteja acesa? Como eu faço para ler o nível de tensão? Isso é exatamente o que eu preciso. pois como eu vou configurar uma mensagem audível (URA) a cada comando ("acendendo luz da sala, abrindo portão etc..) caso eu consiga verificar o status, isso aprimoraria ainda mais o projeto

Galera, atualizei o tópico.

pra que os medidores de tensão ??

o arduino já lê as portas com tensão até 5V nas analogias e nas portatas digitais

no caso da URA, qual o modelo vc está utilizando,poderia ser um PABX?

O arduíno lê, mais eu preciso saber a tensão caso a lampada seja acesa por um interruptor convencional.

O próprio Asterisk é o Pabx

Bem num projeto sem asterisk, faria com uma rede rs485 , usando um sketch que me diria quando a luz tiver acessa vai acionar uma entrada no arduino que me informaria a situação de ligado no scadabr assim ligaria e desligaria sem precisar adicionar um sensor de tensão.vc pode me dizer aonde nome dele pra eu achar a especificação da onde vc comprou esse sensor de tensão ou apenas leitor de tensão.Por que o asterisk precisa desse leitor??

Fala galera, tudo tranquilo? Há algum tempo criei este tópico, para que o pessoal pudesse me auxiliar e juntos compartilharmos conhecimento.


Desde então eu obtive grandes progressos, de tal forma que estou muito próximo de concretiza-lo!! =D

Seguinte, para saber se a lampada está ou não acesa, estou utilizando o medidor de corrente, descrito no início deste tópico. Através de incdicaçẽos do nosso amigo Jonatas Freitas, conheci uma biblioteca, voltada para isto, chamada emon (energy monitor).

Pois bem, em testes utilizando o exemplo que acompanha a biblioteca, consigo -0.50 se a lampada esta aceas, e 0.00 se a lampada está apagada, isso é perfeito, pois atende às minhas ncessidades, o problema é quando utilizo este scketch em meu códico, e cai no switch case!! Se dígito "1" o código funciona perfeitamente, agora se eu digito "0" os dados no monitor ficam doidos, vão para -3.... -4....

Pessoal se vocês puderem me ajudar!!

Segue o código:

// Incluindo bibliotecas
#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance
//Declarando variaveis globais
char readpin[2] = ""; //Variavel que recebe os dados da Serial (3 digitos)
int porta = 0;  // Variavel que ira receber os pinos
char sensorValue; //Variavel que recebe os valores dos sensores
//Variaveis para conversao de char, para int (calculos)
int d = 0; 
int u = 0;
int c = 0;   
//===============================================================
void setup(){  
 
  Serial.begin(9600);
  Serial.println("Iniciando o Programa");
  pinMode(13,OUTPUT);
  emon1.current(13, 111.1);  // Calibrando o pino de entrada
  
}
void loop(){    
    
      double Irms = emon1.calcIrms(1480) * 240.0; // Declarando a varíavel que contém os dados lidos do medidor de corrente
      Serial.println(Irms);  // Debug
      delay(100);
    
  if (Serial.available() > 0) {
      for (int i=0;i<3;i++){
      //Armazena na string (array de char)
      readpin[i] = Serial.read();
      delay(10); 
   }
      
      d = (int) (readpin[0] - '0');
      u = (int) (readpin[1] - '0');
      c = (int) (readpin[2] - '0');   
      porta = (int) (d*10+u);
     // d * 10 + u;
     // porta = 13;
      Serial.println(porta);
      Serial.println(c);   
      
      
      switch(c){
        case 1:
          delay(20);
          Serial.println("Ligando luz");
          Serial.println(Irms);
            if (Irms > -0.15){
              delay(200);
              digitalWrite(porta,!digitalRead(porta));
              int Irms = 0;
          }
        delay(20);
        break;
         
// ATÈ AQUI O CÓDIGO FUNCIONA COISA LINDA!!
// O PROBLEMA È SE EU DIGITO "0" COMO COMANDO!! Os DADOS NO MONITOR DA SERIAL, ficam MALUCOS!!
        case 0:
          delay(20);
          Serial.println("Desligando luz");
          Serial.println(Irms);
          //Irms = '\0';
            if (Irms < -0.10){
              delay(200);
              digitalWrite(porta,!digitalRead(porta));
             // byte Irms = 0.00;
          }
        delay(20);
        break;  
      
        case 2:
        sensorValue = analogRead(porta);
        delay(200);
        if (sensorValue > 0){
          Serial.print(1);
          delay(20);
        }
        else {
          Serial.print(0);
          delay(20);
        }
        delay(20);
        break;  
      }
      //digitalWrite(porta,c);
      
   }
   
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço