Rele controlado via HSNet

Olá!! 

Como parte de um projetinho de automação residencial, eu queria controlar uns Reles On/OFF. A rede que eu escolhi para tal foi o RS485 e o protocolo, o HSNet. Este protocolo é muito interessante e simples, estou aprendendo muito com ele. 

Porque RS485 ?

O RS485 é um barramento muito robusto, largamente utilizado na indústria e de implementação muito simples. São apenas 2 fios de dados em par trançado e os limites de distância são bem altos e suficientes para uso dómestico.

Porque HSNet ?

A resposta é simples! Vale à pena! Vale à pena para aprender como funciona e melhorar o meu nível de programação, vale à pena proque é um protocolo rápido, vale à pena porque a implementação é muito simples. É a primeira vez que eu utilizo um protocolo tão simples e funcional! Outra coisa muito bacana é que o HSNet funciona em controladores pequenos e baratos. Compensa muito usar para tarefas simples, como ligar ou desligar um simples Relê!

Uma vez definido o barramento e o protocolo, bora montar o hardware! 

O esqueminha é simples e muito fácil de se fazer em casa, com técnicas DIY:

No meu caso, fiz as placas utilizando o processo de transferência térmica de tonner (aka "esquema do ferro de passar roupa").

 

No lugar dos CI's IC1 e IC2, eu soldei soquetes DIP 8 pinos para facilitar a montagem e o processo de gravação do pic, que no caso é um 12F683.

Uma vez montado o Hardware, bora programar o PIC!

<link para o firmware>

 

Testando a plaquiha

Para botar a plaquinha pra funcionar, eu me utilizei de um conversor USB > RS485 com controle automático de fluxo. Ele emula através do CI FT232RL, uma portas serial virtual no SO e através do CI MAX485, converste o sinal para RS485. 

 

 

Com a ajuda do Diego, autor do protocolo HSNet, eu montei um pequeno script em python para testar a funcionalidade do protocolo e em breve irei disponibilizá-lo aqui.

<link para o script>  - Em breve

<fotos e prints dos testes> Em breve

Um pouco sobre a configuração do protocolo.

No arquivo relay_node.c, estão as configurações básicas do módulo. 

#define DEFAULT_MODULE_ID 0x00030000 // Module Id ( 16bit what are you?) (16bit who are you?) 0003 One chanel relay board
#define DEFAULT_ADDRESS_HIGH 0x19
#define DEFAULT_ADDRESS_LOW 0x37
 
A primeira linha define o tipo de módulo, no caso 0003 é um rele
A segunda e terceira linha definem o endereço do módulo e devem ser alterados de acordo com a documentação do protocolo para permitir a utilização de mais de um nó HSNet no mesmo barramento.
 
 
Comandos disponíveis para o módulo de relê
 
Até o momento são dois comandos muito óbvios que estão implementados:
 
#define CMD_SET_RLY_ON     0x30
#define CMD_SET_RLY_OFF    0x31

Um comando que está na lista de TODO é o:

#define CMD_SAVE_RLY_STATE 0x32

A idéia para ele é salvar o estado atual na nvRAM e carrega-lo ao inicializar o módulo.