Você está na página 1de 17

PROJETO PORTA WIFI PARA GARAGEM

PARTE 1 – INTRODUÇÃO

A inspiração para este projeto era simples. Minha filha tem o hábito de esquecer sua chave de
casa, e nós tivemos resultados mistos com a garagem abridor de porta do teclado sem fio.
Tempo para uma nova solução. Além disso, é uma ótima desculpa para jogar com a eletrônica!
Ela tem um iPhone e ele nunca deixa seu lado, de modo que parecia uma interface razoável
usar. Além disso, se eu conectado à rede, eu poderia fazer algumas outras coisas interessantes,
como controle-lo do cargo.

Não seria prudente proceder sem ao menos olhar para ver como os outros tinham resolvido
este problema, quer com soluções comerciais, ou hacks. Mas, com toda a justiça, nós sabemos
onde isso vai dar, porque se eu encontrei algo que eu gostava, não haveria uma entrada de
blog aqui

Soluções comerciais:

• Crafstman Assurelink - Não queria trocar meu portão de garagem.


• Insteon abridor de SmartHome - não olhando para integrar Insteon ainda. Solução Nice,
apenas um pouco caro. Não diretamente compatível com iPhone (isso depois de começá-lo, eu
ainda tenho trabalho a fazer).

Soluções Hacker:

mydooropener.com – usa um Arduino. Quando sua única ferramenta é um martelo,


todo problema parece um prego. Além disso, era de Ethernet com fio em vez de wifi.
wwPCRemote.com – requer uma conexão de PC e USB. Usa um controle remoto
abridor de porta de garagem handheld hackeada. Não o que eu estou procurando.
Hackaday.com – vários, mas alguns eram bluetooth, alguns eram ethernet, um
necessário um telefone android dedicado. Nada realmente me pegou como a
solução para mim.

Tenho certeza de que estas são soluções excelentes para alguns, mas eles simplesmente não
atender às minhas necessidades. Eu não iria impugnar o trabalho de outro hacker.

Meus requisitos:

• iPhone compatível
• possível detectar o estado atual da porta da garagem
• Expansível, tenho duas baías, embora eu realmente só usar um para um carro
• barato
• Alertar se a porta da garagem aberta por mais de X minutos
• LEDs indicadores para teste / resolução de problemas
• Interfaces com a porta da garagem existente

Eu tinha acabado de correr em uma Roving Networks RN-XV módulo que é projetado para
ser uma gota no substituto para um XBee. Possui 8 uso geral pinos digitais IO, wi-fi com a
configuração ad hoc (sem configuração de série necessário!) E ainda tem entradas de sensores
analógicos. Peg + rodada buraco redondo = solução!
Depois de analisar a folha de especificações, eu vim com esse esboço inicial:

Esboço protótipo porta da garagem

Parte 2 – O microcontrolador.

Como a maioria dos entusiastas de eletrônica, eu sou um grande fã do Arduino. Poder,


flexibilidade, capacidade de expansão tudo em um fácil de usar formulário. A primeira
vez que eu usei um, era como se eu tivesse descoberto uma forma totalmente nova de
fazer minha interface eletrônica com o mundo real. Mas, é fácil chegar em sua bolsa de
ferramentas e pegar um Arduino - mesmo quando é a ferramenta errada para o trabalho.
Dado é direta falta de capacidade de interface sem fio, eu teria que comprar Wifi ou
XBee para o Arduino. Não a opção para mim.
Em vez disso, eu escolhi para passar o fim-unidade básica de interface para a garagem e
manter o cérebro e a interface de usuário no meu servidor linux existente. O WiFly me
dá isso.

http://rovingnetworks.com/products/RN_XV

O WiFly um pequeno módulo simples, drop-in projetado para substituir a funcionalidade de


um XBee com um rádio 802.11b / g. O poder 802.11 saída é mesmo configurável pelo usuário.
Um "matador XBee" alguém o chamou. Possui 8 pinos GPIO e 3 analógica (ADC) dos pinos. Ele
faz Wifi fora da caixa com configuração mínima. Como muitos microcontroladores, no entanto,
é 3.3v em vez do 5v mais user-friendly. Optei por comprar um 5v interface from CuteDigi
por US $ 7. Com esta interface, posso lançá-lo na minha placa de ensaio padrão e usar o
conhecimento básico 5v digitais eu já tenho - às vezes, eu não gostaria de saber quando
eu estou tentando aprender.
A instalação é fácil:

Ligue 5v para o pino 1, pino terra em 10 pinos. Tie 8 a alta para ativar o modo de rede ad hoc.
Quando o módulo vem, já está transmitindo um SSID:

Eu uso a versão gratuita do cliente telnet do MochaSoft. Programa de Nice. Se eu precisasse de


mais do que 30 segundos para montar um desses, eu poderia realmente comprá-lo. No modo
ad hoc, o WiFly irá atribuir o seu iPhone um endereço IP. Você precisará configurar sua sessão
telnet para se conectar a 169.254.1.1, porta 2000 (o padrão WiFly no modo ad hoc).

NOTA: Em versões de firmware 2.45 e mais tarde, o modo ad hoc agora atribui um endereço IP
por DHCP em vez de IP automática, assim que o endereço de destino para a configuração
agora é 1.2.3.4. (thnx para Vince para encontrar isso)

A configuração é mostrado acima. Eu uso WPA2/PSK, por isso a configuração foi um colossal 4
comandos para mim:

$$$ (enter command mode)


set wlan auth 4 (WPA2/PSK mode)
set wlan ssid ABC123 (obviously, use your ssid)
set wlan passphrase 0123456789 (use your WPA2 key)
save

Se você usar WEP (que vergonha!), Sua configuração é um pouco diferente. Você vai usar um
valor de 1 para wlan auth, e em vez de definir senha utilização xxx wlan set xxx chave wlan
Desligue o poder, solte o pino 8 (desativar o modo ad hoc) e reconecte a alimentação. Dê ao
seu módulo de pelo menos 30 segundos para encontrar e juntar-se a sua network . 30
segundos depois, eu olho em / var / lib / misc / dnsmasq.leases e não é o meu módulo:

1326462274 00:06:66:71:cf:6e 192.168.xxx.108 WiFly-EZX *

Agora não era assim tão fácil!

Parte 3 – Prototipo

PART 3 – Prototype

Fiz as contas para o protótipo do circuito. Eu percebi que algumas das GPIOs no WiFly
pode fonte 24mA. Hmm, que muda as coisas. Se eu usar um dos GPIOs de maior curso,
eu não preciso do transistor para amplificar a corrente. Encontrado um relé da
RadioShack que funciona em 5v.

5v / 250 ohms = 20mA

Vai demorar 20 mA para disparar o relé, então eu tenho outra 4mA para conduzir um
LED. Eu vou ter que acender ao mesmo tempo que o relé para que eu possa verificar
visualmente quando o GPIO foi ativado. Vou usar um LED verde, que cai sobre 2.1v
(vou errar no lado inferior apenas para ser seguro).

(5v – 2v) / 4mA = 750 ohms

Então, eu vou com um resistor de 1k no LED verde. E eu não tenho que usar um
transistor. Ganhar.

A Interface Web

Para o interruptor de contato da porta, eu vou magnético e colocar outro LED para
mostrar quando a porta está aberta. Acho que vou fazer isso um vermelho. Vou usar
uma das mais baixas GPIOs atuais (8mA). (5v – 1.9v) / 8mA = 390 ohms

Não importa que ele pode ser um pouco fraca, por isso vou usar outro resistor de 1k lá.

Aqui é o protótipo (valores de resistência pode não coincidir com o que eu calculei
antes, mas eles vão na versão final):
Aqui, você pode ver o ímã acionando o interruptor reed que muda o GPIO para alta.

E aqui, eu usei uma interface para acionar uma outra GPIO para ativar o relé (LED
vermelho está ligado ao relé, o verde é de respostas).
Este é o código de esperar / tcl (ubuntu) que eu usei para conduzir o WiFly:

expect -c "log_user 0; spawn telnet 192.168.239.107 2000; /


expect -exact \"*HELLO*\"; send -- \"\$\$\$\r\"; expect -exact /
\"CMD\r\"; send -- \"set sys output 0x0080 0x0080\r\"; sleep 3; /
send -- \"set sys output 0x0000 0x0080\r\"; send -- \"close /
\r\""

NOTA: O caractere "/" é uma continuação de linha - esse código é realmente uma longa
fila.
Experimente e veja o vermelho LED light durante 3 segundos.
Telegrafei esta monstruosidade até meu camareiro portão de garagem e emitiu o
comando para abrir a porta da garagem. Sucesso!
O protótipo funciona, tempo para construir a página da web para ir com ele.

Parte 4 – A Interface Web

Bem, agora eu preciso de uma interface web bacana para controlar o abridor. Algumas
orientações para o projeto:

• Não deve ser feio (plain Jane é OK)


• Não deve acidentalmente acionar o abridor
• Deve fornecer pistas visuais
• Se me avisar após a ativação
• Deve caber um iPhone

Assim, com um pouco de ajustes, eu vim com a seguinte interface (como visto em um iPhone):
Eventualmente, este será um widget em um projeto maior de automação residencial Eu quero
construir (someday!!). Então, este é limpo e simples e vai encaixar muito bem no meu projeto
futuro.

Aqui está o código por trás dele:

<?php
define(SERVER, "grendel");
define(DEST, "192.168.xxx.107");
define(PORT, "2000");
define(DOORTIME, 15);
define(CONTACT, "xxxxxxxxxx@vtext.com");

function wiflyExecute($commands) {
$script = 'log_user 0; spawn telnet '.DEST.' '.PORT.'; expect -exact
"*HELLO*"; send -- "\$\$\$\r"; expect -exact "CMD\r"; '.$commands.'; expect -
exact "> "; send_user $expect_out(buffer)"; send -- "close\r"; expect eof;';
exec("/usr/bin/expect -c'".$script."'", $stdout);
return($stdout);
}
$doorState = wiflyExecute('send -- "show io\r";');
$doorState = ((hexdec($doorState[4]) & hexdec("0x4000")) == 0 ? "closed" :
"open");

if (isset($_POST["control"]) && $_POST["control"] == "activate") {$status =


($doorState == "closed" ? "Opening" : "Closing");
wiflyExecute('send -- "set sys output 0x0080 0x0080\r"; sleep .5; send --
"set sys output 0x0000 0x0080\r";');
header('Location: http://'.SERVER.'/garage.php?status='.$status);
mail(CONTACT, 'Garage: '.$status, date('l jS \of F Y h:i:s A'));
} else {
print("<html><head>\n");
print("<meta name='viewport' content='width=device-width; initial-
scale=1.0; maximum-scale=1.0;'>\n");
if (isset($_GET["status"])) print("<meta http-equiv='refresh'
content='".DOORTIME.";url=http://".SERVER."/garage.php'>\n");
print("</head><body>\n");

print("<form action=garage.php method=POST>\n");


print("<input type=hidden name=control value=activate>\n");
print("<table align=center border=0 cellpadding=5 style='border-
collapse:collapse;'>\n");
print("<tr><td align=center><img src='garage-closed.png'></td>\n");
print(" <td align=center><img src='garage-
".$doorState.".png'></td></tr>\n");
print("<tr><td align=center><input type=button value='Open / Close'
style='font-size:14pt;width:170px;height:35px;' disabled></td>\n");
print(" <td align=center><input type=submit value='Open / Close'
style='font-size:14pt;width:170px;height:35px;'></td></tr>\n");
if (isset($_GET["status"])) print("<tr><td colspan=2 align=center>Door is
".$_GET["status"].".</td></tr>\n");
print("</table>\n</form>\n");
print("</body></html>\n");
}
?>

Alguns dos textos não exibe corretamente, so click here para abrir o código como um
arquivo de texto em uma nova janela / aba.
Aqui estão os gráficos que eu usei na minha página (cuidados de Visio e cerca de 5 minutos de
esforço - sim, os shows):

Agora, a razão pela qual eu fiz isto deste modo ... Quando você clica no botão "Open / Close",
que reabre a página, mas após a reabertura, ele emite o comando para o WiFly então um
redirecionamento. Isso vai evitar que a página seja atualizada acidentalmente. Eu também
colocar em uma mensagem pequena "Abertura", juntamente com uma atualização de meta
definida para o tempo que leva a porta para abrir / fechar totalmente (o meu leva 13
segundos, de forma que eu usei 15). Eu também configurá-lo para enviar e-mail uma
mensagem de texto para o meu celular pessoal. Só um pouco insurance / lembrete quando
meu gadget está sendo usado.

Com um pouco clicando e movendo o ímã perto do interruptor magnético, eu determinei que
tudo na interface web estava trabalhando de acordo com o design. Hora de acabar com isto
em um pacote bom e obtê-lo montado.

Parte 5 – A mantagem

Pronto para cometer este a uma placa. Eu decidi ir com um PCB RadioShack:
Eu sei que a comunidade não gosta de RadioShack, mas eles estão ficando melhor e esta
pequena placa me dá a flexibilidade e as conexões que eu preciso para se adequar ao
projeto. Além disso, ele se sente muito bem no meu caso projeto SparkFun - com
algumas pequenas modificações. Eu, particularmente, gosto de como os vestígios de
poder e de terra estão disponíveis em todo o tabuleiro.

Um par de minutos (eu disse minutos eu quis dizer HORAS - minhas habilidades de
solda estão enferrujadas?) No banco de projeto e eu vim com essa:

Etapa crítica aqui, testar, testar e testar.


Primeiro teste (e mais simples): certificar-se de que o poder ea terra não está conectado.
Use um multímetro e teste de continuidade. Você só tem que se juntar a estes juntos
acidentalmente uma vez para aprender a lição e nunca fazê-lo novamente. Eu estou
esperando que você aprender com meus erros. Há muitas maneiras para que isso
aconteça: erro no circuito, queda extra de solda rolling em algum lugar que não
deveria, uma vantagem cortado ficando preso entre dois fios adjacentes.
Em seguida teste, eu liguei de volta para minha placa de ensaio para dar energia e
verifique se a conectividade básica está no lugar antes de colocar o soquete / regulador.

O perspicaz entre você vai notar que eu adicionei dois LEDs ao circuito. Um deles é
apenas um LED de energia - se o circuito tem poder, este LED está ligado. O outro é um
indicador "ad hoc wifi". Pino 8 fica amarrado para poder colocar o WiFly no modo ad
hoc. Achei que seria uma boa idéia para fazer deste um botão de pressão externa
(empurrar / empurrar) mudar em vez de ter de abrir a caixa, se eu precisar ativar o modo
ad hoc.

Mais alguns minutos (eu disse minutos? ...) Eo circuito final está pronto.

A outra grande coisa sobre o regulador ... Ele age como uma tomada então se eu
precisar trocar o WiFly, é fácil.

Parte 6 – Juntando tudo

Perfurado alguns furos no caso de montar os conectores externos (de energia, sensor de
porta, abertura de porta) eo interruptor de modo ad hoc.
Um casal mais juntas de solda (use heatshrink! Importante) ...

... o projeto está pronto para ir.


Para os cabos das portas externas, eu usei os cabos dos auscultadores standard. Abaixo,
você pode ver um cabo cortado. Use um isqueiro para queimar o revestimento acrílico
sobre esses minúsculos fios antes de soldar aos terminais de pá ou o interruptor
magnético.
Aqui estão os cabos acabados. Muita tubulação do psiquiatra de calor. Não quero que
minha garagem para se transformar em uma chuva de faíscas se algo calções
acidentalmente

Parte 7: Conclusão

A unidade será montado logo acima do meu portão de garagem. Os terminais pá ligar
para a esquerda e de centro terminais abaixo. Este é o mesmo lugar o meu interruptor
montado parede liga.
O sensor da porta foi gravado ao trilho da porta e um pequeno ímã foi quente colado ao
mecanismo de liberação da porta.

A unidade foi zip amarrado ao suporte abridor.


Aqui é um outro ponto de vista.

Funciona como um campeão. Minha filha fez a abertura e fechamento inaugural. Na


verdade, eu tenho alguns pontos fracos com um adolescente. Nada mal para um velho!

Melhorias futuras

O WiFly apresenta um par de entradas analógicas. Se eu rever esse projeto, com certeza
vou jogar um sensor de temperatura LM35 no tabuleiro. Pode também precisa expandir-
se para lidar com duas baías se eu acabar com o meu segundo compartimento para outro
automóvel.
Definitivamente vou considerar o WiFly em quaisquer projetos futuros onde eu preciso
digital e analógico I / O e posso manter os cérebros e lógica no meu servidor. Nenhum
código de piscar, não ICP, até mesmo o firmware WiFly pode ser atualizado via FTP.
Dispositivo surpreendente.
Para quem precisa dele, eu adicionei um wiring diagram.
thnx

Você também pode gostar