Não há outra ferramenta disponível que ajude na prototipagem fácil como o Arduino. A placa Arduino possui todos os circuitos necessários para fazer o microcontrolador AVR integrado funcionar. As placas do microcontrolador AVR que são fornecidas com todos os circuitos básicos para a operação do microcontrolador que foi atualizado com o boot-loader Arduino são chamadas de placas Arduino. O IDE do Arduino é tão simples de usar que qualquer pessoa que tenha conhecimento básico de programação C pode começar a usá-lo rapidamente.Portanto, para este projeto, o leitor deve ter conhecimento de como começar com arduino e Interface LCD com Arduino .
Este documento discute sobre o desenvolvimento e funcionamento de um protótipo de um AMR (Leitura Automática do Medidor) usando placa Arduino. O AMR é agora um termo geral para todos os tipos de medidores que podem ler os dados, armazenar a leitura e transmitir a leitura sem fio, mediante solicitação, para outro dispositivo. Já existem hidrômetros disponíveis que permitem a interface do reed-switch. Este projeto usa um reed-switch junto com um ímã giratório para demonstrar o trabalhando de RAM.
Figura 1: Protótipo de Sistema Automático de Leitura de Medidores baseado em Arduino
DESCRIÇÃO:
O AMR possui basicamente duas unidades, uma unidade transmissora de armazenamento de dados que é fixada no medidor e uma unidade receptora portátil. A unidade transmissora possui um reed-switch com o qual faz a leitura do medidor e um transmissor RF que transmite os dados. A unidade portátil possui um receptor RF que recebe os dados e um LCD 16*2 no qual os dados são exibidos.
Fig. 2: Visão geral da leitura automática do medidor
Neste projeto, tanto o Transmissor quanto o Receptor são realizados utilizando placas Arduino pro-mini e par transmissor-receptor RF 433Mhz. A principal peculiaridade da placa Arduino pro-mini é seu tamanho e sua capacidade de operar na alimentação de 3V. É pequeno em tamanho, possui pinos compatíveis com placa de ensaio e pode ser facilmente conectado a placas de circuito de protótipo. A comunicação entre dois dispositivos é uma comunicação UART sem fio com uma taxa de transmissão de apenas 600.
Figura 3: Imagem do Arduino Pro Mini
Unidade Transmissora
Unidade Transmissora
A unidade transmissora possui um reed-switch com o qual lê os dados do medidor. Tem um Arduíno placa que guarda os dados, um micro-switch para o usuário iniciar o envio dos dados e um módulo transmissor que é conectado diretamente na porta serial da placa Arduino. A unidade é alimentada por duas baterias AA.
Fig. 4: Diagrama de blocos da unidade transmissora do sistema automático de leitura de medidor baseado em Arduino
Cada vez que o ímã do medidor se aproxima do reed-switch, ele faz um contato e o pino de entrada digital da placa Arduino onde está conectado indicará lógica alta. Cada vez que o pino fica alto, o Arduino incrementa uma variável no código. Sempre que o usuário pressiona o microinterruptor, o
a placa recebe uma interrupção externa e começará a transmitir o valor daquela variável serialmente para o módulo RF, que o transmitirá sem fio. Para receber os dados sem erros no receptor, a unidade transmissora transmite os dados no seguinte formato.
AM
Fig. 5: Protótipo de unidade transmissora de sistema automático de leitura de medidor baseado em Arduino
Unidade receptora
Unidade receptora
A unidade receptora possui outra placa Arduino com um módulo receptor RF conectado à sua porta serial. Também faz a comunicação serial com a mesma taxa de transmissão de 600 para poder receber os dados transmitidos da unidade transmissora. A placa Arduino nesta unidade pode exibir os dados em um LCD 16×2.
Fig. 6: Diagrama de blocos da unidade receptora do sistema automático de leitura de medidor baseado em Arduino
Cada vez que o botão na unidade transmissora é pressionado, os dados serão atualizados no LCD. A unidade receptora portátil funciona com uma bateria de 9V. O código na unidade receptora espera que um 'A' chegue à sua porta serial vindo da unidade receptora de RF e confirma que se trata de um dado do medidor transmissor quando o próximo caractere receptor for 'M'. O código atualizará o restante dos dados recebidos no LCD até receber o caractere 'R' do medidor transmissor, representando o fim da transmissão de dados.
Fig. 7: Protótipo de unidade receptora de sistema automático de leitura de medidor baseado em Arduino
Trabalhando
Trabalhando
O protótipo parece funcionar normalmente com bateria AA na unidade transmissora do medidor. Os dados podem ser recebidos usando o dispositivo portátil a um alcance superior a 10 metros, sem quaisquer antenas, exceto trilhas de PCB nas unidades transmissoras e receptoras. A antena de pista PCB feita na unidade transmissora do medidor é equivalente a uma antena de fio de 60 cm de comprimento
Fig. 8: Imagem da antena de trilha PCB
Fig. 9: Imagem mostrando a antena de trilha PCB conectada à unidade transmissora
Para demonstrar o funcionamento, um ímã redondo é colado em um disco de plástico, ligeiramente deslocado de seu centro. O disco é então conectado a um eixo de motor CC para que possa ser ligado ou girado manualmente. Um interruptor Reed é colocado próximo ao ímã giratório, pois o ímã está ligeiramente deslocado do centro do disco; ele se aproxima em um ponto e se afasta em algum outro ponto do Reed Switch conforme o disco gira. Conseqüentemente, a chave Reed abre e fecha continuamente conforme o ímã gira, simulando um medidor com a chave Reed conectada. A qualquer momento, o usuário pode pressionar o botão na unidade transmissora do medidor e a leitura do medidor será atualizada na unidade receptora.
Código-fonte do projeto
### #includeLiquidCrystal lcd(12, 11, 5, 4, 3, 2); int led = 13; char x; char dat(6); int i = 0; int o; void setup { lcd.begin(16, 2); delay(1000); Serial.begin(600); delay(1000); pinMode(led, OUTPUT); digitalWrite(led, HIGH); lcd.setCursor(5, 0); lcd.print("A M R"); lcd.setCursor(4, 1); lcd.print("0000000"); } void loop { i = 0; do { do { while(!Serial.available ); x = Serial.read ; } while(x != 'A'); while(!Serial.available ); x = Serial.read ; } while(x != 'M'); do { while(!Serial.available ); x = Serial.read ; if(x != 'R') { dat(i) = x; i ++; }else; }while(x != 'R'); dat(i) = ''; lcd.setCursor(5, 0); lcd.print("A M R"); lcd.setCursor(4, 1); for(o = 0; o < (7 - i); o ++) lcd.print('0'); lcd.print(dat); } //Transmitter code volatile int meter_reading = 0; int reedsensor = 6; void setup { attachInterrupt(1, data_tx, RISING); Serial.begin(600); pinMode(reedsensor, INPUT); } void loop { do { while(!digitalRead(reedsensor)); delay(10); }while(!digitalRead(reedsensor)); meter_reading ++; do { while(digitalRead(reedsensor)); delay(10); }while(digitalRead(reedsensor)); } //========== ISR ============// void data_tx { detachInterrupt(1); Serial.print("AM"); Serial.print(meter_reading); Serial.print('R'); attachInterrupt(1, data_tx, RISING); } //========== ISR ============// ###
Diagramas de circuito
Sistema de leitura automática de medidor baseado em Arduino | |
Sistema de leitura automática de medidor baseado em Arduino |