Neste artigo de uma série de projetos práticos envolvendo o BASIC Stamp® veremos como esse versátil microcontrolador, controla relés à distância através de comandos enviados pelo canal serial do PC.
Olhando ao redor, encontraremos várias aplicações de um controle de relé à distância, como por exemplo: acionamento de motores em uma aplicação industrial, controle de iluminação, controle de acesso, etc.
Observando o esquema abaixo, vemos que poucos componentes são necessários para realizar a montagem.
Funcionamento da placa controladora.
Partimos do princípio que essa placa controladora receberá comandos na forma de caracteres ASCII enviados serialmente através da porta serial de um PC rodando um software emulador de terminal.
Os comandos terão o seguinte formato:
HEADER, COMANDO, RELÉ
O header foi escolhido “BS_", mas poderia ser outro comando qualquer.
Temos “ L" para ligar o relé e “D" para desligar, “n" é o número do relé que pode variar de 1 a 6 ou ser "T" para comandar todos os relés simultaneamente. Por exemplo, para ligar o relé 2, enviamos o comando “BS_L2" e para desliga-lo o comando será “BS_D2". Agora, se quiséssemos desligar todos os relés simultaneamente, o comado seria “BS_DT".
Para checar se os comandos foram corretamente recebidos (alguém pode desligar o cabo serial que conecta o BASIC Stamp© ao PC), a placa controladora envia os comandos recebidos de volta ao PC no seguinte formato:
HEADER, COMANDO, RELÉ, ” RECEBIDO"
Onde header, comando e relé já foram descritos acima, e “RECEBIDO" é somente uma string de caracteres que está sinalizando o recebimento, poderia ser uma outra qualquer, por exemplo: “OK
A transmissão e o recebimento dos dados seriais são com baud rate de 2400, 8 bits , sem paridade e um stop bit. Ao ser ligada ou resetada todos os relés serão desligados.
O Circuito:
A parte principal é o BASIC Stamp© que é alimentado com uma fonte de +12V no pino 1 (PWR). Os pinos de I/O de O a 5 acionam os relés 1 a 6 através dos transistores Oi & QG, os diodos 01 a DS são para proteção de tensões reversas. Os LED1 a LEDG são para sinalização do estado dos relés (aceso -> rele' ligado). O que você deve estar estranhando é a falta de um driver/receiver para BS232, pois os sinais seriais estão ligados direto ao BASIC Stamp©. O circuito não está errado? Realmente, o BASIC Stamp© trabalha com níveis TTL (O e +5 V) que não são níveis de sinais R$232, mas devido as portas do BASIC Stamp© serem protegidas por diodos conectados à alimentação, colocando-se um resistor em série a corrente é limitada, protegendo o pino de l/O.
Por esse motivo, a PARALLAX observou que a maioria dos canais seriais dos PC irão trabalhar dessa maneira sem maiores problemas. Entretanto, se é necessário que a aplicação esteja a longas distâncias, deve ser considerado o uso de um driver/receiver como o MAX232.
O funcionamento do Programa BASIC.
Podemos concluir que o programa fica extremamente compacto, algumas diferenças serão observadas comparando com um programa BASIC tradicional, a primeira é como os comentários são feitos, em nosso caso utilizamos o apóstrofo ( ' ) sinalizando que tudo que estiver entre ele e o final da linha e comentário (podemos utilizar diretriz “REM”, mas o apóstrofo é bem mais prático). Outra diferença é que as linhas são identificadas por labels e não por números como no BASIC tradicional. Um label é identificado com a colocação de dois pontos ao final de uma palavra.
O BASIC Stamp© possui 16 bytes de RAM para as variáveis que são divididas em words, bytes e bits, a tabela abaixo mostra os nomes das variáveis e suas divisões:
O nosso programa utiliza as variáveis: Dirs, Pins, b0, b1, b3 e b4. A variável Dirs define os pinos de I/O como entrada ou saída, o binário O (o símbolo % na frente de um número sinaliza número binário) sinaliza que o port é entrada ou 1 que é saída, em nosso caso os ports 0 a 5 serão saída e os 6 e 7 serão entrada.
A variável Pins é a imagem dos pinos de I/O, ou seja, todo dado nela escrito será colocado no port de I/O (se a configuração de Dirs estiver para saída) ou será do port de l/O (se a configuração de Dirs estiver para entrada). A variável b0 armazena o comando de ligar ou desligar o relé, cujo número está armazenado na variável b1, as variáveis b3 e b4 são usadas para converter a variável b1 que esta' em ASCII para um número binário que acionará o relé correspondente.
O BASIC Stamp© tem internamente uma UART (Universal Asynchronous Receiver e Transmiter) que pode ser usada em qualquer pino de l/O, ela trabalha com baud de 300 a 2400. 8 bits, sem paridade e um stop bit. Em nosso programa as instruções SERIN e SEROUT utilizam essa UART.
A instrução serin 7, n2400, (“BS_"), b0, b1 configura o pino 7 de l/O para receber dados serialmente com baud de 2400. A string “ BS_ “ é um condicionador, a instrução só continua se receber essa string. Resumindo, uma vez na instrução, o BASIC Stamp© espera receber a string “BS_", se recebida recebe mais dois bytes em ASCII e armazena em b0 e M e prossegue para a próxima instrução. Se nenhum dado ou se a string “BS_” não for enviada, o BASIC Stamp© ficará executando essa instrução.
A instrução serout 6, n2400, (13, 10, “BS_", b0, b1, RECEBIDO", 10,13) configura o pino 6 de I/O para enviar dados serialmente com baud de 2400, 13 é a representação decimal de “carriage return" e 10 a representação de line feed. Quando é enviado um carriage return e line feed para o terminal ele posicionará o cursor na coluna 1 e na linha inferior à que estava, os dados entre aspas são enviados como caracteres ASCII.
Após ter recebido o comando pela instrução senin, o BASIC Stamp© o envia de volta ao PC pela instrução serout junto com a string “ RECEBIDO” para confirmar a recepção. Ima vez com o comando e o número do relé armazenado nas variáveis b0 e b1, serão utilizadas as instruções lookdown e lookup para transformar o número do relé que foi recebido em ASCII, para um número binário que acionará o relé através do port correspondente.
A instrução lookdown b1, (“0”, “1”, “2”, “3”, “4”, “5”, “6”, “T”), b3 faz uma comparação do dado armazenado em b1 com os dados da tabela que está entre parênteses. Quando o dado for igual é armazenado a sua posição em hexadecimal (em nosso caso vai de $0 a $7) em b3, se não houver comparação, a variável b3 é zerada. Suponha que o número do relé recebido é 5 (não esquecer que esse número foi recebido em ASCII) que está na posição 5 da tabela, então o número armazenado em b3 será $5 (hexadecimal), mas para acionar o relé 5 (ver esquema) necessitamos interferir no port 4 de I/O em binário %0001000 ou em hexadecimal $10.
Usamos a instrução lookup b3, ($0, $1, $2, $4, $8, $10, $20, $3F), b4 que busca o valor apontado por b3 dentro da tabela e armazena em b4, em nosso exemplo, como b3 está armazenado $5 colocará o valor $10 em b4.
As instruçõesif b0 =“L” then liga e if b0: “D" then desliga, decidem qual é o comando a ser feito, se b0 for diferente de “L” e “D” não é um comando válido e retorna ao início do programa utilizado a instruçãogoto loop . A instrução pins: pins I b4 (I é símbolo de barra vertical) liga o relé correspondente e mantém os outros no estado em que estavam e a instrução pins: pins &/b4 desliga o relé correspondente e mantém os outros no estado em que estavam.
FALANDO COM O PC:
Para falar com o PC antes de mais nada você deve fazer um cabo de comunicação entre a placa e o conector do PC, abaixo você tem os dois tipos de conectores mais comuns, as linhas em pontilhado são ligações que alguns programas exigem para estabelecer comunicação.
Agora configure o software para um baud rate de 2400, 8 bits sem paridade e um stop bit e configure para modo terminal, (certifique-se que você não tem nenhum modem ou mouse selecionado para a porta serial que você escolheu). Configure também para “LOCAL ECHO” para ver o que está digitando. No caso do Windows vá para o acessório “TERMINAL”, configure com as opções acima e pronto estará no ar!
Quando digitar os comandos, digite exatamente como na tabela, sem incluir espaços ou letras minúsculas, se isto for feito, o Basic Stamp® ignorará os comandos.
Podem ser usados também programas em PASCAL, C, VISUAL BASIC ou BASIC, para enviar os comandos, não esquecendo de fazer as configurações necessárias.
OUTROS USOS:
Essa mesma placa pode ser usada (sem a necessidade de estar ligada em um PC) para receber os comandos, por exemplo, controlar um painel de luzes neon onde cada conjunto de luzes é aceso em sequências pré-determinadas e o processo é repetitivo, portanto, não há necessidade de estar conectado serialmente a um PC.
O programa abaixo é um exemplo muito simples, ele liga um relé de cada vez em um intervalo de 0,5 segundos e quando todos estão ligados, apaga todos e começa tudo novamente. Você pode fazer o seu próprio programa e gerar efeitos especiais.
Podemos concluir que essa placa pode ser utilizada em várias aplicações mudando somente a programação.
O intuito é mostrar que o BASIC Stamp© pode ser usado em controles complexos e simples. Outras aplicações serão enfocadas oportunamente.
Artigo e protótipos elaborados por: Luiz Henrique Corrêa Bernardes