Pages: [1] 2 3   Go Down
Author Topic: Ajuda em projecto (home automation)  (Read 6588 times)
0 Members and 1 Guest are viewing this topic.
Portugal
Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boas a todos,

o que me trás aqui é  a necessidade do vosso conhecimento e ideias, para que possa completar o projecto que de seguida explicarei com o menor dos problemas e ao menor preço possivel...

Basicamente será para home automation, o projecto vai-se dividir em 2 partes... o Modulo central e os módulos individuais, que irão sendo contruidos consoante o tempo/dinheiro disponivel.

O que eu procuro fazer, inicialmente, será controlar os interruptores de cada divisão através do computador/smartphone/internet para poder ligar/desligar e saber em que estado estão (e se possivel fazer dimming, mas não é requisito óbrigatório), do genero do que podem ver na imagem seguinte:


 
Também procuro controlar algumas das tomadas eléctricas retirar a energia delas antes de me deitar, nomeadamente onde tenho a tv, o dvd, o media player, computadores ou seja, controlar a sala, o quarto e o escritório pois na cozinha nao vejo muito interesse nisso.

Também conto em pôr sensores de temperatura, 1 por divisão, usando o DS18B20.
Procuro também ter a medição do gasto energético em casa usando algo deste género Link, mas penso que talvez seja possivel fazer o mesmo a um custo mais baixo, peço a vossa opinião.

Para conseguir o que pretendo, estou a fazer uma lista de material que irei precisar e toda a informação possivel para o concretizar (isto caso seja realmente possivel)

Para módulo central contava com o seguinte material:
Router TP-Link TL-WR741ND22,5
Arduino mega 2560 + cabo USB26,2
LCD1602 KEYPAD SHIELD for Arduino12,5
XBee 1mW Chip Antenna - Series 213,95
Xbee shield9,55
(valores em euros) Total: 84,70€

O porquê de eu ter escolhido um router e este em especifico está explicado neste link: Link

Por ter encontrado este link, julgo que o material acima será o indicado, mas caso esteja errado peço que me corrijam e me sugiram alternativas.

Para os módulos individuais:
XBee 1mW Chip Antenna - Series 2 (802.15.4)13,95
SSR-25 DA Solid State Relay 25A 24-380VAC 3-32VDC3,75
Non-isolated AC/DC Converter BP5045A53,7
Voltage Regulator 3,3v0,75
Microcontrolador ATMEGA328-PU-ND2,95
(valores em euros) Total: 25,10€

Não inclui os sensores de temperatura porque já os tenho.

Sei que irei precisar de uma board para interligar todos os componentes, mas não inclui na lista.

Julgo que não me estou a esquecer de nada, das informações que fui recolhendo, mas caso me esteja a esquecer peço que me digam por favor.

Agradeço a todos o tempo dispensado.
Abraços

PS. Quero agradecer desde já ao Bubulindo que me foi ajudando mediante a disponibilidade dele a chegar até aqui.
« Last Edit: February 23, 2012, 06:22:18 pm by Maks » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

esse tema que vc tem foi vc que desenvolveu...tem como dispor o codigo fonte do site pra comunidade.
Logged

Portugal
Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

eu ainda nao desenvolvi... Foi tudo informação que fui adquirindo na internet...
Procuro a opinião dos mais experts para que possam dar as suas ideias e tambem que material posso/devo substituir que seja mais indicado e se possivel mais barato e tambem claro se for possivel concluido com o que tenho de momento
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

me refiro a imagem que vc colocou, vc ja tem esse site pronto ou tambem achou a imagem na net.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

maks da uma vista de olhos aqui:

http://blogdonatanael.blogspot.com/2011/12/criando-um-controle-remoto-simples-para.html

e aqui

para fazeres uma comunicacao sem fios é o mais barato que encontras... tambem tenho a mesma ideia que tu e é assim que vou fazer... ja tenho o autor desse segundo site a ajudar me.
Logged

Portugal
Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ola, e desde já obrigado pela participação.

Sobre esses transmissores, lembra-te que poderás encontrar dificuldades, devido a possiveis interferências e devido ao facto de eles serem apenas transmissores, não consegues saber se a informação enviada chegou correctamente ao contrário do xbee, que para além de serem transmissores tambem são receptores... Não sei se tiveste isso em consideração ou não, e com isto não digo que não funcione, considera apenas uma observação...

Sobre os meus componentes, como a caixa por tras do interruptor (onde quero por o material) tem apenas 6cm de diâmetro e 2cm de profundidade, com este relay impossibilita a execução do mesmo, visto so o relay ocupa o espaço todo que tenho disponivel.
Alguem conhece outro relay que tenha dimensões mais reduzidas?
talvez este? http://search.digikey.com/scripts/DkSearch/dksus.dll?WT.z_header=search_go&lang=en&site=us&keywords=T9AS1D12-5&x=0&y=0
ou este? http://www.hwkitchen.com/products/electronic-brick-5v-relay-module-digital-/
encontrei tambem este http://ptrobotics.com/product.php?id_product=731 e este http://store.aztronics.com/index.php?route=product/product&product_id=215
nao sei qual o mais indicado... e já agora, qual a diferença ente 1 ou 2 circuitos?

Cumprimentos
« Last Edit: February 24, 2012, 02:04:34 pm by Maks » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Acho que estas a ver mal a coisa...
Para aquele projecto que te falei, aquilo usa um emissor e um receptor,nao sei se viste bem.
depois usa um encoder e um decoder,quanto as interferencias eu nao exprimentei.. mas falei com os autores dos dois links e garantiram me que nao faz intereferencias.

Quanto ao tamanho da placa tambem e reduzido mt mt mt reduzido da uma vista de olhos nos componentes e veras que sao minimos...so tens que os soldar em uma placa. que ficara mt mt reduzida.
 
No video é so para veres o funcionamento.. e as placas tao enormes existe mt espaço entre os componentes.

Estamos a falar de preço.....para o mesmo efeito que o xbee faz.ou melhor para o que queres fazer e eu tambem.
Logged

Portugal
Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

so uma das placas e que tem recepçao, pelo que percebi... mas posso estar errado smiley
uma pergunta... o que tu pretendes vai ter interface para poderes usar computador/smartphone/internet tal como eu quero?
eu nao tenho muita experiẽncia nisto, como ja deves ter percebido, e apenas me estou a basear nas informaçoes que vou recolhendo na net... smiley
esses transmissores/receptores sao wireless, assim como os routers?

Abraços
Logged

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

Vês o que te tinha dito?? smiley

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
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

so uma das placas e que tem recepçao, pelo que percebi... mas posso estar errado smiley
uma pergunta... o que tu pretendes vai ter interface para poderes usar computador/smartphone/internet tal como eu quero?
eu nao tenho muita experiẽncia nisto, como ja deves ter percebido, e apenas me estou a basear nas informaçoes que vou recolhendo na net... smiley
esses transmissores/receptores sao wireless, assim como os routers?

Abraços

Isto é um transmissor RF radio frequencia e um receptor que trabalha na mesma frequencia. Isto opera por ondas de radio sem fios.
Isto é apenas a parte do hardware tal como o xbee também é.

Depois o interface fazes tu, junto com o arduino que é a parte do cerebro que da informacao para as placas funcionarem
Como te digo esta é a solucao mais economica, so precisas de uma placa emissora e de um encoder

depois poderas ter varias receptores cada um deles com um decoder...

Ve este video:.



Toma nota que o projecto ai esta desenhado em uma breadbord e parece muito grande mas quando isso tiver soldado em uma PCI ,(placa circuito impresso) fica muito pequeno.

Quanto aos preços:

cerca de 6 euros na parte emissora que trabalha junto do arduino ou protuino (mais barato) e so precisas de um emissor.

e cerca de 8 10 euros por cada placa receptora ja com rele de 5v.

Esses preços sao mais ao menos nao foge mt.




Logged

Portugal
Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Os preços que indicas aqui são deveras interessantes...
Por favor ve a pm que te enviei..

Obrigado

Abraços

PS. Sim bubulindo tinhas razão. És o maior!!! smiley-wink
Logged

Ponta Delgada - Azores
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Olá pessoal...!

Vi este tópico no forum e resolvi partilhar convosco o meu projecto que tem o mesmo objectivo, mas toma uma abordagem diferente. Peço desculpa se este não é o sítio correto para publicar esta minha ideia, mas como o assunto é o mesmo achei que seria útil partilhar a minha ideia até porque também procuro opiniões e sugestões.

Em primeiro lugar devo dizer que sou técnico de informática e instalo paralelamente automatismo para instalações colectivas ou moradias, uso em geral o famoso KNX (http://www.knx.org/) no qual eu sou certificado, que na minha óptica é o melhor sistema de domótica que conheço. Em geral tenho alguma experiência na interligação entre microcontroladores e potência.

Como não nado em dinheiro, porque o KNX é bom, mas é um bocado carito, resolvi desenvolver com o arduino o meu próprio sistema de automação para casa. Comecei o projecto recentemente e ainda está muito verde, mas aqui vai o conceito.

Vou usar um arduino MEGA porque tem mais portas, uso os PINs 22 ao 51 (Números pares para Input's, números impares para Outputs (ver código)). Assim fico com 15 portas de output, que para uma moradia média é suficiente para controlar os circuitos de iluminação. As restantes portas digitais reservo-as para outras funcionalidadfes futuras, que já estão na cabeça, mas que por agora não vou implementar (por exemplo: usar as portas PWM para fazer dimming).

Então o meu conceito é o seguinte.

------------- Instalação electrica (interruptores) -------------------------------

Uma fonte de 5V colocada no meu quadro eléctrico (fácil de arranjar e barato), vai mandar a respectiva tensão para os interruptores lá de casa (Tenho uma instalação feita todo com telerruptores), pelo que o circuito de cada interruptor vai directo ao quadro eléctrico, mas se assim não fosse dava mais trabalho, mas podia-se facilmente adaptar a instalação para este principio.

Os retornos de cada interruptor ligam nas respectivas portas de input do Arduino... Fico logo com as portas Input do Arduino (as definidas no programa) a funcionar com os interruptores convencionais lá de casa (Como tenho uma instalação por telerruptor, tenho todo botões de campainha, mas se fosse ON/OFF dava na mesma). Resumindo primindo um interruptor lá de casa tenho um HIGH na porta de input soltando-o tenho um LOW...

------------- Instalação electrica (interface de potência) --------------------------

Aqui também não há nada de especial... basta usar uma ou duas cartas de relés para o Arduino (Convém serem isoladas opticamente). Cada relé controlará um circuito de potência da moradia.

No meu caso, como tenho tudo por telerruptor tenho duas hipoteses: Ou retiro os telerruptores e os relés actuam diretamente o circuito de potência, ou então ligo-os aos próprios telerruptores... tudo vai depender do espaço que tenho disponível no quadro eléctrico para albergar tudo isto.

------------- Funções do Arduino (Botões ) --------------------------

O programa que estou a desenvolver... ainda muito verde... vai ter inicialmente 4 tipos de funções sendo elas:

- Botão de Pulse (Tipo campainha)
 
  Este botão coloca a porta de saída em HIGH enquanto tiver pressionado, quando solto coloca-a em LOW, ou então podemos inverter a lógica se nos for útil para alguma coisa.

- Botão On/Off  (Toogle)

   Este botão coloca a porta de saída em HIGH enquanto pressionado uma vez, quando pressionado uma segunda vez coloca em LOW.

- Botão Timmer  (Temporizado)

   Este botão faz disparar uma rotina que colocará a porta no estado desejado após um determinado tempo definido. Isto é muito útil se quisermos um botão à saída de casa para desligar a casa toda.. clicamos e só passado o tempo que definirmos para aquele botão é que ele manda a baixo os circuitos...

- Botão Cenário

  Este para mim é o melhor..
  Queremos ver um filme... tocamos no botão de cenário "Filme" e irá actuar uma série de saidas de modo a conseguirmos o cenário... por exemplo desliga a luz da sala, fecha a cortina (se tivermos cortinas dieléctricas), liga o sistema de som ... etc... Dá para ver a ideia...

------------- Funções do Arduino (Botões Futuros) --------------------------

De futuro irei colocar mais tipos de botões... Para STORES (Que agregarão duas saídas para fazer um inversor de Sobe e Desce), Botão de Dimming (para fazer variar o fluxo luminoso) e mais uns quantos...

------------- Funções do Arduino (Acesso remoto) --------------------------

Aqui, penso que a melhor opção é utilizar o SHIEL Ethernet, ligo-o à minha rede de casa e tenho tudo à mão... crio um interface HTML que dá tanto para Telemóvel como para qualquer computador com acesso à net...

Com um DDNS gratuito até posso aceder de qualquer parte à minha casa. No  meu modesto entender acho que esta é a opção mais inteligente.. Comprei um SHIEL que já leva um cartão SD o que vai dar para mais umas brincadeiras.. por exemplo registo de eventos... Posso saber a que horas foram ligados determinados circuitos.. etc...

------------- Funções do Arduino (Expansibilidade do sistema) --------------------------

 É só colocar mais uns Arduinos via RS485... e ajustar o código para tal...
(Exemplo: http://real2electronics.blogspot.com/2009/09/arduino-and-rs485-english-version.html)
Literatura útil: http://www.i-micro.com/pdf/articulos/rs-485.pdf

------------- Funções do Arduino (Código) --------------------------

Isto está mesmo verde, só tenho a funcionar as funções Toogle e Pulse... mas é uma questão de mais umas horas de código e fica tudo pronto num instante...



Code:
/* *************************************************************** *
 *     Declaração e inicialização de variáveis e constantes        *
 * *************************************************************** */

//definição de um array que identifica as portas de Input e Output
const  int outputPin[]           = {23,25,27,29,31,33,35,37,39,41,43,45,47,49,51};
const  int inputPin[]            = {22,24,26,28,30,32,34,36,38,40,42,44,46,48,50};   

//Definição de variaveis e constantes para controlo de resalto (debounce)
const long debounceValue         = 300; 
       int counter[]             = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
      long time[]                = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};     
   boolean inputCurrentState[]   = {LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW};  //Controls de input state
   boolean outputPreviousState[] = {LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW,LOW};  //Controls de output state

//Outras constantes e variaveis
       int inputTotal            = 15;
       int inputKind[]           = {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0};  // 0 = Pulse, 1 = TOOGLE, 2 = TIMMER, 3 = SCENARIO                                                   
       int inputTimmerControl[]  = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
       int inputScenarioControl[]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
   

/* *************************************************************** *
 *                  Funções de Tipos de Botões                     *
 * *************************************************************** */

//Pulso        (Campainha)
void pulseButton(int id)
{     
  digitalWrite(outputPin[id],digitalRead(inputPin[id]));
  inputCurrentState[id]=!inputCurrentState[id];
}


//Encravamento   (On/Off)
void toogleButton(int id)
{     
   if (millis()-time[id] > debounceValue)
   {
     time[id]=millis();
     digitalWrite(outputPin[id],!outputPreviousState[id]);
     outputPreviousState[id]=!outputPreviousState[id];
   }
}


//Temporizado
void timmerButton(int id)
{
 
}


//Cenário
void sceneButton(int id)
{
 
}

/* *************************************************************** *
 *                      Arduino Initialization                     *
 * *************************************************************** */                   

void setup()
{
 
  //Inicialização da comunicação série
  Serial.begin(57600);

  //Inicialização das portas de entrada/saida e array de controlo de estado
  for (int id=0; id!=14; id++)
  {
    pinMode(outputPin[id], OUTPUT);
    digitalWrite(outputPin[id], LOW);
    pinMode(inputPin[id], INPUT);
  }
 
}


/* *************************************************************** *
 *                    Arduino default run loop                     *
 * *************************************************************** */                   
void loop()
{
 
   //Verifica alterações no estado das portas de entrada de modo a atuar
   for (int n=0; n<inputTotal; n++)
   {
     if (digitalRead(inputPin[n]) != inputCurrentState[n])
     {
       switch (inputKind[n])
       {
         case 0:
            pulseButton(n);
         break;
         case 1:
            toogleButton(n);
         break;
         case 2:
            Serial.println("TIMER");
         break;
         case 3:
            Serial.println("SCENARIO");
         break;
         default:
         break;
       }
     }
     else
     {

     }
   }
}


O que acham?.. é viável ou muito utópico?... LOL!


Logged

-- PL --

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

Um pequeno reparo ao teu código... vai dando uma olhada no google por um termo chamado debounce ou vai-te preparando para gastares dinheiro em botões decentes.

Uma solucão (que admito, me agrada, apesar de nunca a ter implementado pessoalmente por falta de oportunidade), é criar uma funcão que lê as entradas das teclas de 30 em 30 ou até de 40 em 40 ms. Isso permite passar à frente de todo esse problema do debounce e ainda tira carga ao processador. É um dois em um.

Quanto ao post, não li completamente nem com muita atencão... mas volto cá para ver. smiley
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).

Ponta Delgada - Azores
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Desde o inicio que estou ciente do problema do debounce, é um problema bem conhecido em sistema de comutação digital uma vez que fisicamente o interruptor não abre nem fecha imediatamente quando se pressiona... as palhetas ressaltam por breves milissegundos dando origem a HIGHs e LOWs que depois confundem o sistema, por isso o debounce já fora considerado no meu código... e testado...


A rotina que o controla é a seguinte:

Code:
void toogleButton(int id)
{     
   if (millis()-time[id] > debounceValue)
   {
     time[id]=millis();
     digitalWrite(outputPin[id],!outputPreviousState[id]);
     outputPreviousState[id]=!outputPreviousState[id];
   }
}

Tenho um array (um valor para cada porta) que é preenchido com um momento temporal quando se pressiona o botão em modo toogle (o debounce só trás problemas neste tipo de ligação.. um clique liga outro desliga)...

Depois tenho uma constante que chamei de debounce

Code:
const long debounceValue         = 300;

O que faço na função de toogle é:

Comparar a diferença entre o tempo actual (tempo em que a função é executada) e o valor de controlo no array. Se a diferença for maior que a constante debounceValue então quer dizer que já passou o tempo de segurança do debounce e assim passa a condição if.. e executa o código próprio para o efeito que não é mais do que:

Registar um novo valor ao array de controlo com o momento em que foi executada a função (para que não se repita)

 
Code:
time[id]=millis()

 mudar o estado da porta para a sua negação (inverso)

Code:
DigitalWrite(outputPin[id],!outputPreviousState[id]);


e alterar o estado anterior para o actual de modo a que a próxima vez que seja executado faça o inverso.. e vice versa...

 
Code:
outputPreviousState[id]=!outputPreviousState[id];

Logged

-- PL --

Ponta Delgada - Azores
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Já agora...

Qual a estratégia que usei para poupar processamento:

A execução do loop principal é apenas um ciclo que compara o estado da porta de entrada, com o seu valor anterior que é controlado pelo array "inputCurrentState[n]".

Code:
if (digitalRead(inputPin[n]) != inputCurrentState[n])

Só depois de detectada uma alteração (que significa que um Input foi alterado), é que ele analisa que tipo de Input é (tipo de botão) e executa a respectiva função.

Resumindo... o Arduino, no seu estado normal está apenas a comparar um conjunto de 15 portas com um conjunto de 15 estados...


Code:

void loop()
{
 
   //Verifica alterações no estado das portas de entrada de modo a atuar
   for (int n=0; n<inputTotal; n++)
   {
     if (digitalRead(inputPin[n]) != inputCurrentState[n])
     {
       switch (inputKind[n])
       {
         case 0:
            pulseButton(n);
         break;
         case 1:
            toogleButton(n);
         break;
         case 2:
            Serial.println("TIMER");
         break;
         case 3:
            Serial.println("SCENARIO");
         break;
         default:
         break;
       }
     }
     else
     {

     }
   }
}
Logged

-- PL --

Pages: [1] 2 3   Go Up
Jump to: