Você está na página 1de 285

O que é um Microcontrolador?

Guia do estudante

VERSÃO 3.0
GARANTIA
Troca em decorrência de defeito funcional
O consumidor terá, nos casos de vício ou defeito do produto, o prazo de até 90 dias para bens
duráveis para solicitar a assistência técnica ou troca do mesmo.
Se o produto adquirido apresentar defeito funcional, será feito o reparo ou a substituição do
produto por outro igual ao descrito em sua nota fiscal. A BS Educacional tem até trinta (30)
dias corridos, a contar da data do recebimento do seu produto em nossa fábrica. Após esse
prazo, você poderá optar pela troca por outro produto similar, em perfeita condições de uso
ou restituição corrigida do valor pago.

Troca por conta de avaria no produto


Se você receber o produto adquirido, avariado no transporte, será feita a substituição do
produto avariado por outro produto igual ao descrito em sua nota fiscal.
Preferencialmente recuse a entrega se notar que o mesmo encontra-se avariado. Caso
contrário entre imediatamente em contato com a BS Educacional.

Recebimento de produto em desacordo com o pedido


Caso você receber um produto diferente do adquirindo, será feita a substituição desse
produto por outro produto igual ao que foi solicitado no pedido.
Se você detectar no ato da entrega que o produto está em desacordo com o que foi
solicitado, recuse a entrega imediatamente e contate a BS Educacional. Caso contrário, o
produto deverá ser devolvido sem manuseio, com todos os itens e acompanhado de cópia
da nota fiscal. A troca do produto acontecerá somente após o recebimento e análise das
condições do produto devolvido.
GARANTIA DE 7 DIAS COM SEU DINHEIRO DE VOLTA
Asseguramos o direto de devolução contemplado no código de defesa do consumidor que
permite a desistência da compra no prazo de 7 dias a contar do ato de recebimento do
produto. Se o prazo citado vencer em um dia não útil, será automaticamente prorrogado
para o primeiro dia útil seguinte, não sendo aceitas solicitações realizadas além desse
prazo.
Para sua segurança, certifique-se que o produto recebido atende suas expectativas antes
de violar a embalagem. Você poderá devolver o produto apenas se ele estiver em sua
embalagem original, sem indícios de uso e com o manual e todos os acessórios que o
acompanham. Constatada divergência, como utilização indevida, ausência de manual,
acessório ou embalagem, a BS Educacional não poderá aceitar a devolução do produto.
Para devolver o produto entre em contato com a BS Educacional explicando o motivo da
devolução e informando o número do pedido ou Nota Fiscal. A BS Educacional enviará
as instruções para o envio do produto a nossa fábrica. A troca do produto ou restituição
do valor, excluindo custos de envio e manuseio, acontecerá somente após o recebimento e
análise das condições do produto devolvido.
Em compras pagas por meio de cartão de crédito, solicitaremos o respectivo estorno
obedecendo o procedimento da administradora de cada bandeira.
Em compras pagas por meio de boleto bancário, a restituição será creditada sempre na
conta corrente de titularidade do cliente que efetuou a compra e em até dez (10) dias úteis
a contar da data de confirmação que o produto devolvido atende os requisitos.

DIREITOS AUTORAIS E MARCAS


Esta documentação está protegida pela Leis de Direitos Autorais 2003-2009 pela Parallax
Inc. Ao fazer o download ou obter uma cópia impressa desta documentação ou software,
você concorda que é para uso exclusivo dos produtos Parallax. Quaisquer outros usos não
são permitidos e podem representar uma violação de direitos autorais para Parallax,
legalmente puníveis de acordo com as leis de direitos autorais e leis de propriedade
intelectual. É expressamente proibido pela Parallax Inc. qualquer duplicação desta
documentação para fins comerciais. A duplicação para uso educacional, no todo ou em
parte, é permitida sujeita às seguintes condições: o material é permitido somente para ser
usado em conjunto com produtos da Parallax, e o usuário pode reaver do aluno somente o
custo da duplicação. Antes de duplicar quaisquer de nossas documentações, em parte ou
na totalidade, para qualquer outro uso, faz-se necessário a aprovação da Parallax.
BASIC Stamp, Board of Education, Boe-Bot, Stamps in Class, e SumoBot são marcas
registradas da Parallax Inc. Assim como, HomeWorkBoard, PING))), Parallax, o logotipo
da Parallax, Propeller e Spin. Se você desejar usar qualquer uma dessas palavras em seu
material eletrônico ou impresso, você deve afirmar que é uma marca registrada da
Parallax Inc. Outros nomes de marcas e produtos aqui mencionados são marcas
comerciais ou marcas registradas de seus respectivos proprietários.
ISBN 9781928982531
3.0.1-11.08.04-HKTP

ISENÇÃO DE RESPONSABILIDADE
A Parallax Inc. não é responsável por danos especiais, acidentais ou consequências,
resultantes de qualquer violação da garantia, ou sob qualquer fundamento jurídico,
inclusive lucros cessantes, tempo de inatividade, fundo de comércio, danos ou
substituição de equipamentos ou propriedade, ou quaisquer custos de recuperação,
reprogramação ou reprodução de quaisquer dados armazenados ou utilizados com
produtos Parallax. A Parallax também não é responsável por qualquer dano pessoal,
inclusive o de vida e saúde, resultante do uso de qualquer um dos nossos produtos. Você
assume a responsabilidade total para a sua aplicação BASIC Stamp, não importando o
risco de vida.

ERRATA
Apesar dos esforços para garantir a precisão dos nossos textos, os erros podem existir.
Ocasionalmente uma folha de errata com uma lista de erros conhecidos e correções para
um determinado texto será postada na página do produto relacionado na
www.parallax.com. Se você encontrar um erro, por favor, envie um e-mail para
editor@parallax.com ou para suporte@bseducacional.com.br.
Página - 5

Índice Analítico
Prefácio ....................................................................................................................... 7
Sobre a versão 3.0 ......................................................................................................... 7
Público ............................................................................................................................ 7
Fóruns de Suporte .......................................................................................................... 8
Recursos para Educadores ............................................................................................ 8
Traduções em Linguas Extrangeiras .............................................................................. 9
Sobre o Autor.................................................................................................................. 9
Colaboradores Especiais ................................................................................................ 9
Capítulo 1: Introdução ............................................................................................. 11
Quantos Microcontroladores Você Viu Hoje? ............................................................... 11
BASIC Stamp 2 – Seu Novo Módulo Microcontrolador ................................................ 11
Invenções Incríveis com Microcontroladores Basic Stamp .......................................... 12
Hardware e Software .................................................................................................... 14
Atividade #1: Obtendo o Software ................................................................................ 14
Atividade #2: Usando a Ajuda Para Configuração do Hardware .................................. 19
Sumário ........................................................................................................................ 21
Capítulo 2: Luzes Acesas e Apagadas (On e Off) ................................................. 24
Luzes Indicadoras......................................................................................................... 24
Fazendo um Diodo Emissor de Luz (LED) Emitir Luz .................................................. 24
Atividade #1: Construindo e Testando um Circuito DE LED ........................................ 25
Atividade #2: Controle de ON/OFF com o BASIC Stamp ............................................. 31
Atividade #3: Contando e Repetindo ............................................................................ 36
Atividade #4: Construindo e Testando o Segundo Circuito DE LED ............................ 39
Atividade #5: Usando a Direção da Corrente para Controlar o LED Bicolor ................ 42
Sumário ........................................................................................................................ 48
Capítulo 3: Entrada Digital – Botões ...................................................................... 52
Encontrados em Calculadoras, Jogos Portáteis e Aplicativos...................................... 52
Recebimento vs. Envio de Sinais de HIGH e LOW ...................................................... 52
Atividade #1: Testando um Botão com um Circuito de LED......................................... 52
Atividade #2: Leitura do Botão com o BASIC Stamp................................................... 55
Atividade #3: Controle por Botão de um Circuito de LED............................................. 58
Atividade #4: Dois Botões Controlando Dois dos Circuitos de LED ............................. 61
Atividade #5: Teste de Tempo De Reação ................................................................... 65
Sumário ........................................................................................................................ 73
Capítulo 4: Controle de Movimento ........................................................................ 77
Movimento Microcontrolado.......................................................................................... 77
Sinais de On/Off e Movimentos do Motor ..................................................................... 77
Introduzindo o Servo..................................................................................................... 77
Atividade #1: Conectando e Testando o Servo ............................................................ 79
Atividade #2: Programa de Teste de Controle do Servo .............................................. 84
Atividade #3: Controle de Tempo de Espera do Servo ................................................ 93
Atividade #4: Controlando Posições com seu COMPUTADOR ................................... 98
Atividade #5: Convertendo Posição de Movimento .................................................... 105
Atividade #6: Servo Controlado Por Botão ................................................................. 108
Sumário ...................................................................................................................... 111
Capítulo 5: Medindo a Rotação ............................................................................. 116
Ajustando os Mostradores e Máquinas de Monitoramento ........................................ 116
O Resistor Variável Sob o Seletor - um Potenciômetro.............................................. 116
Atividade #1: Construindo e Testando o Circuito do Potenciômetro .......................... 117
Atividade #2: Medindo A resistência Ao medir o tempo ............................................. 119
Atividade #3: Lendo um Seletor com o BASIC Stamp................................................ 124
Atividade #4: Controlando o Servo com um Potenciômetro ....................................... 129
Sumário ...................................................................................................................... 136
Capítulo 6: Display Digital ..................................................................................... 140
O Display Digital Cotidiano ......................................................................................... 140
O Que é um Display de 7 Segmentos? ...................................................................... 140
Atividade #1: Construindo e Testando O Display de LED de 7 Segmentos ............... 141
Atividade #2: Controlando o Display de LED de 7 Segmentos .................................. 144
Página - 6

Atividade #3: Exibindo Dígitos .................................................................................... 146


Atividade #4: Exibindo a Posição de um Dial ............................................................. 152
Sumário ...................................................................................................................... 156
Capítulo 7: Medição de Luz ................................................................................... 160
Dispositivos que Contém Sensores de Luz ................................................................ 160
Introdução Do Fototransistor ...................................................................................... 162
Atividade #1: Construindo e Testando o Medidor de Luz ........................................... 163
Atividade #2: Rastreando Eventos de Luz.................................................................. 166
Atividade #3: Medições Gráficas de Luz (Opcional) ................................................... 173
Atividade #4: Simples Medidor de Luz ....................................................................... 175
Atividade #5: Saídas ON/OFF do Fototransistor ........................................................ 184
Atividade #6: Para Diversão - Meça a Luz Externa com um LED .............................. 191
Sumário ...................................................................................................................... 195
Capítulo 8: Frequência e Som ............................................................................... 200
O Seu Dia e Bips Eletrônicos ..................................................................................... 200
Microcontroladores, Alto-Falantes e Sinais On/Off..................................................... 200
Apresentando o Speaker Piezoelétrico ...................................................................... 200
Atividade #1: Criando e Testando o Alto-Falante ....................................................... 200
Atividade #2: Sons de Ação........................................................................................ 202
Atividade #3: Notas Musicais e Canções Simples...................................................... 207
Atividade #4: Música com Microcontrolador ............................................................... 211
Atividade #5: Toques com RTTTL .............................................................................. 222
Sumário ...................................................................................................................... 232
Capítulo 9: Construindo Blocos Eletrônicos ....................................................... 236
Esses Pequenos CHIPS Pretos ................................................................................. 236
Expanda Seus Projetos com Circuitos Periféricos Integrados ................................... 237
Atividade #1: Controle do Fluxo Atual com um Transistor.......................................... 237
Atividade #2: Introdução ao Potenciômetro Digital ..................................................... 240
Sumário ...................................................................................................................... 247
Capítulo 10: Protótipos De Suas Próprias Invenções ........................................ 252
Aplicando o que Você Sabe com Outras Peças e Componentes ............................. 252
Protótipo de um Micro Sistema de Segurança ........................................................... 253
Atividade #1: Da Ideia a Prova de Conceito ............................................................... 254
Atividade #2: Construir e Testar Cada Circuito Individualmente ................................ 256
Atividade #3: Organizar a Codificação de Tarefas em Pequenos Pedaços ............... 257
Atividade #4: Documentar o Seu Código!................................................................... 261
Atividade #5: Dê ao Seu App uma Surpreendente Nova Funcionalidade .................. 263
Atividade #6: Superando Obstáculos do Projeto ........................................................ 264
Atividade #7: Qual Será a Próxima?........................................................................... 269
Sumário ...................................................................................................................... 272
Apêndice A: Lista de Peças e Opções de Kit ...................................................... 274
Opções de Kit Completo ............................................................................................. 275
Apêndice B: Mais Informações Sobre Eletricidade ............................................ 278
Atividade Bõnus: Lei de Ohm, Voltagem e Corrente .................................................. 279
Apêndice C: Sumário do Formato RTTTL............................................................ 285
Página - 7

Prefácio
Esse texto responde a pergunta “O que é o Microcontrolador”, mostrando aos alunos
como eles podem projetar suas invenções de modo personalizado e inteligente com o
módulo microcontrolador BASIC Stamp®. da Parallax Inc. As atividades deste texto
incorporaram uma variedade de divertidas e interessantes experiências projetadas para
trabalhar à imaginação do aluno, utilizando movimento, luz, som e feedback tátil para
explorar novos conceitos. Essas atividades apresentam aos alunos uma série de
princípios básicos nas áreas de programação de computadores, eletricidade e eletrônica,
matemática e física. Muitas destas atividades facilitam a apresentação prática de
projetos utilizados por engenheiros e técnicos na criação de máquinas e aparelhos
modernos, usando peças genéricas baratas O que é um microcontrolador? é a porta de
entrada de dados para os programas Stamps in Class. Para ver a série completa, que
inclui títulos como Robótica com o Boe-Bot, sensores inteligentes e aplicações, controle
de processos, e muito mais, visite www.parallax.com/Education.

SOBRE A VERSÃO 3.0


Esta é a primeira revisão deste título desde 2004 cujas principais alterações incluem:

• A substituição do fotoresistor sulfureto de cádmio por um sensor de luz


compatível com RoHs de um tipo que vai ser mais comum no design do produto
daqui me diante. Isso exigiu revisões dos capítulos 7 e 10, e ajustes em outros
capítulos.
• Aperfeiçoamento das atividades e ilustrações de controle do servo no Capítulo 4.
• Mover parte do capítulo 1 “Configurações e Testes", e os apêndices de hardware
e solução de problemas para o arquivo de ajuda. Isso foi feito para suportar
conexões de hardware Serial e USB, e outras conexões de programação em
nossos produtos e na expansão de tecnologias. Isto também permite uma
manutenção dinâmica do hardware e resolução de problemas.
• A remoção de referências para o CD Parallax, excluída de nosso kits, foi no
intuito de redução e desperdício para garantir que os clientes possam baixar o
mais recente software BASIC Stamp Editor e os drivers USB disponíveis para
seus sistemas operacionais.

Além disso, foram corrigidos pequenos artigos de errata notados na versão anterior
(2.2). O material ainda aponta para os mesmos objetivos, e todos os conceitos de
programação são os mesmos e os comandos são cobertos juntamente com alguns novos.
Finalmente, para facilitar a utilização, os números das páginas foram alterados para a
página em PDF e os números das páginas físicas são os mesmos para facilidade de
utilização.

PÚBLICO
Este texto foi elaborado para ser uma porta de entrada para o aprendizado da tecnologia,
e uma curva de fácil aprendizagem para implantação de programas e introdução de
robótica. O texto é organizado para ser usado pelo maior e variado número de
estudantes possível, bem como por alunos independentes. Estudantes do ensino médio
podem experimentar os exemplos, neste texto, de uma forma guiada, basta seguir as
instruções demarcadas com a supervisão do instrutor. Por outro lado, a compreensão dos
alunos de pré-engenharia e habilidades para resolver problemas podem ser testadas com
Página - 8

perguntas, exercícios e projetos (com soluções) em cada resumo de capítulo. O aluno


independente pode trabalhar em seu próprio ritmo, e obter ajuda através dos fóruns
Stamps in Class citados abaixo.

FÓRUNS DE SUPORTE
A Parallax mantém fóruns livres e moderados para nossos clientes, cobrindo uma
variedade de temas:
• Propeller Chip: para todas as discussões relacionadas com o microcontrolador
Propeller multicore e ferramentas para desenvolvimento da linha de produtos.
• BASIC Stamp: ideias de projetos, suporte e tópicos relacionados para todos os
modelos BASIC Stamp da Parallax.
• Microcontrollers SX: Assistência técnica para todos os chips SX, incluindo o
compilador SX / B e a ferramenta SX-Key.
• Sensors: Discussão relativa à ampla gama de sensores da Parallax, e interface
entre os sensores com microcontroladores da Parallax.
• Stamps in Class: estudantes, professores, clientes poderão discutir aqui materiais
educativos e projetos escolares da Parallax.
• Robotics: Para todos os robôs Parallax e robôs personalizados construídos com
processadores e sensores da Parallax.
• The Sandbox: Tópicos relacionados ao uso de produtos Parallax, somente,
inespecífico para os outros fóruns.
• Completed Projects: Publique aqui seus projetos concluídos, elaborados com os
produtos da Parallax.
• HYDRA System and Propeller Game Development: Discussão e assistência
técnica para o kit de desenvolvimento de jogo HYDRA e programação de
microcontrolador Propeller relacionado.

RECURSOS PARA EDUCADORES


Temos uma grande variedade de recursos neste texto elaborados para apoiar os
educadores.

Stamps in Class “Mini Projetos”


Para complementar nossos textos, nós fornecemos um banco de projetos para a sala de
aula. Projetado para envolver os alunos, cada “Mini Projeto" contém um completo
código de fontes, explicações de "Como ele Funciona" (“How it Works”), esquemas e
diagramas de fiação ou fotos para um dispositivo que o estudante poderá utilizar.
Muitos projetos têm um vídeo introdutório, para promover o auto estudo nos alunos
mais interessados em eletrônica e programação. Basta seguir o link Stamps in Class
“Mini Projetos " (“Mini Projects”) na www.parallax.com/Education.

Cursos para Educadores


Estes cursos, práticos e intensivos, de 1 ou 2 dias, para educadores são ministrados por
engenheiros da Parallax ou por professores experientes usando materiais educativos da
Parallax em suas salas de aula. Para mais detalhes visite → Educators Courses.

Fórum para Educadores da Parallax


Neste fórum privado, gratuito, os educadores podem fazer perguntas e compartilhar suas
experiências com o uso de produtos da Parallax em suas salas de aula. Aqui também são
Página - 9

postados materiais educativos complementares. Para se inscrever, envie um e-mail para


obter instruções para education@parallax.com; será necessário o envio de certificado de
educador.

Materiais Educativos Suplementares


Selecione os textos educativos da Parallax para ter um conjunto inédito de questões e
soluções postadas em nosso fórum para educadores (“Parallax Educators Forum”);
convidamos os educadores a copiar e modificar esse material à vontade para a
preparação rápida de lição de casa, questionários e testes. Aqui também podem ser
publicadas apresentações em PowerPoint e material de teste preparados por outros
educadores.

Permissões de Direitos Autorais para Uso Educacional


Não é necessário licença de instalação para o download, duplicação e instalação de
software para uso educacional com produtos Parallax como é necessário em muitas
escolas ou computadores domésticos. Nossos textos Stamps in Class e Manual BASIC
Stamp estão disponíveis gratuitamente para downloads em PDF e podem ser
reproduzidos, desde que seja para uso educacional, exclusivamente com produtos de
microcontroladores Parallax e o estudante é cobrado não mais que o custo de
duplicação. Os arquivos PDF não são fechados, possibilitando a seleção de textos e
imagens para preparar apostilas, transparências ou apresentações do PowerPoint.

TRADUÇÕES EM LINGUAS EXTRANGEIRAS


Muitos de nossos textos Stamps in Class foram traduzidos para outras línguas, estes
textos disponíveis para download gratuitamente e sujeitos a mesma permissão de
direitos autorais para uso educacional como em nossas versões originais. Para ver a lista
completa, clique nos links Tutorials & Translations em www.parallax.com / Education.
Os textos foram preparados, em coordenação com o programa de tradutores voluntários
da Parallax. Se você estiver interessado em participar do nosso programa de tradutor
voluntário, envie um e-mail para translations@parallax.com.

SOBRE O AUTOR
Andy Lindsay juntou-se a Parallax Inc. em 1999, e, desde então foi autor de oito livros e
numerosos artigos e documentos de produtos para a empresa. As três últimas versões
“Do que é um microcontrolador?” foram criadas e atualizadas com base em observações
e comentários educativos que Andy coletou enquanto viajava pelo país e pelo exterior
ministrando cursos educacionais em eventos. Andy estudou engenharia elétrica e
eletrônica na Universidade Estadual da Califórnia, Sacramento, e é um autor que
contribuiu para diversos trabalhos que abordam o tema de microcontroladores em pré-
engenharia de currículos. Quando não está escrevendo material educativo, Andy faz
engenharia de produto e aplicação para a Parallax.

COLABORADORES ESPECIAIS
A equipe da Parallax montada para preparar esta edição inclui: departamento de
liderança e excelência por Aristides Alvarez; projeto aula e redação técnica por Andy
Lindsay; a arte é coberta por Jen Jacobs; ilustrações gráficas por Rich Allred e Andy
Lindsay; revisão técnica por Jessica Uelmen; sutilezas, edição e layout por Stephanie
Lindsay. Agradecimentos especiais a Ken Gracey, fundador do Basic Stamp no
Página - 10

programa Class, e Tracy Allen e Phil Pilgrim pela consulta na seleção do sensor de luz
utilizado nesta versão que substitui o sulfureto de cádmio fotoresistor.

Muitas pessoas, aos quais ainda estamos gratos, contribuíram com edições anteriores
para o desenvolvimento do “O que é um Microcontrolador?”. A Parallax deseja
agradecer novamente a Robert Ang por sua revisão inicial completa e detalhada e ao já
falecido veterano engenheiro e estimado cliente Sid Weaver pela revisão criteriosa.
Obrigado também aos autores de Stamps in Class Tracy Allen (Aplicação de Senhores)
e Martin Hebel (Controle de Processos) por sua revisão e recomendações. Andy
Lindsay agradece a seu pai Marshall e ao cunhado Kubilay pôr os seus conselhos
musicais especializados e sugestões.
Página - 11

Capítulo 1: Introdução
QUANTOS MICROCONTROLADORES VOCÊ VIU HOJE?
Um microcontrolador é um tipo de computador em miniatura que você pode encontrar
em todos os tipos de dispositivos eletrônicos. Alguns exemplos de produtos cotidianos,
têm microcontroladores embutidos e são mostrados na Figura 1- 1. Se eles têm botões e
um visor digital, é possível que eles também tenham um cérebro microcontrolador
programável.

Figura 1-1
Exemplos cotidianos
de dispositivos que
contenham
microcontroladores

Tente fazer uma lista contando quantos dispositivos com microcontroladores que você
usa em um dia normal. Aqui estão alguns exemplos: se o seu rádio relógio disparar de
manhã e você apertar o botão “soneca” algumas vezes, a primeira coisa que você estará
fazendo no seu dia é interagir com um microcontrolador. Aquecer um pouco de comida
no forno de micro-ondas e fazer uma chamada em um telefone celular também
envolvem interação com microcontroladores. Isso é apenas o começo. Aqui estão mais
alguns exemplos: ligar a televisão com um controle remoto manual, jogos portáteis, usar
uma calculadora. Todos esses dispositivos têm microcontroladores dentro deles que
interagem com você.

BASIC STAMP 2 – SEU NOVO MÓDULO MICROCONTROLADOR


O módulo BASIC Stamp® 2 da Parallax Inc., mostrado na Figura 1- 2, tem um
microcontrolador construído para ele, que é o chip preto mais largo. O resto dos
componentes do módulo BASIC Stamp também é encontrado em aparelhos de consumo
que você usa todos os dias. Juntos, eles são corretamente denominados sistema de
computador embutido. Este nome é quase sempre abreviado como "sistema embutido".
Esses módulos são, frequentemente, chamados de "microcontroladores".

As atividades deste texto irão guiá-lo através da construção de circuitos semelhantes aos
encontrados em eletrodomésticos e aparelhos de alta tecnologia. Você também
escreverá programas de computador que o módulo BASIC Stamp irá executar. Estes
programas farão o módulo BASIC Stamp monitorar e controlar esses circuitos para que
eles executem funções úteis.

Figura 1-2
Módulo
Microcontrolador
BASIC Stamp 2
Página - 12

Neste texto, "BASIC Stamp" refere-se ao módulo microcontrolador BASIC Stamp®


2. Projetado e fabricado pela Parallax Incorporated, o nome deste módulo é
comumente abreviado para BS2, e é o primeiro da série de módulos apresentados na
Figura 1- 3. Cada um dos outros módulos é um pouco diferente, com uma
velocidade mais elevada, mais memória, e funções extras, ou algumas combinações
destas características adicionais. Para maiores informações, siga o link "Compare
BASIC Stamp modules" em www.parallax.com/BasicStamp.
Figura 1-3
Modelos BASIC
Stamp 2, da
esquerda para a
direita: BS2, BS2E,
BS2SX, BS2P24,
BS2P40, BS2pe,
BS2px

INVENÇÕES INCRÍVEIS COM MICROCONTROLADORES BASIC STAMP


Aparelhos de consumo não são as únicas coisas que contêm microcontroladores. Robôs,
máquinas, projetos aeroespaciais e outros dispositivos de alta tecnologia também são
construídos com microcontroladores. Vamos dar uma olhada em alguns exemplos que
foram criados com módulos BASIC Stamp.

Os robôs foram projetados para fazer tudo, desde ajudar os alunos a aprender mais sobre
microcontroladores, como cortar a grama, e resolver complexos problemas mecânicos.
A Figura 1- 4 mostra um exemplo de dois robôs. Em cada um destes robôs, os alunos
utilizam o BASIC Stamp 2 para ler sensores, controlar motores e para comunicação com
outros computadores. O robô da esquerda é o robô Boe-Bot® da Parallax Inc. Os
projetos do livro Robótica com o Boe-Bot podem ser resolvidos com o Boe-Bot, depois
que você trabalhar com as atividades deste texto. O da direita é chamado de um
submarino ROV (veículo operado remotamente) e foi construído e testado no Instituto
MATE (Educação em Tecnologia Avançada da Marinha) pelos professores de verão. Os
operadores veem na TV o que o ROV vê através de uma câmera de vídeo e podem
controlá-lo com uma combinação de um controle manual e um laptop. Seu BASIC
Stamp mede a profundidade e a temperatura, controla o motor de impulsão vertical, e
troca informações com o laptop. O MATE coordena competições regionais e
internacionais de ROV para estudantes de variados níveis, desde o ensino médio até a
universidade.
Figura 1-4
Robôs educacionais
Robô Boe-Bot (à
esquerda) e
ROV no MATE pelos
professores do Instituto
de Verão (à direita,
www.marinetech.org)

Outros robôs resolvem problemas mais complexos, tais como o voo do robô autônomo
de controle remoto mostrado no lado esquerdo da Figura 1-5. Este robô foi construído e
testado por estudantes de engenharia mecânica na Universidade da Califórnia, em
Irvine. Eles usaram um módulo BASIC Stamp para ajudá-los na comunicação com um
sistema de posicionamento global por satélite (GPS), para que o robô pudesse saber a
Página - 13

sua posição e altitude. O BASIC Stamp também lê o nível de sensores e controla os


ajustes do motor para manter o robô voador corretamente. A centopeia robótica, à
direita da Figura 1-5, foi desenvolvido por um professor da Universidade Técnica de
Nanyang, de Singapura. Ele tem mais de 50 módulos BASIC Stamp a bordo, e todos
eles se comunicam uns com os outros em uma elaborada rede que ajuda a controlar e
orquestrar o movimento de cada conjunto de pernas. Robôs como esse, não só nos
ajudam a entender melhor projetos na natureza como, eventualmente, podem ser usados
para explorar locais distantes ou mesmo outros planetas.

Figura 1-5
Robôs de pesquisa
que contêm
microcontroladores

Voo do robô de
controle remoto
autônomo na UC
Irvine (à esquerda) e
do Projeto Centopeia
na Universidade de
Nanyang (à direita)

Com a ajuda de microcontroladores, os robôs também podem assumir tarefas do dia-a-


dia, tais como cortar a grama. O módulo BASIC Stamp dentro do cortador de grama
mostrado na Figura 1-6 ajuda o robô a permanecer dentro dos limites da relva, e
também lê os sensores que detectam obstáculos e controla os motores que o fazem
mover.

Figura 1-6
Módulo
Microcontrolador
BASIC Stamp 2

Microcontroladores são também utilizados em pesquisas científicas de alta tecnologia e


projetos aeroespaciais. A estação meteorológica mostrada no lado esquerdo da Figura 1-
7 é usada para coletar dados ambientais relacionados à degradação dos recifes de coral.
O módulo BASIC Stamp dentro dos recifes de coral reúne dados a partir de uma
variedade de sensores e armazena-os para posterior recuperação pelos cientistas. O
submarino no centro é um veículo de exploração submarina, e seus propulsores,
câmeras e luzes são todos controlados por microcontroladores BASIC Stamp. O foguete
mostrado à direita fazia parte de uma competição para lançar um foguete de propriedade
privada para o espaço. Ninguém ganhou o concurso, mas este foguete quase fez isso! O
BASIC Stamp controlou quase todos os aspectos da sequência de lançamento.
Página - 14

Figura 1-7
Exemplos de
microcontroladores
ambientais e aeroespaciais

Coleta de dados ecológicos


por Sistema EME (à
esquerda), pesquisa
submarina feita pelo Instituto
Harbor Branch (centro), e
lançamento de teste
aeroespacial JP (à direita)

De aparelhos domésticos comuns até aplicações científicas e aeroespaciais, você vai


precisar do básico de um microcontrolador para iniciar projetos como estes introduzidos
aqui. Ao trabalhar com as atividades deste livro, você vai começar a experimentar e
aprender a usar uma variedade de blocos de construção encontrada em todas essas
invenções de alta tecnologia. Você vai construir circuitos para displays, sensores e
controladores de movimento. Você vai aprender como conectar esses circuitos para o
módulo BASIC Stamp 2 e, em seguida, escrever programas de computador que o fazem
controlar movimentos, exibir e coletar dados dos sensores. Ao longo do caminho, você
vai aprender importantes conceitos e técnicas de informática e de programação
eletrônica. Quando você estiver apto, poderá perceber sozinho, um meio de inventar um
dispositivo para seu próprio projeto.

HARDWARE E SOFTWARE
Começar com módulos microcontroladores BASIC Stamp é semelhante a começar com
um novo PC ou laptop. As primeiras coisas que a maioria das pessoas tem que fazer é
tirá-lo da caixa, ligá-lo, instalar e testar alguns softwares, e talvez até mesmo escrever
algum software próprio, usando uma linguagem de programação. Se esta é sua primeira
vez usando um módulo BASIC Stamp, você vai fazer todas essas mesmas atividades. Se
você estiver em aula, o hardware poderá já estar pronto para você. Se for este o caso, o
professor pode ter outras instruções. Se não, este capítulo irá guiá-lo, passo a passo, para
que o seu novo microcontrolador BASIC Stamp ligue e funcione.

ATIVIDADE #1: OBTENDO O SOFTWARE


O BASIC Stamp Editor (versão 2.5 ou superior) é o software que você vai usar na
maioria das atividades e projetos neste texto. Você vai usar este software para escrever
programas que o módulo BASIC Stamp executará. Você também pode usar este
software para visualizar mensagens enviadas pelo BASIC Stamp que ajudam a entender
o que ele capta.

Requisitos do Sistema do Computador


Você vai precisar de um computador pessoal para executar o software BASIC Stamp
Editor. Seu computador precisa ter as seguintes características:

• Microsoft Windows 2000 ou sistema operacional mais recente


• Porta Serial disponível ou porta USB
• Acesso à Internet e um navegador de Internet
Página - 15

Baixar o Software a Partir da Internet


É importante, se possível, usar sempre a versão mais recente do software BASIC Stamp
Editor. O primeiro passo é ir até o site internacional da Parallax e baixar o software (em
inglês), ou se preferir utilize o site da BS Educacional e procure por Suporte &
Downloads (www.bseducacional.com.br).

 Usando um navegador da Web, vá para www.parallax.com/basicstampsoftware


(Figura 1-8).

Figura 1-8
Página de download
do BASIC Stamp
Editor no
www.parallax.com/
basicstampsoftware

Este é o local para


fazer o download da
versão mais recente
do software, em
inglês.

 Use o “Click Here to Download” para obter a versão mais recente do software
BASIC Stamp Editor Windows (Figura 1-9).

Figura 1-9
Página de download
do software BASIC
Stamp Editor.

Clique no botão para


começar o download.

 A janela de download do arquivo será aberta, perguntando se você deseja


executar ou salvar este arquivo (Figura 1- 10). Clique em Salvar.
Página - 16

Figura 1-10
Janela do arquivo de
download

Clique em Salvar
(Save) e salve o
arquivo no seu
computador.

 Use o campo Salvar em (Save in) para escolher o local em seu computador onde
o arquivo de instalação será salvo, em seguida, clique no botão Salvar (Figura 1-
11).

Figura 1-11
Janela Salvar como
(Save as)

Escolha um local em
seu computador para
salvar o software de
instalação, então
clique em Salvar
(Save).

 Quando o download terminar, clique em Executar (Figura 1-12.)


 Siga as instruções que aparecem. Ao aparecer mensagens do sistema operacional
pedindo para confirmar se você deseja continuar com a instalação, concorde.

Figura 1-12
Baixe a mensagem
completa

Clique em Executar
(Run).

Se for solicitado,
sempre confirme
que deseja
continuar.

 Será aberta uma janela do instalador BASIC Stamp Editor (Figura 1-13). Clique
em Avançar e siga as instruções, aceitando todos os padrões.
Página - 17

Figura 1-13
Janela do instalador
do BASIC Stamp
Editor

Clique em avançar
(Next)

 IMPORTANTE: Quando a mensagem “Instalar o Drive USB” (Install USB


Driver) for exibida (Figure 1-14), assinale a opção instalar automaticamente /
atualizar o driver (recomendado) e clique em Avançar.

Figura 1-14
Mensagem de
instalação do drive
USB

Deixe a caixa
marcada e clique
em Avançar
(Next).

 Quando a mensagem "Pronto para iniciar a Instalação” (Ready to Install the


Program) aparecer (Figura 1-15), clique no botão Instalar. Uma barra de
progresso pode aparecer, e isso pode levar alguns minutos.

Página - 18

Figura 1-15
Pronto para iniciar
a instalação

Clique em instalar
(Install) para
avançar.

Neste ponto, uma janela adicional pode aparecer atrás da janela atual, enquanto os
drivers USB estão sendo atualizados. Esta janela fechará automaticamente, quando a
instalação do driver for concluída. Caso você não veja esta janela, não significa que há
problemas.

Sobre os drivers USB. Os drivers USB instalados com o BASIC Stamp


Windows Editor são, por padrão, necessários para usar qualquer hardware
Parallax conectado à porta USB do seu computador. VCP significa em inglês
porta virtual COM e vai permitir que a porta USB do seu computador seja tratada
como uma porta serial padrão RS232 pelo hardware Parallax.
Controladores USB para diferentes sistemas operacionais. Os drivers USB
VCP inclusos no software BASIC Stamp Windows Editor são somente para
determinadas versões do sistema operacional Windows. Para maiores
informações, visite o site www.parallax.com/usbdrivers.

 Quando a janela informar que a instalação foi concluída com sucesso, clique em
Concluir (Finish) (Figura 1-16).

Figura 1-16
Instalação do
BASIC Stamp
Editor concluída

Clique em
Concluído
(Finish).
Página - 19

ATIVIDADE #2: USANDO A AJUDA PARA CONFIGURAÇÃO DO


HARDWARE
Nesta seção você vai executar o arquivo de Ajuda do BASIC Stamp Editor. Dentro do
arquivo de Ajuda você vai aprender sobre as diferentes placas de programação BASIC
Stamp, disponíveis para os programas Stamps in Class e determinar qual delas você está
usando. Então, você vai seguir os passos da ajuda para conectar o seu hardware ao seu
computador e testar o seu sistema de programação BASIC Stamp.

Executando o Editor do BASIC Stamp pela primeira vez

 Se você ver o ícone do BASIC Stamp Editor no seu desktop, clique duas vezes
nele (Figura 1-17).

 Ou, clique no menu Iniciar do seu computador, em seguida selecione Programas


 Parallax Inc  BASIC Stamp Editor 2.5  BASIC Stamp Editor 2.5.

Figura 1-17
BASIC Stamp Editor
Desktop Icon

Dê um duplo clique
para iniciar o
programa.

 Na barra de ferramentas do BASIC Stamp Editor clique em Ajuda (Help) na


barra de ferramentas (Figura 1-18) e selecione BASIC Stamp Help.

Figura 1-18
Abrindo o menu Ajuda
(Help)

Clique Ajuda (Help), e


escolha o BASIC
Stamp Help a partir do
menu drop-down.
Página - 20

Figura 1-19: Menu Ajuda do BASIC Stamp Editor

 Clique no link “Começando com Stamps in Class” (“Getting Started with


Stamps in Class”) na parte inferior da página Bem-vindo (Welcome) como
mostrado no canto inferior direito da Figura 1-19.

Seguindo as Instruções do Arquivo de Ajuda (HELP)


A partir daqui, você vai seguir as instruções do arquivo de Ajuda para completar estas
tarefas:

• Identificar qual placa de desenvolvimento BASIC Stamp você está usando


• Ligar sua placa de desenvolvimento ao seu computador
• Testar sua conexão de programação
• Solucionar problemas de sua conexão de programação, se necessário
• Escrever seu primeiro programa PBASIC para seu BASIC Stamp
• Desligar seu hardware quando terminar

Quando você tiver concluído as atividades no arquivo de Ajuda, retorne para o livro e
continue com o sumário abaixo antes de passar para o Capítulo 2.
Página - 21

O que eu faço se eu ficar preso em alguma parte?


Se você tiver problemas ao seguir as instruções neste livro ou no arquivo Ajuda,
você tem muitas opções para obter suporte técnico gratuito:
• Fóruns: inscreva-se e poste uma mensagem gratuitamente para nós no
fórum Stamps in Class em forums.parallax.com (em inglês) ou na
Central de Aprendizado da BS Educacional
(www.bseducacional.com.br).
• E-mail: mande um e-mail para support@parallax.com ou
suporte@bseducacional.com.br para suporte em português.
• Telefone: Brasil – ligue para (011) 2533-9478 ou Estados Unidos - +1
888-99-STAMP (888 997-8267). Ou outros ligue para (916) 624-8333.
• Mais recursos: Visite www.parallax.com/support ou
www.bseducacional.com.br/Central de Aprendizado

SUMÁRIO
Este capítulo guiou você através do seguinte:
• Uma introdução a alguns dispositivos que contêm microcontroladores
• Introdução ao módulo BASIC Stamp
• Tour por algumas invenções interessantes feitas com módulos BASIC Stamp
• Onde obter o software gratuito BASIC Stamp Editor que você vai usar em
praticamente todas as experiências neste texto
• Como instalar o software BASIC Stamp Editor
• Como usar o módulo BASIC Stamp, Board of Education, e HomeWork Board
• Como configurar o hardware BASIC Stamp
• Como testar seu software e hardware
• Como escrever e executar um programa PBASIC
• Usando os comandos DEBUG e END
• Usando o CR caractere de controle e DEC formatador
• Breve introdução ao código ASCII
• Como desligar a alimentação do seu Board of Education e HomeWork Board
quando terminar suas atividades.

Questões
1. Que é o microcontrolador?
2. BASIC Stamp é um módulo microcontrolador, ou ele contém um?
3. Que pistas você procuraria para descobrir se um aparelho como um rádio relógio
ou um telefone celular contém um microcontrolador?
4. Que significa um apóstrofo no início de uma linha de um código em um
programa PBASIC e o que esse código significa?
5. Que comandos PBASIC você aprendeu neste capítulo?
6. Vamos dizer que você queira fazer uma pausa em seu projeto BASIC Stamp
para ir fazer um lanche, ou talvez você queira dar uma pausa maior e retornar
somente após alguns dias. O que você faria antes desta pausa?

Exercícios
1. Explique o significado do asterisco neste comando: DEBUG DEC 7 * 11
Página - 22

2. Adivinhe o que o Debug Terminal iria mostrar se você executasse este comando:
DEBUG DEC 7 + 11

3. Existe um problema com esses dois comandos. Quando você executa o código,
os números que aparecem estão travados, parecendo assim que há um grande
número em vez de dois pequenos. Deve-se modificar esses dois comandos para
que as respostas apareçam em linhas diferentes no DEBUG Terminal.

DEBUG DEC 7 * 11
DEBUG DEC 7 + 11

Projetos
1. Use o DEBUG para mostrar a solução do problema de cálculo: 1 + 2 + 3 + 4.
2. Salve seu primeiro programa YourTurn.bs2 com um outro nome. Se você
colocasse o comando DEBUG mostrado na linha abaixo antes do comando END,
que outras linhas você poderia deletar e ainda assim tê-lo funcionando?
Modifique a cópia do programa para testar as suas hipóteses (sua previsão do
que irá acontecer).

DEBUG "Quanto é 7 X 11?", CR, " A resposta é: ", DEC 7 * 11

Soluções
Q1. Um microcontrolador é um tipo de computador em miniatura encontrado em
produtos eletrônicos.
Q2. O módulo BASIC Stamp contém um chip microcontrolador.
Q3. Se o aparelho tem botões e um visor digital, é um bom indício de que ele tenha
um microcontrolador dentro dele.
Q4. Um comentário.
Q5. DEBUG e END
Q6. Desligue a energia do projeto BASIC Stamp.

Isto multiplica os dois operadores 7 e 11, resultando 77. O asterisco é o operador de


multiplicação.
O DEBUG Terminal iria mostrar: 18
Para solucionar o problema, acrescente o comando de controle CR seguido de uma vírgula.

DEBUG DEC 7 * 11
DEBUG CR, DEC 7 + 11

P1. Aqui está um programa para a solução do cálculo matemático: 1 +2 +3 +4.

' O que é um microcontrolador? - Ch01Prj01_Add1234.bs2


'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Quanto é 1+2+3+4?"


DEBUG CR, "A resposta é: "
DEBUG DEC 1+2+3+4

END
Página - 23

P2. As ultimas três linhas do DEBUG podem ser deletadas. Um adicional CR será
preciso depois da mensagem “Olá” ("Hello").

' O que é um microcontrolador? - Ch01Prj02_ FirstProgramYourTurn.bs2


' BASIC Stamp mandará a mensagem para o Debug Terminal.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Olá, sou eu” (Hello, it is me”), seu BASIC Stamp!” CR

DEBUG " Quanto é 7 X 11?", CR, "A resposta é: ", DEC 7 * 11

END

A saída do DEBUG Terminal é:

Olá, sou eu, seu BASIC Stamp!


Quanto é 7 X 11?
A resposta é: 77

Esta saída é a mesma do código anterior. Este é um exemplo do uso de vírgulas para
produzir uma grande quantidade de informações, usando apenas um comando DEBUG
com vários elementos nele.
Página - 24

Capítulo 2: Luzes Acesas e Apagadas (On e Off)


LUZES INDICADORAS
Luzes indicadoras são tão comuns que a maioria das pessoas tendem a não dar-lhes
muita atenção. A Figura 2-1 mostra três luzes indicadoras em uma impressora a laser.
Dependendo de qual luz está acesa, a pessoa que usa a impressora sabe se ela está
funcionando corretamente ou não. Aqui estão apenas alguns exemplos de dispositivos
com luzes indicadoras: aparelhos de som de automóveis, televisores, aparelhos de DVD,
discos rígidos, impressoras e painéis de controle do sistema de alarme.

Figura 2-1
Luzes indicadoras

Luzes indicadoras
são comuns em
muitos dispositivos
diários.

Tornar uma luz indicadora on e off é uma simples questão de ligar e desligar a partir de
uma fonte de energia. Em alguns casos, a luz indicadora está ligada diretamente à
bateria ou a fonte de alimentação, como no indicador de alimentação no Board of
Education. Outras luzes indicadoras são ligadas e desligadas por um microcontrolador
dentro do dispositivo. Este é o status das luzes indicadoras que indicam o que o aparelho
está fazendo.

FAZENDO UM DIODO EMISSOR DE LUZ (LED) EMITIR LUZ


A maioria das luzes indicadoras que você vê nos dispositivos é chamada de diodos
emissores de luz. Você, frequentemente, verá em livros e diagramas de circuitos, um
diodo emissor de luz abreviado pelas letras LED. O nome geralmente é pronunciado
como três letras: "L-E-D". Você pode construir um circuito de LED, ligá-lo a energia, e
o LED emitirá luz. Se você desligar a energia do circuito de LED ele cessará de emitir
de luz.

Um circuito de LED pode ser ligado ao BASIC Stamp, e o BASIC Stamp pode ser
programado para ligar e desligar a alimentação do circuito de LED. Isto é muito mais
fácil do que mudar manualmente a fiação do circuito ou ligar e desligar a bateria. O
BASIC Stamp também pode ser programado para fazer o seguinte:

• Acender e apagar os LEDs de um circuito em ritmos diferentes


• Acender e apagar os LEDs de um circuito um número específico de vezes
• Controlar mais de um circuito de LED
• Controlar a cor de um circuito de LED bicolor (duas cores)
Página - 25

ATIVIDADE #1: CONSTRUINDO E TESTANDO UM CIRCUITO DE LED


É importante testar os componentes individualmente, antes de construí-los em um
sistema maior. Esta atividade se concentra na construção e teste de dois circuitos de
LED diferentes. O primeiro circuito é o que faz com que o diodo emissor de luz emita
luz. O segundo circuito é o que faz com que ele não emita luz. Na atividade que vem
depois desta primeira, você vai construir o circuito de LED em um sistema maior,
ligando-o ao BASIC Stamp. Então você vai escrever programas que fazem o BASIC
Stamp provocar o LED a emitir ou não luz. Nos primeiros testes de cada circuito de
LED você só vai ter certeza de que ele está funcionando se conectá-lo a um BASIC
Stamp.

Apresentando o Resistor
Um resistor é um componente que "resiste" ao fluxo de eletricidade. Este fluxo de
eletricidade é chamado de corrente. Cada resistor tem um valor que mostra o quanto ele
resiste ao fluxo de corrente. Este valor de resistência é chamado de ohm, e o sinal para o
ohm é a letra grega ômega: Ω. Mais tarde, neste livro você verá o símbolo kΩ, ou seja,
“kilo-ohm”, ou mil ohms. O resistor que você estará trabalhando nesta atividade é o
resistor 470 Ω mostrado na Figura 2-2. A resistência tem dois fios (chamados de
“leads” e pronuncia-se "liids"), cada um saindo de uma extremidade. Há um caixa de
cerâmica entre os dois terminais, é a parte que resiste à passagem da corrente. A maioria
dos diagramas de circuitos que mostram resistências usam o símbolo que está
representado abaixo, do lado esquerdo, com as linhas em zig-zag para informar a pessoa
que na montagem do circuito ela deverá usar um resistor de 470 Ω. Isto é chamado de
“símbolo esquemático”. O desenho da direita é um desenho da peça utilizada em alguns
de nossos produtos de nível iniciante, em textos Stamp in Class para ajudar a construir
circuitos.

Gold
Figura 2-2
Silver
or Desenho de um resistor de 470 Ω
Blank
470 Ω Símbolo Esquemático (à
Yellow Brown
Violet esquerda) e o desenho (à direita)

Os resistores que estamos usando nesta atividade têm listras coloridas que indicam quais
são os valores de resistência. Há uma combinação de cor diferente para cada valor de
resistência. Por exemplo, o código de cores para a resistência de 470 Ω é amarelo-
violeta-marrom.

Pode haver uma quarta faixa que indica a tolerância do resistor. A tolerância é medida
em porcentagem, e mostra a distância que a resistência real está da resistência rotulada.
A quarta faixa pode ser dourada (5%), prateada (10%) ou sem tarja (20%). Para as
atividades deste livro, a tolerância de um resistor não importa, mas sim o seu valor.

Cada barra de cores que informa o valor do resistor corresponde a um dígito, e essas
cores/dígitos estão listados na Tabela 2-1. A Figura 2-3 mostra como usar cada barra de
cor com a tabela para determinar o valor de um resistor.
Página - 26

Tabela 2-1
Cores do Resistor e Código
Valores
Dígito Cor
Tolerance Figura
0 Preto Code 2-3
1 Marrom
Tabela
2 Vermelho
de
3 Laranja First Digit Number of Zeros cores
4 Amarelo do
Second Digit
5 Verde resistor
6 Azul
7 Violeta
8 Cinza
9 Branco

Aqui está um exemplo que mostra como a Tabela 2-1 e a Figura 2-3 podem ser usadas
para descobrir o valor de um resistor, provando que o amarelo-violeta-marrom é
realmente 470 Ω:

• A primeira faixa é amarela, o que significa que o dígito mais à esquerda é um 4.


• A segunda faixa é violeta, o que significa que o próximo dígito é 7.
• A terceira faixa é marrom. Se marrom é 1, significa que apenas um zero deverá
ser adicionado à direita dos dois primeiros números.

amarelo-violeta-marrom= 4-7-0 = 470 Ω.

Apresentando o LED
Um diodo é uma válvula de uma via de corrente, e um diodo emissor de luz (LED)
emite luz quando a corrente passa através do mesmo. Ao contrário dos códigos de cores
em um resistor, a cor do LED, apenas diz-lhe qual a cor que vai brilhar quando a
corrente passar por ele. As marcas importantes em um LED estão contidas na sua forma.
Uma vez que um LED é uma válvula unidirecional, você deve conectá-lo da maneira
correta, ou não funcionará como previsto.

A Figura 2-4 mostra o símbolo esquemático de um LED e o desenho da peça. Um LED


tem dois terminais. Um é chamado de “ânodo”, e o outro é chamado de “cátodo”. Nesta
atividade, você vai ter que construir o LED em um circuito, e você deve prestar atenção
e certificar-se de que as ligações de ânodo e cátodo estão conectadas ao circuito de
forma adequada. No desenho da peça, o ânodo é rotulado com o sinal de mais (+). No
símbolo esquemático, o ânodo é a parte larga do triângulo. Neste desenho da peça, o
cátodo é o pino que não está marcado, e no símbolo esquemático, o cátodo é a linha
sobre o triângulo.
Página - 27

Figura 2-4
Desenho da peça e símbolo
esquemático do LED

Desenho da peça (acima) e


símbolo esquemático (abaixo).
+
Nos desenhos daqui em diante, o
LED apresentará um “+” ao lado
da perna do ânodo.
LED

Quando você começar a construir seu circuito, não se esqueça de verificar se ele está de
acordo com o símbolo esquemático e o desenho da peça. Observe no desenho da peça os
diferentes comprimentos do LED. O condutor longo é ligado ao ânodo do diodo emissor
de luz, e o mais curto é ligado ao seu cátodo. E também, se você olhar com atenção para
a parte plástica do LED, é possível ver uma parte plana próxima a perna mais curta que
informa que esse é o cátodo. Isso realmente vem a calhar se os fios forem cortados com
o mesmo comprimento.

Peças Para Teste do Circuito de LED


(1) LED – verde
(1) Resistor – 470 Ω (amarelo-violeta-marrom)

Identificar as peças: Além dos desenhos de peças na Figura 2-2 e Figura 2-4,
você pode usar a foto na última página do livro para ajudar a identificar as peças
do kit, necessárias para esta e todas as outras atividades.

Construindo o Circuito de Teste do LED


Você irá construir um circuito, ligando os fios do LED e uma resistência, a pequenos
orifícios denominados soquetes na área de prototipagem mostrada na Figura 2-5. Esta
área de prototipagem tem soquetes pretos na parte superior e no lado esquerdo. Os
soquetes pretos no topo têm os seguintes rótulos sobre eles: Vdd (+5 V), Vin
(Tensão desregulada direto da sua bateria ou fonte de alimentação) e Vss (0 V, também
chamado de terra). Estes são chamados terminais de potência, e serão usados para
fornecer eletricidade a seus circuitos. Os soquetes pretos à esquerda têm rótulos como
P0, P1 a P15. Estes soquetes serão usados para ligar o circuito de entrada/saída dos
pinos do módulo BASIC Stamp.
Página - 28

Vdd Vin Vss


X3
P15
Figura 2-5
P14 Área de prototipagem
P13
P12
P11 Terminais de alimentação
P10
P9 (soquetes pretos no topo),
P8 Acesso dos pinos de I/O
P7
P6 (soquetes pretos na lateral), e
P5
P4
placa de montagem sem solda
P3 (soquetes brancos)
P2
P1
P0
X2

Pinos de entrada/saída são geralmente chamados de pinos de I/O; depois de ligar


seu circuito a um ou mais desses pinos de I/O, você pode programar o BASIC
Stamp para monitorar o circuito (entrada) ou enviar sinais on ou off para o
circuito (output). Na próxima atividade você vai tentar isto.

A placa de montagem branca com vários furos, é chamada de protoboard livre de


soldas. Você usará o protoboard para conectar componentes uns aos outros e construir
circuitos. Esta placa tem17 linhas de soquetes. Cada linha contém dois grupos de cinco
soquetes separados por um pequeno vão. Todos os soquetes num grupo de 5 estão
conectados. Então, se você ligar dois fios no grupo de 5 soquetes, eles vão fazer o
contato elétrico. Por outro lado, dois fios na mesma linha, mas em lados opostos do vão,
não serão ligados. Muitos dispositivos são projetados para serem conectados em
soquetes separados pelo vão, como, por exemplo, o botão que vamos usar no Capítulo 3.

Mais sobre placas: Para saber mais sobre a história das placas, como as placas
modernas são construídas e como usá-las, consulte os recursos de vídeo no link
www.parallax.com/go/WAM.

A Figura 2-6 mostra um diagrama esquemático do circuito, e uma figura de como o


circuito deve parecer quando ele é construído no protoboard. Cada grupo de 5 soquetes
pode conectar até cinco ligações, ou fios, uns aos outros. Para este circuito, o resistor e o
LED estão ligados, pois cada um tem um fio ligado ao mesmo grupo 5 de soquetes.
Note que um fio do resistor é ligado a VDD (+5 V) de modo que o circuito possa obter
energia. O outro fio de resistência é ligado ao fio do ânodo do diodo emissor de luz. O
fio do cátodo do diodo emissor de luz é ligado a Vss (0 V, terra) completando o circuito.

Agora você está pronto para construir o circuito mostrado na Figura 2- 6 (abaixo),
ligando os fios de LED e resistor em soquetes na área de prototipagem. Siga estes
passos:

 Desligue a energia do Board of Education ou do HomeWork Board.


 Use a Figura 2-4 para decidir qual fio está ligado ao cátodo do diodo emissor de
luz. Procure o fio mais curto e a parte plana na parte plástica do LED.
 Ligue o cátodo do LED em um dos soquetes pretos rotulados “Vss” na área de
prototipagem.
 Ligue o ânodo do LED (o outro fio mais longo) no soquete mostrado no
protoboard.
Página - 29

 Ligue um dos fios do resistor ao mesmo grupo de 5 soquetes como no ânodo do


LED. Isto irá ligar os dois fios juntos.
 Ligue outro fio do resistor em um dos soquetes rotulado “Vdd”.

A direção importa para o LED, mas não para o resistor. Se você conectar o LED
da maneira incorreta, ele não emitirá luz quando a energia for ligada. A
resistência apenas resiste ao fluxo de corrente. Não existe para trás ou para frente
em um resistor.

 Reconecte a energia do Board of Education ou do HomeWork Board.


 Cheque para ter certeza se o seu LED verde está emitindo luz. Ele deverá estar
emitindo luz verde.
Figura 2-6
Vdd Vin Vss
LED acesso, ligado diretamente a
Vdd X3 energia
+
P15
P14 Esquemático (esquerda) e
P13
470 Ω P12 Diagrama de fiação (direita).
P11
P10
P9 Note-se que um fio do resistor e
LED
P8 do ânodo do LED verde estão
P7
P6 conectados no mesmo grupo de
P5 5 soquetes. Isto liga
P4
P3 eletricamente os dois
Vss P2
P1 componentes.
P0
X2

Se o LED verde não emite luz quando você ligar a energia da placa:
 Alguns LEDs são mais brilhantes quando visto de cima. Tente olhar para baixo
estando logo acima do corpo plástico do LED.
 Se a sala for muito clara, tente apagar algumas luzes, ou usar as mãos para
projetar uma sombra sobre o LED.

Se você ainda não viu nenhuma luz verde, experimente estes passos:
 Verifique novamente se cátodo e o ânodo do LED estão conectados
corretamente. Se não, basta remover o LED, girá-lo 180º, e ligá-lo novamente. O
LED não será afetado se você ligá-lo ao contrário, somente não emitirá luz.
 Quando você ligar o LED na direção certa, ele deverá emitir luz.
 Verifique novamente se você construiu seu circuito exatamente como mostrado
na Figura 2-6.
 Se você estiver usando um kit que alguém usou antes de você, o LED pode estar
danificado, então tente um diferente.
 Se você estiver em uma aula de laboratório, peça ajuda para o seu instrutor.

Ainda está empacado? Experimente estes recursos gratuitos on-line:


Visite os fóruns Stamps In Class: Se você não tiver um instrutor ou amigo que
possa lhe ajudar, você pode sempre checar no fórum Stamps in Class no link
http://forums.parallax.com. Se você não tirar suas dúvidas lá, você poderá
contatar o departamento de Suporte Técnico Parallax, seguindo o link suporte
(Support) no site www.parallax.com.
Página - 30

Como Funciona o Teste do Circuito LED


Os terminais Vss e Vdd fornecem pressão elétrica da mesma maneira que uma bateria
faria. As tomadas Vdd são como terminal positivo da bateria, e os soquetes de VSS, são
como terminais negativos da bateria. A Figura 2-7 mostra como é a aplicação de pressão
a um circuito elétrico através de uma bateria e o que faz com que elétrons fluam através
dele. Este fluxo de elétrons é chamado de corrente elétrica, ou apenas corrente. A
corrente elétrica é limitada pela resistência. Esta corrente faz com que o diodo emita luz.

- Figura 2-7
- -
Fluxo de elétrons em um circuito
+ - de LED
N
- -
N N
+++ + + -
+++ - Os sinais de menos com os
+++
= N - círculos em torno deles são
--- - utilizados para mostrar os
- - N- - -
_
--N elétrons fluindo do terminal
N
- - negativo da bateria ao terminal
- positivo.
- - - - -

Reações químicas dentro da bateria alimentam o circuito com fornecimento de


corrente. O terminal negativo da bateria contém um composto que tem moléculas
com elétrons extras (mostrado na Figura 2-7 por sinais de menos). O terminal
positivo da bateria tem um composto químico que tem moléculas com elétrons a
menos (mostrado por sinais de mais). Quando um elétron deixa uma molécula no
terminal negativo e viaja através do fio, é chamado de elétron livre (também
mostrado por sinal de menos). A molécula que perdeu o elétron extra não tem
mais uma carga extra negativa, agora chamada de neutra (indicado por um N).
Quando um elétron alcança o terminal positivo, ele se junta a molécula com
elétrons a menos, e agora aquela molécula se torna neutra também.

A Figura 2-8 mostra como o fluxo de eletricidade através do circuito de LED é descrito
usando a notação esquemática. A pressão em todo o circuito elétrico é chamada de
tensão. Os sinais + e - são usados para mostrar a tensão aplicada a um circuito. A seta
mostra a corrente que flui através do circuito. Esta seta é quase sempre mostrada
apontando para a direção oposta do fluxo real de elétrons. Benjamin Franklin não
acreditava, pois não tinha conhecimento sobre elétrons, quando ele decidiu representar o
fluxo de corrente de carga que passa do positivo para o terminal negativo de um
circuito. Quando os físicos descobriram a verdadeira natureza da corrente elétrica, a
convenção já estava bem estabelecida.

Vdd
Voltage + Figura 2-8
LED aceso, circuito esquemático
Resistance mostrando tensão convencional e
fluxo de corrente
Current
LED Os sinais + e - mostram a tensão
aplicada ao circuito, e a seta
mostra o fluxo de corrente
Voltage - através do circuito.
Vss
Página - 31

Um desenho esquemático (como na Figura 2-8) é uma imagem que explica como
um ou mais circuitos são ligados. Esquemas são usados por estudantes,
entusiastas da eletrônica, eletricistas, engenheiros e praticamente todos que
trabalham com circuitos.
Apêndice B: Mais sobre eletricidade – este apêndice contém alguns termos do
glossário e uma atividade que você pode tentar para se familiarizar mais com as
medições de tensão, corrente e resistência.

Sua Vez – Modificando o Teste do Circuito LED


Na próxima atividade, você vai programar o BASIC Stamp para ligar o LED, em
seguida, desligá-lo e ligá-lo novamente. O BASIC Stamp vai fazer isso para mudar o
circuito de LED entre duas conexões diferentes, Vdd e Vss. Você terminará seu trabalho
com circuitos quando o resistor estiver ligado a VDD e o LED emitir luz. Faça as
alterações apresentadas na Figura 2-9 para verificar se o LED será desligado (não emite
luz) quando a ligação do resistor for desconectada do Vdd e conectada a VSS.

 Desligue a energia do Board of Education ou do HomeWork Board.


 Desligue o fio do resistor que está ligado no soquete Vdd, e ligue-o a um soquete
Vss como mostrado na Figura 2-9.
 Reconecte a energia do Board of Education ou do HomeWork Board.
 Verifique se o LED verde não está emitindo luz. Não deverá estar brilhando a
luz verde.

Por que os LEDs não brilham? Uma vez que ambas as extremidades do circuito
estão ligadas à mesma tensão (Vss), não há qualquer pressão em todo o circuito
elétrico. Assim, nenhuma corrente flui através do circuito e o LED permanece
desligado.

Vdd Vin Vss


X3
+ Figura 2-9
P15
P14 Circuito de LED
P13 Apagado
P12
P11
P10
P9 Esquemático
470 Ω
P8
P7
(esquerda) e diagrama
LED P6 de fiação (direita).
P5
P4
P3
Vss Vss P2
P1
P0
X2

ATIVIDADE #2: CONTROLE DE ON/OFF COM O BASIC STAMP


Na Atividade #1, dois circuitos foram construídos e testados. Um circuito fez o LED
emitir luz enquanto o outro não. Figura 2-10 mostra como o BASIC Stamp pode fazer a
mesma coisa se você conectar um circuito de LED a um de seus pinos de I/O. Nesta
atividade, você vai ligar o circuito de LED para o BASIC Stamp e programá-lo para
Página - 32

ligar o LED on e off. Você também vai experimentar com programas que fazem o
BASIC Stamp fazer isso em velocidades diferentes.

Figura 2-10
SOUT 1 24 VIN SOUT 1 24 VIN
SIN 2
BS2
23 VSS SIN 2
BS2
23 VSS BASIC Stamp
ATN 3 22 RES ATN 3 22 RES
VSS 4 21 VDD (+5V) VSS 4 21 VDD (+5V) Comutação
P0 5 Vdd 20 P15 P0 5 Vdd 20 P15
P1 6 19 P14 P1 6 19 P14
P2 7 Vss 18 P13 P2 7 Vss 18 P13 O BASIC Stamp pode
P3 P12 P3 P12
P4
8

9
17

16 P11 P4
8

9
17

16 P11
ser programado para
P5 10 15 P10 P5 10 15 P10 ligar internamente a
P6 11 14 P9 P6 11 14 P9
P7 12 13 P8 P7 12 13 P8 entrada do circuito de
BS2-IC BS2-IC LED para VDD ou
VSS.

Existem duas grandes diferenças entre mudar a conexão manualmente e deixando o


BASIC Stamp fazer isso. Primeiro, o BASIC Stamp não tem que cortar a energia da
placa de alimentação, quando se muda a alimentação do circuito de LED de Vdd para
Vss. Em segundo lugar, enquanto um ser humano pode fazer essa mudança várias vezes
por minuto, o BASIC Stamp pode fazê-la milhares de vezes por segundo!

Peças de Teste do Circuito de LED


As mesmas da Atividade #1.

Conectando o Circuito de LED ao BASIC Stamp


O circuito de LED mostrado na Figura 2-11 é ligado quase do mesmo modo que o
circuito no exercício anterior. A diferença é que o fio do resistor que foi trocado
manualmente entre Vdd e Vss está agora ligado a um pino de I/O do BASIC Stamp.

 Desconecte a energia do Board of Education ou do HomeWork Board.


 Modifique o circuito que você estava trabalhando na Atividade #1 para que ele
corresponda ao da Figura 2-11.

Figura 2-11
Vdd Vin Vss
P14 Circuito de LED
X3
470 Ω + controlado pelo
P15
LED P14
BASIC Stamp
P13
P12
P11
A entrada do
Vss P10 circuito de LED
P9
P8 está agora ligada a
P7 um pino BASIC
P6
P5 Stamp I/O em vez
P4 de Vdd ou Vss.
P3
P2
P1
P0
X2

Resistores são essenciais. Lembre-se sempre de usar um resistor. Sem ele, muita
corrente fluirá através do circuito o que pode danificar diversas peças em seu
circuito BASIC Stamp, Board of Education ou HomeWork Board.
Página - 33

Acendendo e Apagando o LED com um Programa


O programa de exemplo, faz com que o diodo emissor de luz pisque, acendendo e
apagando, uma vez por segundo. Ele introduz várias novas técnicas de programação ao
mesmo tempo. Após executá-lo, você vai ler explicações de diferentes partes do
programa para entender melhor como ele funciona.

Exemplo de Programa: LedOnOff.bs2


 Coloque o código LedOnOff.bs2 no Basic Stamp Editor.
 Reconecte a energia do Board of Education ou do HomeWork Board.
 Execute o programa.
 Verifique se o LED pisca on e off uma vez por segundo.
 Desconecte a energia quando o programa estiver concluído.

' O que é um Microcontrolador - LedOnOff.bs2


' Acenda e apague o LED. Repete uma vez por segundo indefinidamente.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "O LED conectado a P14 está piscando!"

DO

HIGH 14
PAUSE 500
LOW 14
PAUSE 500

LOOP

Como Funciona o LedOnOff.bs2


O comando DEBUG “O LED conectado a P14 está piscando!” faz esta
declaração aparecer no DEBUG Terminal. O comando HIGH 14 fará o BASIC Stamp
conectar internamente o pino I/O P14 para Vdd. Isso fará o LED ficar aceso (on).

O comando PAUSE 500 fará o BASIC Stamp não fazer nada por meio segundo até o
LED acender. O número 500 chamará o comando PAUSE para esperar 500/1000 por
segundo. O número que acompanhará o PAUSE é chamado de argumento. Argumentos
dão ao PBASIC a informação que ele precisa para trabalhar. Se você procurar PAUSE no
manual BASIC Stamp, você irá descobrir que esse número é chamado de argumento
Duration. O nome Duration foi escolhido para esse argumento para mostrar que o
comando PAUSE significa pausa por uma certa duração (“duration”) de tempo em
milésimos de segundos.

O que é milésimo de segundos? É um segundo dividido por mil e é abreviado


“ms”. São necessários 1000 ms para igualar a um segundo.

O comando LOW 14 fará o BASIC Stamp conectar internamente o pino I/O P14 para
Vss. Isso fará com que o LED fique off. Desde que o LOW 14 esteja acompanhado por
um outro PAUSE 500, o LED ficará off por meio segundo.
Página - 34

O motivo da constante repetição do código é porque está encaixado entre as palavras


chaves do PBASIC DO e LOOP. Figura 0-12 mostra como DO…LOOP funciona. Ao
colocar o segmento do código que gira o LED on e off com pausas entre DO e LOOP,
chamará o BASIC Stamp a executar esses quatro comandos constantemente. O
resultado será que o LED piscará on e off, repetidamente até que você desligue a
alimentação, pressione e segure o botão Reset, ou até que a bateria descarregue. Códigos
que repetem um conjunto de comandos, indefinidamente, são chamados “loop infinito”.

DO
Figura 2-12
HIGH 14
DO…LOOP
PAUSE 250
LOW 14 O código entre as palavras-chave
DO e LOOP é executado
PAUSE 250
repetidas vezes indefinidamente.
LOOP

Um Teste de Diagnóstico para o Seu Computador


Embora não seja comum, existem alguns sistemas de computadores, tais como certos
“laptops” e “docking stations”, que vão interromper o programa PBASIC depois da
primeira vez através de um DO...LOOP. Esses computadores têm um design de porta
serial não-padrão. Ao colocar um comando DEBUG no programa LedOnOff.bs2, o
DEBUG Terminal aberto evita que isso possivelmente aconteça. Na próxima atividade
reexecute esse programa sem o comando DEBUG para verificar se o seu computador tem
este problema de porta serial não-padrão. Não é comum, mas seria importante você
saber.

 Abra o programa LedOnOff.bs2.


 Delete todo o comando DEBUG.
 Execute e modifique o programa enquanto você observa o LED.

Se o LED piscar on e off continuamente, tal como aconteceu quando você executou o
programa original com o comando DEBUG, o computador não tem esse problema.

Se o LED piscar on e off apenas uma vez, e parar, significa que você tem um
computador com um design de porta serial não-padrão. Se você desconectar o cabo
serial da sua placa e pressionar o botão Reset, o BASIC Stamp vai executar o programa
corretamente, sem congelamento. Nos programas que você escrever, você sempre terá
que adicionar um único comando DEBUG:

DEBUG “Programa em andamento!”

… logo após as diretivas do compilador. Ele vai abrir o DEBUG Terminal e manter a
porta COM aberta. Isso impedirá que os programas congelem após uma passagem pelo
DO...LOOP, ou quaisquer outros comandos de looping que você aprenderá nos
capítulos posteriores. Você vai ver esse comando em alguns dos exemplos de programas
que não precisam de uma instrução de DEBUG. Assim, você será capaz de executar todos
os programas restantes deste livro, mesmo se o computador falhar no teste de
Página - 35

diagnóstico, mas, nesse caso, não se esqueça de adicionar um comando curto de DEBUG
quando você começar a escrever seus próprios programas.

Sua vez – Cronometragem e Repetições


Mudando argumento Duration do comando PAUSE você pode alterar a quantidade de
tempo que o LED permanece ligado e desligado. Por exemplo, alterando os argumentos
Duration para 250, ele fará com que o LED pisque e desligue duas vezes por segundo.
O DO...LOOP em seu programa agora vai ficar assim:

DO

HIGH 14
PAUSE 250
LOW 14
PAUSE 250

LOOP

 Abrir LedOnOff.bs2 e salvar uma cópia como LedOnOffYourTurn.bs2.


 Mudar ambos: comando PAUSE e argumento Duration de 500 para 250, e
reexecutar o programa.

Se você quer fazer o LED piscar on e off uma vez a cada três segundos, com o tempo
“low” duas vezes maior do que o “high”, você pode programar o comando PAUSE,
usando o PAUSE 1000 após o comando HIGH, para que ele leve apenas um segundo. O
comando PAUSE após o comando LOW 14 terá que ser PAUSE 2000.

DO

HIGH 14
PAUSE 1000
LOW 14
PAUSE 2000

LOOP

 Modifique e reexecute o programa usando o trecho de código acima.


 Uma experiência divertida é ver o quanto você pode deixar as pausas mais curtas
e ainda ter o LED piscando. Quando o LED estiver piscando muito rápido, mas
parecer que ele está simplesmente aceso, é chamado de persistência de visão.
 Como testar e ver qual é a sua persistência de visão.
 Tente modificar os argumentos Duration de seu comando de PAUSE para que
eles sejam 100.
 Reexecute seu programa e cheque a oscilação.
 Reduza ambos os argumentos Duration por 5 e tente novamente.
 Mantenha sempre reduzindo os argumentos Duration até que o LED pareça estar
ligado o tempo todo, sem oscilação. Ficará mais escuro do que o normal, mas
não deve parecer que pisca.
Página - 36

Uma última coisa a fazer é criar um pisca-pisca de LED de uma única piscada. Quando
o programa é executado, o LED pisca apenas uma vez. Esta é uma maneira de olhar
para a funcionalidade do DO...LOOP. Você pode remover temporariamente o DO...
LOOP do programa, colocando um apóstrofo a esquerda, de ambas as palavras chaves do
DO e do LOOP como mostrado abaixo.

' DO

HIGH 14
PAUSE 1000
LOW 14
PAUSE 2000

' LOOP

 Modifique e reexecute o programa usando o trecho de código acima.


 Explique por que o LED piscou uma só vez?

Comentando uma linha de código: Colocar um apóstrofo à esquerda de um


comando é transformá-lo em um comentário. Esta é uma ferramenta útil, porque
na verdade você não tem que apagar o comando para ver o que acontecerá se
você removê-lo do programa. É muito mais fácil adicionar e remover um
apóstrofo do que apagar e digitar novamente os comandos.

ATIVIDADE #3: CONTANDO E REPETINDO


Na atividade anterior, ou o circuito de LED piscava on e off o tempo todo, ou piscava
uma única vez e parava. E se você quiser que o LED pisque e desligue dez vezes?
Computadores (incluindo o BASIC Stamp) são ótimos para manter a totalidade de
funcionamento de quantas vezes algo acontece. Os computadores também podem ser
programados para tomar decisões com base numa variedade de condições. Nesta
atividade, você vai programar o BASIC Stamp para que o LED pare de piscar on e off
após 10 vezes.

Contando peças e circuito de teste


Use o exemplo de circuito mostrado na Figura 2-11 na página 32.

Quantas Vezes?
Há muitas maneiras de fazer um LED piscar on e off dez vezes. O caminho mais
simples é usar o loop FOR...NEXT. O loop FOR...NEXT é semelhante ao
DO...LOOP. Embora o loop possa ser utilizado para repetir comandos um determinado
número de vezes, FOR...NEXT é mais fácil de usar. Isto, algumas vezes é chamado de
loop contado ou finito. O loop FOR...NEXT depende de uma variável para controlar
quantas vezes o LED piscou on e off. Uma variável é uma palavra de sua escolha, que é
usada para armazenar um valor. O próximo exemplo de programa escolhe o contador de
palavras para "contar" quantas vezes o LED está on e off.
Página - 37

A escolha de palavras para nomes de variáveis tem várias regras:


1. O nome não pode ser uma palavra, que já é utilizada por PBASIC.
Essas palavras são chamadas de palavras reservadas, e alguns
exemplos que você já deve estar familiarizado são DEBUG, PAUSE,
HIGH, LOW, DO, e LOOP. Você pode ver a lista completa de
palavras reservadas no Manual do BASIC Stamp.
2. O nome não pode ter espaço.
3. Portanto o nome deve conter letras, números ou sublinhados e deve
começar com uma letra.
4. O nome deve ser inferior a 33 caracteres.

Exemplo de Programa: LedOnOffTenTimes.bs2


O programa LedOnOffTenTimes.bs2 demonstrou como usar o loop FOR...NEXT para
piscar o LED on e off dez vezes.

 O circuito de teste da Atividade #2 deve ser construído (ou reconstruído).


 Entre com o código LedOnOffTenTimes.bs2 no BASIC Stamp Editor.
 Conecte a energia do Board of Education ou do HomeWork Board.
 Execute o programa.
 Verifique se o LED pisca on e off dez vezes.
 Execute o programa uma segunda vez, e verifique se o valor do contador
mostrado no DEBUG Terminal monitora com precisão quantas vezes o LED
piscou. Dica: em vez de clicar em Executar uma segunda vez, você pode
pressionar e soltar o botão Reset no seu Board of Education ou HomeWork
Board.

' O que é um Microcontrolador - LedOnOffTenTimes.bs2


' Acenda e apague o LED. Repita 10 vezes.

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Byte

FOR counter = 1 TO 10

DEBUG ? counter

HIGH 14
PAUSE 500
LOW 14
PAUSE 500

NEXT

DEBUG "Pronto!"

END

Como Funciona o LedOnOffTenTimes.bs2


Esta declaração PBASIC:
Página - 38

counter VAR Byte

…diz ao BASIC Stamp Editor que seu programa irá usar o contador de palavras como
uma variável que pode armazenar o valor de informações de um byte.

O que é Byte? Um byte é memória suficiente para armazenar um número entre


0 e 255. O BASIC Stamp tem quatro tipos diferentes de variáveis, e cada uma
pode armazenar uma gama diferente de números:

Tabela 2-2: Tipos de variáveis e valores que elas podem


armazenar
Tipo de variável Intervalo de valores
Bit 0à1
Nib 0 à 15
Byte 0 à 255
Word 0 à 65535

A instrução DEBUG pode incluir formatadores que determinam como as informações


devem ser exibidas no DEBUG Terminal. Colocar o “?” ponto de interrogação
formatador antes de uma variável em um comando DEBUG diz ao DEBUG Terminal
para exibir o nome da variável e seu valor. Isto é como o comando:

DEBUG ? counter

… mostra o nome e o valor da variável de contador no DEBUG Terminal.

O loop FOR...NEXT e todos os comandos no seu interior são mostrados abaixo. A


declaração FOR ... counter = 1 to 10 diz ao BASIC Stamp que ele terá que
definir a variável de contador para 1, em seguida, manter a execução dos comandos até
que ele receba a declaração NEXT. Quando o BASIC Stamp chega à instrução NEXT, ele
salta de volta para a instrução FOR. A instrução FOR adiciona um para o valor do
contador. Em seguida, ela verifica se contador é maior do que dez ainda. Se não, o
processo se repete. Quando o valor do contador finalmente atinge onze, o programa
ignora os comandos entre as declarações FOR e NEXT e avança para o comando que vem
depois da declaração NEXT.

FOR counter = 1 to 10

DEBUG ? counter

HIGH 14
PAUSE 500
LOW 14
PAUSE 500

NEXT

O comando que vem depois da declaração NEXT é:

DEBUG "Pronto!"
Página - 39

Este comando está incluso apenas para mostrar o que o programa faz, depois de dez
vezes através do loop FOR ... NEXT. Ele avança para o comando que vem depois da
instrução NEXT.

Sua Vez – Outras Maneiras de Contar


 No programa LedOnOffTenTimes.bs2, substitua a declaração:

FOR counter = 1 to 10 para: FOR counter = 1 to 20

 Reexecute o programa. O que o programa fez de diferente, e o que era esperado?


 Tente uma segunda modificação para a declaração FOR. Desta vez, mude para:

FOR counter = 20 to 120 STEP 10

Quantas vezes o LED pisca? Quais são os valores exibidos no DEBUG Terminal?

ATIVIDADE #4: CONSTRUINDO E TESTANDO O SEGUNDO CIRCUITO DE


LED
Os LEDs indicadores podem ser usados para informar muitas coisas para o usuário da
máquina. Muitos dispositivos precisam de dois, três, ou mais LEDs para informar ao
usuário se a máquina está pronta ou não, se houve uma avaria, se uma tarefa já foi
executada, e assim por diante.

Nesta atividade, você vai repetir o teste no circuito de LED da Atividade #1 para um
segundo circuito de LED. Então você vai ajustar o programa de exemplo da Atividade
#2 para garantir que o circuito de LED está conectado corretamente ao BASIC Stamp.
Depois disso, você irá modificar o exemplo de programa da Atividade #2 para fazer os
LEDs operarem em conjunto.

Peças Extras Necessárias


Além das peças que você utilizou nas Atividades 1 e 2, você necessitará das seguintes
peças:

(1) LED – amarelo


(1) Resistor – 470 Ω (amarelo-violeta-marrom)

Construindo e Testando o Segundo Circuito de LED


Na Atividade #1, você testou manualmente o primeiro circuito de LED para ter certeza
de que ele funcionava antes de conectá-lo ao BASIC Stamp. Antes de ligar o segundo
circuito de LED ao BASIC Stamp, é importante testá-lo também.

 Desconecte a energia do Board of Education ou do HomeWork Board.


 Construa o segundo circuito de LED mostrado na Figura 2-13.
 Reconecte a energia do Board of Education ou do HomeWork Board.
 Será que o circuito de LED que você acabou de adicionar liga? Se sim, então
continue. Se não, na Atividade #1 tem algumas sugestões de resolução de
problemas que você pode repetir neste circuito.
Página - 40

Vdd Vin Vss


X3 +
+
Vdd P15
P14
P13
Figura 2-13
P12 Manual do circuito de
P11
470 Ω P10
teste para o segundo
P9 LED
P8
P14 P7
P6
470 Ω P5
P4
LED P3
LED P2
P1
P0
Vss Vss X2

 Desconecte a energia do seu Board of Education ou do HomeWork Board.


 Modifique o segundo circuito de LED que acabou de testar, ligando o fio do
resistor do circuito de LED (entrada) (input) para P15, como mostrado na Figura
2 -14.

Figura 2-14
Vdd Vin Vss Conectar o
X3 + segundo
+
P15 LED no
P14 BASIC
P15 P13
470 Ω P12 Stamp
P11
P14 P10
470 Ω P9 Esquemático
P8
P7 (esquerda) e
LED LED
P6
P5
diagrama de
P4 fiação
Vss Vss P3
P2
(direita).
P1
P0
X2

Usando um Programa para Testar o Segundo Circuito de LED


Na Atividade #2, você utilizou um programa de exemplo e os comandos de HIGH e LOW
para controlar que o circuito de LED estivesse conectado a P14. Estes comandos têm
que ser alterados para controlar que o circuito de LED esteja conectado a P15. Em vez
de usar HIGH 14 e LOW 14, você irá usar HIGH 15 e LOW 15.

Exemplo de Programa: TestSecondLed.bs2


 Entre com TestSecondLed.bs2 no BASIC Stamp Editor.
 Conecte a energia do Board of Education ou do HomeWork Board.
 Execute o TestSecondLED.bs2.
 Verifique se o circuito de LED conectado a P15 está piscando. Se o LED que
estiver ligado ao P15 piscar, passe para o próximo exemplo (Controlar ambos os
LEDs). Se o circuito de LED conectado a P15 não estiver piscando, verifique o
circuito para checar erros de fiação e seu programa para checar erros de
digitação e tente novamente.
Página - 41

' O que é um Microcontrolador - TestSecondLed.bs2


' Acenda e apague o LED ligado a P15.
' Repita uma vez por segundo indefinidamente.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa em andamento!"

DO

HIGH 15
PAUSE 500
LOW 15
PAUSE 500

LOOP

Controlando Ambos os LEDs


Sim, você pode fazer os LEDs piscarem de uma só vez. Uma forma de fazer isso é usar
dois comandos HIGH antes do primeiro comando PAUSE. Um comando HIGH define
P14 HIGH, e o próximo comando HIGH define P15 HIGH. Você também vai precisar de
dois comandos LOW para apagar os dois LEDs. É verdade que ambos os LEDs não vão
ligar e desligar exatamente ao mesmo tempo, porque um está on e off após o outro. No
entanto, não há mais do que um milésimo de segundo de diferença entre as duas
alterações, logo, o olho humano não consegue detectar.

Exemplo de Programa: FlashBothLeds.bs2


 Coloque o código FlashBothLeds.bs2 no BASIC Stamp Editor.
 Execute o programa.
 Cheque que ambos os LEDs pisquem on e off ao mesmo tempo.

' O que é um Microcontrolador - FlashBothLeds.bs2


' Acenda e apague os LEDs conectados a P14 e P15.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa em andamento!"

DO

HIGH 14
HIGH 15
PAUSE 500
LOW 14
LOW 15
PAUSE 500

LOOP
Página - 42

Sua Vez – LEDs Alternados


Você pode fazer com que os LEDs se alternem trocando os comandos HIGH e LOW que
controlam um dos pinos de I/O. Isto significa que enquanto um LED estiver ligado, o
outro estará desligado.

 Modique FlashBothLeds.bs2 para que as palavras chaves entre os comandos DO


e LOOP fiquem assim:

HIGH 14
LOW 15
PAUSE 500
LOW 14
HIGH 15
PAUSE 500

 Execute e modifique a versão do FlashBothLeds.bs2 e verifique se os LEDs


piscam alternadamente on e off.

ATIVIDADE #5: USANDO A DIREÇÃO DA CORRENTE PARA CONTROLAR


O LED BICOLOR
O dispositivo mostrado na Figura 2-15 é um monitor de segurança para as chaves
eletrônicas. Quando uma chave eletrônica com o código correto é usada, o diodo
emissor de luz muda de cor, e uma porta se abre. Este tipo de diodo emissor de luz é
chamado LED bicolor. Esta atividade responde a duas perguntas:

1. Como o LED muda de cor?


2. Como utilizar um com o BASIC Stamp?

Figura 2-15
LED bicolor em um
dispositivo de
segurança

Quando a porta está


trancada, este LED
bicolor brilha em
vermelho. Quando a
porta é desbloqueada
por uma chave
eletrônica com o
código correto, o LED
fica verde.

Apresentando o LED Bicolor


Símbolo esquemático do LED bicolor e desenho da peça são mostrados na Figura 2-16.
Página - 43

Figura 2-16
LED Bicolor

Símbolo esquemático
(à esquerda) e parte de
desenho (à direita).

O LED bicolor é realmente apenas dois LEDs em um único pacote. Figura 2-17 mostra
como você pode aplicar tensão em uma direção e o LED acender em verde. Ao desligar
o LED e colocá-lo de volta na posição invertida, o LED terá então um brilho vermelho.
Tal como acontece com os outros LEDs, se você conectar dois terminais de circuito de
Vss, o LED não emitirá luz.

Figura 2-17
LED bicolor e
tensão aplicada

Verde (à
esquerda),
vermelho (centro)
e nenhuma luz (à
direita)

Partes do Circuito do LED Bicolor


(1) LED – bicolor
(1) Resistor – 470 Ω (amarelo-violeta-marrom)
(1) Fios de ligação

Construindo e Testando o Circuito do LED Bicolor


Figura 2-18 mostra o teste manual do LED bicolor.

 Desconecte a energia do Board of Education ou do HomeWork Board.


 Construa o circuito mostrado no lado esquerdo na Figura 0-18.
 Reconecte a energia e verifique se o LED bicolor está emitindo uma luz verde.
 Desconecte a energia novamente.
 Modifique seu circuito para que ele corresponda ao mostrado no lado direito da
Figura 2-18.
 Reconecte a energia.
 Verifique se o LED bicolor está agora emitindo uma luz vermelha.
 Desconecte a energia.
Página - 44

O que acontece se as cores de meu LED bicolor estiverem invertidas? LEDs


bicolores são fabricados como ilustrado na Figura 2-16, com as cores invertidas.
Se o seu LED bicolor brilha em vermelho quando ele está conectado ao circuito
que deveria fazê-lo brilhar verde e vice-versa, as cores do seu LED estão
invertidas. Se for esse o caso, sempre plugue o pino 1 onde nos diagramas
mostrar o pino 2 e pino 2 onde nos diagramas mostrar o pino 1.

Vdd 1 Vin 2 Vss


X3
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3 Figura 2-18
P2
P1 Teste manual do LED
P0 bicolor
X2

LED bicolor: verde (à


2 Vin 1
esquerda) e vermelho
Vdd Vss (à direita).
X3
P15
P14
P13
P12
P11
P10
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
X2

Controlar um LED bicolor com o BASIC Stamp requer dois pinos de I/O. Depois de ter
verificado manualmente que o LED bicolor trabalha utilizando o teste manual, você
pode conectar o circuito para o BASIC Stamp, como mostrado na Figura 2-19.

 Conecte o circuito do LED bicolor ao BASIC Stamp como mostrado na Figura


2-19.
Página - 45

Figura 2-19
LED bicolor conectado
ao BASIC Stamp

Esquemática (à
esquerda) e diagrama
de fiação (à direita).

BASIC Stamp - Controle do LED Bicolor


Figura 2-20 mostra como você pode usar P15 e P14 para controlar o fluxo de corrente
no circuito de LED bicolor. O esquema acima mostra como a corrente flui através do
LED verde quando P15 está definido para Vdd com HIGH e P14 está definido para Vss
com LOW. Isso ocorre porque o LED verde irá deixar a corrente passar através dele
quando a pressão elétrica for aplicada como mostrado, mas o LED vermelho atuará
como uma válvula fechada e não deixará a corrente passar através dele. O LED bicolor
brilha verde.

O esquema abaixo mostra o que acontece quando P15 está definido para Vss e P14 está
definido para Vdd. A pressão elétrica está invertida. O LED verde desliga e não permite
que a corrente passe. Enquanto isso, o LED vermelho acende, e a corrente passa através
do circuito na direção oposta.

HIGH = Vdd P15


1
Current

Figura 2-20
2 BASIC Stamp teste do
LOW = Vss P14
470 Ω LED bicolor

Corrente através do
diodo emissor de luz
LOW = Vss P15 verde (acima) e um
1 LED vermelho (em
baixo).
Current

2
HIGH = Vdd P14
470 Ω

A Figura 2-20 mostra também a chave para a programação do BASIC Stamp para fazer
o LED bicolor brilhar em duas cores diferentes. O esquema acima mostra como fazer o
LED bicolor brilhar verde com HIGH 15 e LOW 14. O esquema abaixo mostra como
fazer o LED bicolor brilhar vermelho usando LOW 15 e HIGH 14. Para desligar o
Página - 46

LED, envie sinais de baixa tanto para P14 e P15 usando LOW 15 e LOW 14. Em outras
palavras, use LOW em ambos os pinos.

O LED bicolor também se desligará se você enviar sinais de HIGH para


ambos os P14 e P15. Por quê? Porque a pressão elétrica (voltagem) é a mesma
em P14 e P15, independentemente de você definir os pinos I/O HIGH ou LOW.

Exemplo de Programa: TestBiColorLED.bs2


 Reconecte a energia.
 Insira e execute o código TestBiColorLed.bs2 no BASIC Stamp Editor.
 Verifique os ciclos de LED entre o vermelho, verde, na posição off.

' O que é um Microcontrolador - TestBiColorLed.bs2


' Faça o LED bicolor brilhar vermelho, depois verde e apagar.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000
DEBUG "Programa em andamento!", CR

DO

DEBUG "Verde..."
HIGH 15
LOW 14
PAUSE 1500

DEBUG "Vermelho..."
LOW 15
HIGH 14
PAUSE 1500

DEBUG "Apagado...", CR
LOW 15
LOW 14
PAUSE 1500

LOOP

Sua vez – Luzes do Visor


Na Atividade #3, a variável chamada counter foi usada para controlar quantas vezes o
LED piscou. O que acontecerá se você usar o valor do counter para controlar o
comando PAUSE argumento Duration ao alterar repetidamente a cor do LED bicolor?

 Renomear e salvar TestBiColorLed.bs2 para TestBiColorLedYourTurn.bs2.


 Adicionar a variável counter antes da declaração:
counter VAR BYTE

 Substituir o código de teste no DO...LOOP por este loop FOR...NEXT.

FOR counter = 1 to 50

HIGH 15
Página - 47

LOW 14
PAUSE counter

LOW 15
HIGH 14
PAUSE counter

NEXT

Quando estiver concluído, seu código deve parecer com:

counter VAR BYTE

DO

FOR counter = 1 to 50

HIGH 15
LOW 14
PAUSE counter

LOW 15
HIGH 14
PAUSE counter

NEXT

LOOP

No início de cada passagem através do loop FOR...NEXT o valor PAUSE (argumento


Duration) é apenas um milésimo de segundo. Cada vez que através loop FOR...NEXT,
a pausa recebe mais por um milésimo de segundo de cada vez até chegar a 50 milésimos
de segundo. O DO...LOOP faz com que o loop FOR...NEXT seja executado
repetidamente.

 Execute o programa modificado e observe o efeito.


Página - 48

SUMÁRIO
O BASIC Stamp pode ser programado para mudar um circuito com um diodo emissor
de luz (LED) para on e off. Os LEDs indicadores são úteis em uma variedade de
lugares, incluindo muitos monitores de computador, discos rígidos e outros dispositivos.
O diodo emissor de luz foi introduzido, juntamente com uma técnica para identificar
seus terminais de ânodo e cátodo. Um circuito de LED tem que ter uma resistência para
limitar a corrente que passa através dele. Resistores foram introduzidos juntamente com
um dos esquemas de codificação mais comuns para indicar o valor de um resistor.

O BASIC Stamp muda um circuito de LED on e off, ligando internamente um pino de


I/O também para VDD ou VSS. O comando HIGH pode ser usado para fazer o BASIC
Stamp conectar internamente um de seus pinos de I/O para Vdd e o comando LOW pode
ser usado para conectar internamente um pino de I/O para VSS. O comando PAUSE é
usado para fazer com que o BASIC Stamp não execute os comandos por um período de
tempo. Este foi usado para fazer os LEDs permanecerem on e/ou off por um certo
período de tempo. A quantidade de tempo é determinada pelo número utilizado no
argumento Duration do comando PAUSE.

DO...LOOP pode ser usado para criar um loop infinito. Os comandos entre as palavras
chaves DO e LOOP serão executados repetidamente. Mesmo que isso seja chamado de
um loop infinito, o programa pode ser reiniciado desconectando e reconectando a
energia ou pressionando e soltando o botão Reset. Um novo programa também pode ser
baixado para o BASIC Stamp, e isso vai apagar o programa com o loop infinito. Loops
contados podem ser feitos com FOR...NEXT, uma variável para manter o controle de
quantas repetições de loop tem sido feitas, e os números para especificar onde iniciar e
parar a contagem.

Direção de corrente e tensão de polaridade foram introduzidas utilizando um LED


bicolor. Se a tensão é aplicada em todo o circuito de LED, a corrente passará por ele em
uma direção, e ele brilhará com uma cor específica. Se a tensão de polaridade é
invertida, cursos de corrente passam através do circuito no sentido oposto e irá brilhar
numa cor diferente.

Questões
1. Qual é o nome desta letra grega: Ω, e a que medição essa letra Ω se refere?
2. Quais resistências permitiriam mais corrente através do circuito, de um resistor
de 470 Ω ou um resistor de1000 Ω?
3. Como você conecta dois fios usando uma placa de montagem? Você pode usar
uma placa de montagem para conectar quatro fios juntos?
4. O que você sempre tem que fazer antes de modificar um circuito que você
construiu sobre uma placa?
5. Quanto tempo deve passar o PAUSE 10000?
6. Como você poderia provocar o BASIC Stamp a não fazer nada por um minuto
inteiro?
7. Quais são os diferentes tipos de variáveis?
8. Pode um byte manter o valor de 500?
9. O que fará o comando HIGH 7?
Página - 49

Exercícios
1. Desenhe o esquema de um circuito de LED como o que você trabalhou na
Atividade #2, mas ligue o circuito em P13 em vez de P14. Explique como você
poderia modificar LedOnOff.bs2 na página 3, para que ele faça o circuito de
LED piscar on e off quatro vezes por segundo.
2. Explique como modificar LedOnOffTenTimes.bs2 para que ele faça o circuito
de LED piscar on e off 5.000 vezes antes de parar. Dica: você vai precisar
modificar apenas duas linhas de código.

Projeto
1. Faça uma contagem de 10 segundos usando um LED amarelo e um LED bicolor.
Faça o LED bicolor começar vermelho por 3 segundos. Após 3 segundos, altere
o LED bicolor para verde. Quando o LED bicolor mudar para verde, pisque o
LED amarelo on e off uma vez por segundo durante dez segundos. Quando o
LED amarelo piscar, o LED bicolor deve voltar para o vermelho e ficar desse
jeito.

Soluções
Q1. Ômega refere-se à ohm que mede quão fortemente algo resiste ao fluxo de
corrente.
Q2. O resistor 470 Ω: valores mais elevados resistem mais fortemente do que os
valores mais baixos, portanto, valores mais baixos permitem maior fluxo de
corrente.
Q3. Para conectar dois fios, ligue os 2 fios no mesmo grupo de 5 soquetes. Você
pode conectar 4 fios, ligando todos os 4 fios no mesmo grupo de 5 soquetes.
Q4. Desligue a alimentação.
Q5. 10 segundos.
Q6. PAUSE 60000
Q7. Bit, Nib, Byte, e Word
Q8. Não. O maior valor que um byte pode conter é 255. O valor 500 está fora de
alcance para um byte.
Q9. HIGH 7 fará com que o BASIC Stamp conecte internamente o pino I/O P7 para
Vdd.

E1. A duração da pausa tem de ser reduzida para 500 ms / 4 = 125 ms. Para usar i
pino I/O P13, HIGH 14 e LOW 14 foram substituídos por HIGH 13 e LOW 13.
E2.

P13 DO
470 Ω HIGH 13
LED PAUSE 125
LOW 13
PAUSE 125
Vss
LOOP

A variável counter tem que ser mudada para Word size, e a declaração FOR tem que
ser modificada para contar de 1 a 5000.

counter VAR Word


FOR counter = 1 to 5000
Página - 50

DEBUG ? counter, CR
HIGH 14
PAUSE 500
LOW 14
PAUSE 500
NEXT

P1. O esquema do LED bicolor do lado esquerdo, está inalterado a partir da Figura
2-19, na página 46. O esquema do LED amarelo baseia-se na Figura 2-11, na
página 33. Para este projeto, P14 foi alterado para P13, e um LED amarelo foi
usado em vez de verde. NOTA: Quando o BASIC Stamp fica sem comandos, ele
entra em um modo de baixa potência que faz com que os LEDs bicolores
pisquem rapidamente a cada 2,3 segundos. O mesmo aplica-se após o programa
executar um comando END. Há outro comando chamado STOP que você pode
adicionar ao final do programa para deter quaisquer sinais de HIGH / LOW, sem
entrar em modo de baixa energia, que por sua vez o impede de piscar.

P2.

P13
470 Ω
Yellow
LED

Vss

' O que é um Microcontrolador - Ch02Prj01_Countdown.bs2


' Contagem de dez segundos com LEDs vermelho, verde e amarelo.
' Vermelho/Verde: LED bicolor no P15, P14. Amarelo: P13

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa em andamento!"

counter VAR Byte

' Vermelho por três segundos... ' LED bicolor vermelho


LOW 15
HIGH 14
PAUSE 3000

' Verde por dez segundos...


HIGH 15 ' LED bicolor verde
LOW 14

' ...enquanto o LED amarelo pisca


FOR counter = 1 TO 10
HIGH 13 ' LED amarelo aceso
PAUSE 500
LOW 13 ' LED amarelo apagado
PAUSE 500
NEXT

' Vermelho aceso ' LED bicolor vermelho


LOW 15
Página - 51

HIGH 14
Página - 52

Capítulo 3: Entrada Digital – Botões


ENCONTRADOS EM CALCULADORAS, JOGOS PORTÁTEIS E
APLICATIVOS
Quantos dispositivos com botões você usa diariamente? Aqui estão alguns exemplos
que podem estar na sua lista: computador, mouse, calculadora, forno de microondas,
controle remoto de TV, jogos manuais e telefone celular. Em cada dispositivo, há um
microcontrolador digitalizando os botões de pressão e de espera para mudar o circuito.
Quando o circuito muda, o microcontrolador detecta a alteração e toma medidas. Até o
final deste capítulo, você terá experiências com criação de circuitos de botões e
programará o BASIC Stamp para monitorá-los e tomar medidas quando ocorrerem essas
alterações.

RECEBIMENTO VS. ENVIO DE SINAIS DE HIGH E LOW


No Capítulo 2, você programou o BASIC Stamp para enviar sinais de high e low, e usou
circuitos de LED para exibir esses sinais. O envio de sinais de high e low significa que
você usou um pino de I/O BASIC Stamp como uma saída. Neste capítulo, você vai usar
um pino de I/O do BASIC Stamp como entrada. Em uma entrada, um pino de I/O ouve
sinais de high/low, em vez de enviá-los. Você vai enviar esses sinais para o BASIC
Stamp usando um circuito de botão, e você vai programar o BASIC Stamp para
reconhecer se o botão foi pressionado ou não.

Outros termos que significam envio e recebimento de HIGH/LOW. O envio


de sinais de high/low é descrito de maneiras diferentes. Você pode ver o envio
mencionado, como transmissão, controle ou comutação. Em vez de HIGH/LOW,
você pode vê-lo chamado de binário, TTL, CMOS, ou sinais booleanos. Outro
termo para recepção é detecção.

ATIVIDADE #1: TESTANDO UM BOTÃO COM UM CIRCUITO DE LED


Se você pode usar um botão para enviar um sinal de alta ou de baixa (high ou low) para
o BASIC Stamp, você pode também controlar um LED com um botão? A resposta é
sim, e você vai usá-lo para testar um botão nesta atividade.

Apresentando o Botão
A Figura 3-1 mostra um diagrama esquemático do símbolo e desenho da peça de um
botão de pressão normalmente aberto. Dois dos pinos do botão de pressão estão
conectados a cada um dos terminais. Isto significa que ligar um fio ou uma peça ao pino
1 do botão é o mesmo que ligar ao pino 4. A mesma regra aplica-se com os pinos 2 e 3.
A razão pela qual o botão não tem apenas dois pinos é porque ele precisa de
estabilidade. Se o botão tivesse apenas dois pinos, eles poderiam eventualmente dobrar
e quebrar devido a pressão que o botão recebe quando pressionado.

Figura 3-1
Botão normalmente aberto
1, 4
1 4
2, 3 2 3 Símbolo esquemático (à
esquerda) e parte de desenho (à
direita)
Página - 53

O lado esquerdo da Figura 3-2 mostra a aparência de um botão de pressão normalmente


aberto quando não está pressionado. Quando o botão não está pressionado, existe uma
defasagem entre os terminais 1,4 e 2,3. Esta diferença faz com que o terminal 1,4 não
possa levar corrente para o terminal 2,3. Isto é chamado de circuito aberto. O nome
"normalmente aberto" significa que o estado normal do botão (não pressionado) forma
um circuito aberto. Quando o botão é pressionado, a distância entre os terminais 1,4 e
2,3 é reduzida por um metal condutor. Isto é chamado de circuito fechado, e assim a
corrente pode fluir através do botão de pressão.

Figura 3-2
1, 4 1, 4 Botão normalmente aberto
2, 3 2, 3
Não pressionado (à esquerda) e
pressionado (à direita)

Peças de Teste para o Botão de Pressão


(1) LED – escolha uma cor
(1) Resistor – 470 Ω (amarelo-violeta-marrom)
(1) Botão – normalmente aberto
(1) Fios

Construindo um Circuito de Teste do Botão


A Figura 3-3 mostra o circuito que você pode construir para testar manualmente o
botão.

Sempre desconecte a energia do Board of Education ou do BASIC Stamp


HomeWork Board antes de fazer qualquer mudança ou teste de circuito. Daqui
em diante, as instruções não vão dizer: "Desligue a alimentação" entre cada
modificação do circuito. Cabe a você se lembrar de fazer isso.
Sempre reconecte a energia do Board of Education ou do BASIC Stamp
HomeWork Board antes de baixar o programa do BASIC Stamp.

 Construa o circuito mostrado na Figura 3-3.


Vdd

Vdd Vin Vss +


X3
1, 4
P15
2, 3 P14
P13
P12 Figura 3-3
P11
P10 Circuito de teste do
470 Ω P9
P8
botão
P7
P6
P5
LED P4
P3
P2
P1
P0
Vss X2
Página - 54

Testando um Botão com um Circuito de LED


Quando o botão não for pressionado, o LED estará desligado. Se a fiação estiver
correta, quando o botão for pressionado, o LED deverá ser ligado (emitindo luz).

Sinais de alerta: Se o Power LED do Board of Education piscar, escurecer ou


desligar completamente quando você reconectar a energia, pode significar que há
um curto-circuito de Vdd para Vss ou de Vin para VSS. Se isso acontecer,
desligue imediatamente, encontre e corrija o erro em seu circuito.
O Power LED construído dentro do HomeWork Board é diferente. Tanto
pode ser rotulado de "Power" ou "Running" e só brilha enquanto um programa
está em execução. Se um programa termina, porque ele executa um comando
END ou porque é executado sem comandos, o LED desliga.

 Verifique se o LED em seu circuito de teste está desligado.


 Pressione e segure o botão e verifique se o LED emite luz enquanto você estiver
pressionando o botão.

Como o Circuito de Botão Funciona


O lado esquerdo da Figura 3-4 mostra o que acontece quando o botão não está
pressionado. O circuito de LED não está ligado a Vdd. É um circuito aberto que não
pode conduzir corrente. Ao pressionar o botão de pressão, como mostrado no lado
direito da figura, você fecha a ligação entre os terminais com um condutor de metal. Isto
faz um caminho para que os elétrons fluam através do circuito e como resultado o diodo
emissor de luz emite luz.
Vdd Vdd

Figura 3-4
1, 4 1, 4 Botão não pressionado
e pressionado.
2, 3 2, 3

Botão não pressionado:


No 470 Ω 470 Ω circuito aberto e luz
Current Current
desligada (à esquerda)

LED LED
Botão pressionado:
circuito fechado e luz
ligada (à direita)

Vss Vss

Sua Vez – Um Curto-Circuito


A Figura 3-5 mostra um circuito que vai fazer com que o diodo emissor de luz se
comporte de forma diferente. Quando o botão for pressionado, o LED apaga. Uma vez
que este botão liga um condutor entre os terminais 1,4 e 2,3, quando pressionado,
significa que a eletricidade passa a circular pelo menor caminho da resistência através
do botão em vez de ir através do LED. Ao contrário dos curtos-circuitos possíveis
discutidos na caixa de Sinais de Alerta, o curto-circuito que o botão pressionado
provoca através dos terminais do LED não danifica qualquer circuito e serve a um
propósito útil.

 Construa o circuito mostrado na Figura 3-5.


Página - 55

 Repita os testes realizados no primeiro circuito de botão que você construiu com
este novo circuito.

Vdd Vdd Vin Vss


X3
P15
1, 4 P14
P13
P12 Figura 3-5
P11 +
LED P10 Diodo emissor de luz
P9
2, 3 P8 que entra em curto-
P7 circuito com uso do
P6
P5 botão
470 Ω P4
P3
P2
P1
P0
Vss X2

O que você pode realmente fazer com o LED? Até agora, o cátodo do LED
sempre foi ligado ao Vss. Agora, o LED está num local diferente no circuito,
com o seu ânodo ligado ao Vss. Muitas vezes as pessoas se perguntam se isso
quebra todas as regras do circuito, e a resposta é não. A pressão elétrica fornecida
por Vdd e Vss é de 5 volts. O LED vermelho sempre usará cerca de 1,7 volts, e o
resistor vai usar os restantes 3,3 volts, independentemente da sua ordem.

ATIVIDADE #2: LEITURA DO BOTÃO COM O BASIC STAMP


Nesta atividade, você vai ligar um circuito de botão para o BASIC Stamp mostrar se ele
está ou não pressionado. Você vai fazer isso escrevendo um programa de PBASIC que
verifica o estado do botão e exibe-o no DEBUG Terminal.

Peças para um Circuito de Botão


(1) Botão – normalmente aberto
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) Resistor – 10 kΩ (marrom-preto-laranja)
(2) Fios

Construindo o Circuito de Botão para o BASIC Stamp


A Figura 3-6 mostra um circuito de botão ligado ao pino de I/O P3 do BASIC Stamp.

 Construindo o circuito mostrado na Figura 3-6.


Página - 56

Figura 3-6
Circuito de
Vdd Vin Vss botão conectado
X3 ao pino de I/O
P15
P3
Vdd P14
P13
P12 No diagrama de
P11 fiação, o resistor
P10
P9 de 220 Ω está
P8
P7
no lado
P3 P6 esquerdo
P5
220 Ω P4 ligando o botão
10 kΩ P3 à P3, enquanto
P2
P1 o resistor de 10
P0
X2
kΩ está à
Vss
direita, ligando o
circuito do botão
à Vss.

A Figura 3-7 mostra o que o BASIC Stamp vê quando o botão é pressionado e quando
não é. Quando o botão é pressionado, o BASIC Stamp percebe que Vdd está ligado a
P3. Dentro do BASIC Stamp, isso faz com que ele coloque o número 1 em uma parte da
sua memória que armazena informações sobre os seus pinos de I/O. Quando o botão não
for pressionado, o BASIC Stamp não pode sentir Vdd, mas pode sentir Vss através dos
resistores 10 kΩ e 220 Ω. Isso faz com que ele armazene o número 0, no mesmo local
de memória que armazena 1 quando o botão está pressionado.
Vdd SOUT 1 24 VIN
SIN 2 23 VSS
ATN 3
BS2 22 RES
VSS 4 21 VDD (+5V)
P0 5 20 P15
P1 6 19 P14
P2 7 1 18 P13
P3 8 17 P12
0
P4 9 16 P11
Figura 3-7
220 Ω P5 10 15 P10
10 kΩ P6 11 14 P9 BASIC Stamp lendo o
P7 12 13 P8
botão
BS2-IC

Vss Quando o botão está


pressionado, o BASIC
Vdd SOUT 1 24 VIN
Stamp lê 1 (acima).
SIN 2
BS2
23 VSS Quando o botão não
ATN 3 22 RES
VSS 4 21 VDD (+5V) está pressionado o
P0
P1
5

6
20

19
P15
P14
BASIC Stamp lê 0
P2 7
1 18 P13 (abaixo).
P3 8 17 P12
P4 9 0 16 P11
220 Ω P5 10 15 P10
10 kΩ P6 11 14 P9
P7 12 13 P8

BS2-IC

Vss

Binário e Circuitos: O sistema numérico com base-2 usa apenas os dígitos 1 e 0


para fazer números, e esses valores binários podem ser transmitidos de um
dispositivo para outro. O BASIC Stamp interpreta Vdd (5 V) como um binário-1
e Vss (0 V) como um binário-0. Da mesma forma, quando o BASIC Stamp
define o pino de I/O para Vdd usando HIGH, envia o binário-1. Quando defini o
pino de I/O para Vss usando LOW, envia o um binário-0. Esta é uma forma usual
de comunicação de números utilizada por diversos computadores, chips e outros
dispositivos.
Página - 57

Programando o BASIC Stamp para Monitorar o Botão


O BASIC Stamp armazena um ou zero percebidos no pino de I/O P3 em um local de
memória chamado IN3. Aqui está um exemplo de programa que mostra como isso
funciona:

Exemplo de Programa: ReadPushbuttonState.bs2


Este próximo programa faz o BASIC Stamp verificar o botão a cada ¼ de segundo e
enviar o valor de IN3 ao DEBUG Terminal.
A Figura 3-8 mostra o DEBUG Terminal enquanto o programa está sendo executado.
Quando o botão é pressionado, o DEBUG Terminal exibe o número 1, e quando o botão
não está pressionado, o DEBUG Terminal exibe o número 0.

Figura 3-8
DEBUG Terminal mostrando a
leitura do botão

O DEBUG Terminal exibe 1


quando o botão é pressionado, e
0 quando não está pressionado.

 Entre com o programa ReadPushbuttonState.bs2 no BASIC Stamp Editor.


 Execute o programa.
 Verifique se o DEBUG Terminal exibe o valor 0 quando o botão não está
pressionado.
 Verifique se o DEBUG Terminal exibe o valor 1 quando o botão é pressionado e
mantido.

' O que é um Microcontrolador - ReadPushbuttonState.bs2


' Verifique e informe, a cada 1/4 de segundo, através do DEBUG
' Terminal o estado do botão.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO

DEBUG ? IN3
PAUSE 250

LOOP

Como Funciona o ReadPushbuttonState.bs2


O DO...LOOP no programa repete a cada 1/4 de segundo por causa do comando PAUSE
250. Cada vez através do DO...LOOP, o comando DEBUG ? IN3 envia o valor de IN3
para o DEBUG Terminal. O valor de IN3 é o estado que o pino de I/O P3 percebe no
instante em que o comando DEBUG é executado.
Página - 58

Sua Vez – Um Botão com um Resistor pull-up


O circuito que você terminou tem um resistor ligado ao Vss. Esta resistência é chamada
de resistência pull-down, pois puxa a tensão no P3 até Vss (0 volts), quando o botão não
está pressionado. A Figura 3-9 mostra um circuito de botão de pressão que usa uma
resistência pull-up. Esta puxa o resistor de tensão até Vdd (5 volt), quando o botão não
está pressionado. As regras já estão invertidas. Quando o botão não for pressionado,
IN3 armazena o número 1, e quando o botão é pressionado, IN3 armazena o número 0.

O resistor 220 Ω é utilizado nos exemplos de circuitos de botões de pressão para


proteger o pino de I/O do BASIC Stamp. Embora seja uma boa prática para
prototipagem, na maioria dos produtos este resistor é substituído por um fio (pois
fios custam menos que resistores).

 Modifique seu circuito como mostrado na Figura 3-9.


 Re-execute ReadPushbuttonState.bs2.
 Usando o DEBUG Terminal, verifique se IN3 é 1 quando o botão não está
pressionado e 0 quando o botão está pressionado.
Vdd Vin Vss
X3
Vdd
P15
P14
P13
10 kΩ P12
P11
P3
P10 Figura 3-9
P9
P8 Circuito de botão
220 Ω P7
P6
modificado
P5
P4
P3
P2
Vss P1
P0
X2

Baixa atividade vs. alta atividade: O botão do circuito da Figura 3-9 é chamado
de atividade baixa porque manda ao BASIC Stamp um sinal de baixa (Vss)
quando o botão é ativado (pressionado). O botão do circuito na Figura 3-6 é
chamado de alta porque envia um sinal de alta (Vdd) quando o botão é ativado
(pressionado).

ATIVIDADE #3: CONTROLE POR BOTÃO DE UM CIRCUITO DE LED


A Figura 3-10 mostra, em zoom, o botão de pressão e o LED usado para ajustar as
configurações em um monitor de computador. Este é apenas um dos muitos dispositivos
que possuem um botão que você pode pressionar para ajustar o dispositivo e um LED
para mostrar o status do dispositivo.
Página - 59

Figura 3-10
Botão e LED no
monitor do
computador

O BASIC Stamp pode ser programado para tomar decisões com base no que ele sente.
Por exemplo, ele pode ser programado para piscar o LED em on/off, dez vezes por
segundo, quando o botão é pressionado.

Peças do Circuito de LED e Botão


(1) Botão – normalmente aberto
(1) Resistor – 10 kΩ (marrom-preto-laranja)
(1) LED – qualquer cor
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) Resistor – 470 Ω (amarelo-violeta-marrom)
(2) Fios

Construindo o Circuito de LED e Botão


A Figura 3-11 mostra o circuito de botão usado na atividade que você acabou de
terminar junto do circuito de LED utilizado na Atividade #2 do Capítulo 2.

 Construa o circuito mostrado na Figura 3-11.

P14
470 Ω
LED Vdd Vin Vss
X3
+
Vss P15
P14
P13
Vdd P12 Figura 3-11
P11
P10 Circuito de LED e
P9 botão
P8
P7
P3 P6
P5
220 Ω P4
10 kΩ P3
P2
P1
P0
Vss X2

Programando o Controle do Botão


O BASIC Stamp pode ser programado para tomar decisões usando as declarações
IF...THEN...ELSE. O programa de exemplo que você vai executar irá piscar o LED
on e off quando o botão for pressionado. Cada vez através do DO...LOOP, as
Página - 60

declarações IF...THEN...ELSE verificam o estado do botão e decidem se o LED


deve piscar ou não.

Exemplo de Programa: PushbuttonControlledLed.bs2


 Entre com o PushbuttonControlledLed.bs2 no BASIC Stamp Editor e execute-o.
 Verifique se o LED pisca on e off enquanto o botão é pressionado e mantido
pressionado.
 Verifique se o LED não piscará quando o botão não estiver pressionado.

' O que é um Microcontrolador - PushbuttonControlledLed.bs2


' Verifique o estado do botão 10 vezes por segundo e faça o LED piscar
' quando pressionado.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO

DEBUG ? IN3

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
LOW 14
PAUSE 50

ELSE
PAUSE 100

ENDIF

LOOP

Como Funciona o PushbuttonControlledLed.bs2


Este programa é uma versão modificada do ReadPushbuttonState.bs2 da atividade
anterior. Os comandos DO ... LOOP e DEBUG? IN3 são os mesmos. O comando
PAUSE 250 foi substituído por uma declaração IF...THEN...ELSE. Quando a
condição após o IF é verdadeira (IN3 = 1), os comandos que vêm após a declaração
THEN, são então executados. Eles serão executados até que a declaração ELSE seja
atingida, ponto no qual o programa salta para ENDIF e segue em frente. Quando a
condição do IF não é verdadeira (IN3 = 0), os comandos da instrução ELSE são
executados até ENDIF ser atingido.

Você pode fazer uma lista detalhada do que um programa deve fazer, isso ajudará a
planejar o programa ou descrever o que ele faz. Esse tipo de lista é chamado de pseudo-
código, e o exemplo abaixo usa pseudo-código para descrever como o
PushbuttonControlledLed.bs2 funciona.

o Faz com que os comandos a partir daqui até a declaração de Loop se


repitam indefinidamente.
o Mostra o valor de IN3 no DEBUG Terminal.
o Se (If) o valor de IN3 for 1, então (Then)
 Acende o LED
Página - 61

 Espera 1/20 de segundo


 Apaga o LED
 Espero 1/20 de segundo
o Se não (Else) (se o valor de IN3 for 0)
 Não faz nada, mas espera a mesma quantia de tempo que
levaria para o LED piscar rapidamente (1/10 de
segundo).
o Loop

Sua Vez – Mais Rápido/Mais Devagar


 Salve o programa de exemplo com um nome diferente.
 Modifique o programa para que o LED pisque duas vezes mais rápido, quando
você pressionar e segurar o botão.
 Modifique o programa para que o LED pisque duas vezes mais devagar, quando
você pressionar e segurar o botão.

ATIVIDADE #4: DOIS BOTÕES CONTROLANDO DOIS DOS CIRCUITOS DE


LED
Vamos adicionar um segundo botão para o projeto e ver como ele funciona. Para tornar
as coisas um pouco mais interessantes, vamos também adicionar um segundo circuito de
LED e usar o segundo botão para controlá-lo.

Peças do Circuito de LED e Botão


(2) Botão – normalmente aberto
(2) Resistores – 10 kΩ (marrom-preto-laranja)
(2) Resistores – 470 Ω (amarelo-violeta-marrom)
(2) Resistores – 220 Ω (vermelho-vermelho-marrom)
(2) LEDs – qualquer cor
(3) Fios

Adicionando um Botão e um Circuito de LED


A Figura 3-12 mostra um segundo circuito de LED e botão adicionados ao circuito que
você testou na atividade anterior.

 Construa o circuito mostrado na Figura 3-12. Se você precisar de ajuda para


construir o circuito mostrado no esquema, use o diagrama de fiação na Figura 3-
13 como guia.
 Modifique ReadPushbuttonState.bs2 para que ele leia IN4 em vez de IN3, e use
isso para testar o segundo botão do circuito.
Página - 62

P15
470 Ω
P14
470 Ω

LED LED

Vss Vss
Figura 3-12
Esquema para circuito
Vdd Vdd de dois botões e
LEDs
P4
220 Ω

P3
220 Ω
10 kΩ 10 kΩ

Vss Vss

Pontos que indicam conexões: Existe, na Figura 3-12, três locais onde os fios se
intersectam, mas apenas dois pontos. Os fios estão conectados apenas se há um
ponto na intersecção. O fio que conecta o botão ligado a P4 ao resistor de 10 kΩ,
não está conectado ao circuito do botão ligado a P3 porque não há nenhum ponto
indicando essa conexão.

Vdd Vin Vss


X3 ++
P15
P14
P13 Figura 3-13
P12
P11 Diagrama de fiação de dois
P10 botões e LEDs
P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
X2

Programando o Controle do Botão


Na atividade anterior, você fez uma experiência ao tomar decisões de usar uma
instrução IF...THEN...ELSE. Também existe tal coisa com um
IF...ELSEIF...ELSE. Ele funciona muito bem para decidir quais LEDs piscarão e
desligarão. O seguinte programa de exemplo mostra como ele funciona.

Exemplo de Programa: PushbuttonControlOfTwoLeds.bs2


 Coloque e execute PushbuttonControlOfTwoLeds.bs2 no BASIC Stamp Editor.
 Verifique se o circuito de LED conectado à P14 piscará on e off quando o botão
no circuito conectado à P3 é pressionado.
Página - 63

 Também verifique se o LED no circuito ligado à P15 pisca quando o botão do


circuito conectado à P4 é pressionado.

' O que é um Microcontrolador- PushbuttonControlOfTwoLeds.bs2


' Faça o LED ligado a P14 piscar quando o botão ligado a P3 for
' pressionado e o LED ligado a P15 piscar quando o botão ligado a P4
' for pressionado.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DO

DEBUG HOME
DEBUG ? IN4
DEBUG ? IN3

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
ELSEIF (IN4 = 1) THEN
HIGH 15
PAUSE 50
ELSE
PAUSE 50
ENDIF

LOW 14
LOW 15

PAUSE 50

LOOP

Como Funciona o PushbuttonControlOfTwoLeds.bs2


Se a exibição de IN3 e IN4 rolou para baixo o DEBUG Terminal, como aconteceu no
exemplo anterior, será difícil de ler. Uma maneira de corrigir isso é sempre enviar o
cursor para o topo à esquerda no DEBUG Terminal usando o caractere de controle
HOME:

DEBUG HOME

Enviar o cursor para a posição inicial sempre através do DO...LOOP, os comandos:

DEBUG ? IN4
DEBUG ? IN3

... exibem os valores de IN4 e IN3 sempre na mesma parte do DEBUG Terminal. A
palavra-chave DO começa o loop neste programa:

DO

Estes comandos na instrução IF são os mesmos que os do programa de exemplo da


atividade anterior:
Página - 64

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50

É aqui que a palavra-chave ELSEIF o ajudará. Se IN3 não é 1, mas IN4 é 1, queremos
que o LED esteja ligado ao P15 em vez de estar ligado ao P14.

ELSEIF (IN4 = 1) THEN


HIGH 15
PAUSE 50

Se nenhuma das afirmações for verdadeira, e ainda quisermos fazer uma pausa por 50
ms, sem alterar o estado de todos os circuitos de LED.

ELSE
PAUSE 50

Quando você terminar com todas as decisões, não se esqueça do ENDIF.

ENDIF

É hora de desligar os LEDs e pausar novamente. Você poderia decidir qual LED ligou e
desligá-lo. Comandos do PBASIC são executados de forma muito rápida, então por que
não deixá-los desligados e esquecer sobre elaborar mais decisões?

LOW 14
LOW 15

PAUSE 50

A declaração LOOP enviará o programa de volta para a declaração DO, e todo o processo
de checagem dos botões e mudança do estado dos LEDs começará novamente.

LOOP

Sua Vez – Que Tal Pressionar os dois Botões?


O exemplo de programa tem uma falha. Tente pressionar ambos os botões ao mesmo
tempo e você verá a falha. Seria esperado que ambos os LEDs piscassem on e off, mas
isto não acontece, pois somente um bloco de código IF...ELSEIF...ELSE será
executado antes que vá ao ENDIF. Aqui está como você pode corrigir esse problema:

 Salve PushbuttonControlOfTwoLeds.bs2 com um nome diferente.


 Substitua a declaração IF e o bloco de código:

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50

...com a declaração IF...ELSEIF:


Página - 65

IF (IN3 = 1) AND (IN4 = 1) THEN


HIGH 14
HIGH 15
PAUSE 50

ELSEIF (IN3 = 1) THEN


HIGH 14
PAUSE 50

Um bloco de código é um grupo de comandos. A instrução IF acima tem um


bloco de código com três comandos (HIGH, HIGH e PAUSE). A declaração
ELSEIF tem um bloco de código com dois comandos (HIGH, PAUSE).

 Execute ou modifique o programa e observe como ele lida com botão


pressionado e se os resultados dos circuitos de LED saíram como esperado.

A palavra chave AND pode ser usada nas declarações IF...THEN para checar
se há mais condições verdadeiras. Todas as condições com AND têm que ser
verdadeiras para a declaração IF ser verdadeira.
A palavra chave OR pode também ser usada para checar se pelo menos uma das
condições é verdadeira.

Você pode também modificar o programa para que os LEDs pisquem on em diferentes
quantidades de tempo. Por exemplo, você pode reduzir o argumento Duration do
comando PAUSE a 10 para ambos os botões, aumentando o PAUSE do LED P14 para
100, e o PAUSE do LED P15 para 200.

 Modifique o comando PAUSE do IF e as duas declarações ELSEIF como foram


discutidas.
 Execute o programa modificado.
 Observe a diferença no comportamento de cada luz.

ATIVIDADE #5: TESTE DE TEMPO DE REAÇÃO


Você é um engenheiro de sistemas e trabalha em uma empresa de vídeo games. O
departamento de Marketing recomenda que seja adicionado um circuito, no próximo
controle de um jogo de mão, para testar o tempo de reação do jogador. Sua próxima
tarefa será desenvolver um prova de conceito para o teste de tempo de reação.

A solução que você irá construir e testar nessa atividade é um exemplo de como
solucionar o problema, mas não é definitivamente a única solução. Antes de continuar,
tire um momento para pensar como deve ser projetada esse medidor de tempo de
reação.

Peças do Medidor de Tempo de Reação


(1) LED – bicolor
(1) Resistor – 470 Ω (amarelo-violeta-marrom)
(1) Botão – normalmente aberto
Página - 66

(1) Resistor – 10 kΩ (marrom-preto-laranja)


(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(2) Fios

Construindo o Circuito do Medidor de Tempo de Reação


A Figura 3-14 mostra um diagrama esquemático de fiação para um circuito que pode ser
utilizado com o BASIC Stamp para fazer um medido de tempo de reação.

 Construa o circuito mostrado na Figura 3-14 da página 66.


 Execute TestBiColorLED.bs2 da Atividade #5 do Capítulo 2 para testar o
circuito de LED bicolor e ter certeza de que a fiação está correta.
 Se você apenas reconstruir o circuito de botão para essa atividade, execute
ReadPushbuttonState.bs2 da Atividade #2 deste capítulo para ter certeza que seu
botão está funcionando corretamente.
P15
1

1 2
Vdd Vin Vss
X3
2
P14 P15
470 Ω P14
P13
P12 Figura 3-14
Vdd P11 Circuito de reação de
P10
P9 tempo
P8
P7
P6
P3 P5
P4
220 Ω P3
10 kΩ P2
P1
P0
X2
Vss

Programando o Medidor de Tempo de Reação


O programa de exemplo seguinte é fará com que o LED bicolor off até que o jogador
pressione e segure o botão. Quando o botão for pressionado, o LED ficará vermelho por
um curto período de tempo. Quando o LED ficar verde, o jogador tem que soltar o botão
o mais rápido que puder. O programa medirá o tempo necessário entre o LED ficar
verde e o botão ser solto.

O programa de exemplo também demonstra como o captador e o contador funcionam.


Captação é o processo de verificação se alguma coisa foi mudada, de modo muito
rápido repetidas vezes. Contagem é o processo de adicionar um número a uma variável
cada vez que algo acontece (ou não). Neste programa, o BASIC Stamp vai pesquisar a
partir do momento que o LED bicolor ficar verde até que o botão seja solto. Ele vai
esperar 1/1000 de um segundo, usando o comando PAUSE 1. Cada vez que ele capta e o
botão não é liberado, ele adiciona 1 à variável de contagem chamada timeCounter.
Quando o botão é solto, o programa para a captação e envia uma mensagem para o
DEBUG Terminal que exibe o valor da variável timeCounter.

Exemplo de Programa: ReactionTimer.bs2


 Coloque e execute ReactionTimer.bs2.
 Siga as instruções no DEBUG Terminal (ver a Figura 3-15).
Página - 67

Figura 3-15
Instruções no DEBUG Terminal
da reação de tempo do jogo.

' O que é um Microcontrolador - ReactionTimer.bs2


' Teste o tempo de reação com um botão e um LED bicolor.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000 ' Espera 1 segundo antes da


' primeira menssagem.

timeCounter VAR Word ' Declara variável para armazenar


' o tempo.

DEBUG "Aperte e segure o botão", CR, ' Exibe as instruções de reação.


"para fazer a luz ficar vermelha.", CR, CR,
"Quando a luz ficar verde, solte", CR,
"o botão o mais rápido possível.", CR, CR

DO ' Inicia o loop principal.

DO ' Loop repete...


LOOP UNTIL IN3 = 1 ' Até o botão ser pressionado.

HIGH 14 ' LED bicolor vermelho.


LOW 15

PAUSE 1000 ' Atrasa 1 segundo.

LOW 14 ' LED bicolor verde.


HIGH 15

timeCounter = 0 ' Define timeCounter para zero.

DO ' Loop, conta o tempo...

PAUSE 1
timeCounter = timeCounter + 1

LOOP UNTIL IN3 = 0 ' Até que o botão seja solto.

LOW 15 ' LED bicolor desligado.

DEBUG "Seu tempo foi ", DEC timeCounter, ' Exibe medição de tempo.
" ms.", CR, CR,
Página - 68

"Para jogar novamente,", CR, ' Mostra instruções novamente.


"pressione o botão mais uma vez.", CR, CR

LOOP ' Volta para início do loop


' principal.

Como Funciona o ReactionTimer.bs2


Como o programa deve manter o controle do número de vezes que o botão foi
pressionado, uma variável chamada timeCounter é declarada.

timeCounter VAR Word ' Declara variável


para armazenar
' o tempo.

Variáveis iniciadas com zero: Quando a variável é declarada no PBASIC, este


valor é automaticamente zero até que o comando mostre um novo valor.

O comando DEBUG contém instruções para o jogador.

DEBUG "Aperte e segure o botão", CR,


"para fazer a luz ficar vermelha.", CR, CR,
"Quando a luz ficar verde, solte", CR,
"o botão o mais rápido possível.", CR, CR

As declarações DO...LOOP podem ser assentadas. Em outras palavras, você pode colocar
um DO...LOOP dentro de outro.

DO ' Inicia o loop principal.

DO ' Loop repete...


LOOP UNTIL IN3 = 1 ' Até o botão ser pressionado.
' Pausa do progama estava localizada aqui.

LOOP ' Volta para início do loop


' principal.

Faça com que a parte interna do DO...LOOP mereça mais atenção. O DO...LOOP
pode usar uma condição para decidir se deve ou não se deve sair do loop e passar para
os comandos que virão depois.. O DO...LOOP se repetirá enquanto o botão não for
pressionado (IN3 = 0). O DO ... LOOP será executado repetidas vezes, até que IN3
seja = 1. Então, o programa passa para o próximo comando após a declaração LOOP
UNTIL. Este é um exemplo de captação. O DO...LOOP..UNTIL ficará enquanto o
botão estiver pressionado.

DO ' Loop repete...


LOOP UNTIL IN3 = 1 ' Até o botão ser pressionado.

Os comandos que surgem imediatamente após a declaração LOOP UNTIL acenderão o


LED bicolor vermelho, o atraso de um segundo fará com que o verde acenda.
Página - 69

HIGH 14 ' LED bicolor vermelho.


LOW 15

PAUSE 1000 ' Atrasa 1 segundo.

LOW 14 ' LED bicolor verde.


HIGH 15

Assim que o LED bicolor ficar verde, é hora de começar a contagem para acompanhar
quanto tempo o jogador demora para soltar o botão. A variável timeCounter está
definida em zero, depois outro DO ... LOOP com uma condição UNTIL começa a se
repetir. Ele se repete até que o jogador solte o botão (IN3 = 0). Cada vez através do
loop, o BASIC Stamp atrasará 1 ms usando PAUSE 1, e também adiciona 1 ao valor
da variável timeCounter.

timeCounter = 0 ' Define timeCounter para zero.

DO ' Loop, conta o tempo...

PAUSE 1
timeCounter = timeCounter + 1

LOOP UNTIL IN3 = 0 ' Até que o botão seja solto.

Depois que o botão é liberado, o LED bicolor estará desligado.

LOW 15

Os resultados são exibidos no DEBUG Terminal.

DEBUG "Seu tempo foi ", DEC timeCounter,


" ms.", CR, CR,
"Para jogar novamente,", CR,
"pressione o botão mais uma vez.", CR, CR

A última declaração no programa é LOOP, que envia o programa de volta para a


primeira declaração DO.

Sua Vez – Revisão do Projeto (Tópicos Avançados)


O departamento de marketing deu o seu protótipo para alguns testadores de jogos.
Quando os testes dos jogos tiverem sido feitos, o departamento de marketing entregará
para você uma lista detalhada com os três problemas que deverão ser solucionados antes
que seu protótipo possa ser inserido em um controlador de jogos.

 Salve ReactionTimer.bs2 com um novo nome (como


ReactionTimerYourTurn.bs2).

A "lista detalhada" de problemas e suas soluções são discutidas abaixo.

Item 1: Quando um jogador segura o botão durante 30 segundos, a sua pontuação fica
em torno de 14,000 ms, uma medição de 14 segundos. Isso tem que ser corrigido!
Página - 70

Acontece que a execução do próprio circuito, juntamente com a adição de uma variável
timeCounter leva cerca de 1 ms, sem o comando PAUSE 1. Isto é chamado de
sobrecarga de código (code overhead), e é a quantidade de tempo que o BASIC Stamp
leva para executar os comandos. Uma solução rápida, que vai melhorar a precisão, é
simplesmente comentar o comando PAUSE 1 adicionando um apóstrofo à esquerda
dele.

' PAUSE 1

 Tente comentar PAUSE 1 e teste para ver a precisão do programa.

Em vez de comentar o atraso, outra maneira de corrigir o programa é multiplicar os


resultados por dois. Por exemplo, antes que o comando DEBUG exiba o número de ms,
você pode inserir um comando que multiplicará o resultado por dois:

timeCounter = timeCounter * 2 ' <- Adicione isso


DEBUG "Seu tempo foi ", DEC timeCounter, " ms.", CR, CR

 Apague o apóstrofo do comando PAUSE e tente multiplicar por dois e terá uma
solução.

Para precisão, você pode usar operador o * / para multiplicar por um valor com
uma fração. O operador * / não é difícil de usar, veja como:
1. Coloque o valor ou variável que você deseja multiplicar por um valor
fracionário perante o operador */.
2. Pegue o valor fracionário que você deseja usar e multiplique por 256.
3. Livre-se de qualquer coisa à direita do ponto decimal.
4. Coloque esse valor após o operador */.
Exemplo: Digamos que você deseja multiplicar a variável timeCounter por
3,69.
1. Comece colocando timeCounter a esquerda do operador */ :
timeCounter = timeCounter */
2. Multiplique seu valor fracional de 256: 3.69 x 256 = 944.64.
3. Arredondando: 944.64 ≈ 945.
4. Coloque o valor à direita do operador */:
timeCounter = timeCounter */ 945 ' multiplica
por 3,69”

A multiplicação por 2 vai dimensionar um resultado de 14.000 a 28.000, que é


aproximadamente 30.000. 30,000 ÷ 14,000 ≈ 2.14. Para multiplicar por 2,14, com o
operador * / é preciso descobrir quantos 1/256 estão em 2.14 para maior precisão.
Então, 2,14 x 256 = 547,84 ≈ 548. Você pode usar esse valor e o operador */ para
substituir timecounter = timeCounter * 2.
Página - 71

 Substitua timeCounter = timeCounter * 2 por timeCounter =


timeCounter */ 548 e teste novamente o programa.

Seus 30 segundos de teste com o programa original, sem modificações, podem produzir
um valor que é um pouco diferente de 14000. Se isso acontecer, você pode usar o
mesmo procedimento com os resultados do teste para calcular um valor para o operador
*/ para obter resultados ainda mais precisos.

 Tente isso!

Item 2: Jogadores logo descobriram que o atraso de vermelho para verde é de 1


segundo. Depois de jogar várias vezes, eles são capazes de prever quando soltar, e
sendo assim, sua pontuação já não reflete o tempo real de reação.

O BASIC Stamp tem um comando RANDOM. Aqui está como modificar seu código para
usar um número aleatório.

 No início do seu código, adicionar a declaração de uma nova variável chamada


value e configurá-lá para 23. O valor de 23 é denominado seed, porque ele
começa a sequência de números pseudo-aleatórios.

timeCounter VAR Word


value VAR Byte ' <- Adicione isso
value = 23 ' <- Adicione isso

 Antes do comando PAUSE 1000 dentro do DO...LOOP, use o comando


RANDOM para atribuir um valor a um novo valor aleatório a partir da seqüência
pseudo-aleatória, que começou com 23.

RANDOM value ' <- Adicione isso


DEBUG "Tempo de atraso", ? 1000 + value, CR
' <- Adicione isso

 Modifique o comando PAUSE 1000 para que o valor "random" seja adicionado
ao seu argumento Duration.

PAUSE 1000 + value ' <- Modifique isso

LOW 14
HIGH 15

 Uma vez que o maior valor que um byte pode armazenar é 255, o comando
PAUSE varia somente por ¼ segundo. Você pode multiplicar o valor da variável
por 4 para fazer o atraso da luz vermelha alternar de 1 para pouco mais de 2
segundos.

DEBUG "Tempo de atraso", ? 1000 + (value*4), CR


' <- Modifique
PAUSE 1000 + (value * 4) ' <- Modifique isso
' novamente
Página - 72

O que é um algoritmo? Um algoritmo é uma sequência de operações


matemáticas.
O que é pseudo-aleatório? Meios pseudo-aleatório parecem aleatórios, mas não
são na verdade. Cada vez que você iniciar o programa novamente, você terá a
mesma seqüência de valores.
O que é um seed? Um seed é um valor que é utilizado para iniciar uma
sequência de pseudo-aleatórios. Se você usar um valor diferente para seed
(alteração de valor entre 23 e algum outro número), irá resultar em uma
seqüência diferente pseudo-aleatórios.

Item 3: Um jogador que solta o botão antes da luz ficar verde receberá uma pontuação
excessivamente boa (1 ms). Seu microcontrolador precisa descobrir se o jogador está a
trapaceando.

O pseudo-código foi introduzido neste capítulo no final da Atividade #3. Aqui está um
pseudo-código para ajudá-lo a aplicar uma declaração IF...THEN...ELSE para
resolver o problema. Supondo que você tenha feito as outras alterações nos itens 1 e 2,
timeCounter será agora 2 em vez de 1 se o jogador soltar o botão antes da luz ficar
verde. As mudanças abaixo funcionarão se timeCounter for 1 ou 2.

• Se o valor de timeCounter é menor ou igual a 2 (timeCounter <= 2)


o Mostra uma mensagem que diz ao jogador que ele deve esperar até
depois que a luz fique verde para soltar o botão.
• Logo, (se o valor de timeCounter for maior do que 1)
• Mostra o valor do tempo de timeCounter (assim como em
ReactionTimer.bs2) em ms.
• End If
• Mostra a mensagem para jogar novamente

 Modifique seu programa implementando esse pseudocódigo no PBASIC para


corrigir o problema de um jogador trapaceiro.
Página - 73

SUMÁRIO
Este capítulo introduziu o botão e alguns circuitos de botão comuns. Este capítulo
também apresentou como construir e testar um circuito de botão e como usar o BASIC
Stamp para ler o estado de um ou mais botões. O BASIC Stamp foi programado para
tomar decisões com base no estado dos botões e esta informação foi usada para
controlar os LEDs. Um temporizador de reação de jogo foi construído usando esses
conceitos. Além de controlar os LEDs, o BASIC Stamp foi programado para captar o
botão e fazer as medições de tempo.

Vários conceitos de programação foram introduzidos, incluindo contagem, pseudo-


código para planejamento de fluxo de programa, sobrecarga de código em aplicações
sensíveis ao tempo, e os valores de seeds para eventos pseudo-aleatórios.

Foi introduzida a leitura de circuitos de botões individuais usando as variáveis especiais


de E / S incorporadas ao BASIC Stamp (IN3, IN4, etc). Também foram introduzidas
tomadas de decisões com base nesses valores usando IF...THEN...ELSE,
IF...ELSEIF...ELSE, blocos de código e operadores AND e OR para avaliar mais de
uma condição. Adicionando uma condição para o DO...LOOP usando a palavra-chave
UNTIL foi introduzido junto com o assentamento de blocos de código DO...LOOP. O
comando RANDOM foi apresentado ao adicionar um elemento de imprevisibilidade de um
aplicativo, a reação de tempo de jogo.

Questões
1. Qual é a diferença entre o envio e recepção de sinais HIGH e LOW usando o
BASIC Stamp?
2. O que significa "normalmente aberto", quando diz respeito a um botão?
3. O que acontece entre os terminais de um botão normalmente abertos quando
você os pressiona?
4. Qual é o valor de IN3 quando um botão é ligado ao Vdd? Qual é o valor de IN3
quando um botão é ligado ao Vss?
5. O que faz o comando DEBUG ? IN3?
6. Que tipo de blocos de código podem ser utilizados para tomar decisões com
base no valor de um ou mais botões?
7. O que faz o caractere HOME control na declaração DEBUG HOME?

Exercícios
1. Explicar como modificar ReadPushbuttonState.bs2 na página 57 para que ele
leia o botão a cada segundo, em vez de a cada ¼ de segundo.
2. Explicar como modificar ReadPushbuttonState.bs2 para que ele leia um circuito
de botão normalmente aberto com um resistor pull-up ligado ao pino de I/O P6.

Projeto
1. Modifique ReactionTimer.bs2 para ele seja um jogo para dois jogadores.
Adicione um segundo botão ligado a P4 para o segundo jogador.

Soluções
Q1.Enviando o BASIC Stamp para usar pino de I/O como uma saída, enquanto
receptor usa o pino de I/O como entrada.
Página - 74

Q2.Normalmente aberto significa que o estado normal do botão (não pressionado)


forma um circuito aberto.
Q3.Quando pressionada, a distância entre os terminais é uma ponte para um
condutor de metal. A corrente pode então fluir através do botão de pressão.
Q4. IN3 = 1 quando o botão estiver ligado a Vdd. IN3 = 0 quando o botão estiver
ligado a Vss.
Q5.DEBUG ? IN3 apresenta o texto "IN3 =", seguido pelo valor armazenado no
IN3 (0 ou 1 dependendo do estado do pino de I/O P3), seguido por um retorno
de transporte.
Q6.IF...THEN...ELSE and IF...ELSEIF...ELSE.
Q7.O caractere HOME control envia o cursor para a posição superior esquerda no
DEBUG Terminal.

E1. O DO...LOOP no programa se repete a cada ¼ de segundo, devido ao comando


PAUSE 250. Para repetir a cada segundo, mude o PAUSE 250 (250 ms = 0,25 s
= ¼ s), para PAUSE 1000 (1000 ms = 1 s).

DO
DEBUG ? IN3
PAUSE 1000
LOOP

P1. Substitua IN3 por IN6, para ler o pino de I/O P6. O programa só exibe a posição
do botão de estado, e não usa o valor para tomar decisões, o que não importa se
o resistor é um pull-up ou pull-down. O comando DEBUG irá exibir a posição do
botão de qualquer maneira.

DO
DEBUG ? IN6
PAUSE 250
LOOP

Primeiro, um botão foi adicionado para o segundo jogador, ligado ao pino de I/O P4 no
BASIC Stamp. O esquema baseia-se na Figura 3-14.
Vdd
P15
1

P4
220 Ω
10 kΩ
2
P14
470 Ω
Vss
Vdd

P3
220 Ω
10 kΩ

Vss

Fragmentos do programa de solução estão incluídos abaixo, mas mantenha em mente


que soluções podem ser codificadas de várias maneiras. No entanto, a maioria das
soluções deverá incluir as seguintes modificações:
Página - 75

Use duas variáveis para manter o controle de tempo dos dois jogadores:

timeCounterA VAR Word ' Tempo de pontuação do jogador A


timeCounterB VAR Word ' Tempo de pontuação do jogador B

Altere as instruções para mostrar dois botões:

DEBUG "Pressione e segure os botões", CR,


DEBUG "Pressione os botões novamente.", CR, CR

Espere para que ambos os botões sejam pressionados antes do LED ficar vermelho,
usando o operador AND:

LOOP UNTIL (IN3 = 1) AND (IN4 = 1)

Aguarde os dois botões serem lançados para finalizar o tempo , usando mais uma vez o
operador AND:

LOOP UNTIL (IN3 = 0) AND (IN4 = 0)

Adicione lógica que decide quando o tempo do jogador é incrementado:

IF (IN3 = 1) THEN
timeCounterA = timeCounterA + 1
ENDIF
IF (IN4 = 1) THEN
timeCounterB = timeCounterB + 1
ENDIF

Mude o tempo de exibição que mostra o tempo de ambos jogadores:

DEBUG "Player A Time: ", DEC timeCounterA, " ms. ", CR


DEBUG "Player B Time: ", DEC timeCounterB, " ms. ", CR, CR

Adicione lógica que mostra qual jogador que teve o tempo de reação mais rápido:

IF (timeCounterA < timeCounterB) THEN


DEBUG "Jogador A é o vencedor!", CR
ELSEIF (timeCounterB < timeCounterA) THEN
DEBUG "Jogador B é o vencedor!", CR
ELSE
DEBUG "Empate!", CR
ENDIF

A solução completa é mostrada abaixo.

' O que é um Microcontrolador - Ch03Prj01_TwoPlayerReactionTimer.bs2


' Teste o tempo de reação com um botão e um LED bicolor.
' Adicione um segundo botão para outro jogador. Os jogadores jogam ao
' mesmo tempo usando o mesmo LED. O que soltar mais rápido ganha.
' Pino P3: Botão do Jogador A, Ativo High
' Pino P4: Botão do Jogador B, Ativo High

' {$STAMP BS2}


Página - 76

' {$PBASIC 2.5}

timeCounterA VAR Word ' Pontuação de tempo jogador A


timeCounterB VAR Word ' Pontuação de tempo jogador B
PAUSE 1000 ' 1 s antes da 1a mensagem

DEBUG "Press and hold pushbuttons", CR, ' Exibe instruções


"to make light turn red.", CR, CR, ' de reação.
"When light turns green, let", CR,
"go as fast as you can.", CR, CR
DO ' Inicia loop principal.

DO ' Loop até nada ser pressionado.


LOOP UNTIL (IN3 = 1) AND (IN4 = 1)

HIGH 14 ' LED bicolor vermelho.


LOW 15

PAUSE 1000 ' Atrasa 1 segundo.

LOW 14 ' LED bicolor verde.


HIGH 15

timeCounterA = 0 ' Define timeCounters para zero.


timeCounterB = 0

DO

PAUSE 1
IF (IN3 = 1) THEN ' Se o botão ainda estiver
timeCounterA = timeCounterA + 1' pressionado, incrementa counter
ENDIF
IF (IN4 = 1) THEN
timeCounterB = timeCounterB + 1
ENDIF

LOOP UNTIL (IN3 = 0) AND (IN4 = 0) ' Loop até os dois botões serem
' soltos.

LOW 15 ' LED bicolor apagado.

DEBUG "Tempo do Jogador A: ", DEC timeCounterA, " ms. ", CR


DEBUG "Tempo do Jogador B: ", DEC timeCounterB, " ms. ", CR, CR
IF (timeCounterA < timeCounterB) THEN
DEBUG "Jogador A é o vencedor!", CR
ELSEIF (timeCounterB < timeCounterA) THEN
DEBUG "Jogador B é o vencedor!", CR
ELSE ' Tempos de A & B são iguais
DEBUG "Empate!", CR
ENDIF
DEBUG CR

DEBUG "To play again, hold the ", CR ' Intruções para jogar de novo.
DEBUG "buttons down again.", CR, CR

LOOP ' Retorna ao início do loop


' principal.
Página - 77

Capítulo 4: Controle de Movimento


MOVIMENTO MICROCONTROLADO
Microcontroladores fazem, no dia a dia, os objetos ao seu redor, se deslocarem para o
lugar certo. Se você tiver uma impressora jato de tinta, o cabeçote de impressão que ao
imprimir vai e volta ao longo da página, é movido por um motor de passo controlado
por um microcontrolador. As portas automáticas de supermercado que são abertas
quando você passa são controladas por microcontroladores, e o recurso de ejeção
automática no seu leitor de DVD também é controlado por um microcontrolador.

SINAIS DE ON/OFF E MOVIMENTOS DO MOTOR


Praticamente todos os motores microcontrolados recebem sequências de sinais de alta e
baixa semelhantes aos que você envia para os LEDs. A diferença é que o
microcontrolador envia esses sinais a taxas que são geralmente muito mais rápidas do
que os exemplos de LED que piscam, mencionados no Capítulo 2. Se você tivesse que
usar um circuito de LED para monitorar sinais de controle, alguns fariam a cintilação
LED on/off tão rapidamente que o olho humano não conseguiria detectar a mudança. O
LED só iria parecer que brilha fracamente. Outros apareceriam como um rápido
lampejo, e outros seriam mais facilmente discerníveis.

Alguns motores requerem vários de circuitos que ajudam o microcontrolador a


funcionar. Outros motores necessitam de peças mecânicas extras para fazê-los
funcionar, corretamente, em máquinas. De todos os diferentes tipos de motores,
começando com o servo hobby que você vai experimentar neste capítulo é
provavelmente o mais simples. Como você verá em breve, é fácil controlá-lo com o
BASIC Stamp, pois requer poucos ou nenhum circuito adicional, e tem uma saída
mecânica que facilita a conexão com os objetos ao movimentá-los.

INTRODUZINDO O SERVO
O servo hobby é um dispositivo que controla a posição, e você pode encontrá-lo em
praticamente qualquer carro controlado por rádio (RC), barco ou avião. Em carros com
RC, o servo mantém a direção para controlar a forma como o carro drasticamente gira.
Em um barco de RC, ele detém o leme na posição de voltas. Aviões com RC têm
normalmente vários servos posicionando as diferentes abas para controlar o movimento
do avião. Em veículos com RC com motores movidos a gás, outro servo move a
alavanca do acelerador do motor para controlar o quão rápido o motor funciona. Um
exemplo de um avião com RC e de seu controlador de rádio são mostrados na figura 4-
1. Os amadores "voam" o avião através da manipulação do leme com o polegar no
controlador de rádio, fazendo com que os servos no avião controlem a posição das abas
e do leme do avião com RC.
Página - 78

Figura 4-1
Modelo de Avião e
Controlador de Rádio

Então, como será segurando o leme do controlador de rádio em uma determinada


posição provocando a aba do avião com RC para se manter em uma determinada
posição? O controlador de rádio converte a posição de uma das alavancas em pulsos de
radioatividade que duram uma determinada quantidade de tempo. O tempo final de cada
indica a posição de um dos joysticks. No avião com RC, um receptor de rádio converte
esses pulsos de atividade de rádio em pulsos digitais (sinais de alta/baixa) e os envia
para os servos do avião. Cada servo tem, em seu interior, um circuito que converte esses
pulsos digitais para uma posição, que o servo mantém. A quantidade de tempo de cada
pulso tem uma duração que diz que posição o servo deve manter. Esses pulsos de
controle duram apenas alguns milésimos de segundo, e são repetidos em torno de 40 a
50 vezes por segundo para que o servo mantenha a posição.

A Figura 4-2 mostra o desenho de um servo padrão da Parallax. A tomada (1) é


utilizada para ligar o servo a uma fonte de energia (Vss e Vdd) e a uma fonte de sinal
(um pino de I/O do BASIC Stamp). O cabo (2) tem três fios, e conduz Vdd, Vss e a
linha de sinal da tomada no servo. O horn (3) é a parte do servo que se parece com uma
estrela de quatro pontas. Quando o servo está em execução, o horn é a peça móvel que
mantém o servo em diferentes posições. O parafuso Phillips (4) mantém o horn no eixo
de saída do servo. A caixa (5) contém o sensor de posição do servo e os circuitos de
controle, um motor DC e engrenagens. Estas partes trabalham juntas para levar sinais de
alta/baixa do BASIC Stamp e traduzi-los em posições detidas pelo horn do servo.
Página - 79

Figura 4-2
3 Servo Padrão Parallax
1
(1) Tomada
(2) Cabo
(3) Horn
4
(4) Parafuso que
prende o horn no eixo
de saída do servo
(5) Caixa

Neste capítulo, você vai programar o BASIC Stamp para enviar sinais que controlam a
posição do horn do servo ao servo. Ao fazer o BASIC Stamp enviar sinais que dizem ao
servo que mantenha diferentes posições, seus programas também podem orquestrar o
movimento do servo. Seus programas podem, até mesmo, monitorar botões e usar
informações enquanto os botões são pressionados para ajustar a posição que o servo
mantém (botão de controle da posição do servo). O BASIC Stamp também pode ser
programado para receber as mensagens que você digitar no DEBUG Terminal e usar
essas mensagens para controlar a posição do servo (posição de controle do terminal do
servo).

ATIVIDADE #1: CONECTANDO E TESTANDO O SERVO


Nesta atividade, você vai seguir instruções para conectar um servo à fonte de
alimentação de sua própria placa e do BASIC Stamp.

Servo e Peças do Circuito de LED


(1) Servo padrão da Parallax
(1) Resistor – 470 Ω (amarelo-violeta-marrom)
(1) LED – Qualquer cor

O circuito de LED será utilizado para monitorar o sinal de controle que o BASIC Stamp
envia para o servo. Tenha em mente que o circuito de LED não é necessário para ajudar
o servo operar. Ele está ali apenas para ajudar a "ver" os sinais de controle.

CUIDADO: Utilize apenas o servo padrão da Parallax para as atividades neste


texto! Outros servos podem ser projetados para diferentes especificações que
podem não ser compatíveis com essas atividades.
Página - 80

Construindo os Servos e Circuitos de LED


No Capítulo 1, você identificou e atualizou sua placa usando a ajuda do BASIC Stamp
Editor. Você vai precisar saber qual placa e atualização que você tem aqui para que
você possa encontrar as instruções de construção do circuito de servo para a sua placa.

 Se você ainda não sabe qual placa e atualização que possui, abra a ajuda do
BASIC Stamp Editor, vá pra a página inicial e clique em Primeiros Passos
(Getting Started) com Stamps in Class. Em seguida, siga as instruções para
identificar a sua placa.
 Se você tem um Board of Education USB (qualquer Rev) ou Serial (Rev C ou
superior), vá para o circuito do Board of Education na seção abaixo.
 Se você tem o BASIC Stamp HomeWork Board (Rev C ou superior), vá para
seção do circuito do BASIC Stamp HomeWork Board abaixo.
 Se você tem o BASIC Stamp HomeWork Board (Rev C ou superior) vá para a
seção do circuito do BASIC Stamp HomeWork Board Servo na página 82.
 Se a sua placa não estiver na lista acima, vá para www.parallax.com/Go/WAM
→ Conexões de Circuito do Servo ( Servo Circuit Connections) para encontrar
instruções de circuito para a sua placa.. Quando você fizer as instruções do
circuito do servo para a sua placa, vá para Atividade # 2: Programa de Teste de
Controle do Servo na página 84.

Circuito do Servo no Board of Education


Essas instruções são para todos USB Board of Education Revision C, bem como para o
Serial Board of Education Rev C ou superior.

 Desligue a energia mostrada na Figura 4-3.

Figura 4-3
Desconecte a energia

Reset Coloque a chave na posição 0 no


conjunto de 3 posições
0 1 2

A Figura 4-4 mostra o cabeçalho do servo no Board of Education. Esta placa tem um fio
que você pode usar para conectar a fonte de alimentação do servo, quer Vin ou Vdd. O
fio é a peça retangular preta removível indicada pela seta entre os dois cabeçalhos do
servo.

 Verifique se o fio está definido em Vdd como mostrado na Figura 4-4. Se estiver
definido Vin, levante o fio retangular para fora dos pinos em que está
atualmente posicionado, e, em seguida, pressione-o nos dois pinos mais
próximos do rótulo Vdd.
Página - 81

15 14 Vdd 13 12 Figura 4-4


Fio do cabeçalho do servo
Red
Black
definido para Vdd
X4 X5
Vin

O fio permite que você escolha a fonte de alimentação (Vin ou Vdd) para o
Servo Padrão Parallax.
 Se você estiver usando uma bateria de 9 V, configure-o para Vdd.
 Se você estiver usando uma pilha elétrica 4 AA, ou baterias de 6 V,
qualquer configuração funcionará.
 Se você estiver usando um suporte de parede com fonte de alimentação
DC, use apenas Vdd. Antes de conectar a fonte de montagem na parede
DC para o Board of Education, não se esqueça de verificar as
especificações aceitáveis para os suprimentos DC listados no BASIC
Stamp Editor Help.

A Figura 4-5 mostra o esquema do circuito que você vai construir em seu Board of
Education.

 Construa o circuito mostrado na Figura 4-5 e na Figura 4-6.


 Certifique-se de que você ligou o servo da maneira correta. Os fios branco,
vermelho e preto devem estar alinhados como mostrado na Figura 4-6

P14 Figura 4-5


470 Ω Esquema
LED
indicador do
Servo e do LED
para o Board of
Vss
Education
Vdd
Para Serial Board
White of Education Rev
P14
C, ou mais
Red
Servo recente, ou
Black qualquer USB
Board of
Education
Vss
Página - 82

15 14 Vdd 13 12
White
Red Red
Black Black

X4 X5
Vdd Vin Vss
X3
+ Figura 4-6
P15
P14 Servo e LED Indicador
P13
P12
no Board of Education
P11
P10
P9
P8
P7
P6
P5
standard servo
P4
P3 www.parallax.com
P2
P1
P0
X2

Até agora, você tem usado o interruptor de 3 posições na posição 1. Agora, você vai
movê-lo para a posição 2 para ligar a energia para o cabeçalho servo.

 Forneça energia para o cabeçalho de servo ajustando o interruptor de três


posições, como mostrado na Figura 4-7. Seu servo pode mover-se um pouco
quando você ligar a energia.

Figura 4-7
Reset
Alimentação ligada ao Board of
Education e cabeçalho do Servo
0 1 2

Se você vir instruções neste capítulo, que se lê "Ligação de energia para o seu Board"
mova o interruptor de 3 posições para a posição-2. Da mesma forma, se você vir
instruções neste capítulo, que se lê "Desligue a alimentação de sua placa" mova o
interruptor de 3 posições para a posição-0.

 Desligue a alimentação de sua placa.


 Vá para a Atividade #2 na página 84.

Circuito do BASIC Stamp HomeWork Board Servo


Se você está conectando seu servo em um BASIC Stamp HomeWork Board (Rev C ou
mais recente), você vai precisar dessas peças extras do seu kit:

(1) Conector de 3 pinos macho (como mostrado na Figura 4-8).


(4) Fios
Página - 83

Figura 4-8
Peça extra para circuito do Servo
do BASIC Stamp HomeWork
Board

Conector de 3 pinos macho

A Figura 4-9 mostra o esquema do servo e circuitos indicadores do LED no BASIC


Stamp HomeWork Board. As instruções que vêm depois desta figura mostrarão como
construir com segurança este circuito.

 Desligue a bateria 9 V do seu HomeWork Board.


 Construa o indicador de LED e circuito do cabeçalho do servo mostrado no
esquema da Figura 4-9 e o diagrama de fiação na Figura 4-10.

P14
470 Ω
LED

Vss
Figura 4-9
Vdd
Esquema de Servo e
LED Indicador no
White HomeWork Board
P14
Red
Servo
Black

Vss

Figura 4-10
LED Indicador e
circuitos do cabeçalho
do Servo no
HomeWork Board

 Ligue o servo no cabeçalho do servo, como mostrado na Figura 4-11.


 Certifique-se de que as cores dos fios do servo estejam alinhadas corretamente
com as cores marcadas na imagem.
 Confira a fiação.
Página - 84

ATENÇÃO
Utilize apenas uma bateria de 9 V quando o seu Servo Padrão Parallax estiver
ligado ao BASIC Stamp HomeWork Board. Não use qualquer tipo de
alimentação DC ou "bateria substituta" que se conecta a uma tomada AC.

Para melhores resultados, certifique-se que sua bateria é nova. Se você estiver
usando uma bateria recarregável, verifique se ela está recém-recarregada.
Também deve ser avaliada por 100 mAh (miliampere hora) ou mais.

 Reconecte sua bateria 9 V para seu HomeWork Board. O servo pode mexer-se
um pouco quando você fizer a conexão.

Figura 4-11
Servo Conectado ao
HomeWork Board

ATIVIDADE #2: PROGRAMA DE TESTE DE CONTROLE DO SERVO


Grau é a medida de um ângulo representada pelo símbolo “ ° ”. Exemplos de medidas
de grau do ângulo são mostrados na Figura 4-12, incluindo 30°, 45°, 90°, 135° e 180°.
Cada ponto de medição do ângulo representa 1/360 de um círculo, assim a medida de
90° é de ¼ de um círculo, ou seja, 90 ÷ 360 = ¼. Da mesma forma, 180° é ½ de um
círculo, ou seja, 180 ÷ 360 = ½, você pode calcular frações semelhantes para as outras
medições de graus na figura.
Figura 4-12
Exemplos de medidas
de ângulo em graus

O servo padrão da Parallax é capaz de manter qualquer posição dentro de uma gama de
180°, assim as medições de grau podem ser úteis para descrever as posições que o servo
detém. A Figura 4-13 mostra exemplos de um servo com um laço de arame, que foi
introduzido através de dois dos furos em seu horn e, em seguida, torcido. A direção que
o laço de torção aponta indica o ângulo do horn do servo, veja na figura exemplos de 0°,
45°, 90°, 135° e 180°.
Página - 85

Figura 4-13: Exemplos da posição do horn de um servo

A amplitude de movimento e limites mecânicos do horn de seu servo


provavelmente será diferente do que é mostrado aqui. As instruções sobre como
ajustá-lo para corresponder a essa imagem virão após o primeiro programa de
exemplo.

Durante a fabricação, a montagem do horn do servo é aleatória, por isso as posições do


horn do servo serão, provavelmente, diferentes das mostradas na Figura 4-13. Na
realidade, em comparação com a Figura 4-13, o horn de seu servo pode ser montado em
qualquer posição em uma faixa +/- 45°. O servo na Figura 4-14 mostra o exemplo de
um servo cuja ponta foi montada a 20°, no sentido horário, a partir da Figura 4-13.
Depois de encontrar o centro da amplitude de movimento do horn do servo, você pode
usá-la como uma referência de 90° ou ajustar mecanicamente o horn do servo para que
ele corresponda a Figura 4-13 seguindo instruções incluídas mais a frente nesta
atividade.

Figura 4-14: Exemplos de posição do horn do servo antes do ajuste mecânico

Este é um exemplo de um horn que está montado no eixo de saída do servo cerca
de 20° para a esquerda da forma como foi definido na Figura 4-13.

Você pode encontrar o centro da amplitude de movimento do servo girando suavemente


o horn para encontrar seu sentido horário e anti-horário nos limites mecânicos. A
posição a meio caminho entre estes dois limites é o centro, ou a posição de 90°. A
posição central do servo pode cair em qualquer lugar da área mostrada na Figura 4-15.
Página - 86

O centro da amplitude de movimento do horn de


seu servo deve cair em algum lugar nesta área.

Figura 4-15
Gama de posições
centrais possíveis

Nestes próximos passos, torça o horn do servo lentamente sem forçá-lo! O


servo foi construído com limites mecânicos para evitar que o horn gire fora de
sua faixa de 180° de movimento. Torça o horn suavemente, e você será capaz de
sentir quando ele atinge um dos seus limites mecânicos. Não tente forçá-lo além
desses limites, pois assim você pode tirar as engrenagens de dentro do servo do
lugar.

 Verifique se a energia de sua placa ainda está desconectada.


 Delicadamente gire o horn do servo para descobrir os seus limites mecânicos,
em sentido horário e anti-horário. O horn do servo girará aplicando muita pouca
força até chegar a esses limites. NÃO TENTE TORCER OS HORNS ALÉM
DESTES LIMITES, torça somente o suficiente para encontrá-los.
 Gire o horn do servo para que ele fique a meio caminho entre os dois limites.
Esta é, aproximadamente, a posição "central" do servo.
 Com o horn do servo em sua posição central, passe um fio através do horn, torça
e amarre-o para que ele aponte para cima, na área mostrada na Figura 4-15.

Tenha em mente que a direção do laço de torção mostrada na figura é apenas um


exemplo; o seu laço de torção pode apontar para qualquer lugar da área. Onde quer que
ele aponte quando estiver no centro de sua amplitude de movimento, deveria estar bem
próximo da posição de 90° do servo. Mais uma vez, esta posição pode variar de um
servo para o outro, devido a forma que o horn é conectado ao servo.

Programando a Posição do Servo


O gráfico na Figura 4-16 é chamado de diagrama de tempo, e mostra exemplos de sinais
de alta/baixa que o BASIC Stamp tem que enviar ao servo para fazê-lo manter sua
posição de 90°.
Página - 87

Figura 4-16
Diagrama de
tempo do sinal do
Servo

Pulsos de 1,5 ms
fazem com que o
servo mantenha a
posição “central”
de 90°

O diagrama de tempo mostra sinais de alta que duram 1,5 ms, separados por sinais de
baixa que duram 20 ms. O ... para a direita do sinal é uma maneira de indicar que os
sinais de baixa de 1,5 ms e 20 ms têm de ser repetidos várias vezes para fazer o servo
manter a posição. O símbolo "~" em "~ 20 ms" indica que o tempo de baixa pode ser
aproximado, podendo variar de alguns milésimos de segundos acima ou abaixo de 20
ms, com quase nenhum efeito sobre as posições do horn do servo. Isso porque a
quantidade de tempo que o sinal de alta dura, é que diz ao servo que posição ficar, por
isso tem que ser precisa.

Há um comando especial chamado PULSOUT que dá ao seu programa um controle


preciso sobre as durações desses breves sinais de alta, que são comumente chamados
pulsos. Aqui está a sintaxe do comando PULSOUT:

PULSOUT Pin, Duration

Com o comando PULSOUT, você pode escrever o código PBASIC para fazer o BASIC
Stamp definir a posição do servo a 90° usando a Figura 4-16 do diagrama de tempo
como um guia. O argumento Pin do comando PULSOUT tem que ser um número que diz
que ao BASIC Stamp qual pino de I/O deve transmitir o pulso. O argumento Duration
do comando PULSOUT é o número de dois milionésimos-de-um-segundo, que é o tempo
que o pulso deve durar. 2 milionésimos de um segundo é igual a 2 microssegundos, que
é abreviado 2 μs.

Um milionésimo de segundo é chamado de um microssegundo. A letra grega


µ é usada no lugar da palavra micro e a letra s é usado no lugar do segundo. Isso
é útil para escrever e fazer anotações, pois ao invés de escrever dois
microssegundos, você pode escrever 2µs.
Lembrete: um milésimo de segundo é chamado de milésimo de segundo e é
abreviado ms.
Fato: 1 ms = 1000 µs. Em outras palavras, pode caber 1/1000000000 de um
segundo em um milésimo de segundo.

Agora que sabemos como usar o comando PULSOUT, o ServoCenter.bs2 envia pulsos de
controle repetidamente para fazer o servo manter sua posição de 90°. O comando
PULSOUT 14, 750 irá enviar um pulso de 1,5 ms para o servo. Isso porque o
argumento Duration do comando PULSOUT especifica o número de 2 μs que o pulso
deve durar. Desde que o argumento Duration seja 750, o comando PULSOUT fará o
último pulso para 750 × 2 μs = 1.500 μs, que é de 1,5 ms uma vez que existem 1.000 μs
em 1 ms. Após o pulso de alta ter sido feito, o comando PULSOUT deixa o pino de I/O
enviar um sinal de baixa. Assim, um comando PAUSE 20 depois do PULSOUT faz com
Página - 88

que o BASIC Stamp envie um sinal de baixa para 20 ms. Com esses dois comandos
dentro de um DO...LOOP, o 1,5 ms de alta seguido por 20 ms de baixa será repetido
várias vezes para fazer o servo esperar a sua posição.

Exemplo de Programa: ServoCenter.bs2


' O que é um Microcontrolador - ServoCenter.bs2
' Mantém o servo na posição central.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa Funcionando!", CR

DO
PULSOUT 14, 750
PAUSE 20
LOOP

Teste o Servo na Posição “Central” de 90°


A posição do servo a 90° é chamada de posição central, porque o ponto 90° está no
"centro" da amplitude do movimento de 180° do servo. Os pulsos de 1,5 ms fazem o
servo manter seu horn nesta posição central, que deve ser no meio do caminho
determinado para encontrar os limites mecânicos do servo. Você pode usar qualquer
posição central do servo para manter a referência de 90°, ou usar uma chave de fenda
para remover e reposicionar o horn, assim 90° faz com que o fio do ponto do laço de
torção aponte para cima. As instruções para isso virão na seção intitulada: Opcional –
Ajuste dos horns do servo para 90° no Centro. Se você usar a posição central como
referência, sem ajustá-la, qualquer outra posição que o servo mantiver será próxima a
90°. Por exemplo, a posição de 45° será de 1/8 de volta no sentido horário, e a posição
135° será de 1/8 de volta para a esquerda. Exemplos disto foram mostrados na Figura 4-
14 na página 86.

Vamos primeiro verificar qual posição central real de seu servo:

 Gire cuidadosamente o horn do servo para um de seus limites mecânicos.


 Reconecte a energia de sua placa. Se você tem o Board of Education, certifique-
se de deslizar as 3 posições até o fim para a direita (para posição-2).
 Execute o ServoCenter.bs2.

Assim que o programa for carregado, o horn do servo deve girar para a posição central e
ficar assim. O servo "ficará" nesta posição, porque os servos padrão são projetados para
resistir às forças externas que o empurram contra ele. É assim que o servo mantém a
direção RC do carro, do leme do barco, ou da aba de controle do avião no local.

 Tome nota da posição do centro de seu servo.


 Aplique uma pressão suave na torção do horn como você fez ao girar o servo
para encontrar os seus limites mecânicos. O servo deve resistir e segurar seu
horn na posição central.
Página - 89

Se você desligar a alimentação, você pode girar o servo fora da posição central. Quando
você reconectar energia, o programa vai reiniciar e o servo vai mover imediatamente o
horn de volta à sua posição central e mantê-lo lá.

 Tente isso!

Opcional – Ajuste o Horn do Servo para 90° Central


Opcionalmente, é possível ajustar o horn de seu servo para que ele faça o fio do laço de
torção apontar para cima quando ServoCenter.bs2 estiver em execução, como mostrado
no lado direito da Figura 4-17. Se você fizer este ajuste mecânico, vai simplificar o
rastreamento dos ângulos do servo, pois cada ângulo será semelhante aos da Figura 4-13
na página 86.

Você vai precisar de uma chave Phillips número 2 para esse ajuste opcional.

Figura 4-17
Eixo Chave Centralização
de de fenda Mecânica do
saída Phillips Servo

Você pode
remover e
reposicionar o
horn do servo no
eixo de saída com
uma pequena
chave de fenda
horn

 Desligue a alimentação de sua placa.


 Retire o parafuso que prende o horn do servo ao seu eixo de saída e, em seguida,
puxe delicadamente o horn para fora da cápsula para libertá-la. Suas peças
devem assemelhar-se a que está no lado esquerdo da Figura 4-17.
 Reconecte a energia de sua placa. O programa deve fazer o servo manter o eixo
de saída na posição central.
 Deslize o horn de volta no eixo de saída do servo para que seu laço aponte para
cima, da mesma forma que é mostrada no canto direito da Figura 4-17.

Compensando o Alinhamento: O alinhamento do servo pode não fica perfeito


devido a forma como o horn se encaixa no eixo de saída, mas pode ser próximo.
Você pode então ajustar a alça de arame para compensar este pequeno desvio e
fazer o ponto do laço de torção para cima.

 Desligue a alimentação de sua placa.


 Volte a apertar o parafuso Phillips.
 Reconecte a alimentação para que o programa faça com que o servo mantenha
sua posição central novamente. O laço de torção agora deve apontar para cima
(ou quase em linha reta) indicando a posição de 90°.
Página - 90

Sua Vez – Programas para o Servo Apontar Diferentes Direções


A Figura 4-18 mostra alguns comandos PULSOUT que dizem ao servo que mantenha
certas posições importantes, como 0°, 45°, 90°, 135° e 180°. Estes comandos PULSOUT
são aproximados, e você terá que ajustar levemente os valores para obter posições
angulares mais precisas. Você pode modificar o argumento Duration do comando
PULSOUT para ocupar qualquer área neste intervalo. Por exemplo, se você deseja que o
servo mantenha a posição de 30°, o argumento Duration do comando PULSOUT teria
que ser 417, que é 2/3 do caminho entre o argumento Duration de 250 (0°) para 500
(45°).

As durações de pulso na Figura 4-18 deixarão o horn do servo próximo aos


ângulos indicados, mas elas não são necessariamente exatas. Você pode
experimentar com diferentes valores PULSOUT Duration para um
posicionamento mais preciso.

 Salve uma cópia do ServoCenter.bs2 como TestServoPositions.bs2


 Altere o argumento PULSOUT Duration do programa de 750-para 500, e execute
o programa modificado para verificar se ele faz com que o servo mantenha sua
posição de 45°.
 Repita este teste de argumentos PULSOUT Duration com 1000 (135°), e 417
(30°).
 Para tentar prever o PULSOUT Duration você precisaria de uma posição que não
está listada na Figura 4-18, e teste para certificar-se de que o servo gire o horn e
mantenha a posição que você deseja. Exemplo de posições que podem incluir
60°, 120° etc.

Mantenha os argumentos PULSOUT Duration de seu programa na faixa 350


para 1150. A faixa é "em teoria", de 250-1250, mas na prática, o servo pode
tentar ir além dos seus limites mecânicos. Isto pode reduzir a vida útil do servo.
Se você quiser maximizar o alcance de movimento de seu servo, cuidadosamente
teste os valores que ficam gradualmente mais perto dos limites mecânicos.
Enquanto você usar os valores PULSOUT Duration que posicionam o horn do
servo apenas para dentro de seus limites mecânicos, o desgaste será normal em
vez de excessivo.
Página - 91

Figura 4-18: Posições do horn do servo, comandos PULSOUT durações de pulso


em ms.

Faça o Cálculo
Junto com cada comando PULSOUT na Figura 4-18, há um número correspondente a
milésimos de segundos que cada pulso dura. Por exemplo, o pulso que o comando
PULSOUT 14, 417 envia dura 0,834 ms, e o pulso que o PULSOUT 14, 500 envia
dura 1,0 ms. Se você tem um BASIC Stamp 2 e quer converter o tempo de milésimos de
segundos para o argumento Duration para o seu comando PULSOUT, use essa equação:

Duration = number of ms × 500

Por exemplo, se você já não soubesse que o argumento Duration do comando PULSOUT
para 1,5 ms é 750, aqui está como você pode calcular isso:

Duration = 1 .5 × 500
= 750

A razão pela qual nós devemos multiplicar o número de milésimos de segundos em um


pulso por 500 para obter um argumento Duration do comando PULSOUT é porque
Duration é em termos de unidades de 2 μs para o BS2. Quantas unidades de 2 μs têm em
1 ms? Para descobrir, basta dividir 2 sobre um milionésimo por 1 sobre 1 milésimo.

1 2
÷ = 500
1,000 1,000,000

Se o seu comando for PULSOUT 14, 500, o pulso vai durar 500 × 2 = 1.000 μs = 1,0
ms. (Lembre-se, 1,000 μs = 1 ms.)
Página - 92

Você também pode descobrir o enigma de um argumento Duration de um comando


PULSOUT usando esta equação:

Duration
number of ms = ms
500

Por exemplo, se você considerar o comando PULSOUT 14, 850, quanto tempo o pulso
realmente durou?

850
number of ms = ms
500
= 1 .7 ms

Escreva o Código de Diagramas de Tempo


A Figura 4-19 mostra um diagrama de tempo do sinal que o BASIC Stamp pode enviar
a um servo para que seu horn mantenha uma posição de 135°. Uma vez que este
diagrama de tempo apresenta pulsos repetidos, separados por sinais de baixa de 20ms, o
DO ... LOOP do ServoCenter.bs2 fornece um bom ponto de partida, e tudo o que
precisa ser ajustado é a duração do pulso de alta frequência. Para calcular o argumento
Duration do comando PULSOUT para pulsos de 2 ms no diagrama de tempo, você pode
usar a equação Duration na seção “Faça o cálculo” (Do the Math)

Duration = number of ms × 500


= 2.0 × 500
= 1000

Quando 1000 for substituído no argumento Duration do comando PULSOUT, o loop de


controle do servo deve ficar assim:

DO
PULSOUT 14, 1000
PAUSE 20
LOOP

 Teste o DO...LOOP em uma cópia do ServoCenter.bs2 e verifique se posição do


horn do servo está próxima de 135°.
 Repita este exercício para o diagrama de tempo na Figura 4-20.

Figura 4-19
Diagrama de
Tempo para
Posição de 135°

Pulsos de 2 ms
separados por 20
ms
Página - 93

Figura 4-20
Diagrama de
Tempo para
Posição de 45°

Pulsos de 1 ms
separados por 20
ms

ATIVIDADE #3: CONTROLE DE TEMPO DE ESPERA DO SERVO


Animatrônicos utilizam a eletrônica para animar adereços e efeitos especiais, e os
servos são uma ferramenta comum neste campo. A Figura 4-21 mostra o exemplo de
um projeto de robótica de uma mão animatrônica, com servos controlando cada dedo. O
programa PBASIC que controla os gestos das mãos tem que fazer os servos manterem a
posição por um determinado período de tempo para cada gesto. Na atividade anterior, os
nossos programas fizeram com que os servos sustentassem determinadas posições por
tempo indeterminado. Esta atividade apresenta como escrever um código que faz com
que o servo mantenha certas posições por determinados períodos de tempo.

Figura 4-21
Mão Animatrônica

Há cinco servos na parte inferior


direita da figura que estão
conectados aos dedos e que,
quando acionados, fazem-os
flexionar. Sendo, assim o BASIC
Stamp possui controle sobre
cada dedo.

Loops FOR...NEXT para Controlar o Tempo que o Servo Mantém uma


Posição
Se você escrever um código para fazer um LED piscar uma vez por segundo, você pode
inserir o código em um loop FOR...NEXT que se repete três vezes para fazer com que
a luz pisque por três segundos. Se os seus LEDs piscam cinco vezes por segundo, você
terá que fazer o loop FOR...NEXT repetir o circuito quinze vezes para fazer com que o
LED pisque por três segundos. Uma vez que os comandos PULSOUT e PAUSE que
controlam o seu servo são responsáveis por enviar sinais de alta/baixa, eles também
fazem o LED piscar. Os sinais que enviamos para o servo na atividade anterior fizeram
com que o brilho do LED fosse fraco, talvez com uma aparente tremulação, porque os
sinais on/off são muito rápidos, e os tempos de alta muito breves. Vamos diminuir os
sinais até a velocidade 1/10 para que a luz do LED indicador fique visível e piscando.
Página - 94

Exemplo de Programa: SlowServoSignalForLed.bs2


Comparado com o sinal do centro do servo, este exemplo de programa aumenta as
durações do PULSOUT e PAUSE por um fator de dez, para que possamos vê-los como o
LED indicador pisca. O loop FOR ... NEXT do programa se repete em quase 5 vezes
por segundo, de modo que 15 repetições resultam no piscar da luz por três segundos.

 Desconecte a energia do seu servo:


o Se você tem o Board of Education, coloque o interruptor de 3 posições
para posição 1 para desligar a alimentação do servo. A posição 1
continua a fornecer energia ao resto do sistema.
o Se você tem o BASIC Stamp HomeWork Board, desligue
temporariamente a ponta do fio que está ligada a Vdd e deixe-a livre. Isto
irá desligar a alimentação do seu servo.
 Coloque e execute SlowServoSignalsForLed.bs2.
 Verifique se o LED pisca rapidamente por cerca de três segundos.
 Substitua o EndValue, do loop FOR...NEXT, de 15 para 30 e reexecute o
programa. Como o loop é repetido de duas a infinitas vezes, a luz deve piscar
pelo dobro de tempo - seis segundos.
 Reconecte a energia de seu servo:
o Se você tem o Board of Education, coloque o interruptor de 3 posições
de volta a posição 2 para reconectar o servo.
o Se você tem o BASIC Stamp Homework Board, ligue a extremidade do
fio que você desconectou na tomada Vdd.

' O que é um Microcontrolador – SlowServoSignalsForLed.bs2


' Diminua para 1/10 a velocidade do sinal do servo para que seja
' possível ver o LED indicador acender e apagar.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa funcionando!", CR

counter VAR Word

FOR counter = 1 to 15
PULSOUT 14, 7500
PAUSE 200
NEXT

Exemplo de Programa: ThreeServoPositions.bs2


Se você alterar PULSOUT 14, 7500 para PULSOUT 14, 750 e PAUSE 200 para
PAUSE 20, você terá um loop FOR...NEXT que envia rapidamente o sinal de posição
central para o servo. Uma vez que os sinais agora duram 1/10 de suas durações no
SlowServoSignalsForLed.bs2, todo o loop FOR...NEXT levará 1/10 de tempo para ser
executado. Se o objetivo é fazer com que o servo mantenha uma determinada posição
por três segundos, simplesmente envie o número de pulsos dez vezes maior,
aumentando o argumento FOR...NEXT EndValue de 15 a 150.
FOR counter = 1 to 150 ' Centralize por cerca de 3
segundos.
PULSOUT 14, 750
PAUSE 20
Página - 95

LOOP

O programa de exemplo ThreeServoPositions.bs2 faz o servo manter três posições


diferentes que são mostradas na Figura 4-22, cada uma por cerca de 3 segundos.

Figura 4-22
ThreeServoPositions.bs2

O programa faz com que


o servo mantenha cada
posição por cerca de
três segundos.

 Coloque e execute o ThreeServoPositions.bs2.


 Verifique se o servo mantém cada posição na sequência mostrada na Figura 4-22
por cerca de três segundos.

A última posição que o servo vai manter por 3 segundos é de 135° e, em seguida, o
programa para. O horn do servo vai ficar na mesma posição, mesmo o BASIC Stamp
tendo parado de enviar os pulsos de controle. A diferença é que, durante os três
segundos que o BASIC Stamp mantém a posição de 135°, o servo resiste a quaisquer
forças que tentam empurrar o horn para longe dessa posição. Após os 3 segundos, o
horn do servo poderá manipulado manualmente.

Um jeito de você dizer se o servo está recebendo sinais de controle é observar o


indicador de LED que está conectado ao P14. Enquanto o LED indicador estiver aceso,
significa que o servo está recebendo sinais de controle e mantendo a sua posição.
Quando o sinal parar você verá o brilho no LED indicador parar também.

 Reexecute o programa (ou apenas pressione e solte o botão Reset de sua placa).
 Assim que o servo atingir a posição de 135°, fique de olho no sinal do LED
indicador enquanto você aplica uma leve força de torção no horn.

Você deve ser capaz de sentir a resistência do servo enquanto o LED acende de modo
muito fraco indicando que o servo ainda está recebendo um sinal de controle. Assim que
o LED desligar, indicando que o sinal de controle está parado, o servo irá parar de
manter a sua posição, e você será capaz de girar o horn manualmente.

 Quando o sinal de 135° parar, verifique se o LED indica que o sinal foi
interrompido e se o servo permite que você torça o horn além da posição 135°.

' O que é um Microcontrolador – ThreeServoPositions.bs2


' Servo mantém as posições de 45, 90, e 135 graus por cerca de 3
' segundos cada.

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Word

PAUSE 1000

DEBUG "Posição = 45 graus...", CR


Página - 96

FOR counter = 1 TO 150 ' 45 graus por cerca de 3 seg.


PULSOUT 14, 500
PAUSE 20
NEXT

DEBUG "Posição = 90 graus...", CR

FOR counter = 1 TO 150 ' 90 graus por cerca de 3 seg.


PULSOUT 14, 750
PAUSE 20
NEXT

DEBUG "Posição = 135 graus...", CR

FOR counter = 1 TO 150 ' 135 graus por cerca de 3 seg.


PULSOUT 14, 1000
PAUSE 20
NEXT

DEBUG "Pronto.", CR, CR

END

Sua Vez – Ajustando a Posição vs. Ajustando o Tempo de Espera


ThreeServoPositions.bs2 assume que executar 50 pulsos do servo em um loop
FOR...NEXT leva cerca de 1 segundo. Você também pode usar isso para ajustar o
tempo de espera, ajustando o argumento do EndValue do loop FOR...NEXT. Por
exemplo, se você deseja que o servo mantenha sua posição por cerca de dois segundos,
altere o argumento EndValue de 150 para 100. Para cinco segundos, altere de 150 para
250, e assim por diante.

 Salve uma cópia do ThreeServoPositions.bs2.


 Modifique cada argumento do EndValue do loop FOR...NEXT e experimente
diferentes valores para diferentes tempos de espera.
 Opcional: Personalize as posições de espera, ajustando argumento Duration de
cada comando PULSOUT.

Repetição de Tempo do Loop FOR...NEXT – Realmente é 1/44 de


Segundo, não 1/50
1/50 de um segundo é uma aproximação grosseira de repetição do loop. 1/44 de um
segundo é uma aproximação mais aproximada. Considere a quantidade de tempo que
cada elemento do loop FOR...NEXT leva para ser executado. O comando PULSOUT
14, 750 está no meio da faixa de possíveis durações de pulso, para que ele possa ser o
ponto de referência para a duração média de pulso. Ele envia um pulso que dura 750 × 2
ms = 1.500 ms = 1,5 ms. O comando PAUSE 20 faz o programa atrasar 20 ms. O loop
FOR...NEXT com comandos PULSOUT e PAUSE leva cerca de 1.3 ms para processar
todos os números e comandos. Embora isso signifique que o sinal de baixa entre os
pulsos dura 21,3 ms em vez de 20 ms, não afeta o desempenho do servo. Os tempos de
baixa podem ser alguns ms off, é apenas as durações de pulso de alta que tem que ser
precisas, e o comando PULSOUT é muito preciso.
Página - 97

Assim, o tempo total que o loop FOR ... NEXT leva para repetir é de 1,5 ms + 20 ms
+ 1.3 ms = 22,8 ms, que é 22,8 milésimos de segundo. Então, quantos 22,8 milésimos
de segundo se encaixam em um segundo? Vamos dividir 0,0228 por 1 e descobrir:

1 second ÷ 0.0228 seconds/repetition ≈ 43.86 repetition s


≈ 44 repetition s

É por isso que o loop é repetido a uma média de cerca de 44 repetições por segundo. O
número de repetições em um segundo é chamado de hertz, abreviado Hz. Assim,
podemos dizer que as repetições ou ciclos de sinal do servo serão de aproximadamente
44 Hz.

Ciclos e hertz (Hz): Quando um sinal se repete por um determinado número de


vezes, cada repetição é chamada de ciclo. O número de ciclos de um segundo é
medido em hertz. Hertz é abreviado Hz.

Maiores ou menores valores do PULSOUT Duration levam o loop FOR...NEXT a se


repetir em pouco mais ou menos tempo. O PULSOUT Duration de 750 está bem no meio
da faixa das durações de controle de pulso do servo, mostrada novamente na Figura 4-
18 na página 92. Você pode utilizar 44 Hz como uma referência para o número de
pulsos por segundo no seu código. Se você precisar ser mais preciso, basta repetir o
cálculo para o comando PULSOUT que você está usando. Por exemplo, se o loop tem um
comando PULSOUT com Duration de 1000 em vez de 750, levará 2 ms para o pulso, em
vez de 1,5 ms. O loop ainda tem uma pausa de 20 ms e de 1,3 ms de tempo de
processamento. Então, acrescenta-se 2 + 20 + 1,3 ms = 23,3 ms. Divida 1 segundo por
esse valor para descobrir a taxa do loop FOR...NEXT, e teremos 1 ÷ 0,0233 ≈ 42,9 ≈ 43
Hz.

Sumário de Controle do Loop FOR...NEXT do Servo


A Figura 4-23 mostra a parte que cada número em um loop FOR...NEXT desempenha
no controle do servo. O EndValue do loop FOR...NEXT determina o número de 1/44 de
um segundo para o servo manter a posição. O argumento Duration do comando
PULSOUT diz ao servo que posição manter. O valor de 750 envia um pulso de 1,5 ms,
que instrui o servo a deter uma posição de 90° segundo a Figura 4-18 na página 108. O
argumento Pin do comando PULSOUT escolhe o pino de I/O para o envio de sinais de
controle do servo. Assim, 14 faz com que o comando PULSOUT envie breve sinal de alta
(pulso) para o servo ligado ao pino de I/O P14. Quando o pulso termina, leva o pino de
I/O a enviar um sinal de baixa. Em seguida, o comando PAUSE 20 assegura que o sinal
de baixa dure aproximadamente 20 ms antes do pulso seguinte.
Página - 98

“Número de 44ths de
um segundo para
“Pino de I/O do manter a posição”
Servo”
Figura 4-23
FOR counter = 1 TO Loop FOR
132 ...NEXT para
PULSOUT 14, 750 “Posição a manter”
Controle do
PAUSE 20 Servo
NEXT “Necessário 20 ms
entre cada pulso”

Na média, um loop FOR...NEXT, envia um único comando PULSOUT ao servo, seguido


de PAUSE 20, que repete cerca de 44 vezes por segundo. Uma vez que este ciclo se
repete 132 vezes, faz com que o servo mantenha a posição 90° por cerca de 3 segundos.
Isso por que:

132 repetition s ÷ 44 repetition s/second = 3 seconds

Se a sua aplicação ou projeto precisa fazer o BASIC Stamp enviar ao servo um sinal por
um determinado número de segundos, basta multiplicar o número de segundos por 44, e
usar o resultado em seu argumento EndValue do loop FOR...NEXT. Por exemplo, se o
sinal deve durar cinco segundos:

5 seconds × 44 repetitions/second = 220 repetitions

ATIVIDADE #4: CONTROLANDO POSIÇÕES COM SEU COMPUTADOR


A automação industrial envolve, muitas vezes, microcontroladores que se comunicam
com computadores de maior porte. Os microcontroladores leem sensores e transmitem
os dados para o computador principal. O computador principal interpreta e analisa os
dados do sensor e envia informações de volta sobre a posição para o microcontrolador.
O microcontrolador pode, em seguida, atualizar a velocidade da correia de transporte,
classificar uma posição, ou alguma outra tarefa mecânica de controle do motor.

Você pode usar o DEBUG Terminal para enviar mensagens a partir do seu computador
para o BASIC Stamp, como mostrado na Figura 4-24. O BASIC Stamp tem que ser
programado para ouvir as mensagens que você enviar, usando DEBUG Terminal, e
também para armazenar os dados que você enviar em uma ou mais variáveis.
Página - 99

Figura 4-24
Enviando mensagens
para o BASIC Stamp

Clique no campo branco


acima do painel de
exibição da mensagem e
digite sua mensagem.
Uma cópia da mensagem
que você digitou aparece
na janela inferior. Essa
cópia é chamada de eco.

Nesta atividade, você vai programar o BASIC Stamp para receber dois valores a partir
do DEBUG Terminal e, em seguida, usar esses valores para controlar o servo:

1. Número de pulsos para enviar ao servo


2. Valor do argumento Duration usado pelo comando PULSOUT

Você também vai programar o BASIC Stamp para usar esses valores para controlar o
servo.

Peças e Circuito
As mesmas da Atividade #2

Programando o BASIC Stamp para Receber Mensagens do DEBUG


A programação do BASIC Stamp para envio de mensagens para o DEBUG Terminal é
feita usando o comando DEBUG. A programação do BASIC Stamp para receber
mensagens do DEBUG Terminal é feita usando o comando DEBUGIN. Ao utilizar o
DEBUGIN, você também terá que declarar uma ou mais variáveis para o BASIC Stamp
armazenar as informações que recebe.

Aqui está um exemplo de uma variável que você pode declarar para que o BASIC
Stamp armazene um valor:

pulses VAR Word

Posteriormente no programa, você poderá usar essa variável para armazenar um número
recebido pelo comando DEBUGIN:

DEBUGIN DEC pulses

Quando o BASIC Stamp recebe um valor numérico a partir do DEBUG Terminal, ele
armazena-o em uma variável de pulsos. O formatador DEC diz ao comando DEBUGIN
que os caracteres que estão sendo enviados são algarismos que formam um número
Página - 100

decimal. Assim que você pressionar a tecla Enter, o BASIC Stamp armazenará os
dígitos recebidos, na variável de pulsos, como um número decimal, e, em seguida,
avançará.

Embora não esteja incluído no programa de exemplo, você pode adicionar uma linha
para verificar se a mensagem foi processada pelo BASIC Stamp.

DEBUG CR, "Você enviou o valor: ", DEC pulses

Exemplo de Programa: ServoControlWithDebug.bs2


Figura 4-25 mostra as janelas de transmissão do DEBUG Terminal juntamente com a
sua janela de recebimento. Janelas de recebimento é o que nós temos usado ao longo de
todo o processo para exibir mensagens que o DEBUG Terminal “recebe” do BASIC
Stamp. A janela de transmissão permite que você digite em caracteres e números e
“envie-os” ao BASIC Stamp.

Figura 4-25
Janela do DEBUG Terminal

← Janela de Transmissão

← Janela de Recebimento

Na figura 4-25, o número 264 é digitado na janela de transmissão do DEBUG Terminal.


Abaixo, na janela de recebimento, uma cópia do valor 264 é mostrada ao lado da
mensagem "Enter run time...". Essa cópia é chamada de eco, e isso só é exibido na
janela se o eco (Echo Off) no campo de seleção estiver desmarcado.

Eco é quando você envia uma mensagem através da janela de transmissão do


DEBUG Terminal, e uma cópia dessa mensagem aparece na janela de
recebimento do DEBUG Terminal. Há uma caixa de seleção Echo Off no canto
inferior direito do DEBUG Terminal e você pode clicar nela para alternar a
seleção. Para esta atividade, queremos mostrar os ecos na janela de recebimento,
portanto, deixe a caixa de seleção Echo Off desmarcada.

 Coloque o ServoControlWithDebug.bs2 no BASIC Stamp Editor e execute-o.


 Se a janela de transmissão é muito pequena, redimensione-a usando o mouse
para clicar, segurar e arrastar o separador para baixo. O separador é mostrado,
acima da mensagem de texto “Introduza o tempo de execução como um”
(“Enter run time as a”), na Figura 4-25.
 Verifique se a caixa de seleção Echo Off no canto inferior direito está
desmarcada.
 Clique na área superior da janela de transmissão para colocar o cursor lá e digite
as mensagens.
Página - 101

 Quando o DEBUG Terminal pedir “Introduza o tempo de execução de uma série


de pulsos:” digite o número 132, e pressione no teclado de seu computador a
tecla Enter.
 Quando o DEBUG Terminal pedir “Coloque a posição como duração de
PULSOUT:” digite o número 1000 e, em seguida, aperte Enter.

O PULSOUT Duration deve ser um número entre 350 e 1150. Se você digitar
números fora desta faixa, o programa irá mudar para o número mais próximo
dentro desse intervalo, ou 350 ou 1150. Se o programa não tem esse recurso de
segurança, alguns números poderão ser inscritos que fariam o servo tentar girar
para uma posição além de seus próprios limites mecânicos. Embora não quebre o
servo, poderá encurtar a vida útil do dispositivo.

O BASIC Stamp vai exibir a mensagem “Servo em execução...” enquanto estiver


enviando pulsos para o servo. Quando terminar o envio de pulsos para o servo, ele
exibirá por um segundo a mensagem “Pronto”. Em seguida, pedirá que você introduza
novamente o número de pulsos. Divirta-se com ele, mas certifique-se de seguir as
instruções da caixa de avisos sobre permanecer entre 350 e 1150 para o seu valor
PULSOUT.

 Experimente entrar com outros valores entre 350 e 1150 para o PULSOUT
Duration e 1 e 65534 para o número de pulsos.

Fazer o servo manter uma posição durante 1 segundo demora cerca de 44
pulsos. Então, para fazer o servo manter uma posição por cerca de 5 minutos,
você poderá introduzir 13200 “número exato de pulsos”. Isso é 44
pulsos/segundo × 60 segundos/minutos × 5 minutos = 13200 pulsos.
Por que usar valores de 1 a 64434? Se você realmente estiver interessado, leia
toda a seção sobre o comando FOR...NEXT no manual do BASIC Stamp para
aprender sobre o erro 16-bit rollover ou amplitude da variável. Ela pode causar
um bug quando você estiver fazendo seus próprios programas!

' O que é um Microcontrolador - ServoControlWithDebug.bs2


' Envia mensagens para o BASIC Stamp para controlar o servo usando
' o Debug Terminal.

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Word


pulses VAR Word
duration VAR Word

PAUSE 1000
DEBUG CLS, "Tempo de execução do servo:", CR,
" ~44 pulsos em 1 segundo", CR,
"Posição do servo:", CR,
" 350 <= PULSOUT Duration <= 1150", CR, CR

DO

DEBUG "Informe o tempo de execução ", CR,


"como número de pulsos: "
Página - 102

DEBUGIN DEC pulses

DEBUG "Informe a posição como", CR,


"PULSOUT Duration: "
DEBUGIN DEC duration

duration = duration MIN 350 MAX 1150

DEBUG "Serva em execução...", CR

FOR counter = 1 TO pulses


PULSOUT 14, duration
PAUSE 20
NEXT

DEBUG "Pronto", CR, CR


PAUSE 1000

LOOP

Como Funciona o ServoControlWithDebug.bs2


Três variáveis de WORD são declaradas neste programa:

counter Var WORD


pulses Var WORD
duration Var WORD

A variável counter é declarada para uso por um loop FOR...NEXT. (Veja o Capítulo 2,
Atividade #3 para mais detalhes.) Os pulsos e variáveis de duração são usados de duas
maneiras diferentes. Ambos são usados para receber e armazenar os valores enviados a
partir do DEBUG Terminal. A variável pulses também é usada para definir o número de
repetições no loop FOR...NEXT, que envia pulsos para o servo, e a variável Duration é
usada para definir a duração de cada pulso do comando PULSOUT.

Um comando DEBUG fornece um lembrete de que há cerca de 44 pulsos em um segundo


no loop FOR...NEXT, e que o argumento PULSOUT Duration que controla a posição do
servo pode ser um valor entre 350 e 1150.

DEBUG CLS, "Tempo de execução do servo:", CR,


" ~44 pulsos em 1 segundo ", CR,
"Posição do servo:", CR,
" 350 <= PULSOUT Duration <= 1150", CR, CR

O resto do programa é inserido dentro de um DO...LOOP sem um argumento WHILE


ou UNTIL Condition, para que os comandos executem uma e outra vez.

DO
' Resto do programa não exibido.
LOOP

O comando DEBUG é usado para enviar uma mensagem para você (o "usuário" do
software) digitar o número de pulsos. Em seguida, o comando DEBUGIN espera por você
para inserir dígitos que compõem o número e pressionar a tecla Enter no teclado. Os
dígitos inseridos são convertidos para um valor que é armazenado na variável de pulsos.
Página - 103

Este processo é repetido com um segundo comando DEBUG e DEBUGIN que carregam
um outro valor digitado na variável de duração também.

DEBUG "Informe o tempo de execução ", CR,


"como número de pulsos: ”
DEBUGIN DEC pulses

DEBUG "Informe a posição como", CR,


"PULSOUT Duration: "
DEBUGIN DEC duration

Depois de inserir o segundo valor, é útil exibir uma mensagem enquanto o servo estiver
funcionando para que você não tente entrar com um segundo valor durante esse tempo:

DEBUG "Servo em execução...", CR

Enquanto o servo está em execução, você pode tentar mover delicadamente o horn do
servo longe da posição que está segurando. O servo resistirá a uma leve pressão
aplicada no horn.

FOR Counter = StartValue TO EndValue {STEP StepValue} ...


NEXT

Esta é a sintaxe do loop FOR ... NEXT do manual do BASIC Stamp. Isso
mostra que você precisa de um Counter, StartValue e EndValue para controlar
quantas vezes o loop se repete. Há também um StepValue opcional, se você
quiser adicionar um número diferente de 1 ao valor do Counter cada vez através
do loop.

Como nos exemplos anteriores, a variável Counter foi usada para manter o controle das
repetições do loop FOR...NEXT. A variável Counter à parte, neste loop FOR...NEXT,
introduz algumas novas técnicas para o uso de variáveis para definir como o programa
(e o servo) se comportam. Até este exemplo, os loops FOR...NEXT usaram constantes
como 10 ou 132 nos loops do argumento EndValue. Neste loop FOR...NEXT, o valor
da variável de pulsos é utilizado para controlar o loop FOR...NEXT EndValue. Assim,
você define o valor de pulsos, inserindo um número no DEBUG Terminal e controla o
número de repetições que o loop FOR...NEXT faz, que por sua vez controla o tempo
que o servo mantém uma determinada posição.

FOR counter = 1 to pulses


PULSOUT 14, duration
PAUSE 20
NEXT

Além disso, nos exemplos anteriores, os valores constantes, tais como 500, 750 e 1000
foram utilizados para o argumento Duration do comando PULSOUT. Neste loop, a
variável denominada Duration que você definiu ao inserir os valores na janela de
transmissão do DEBUG Terminal, definirão agora a duração do pulso do comando
PULSOUT, que por sua vez controlará a posição que o servo irá manter.
Página - 104

Tire algum tempo para entender o loop FOR...NEXT no


ServoControlWithDebug.bs2.
É um dos primeiros exemplos das coisas incríveis que você pode fazer com as
variáveis em argumentos e loops do comando PBASIC, e também destaca a
utilidade que um módulo de microcontrolador programável, como o BASIC
Stamp, pode ter.

Sua Vez – Estabelecendo Limites no Software


Vamos imaginar que este sistema de controle de servo pelo computador é aquele que
tem sido desenvolvido para controle remoto. Talvez um guarda de segurança use isso
para abrir uma porta que ele vê por uma câmera remota. Talvez um estudante
universitário use para controlar as portas de um labirinto que os ratos percorrem em
busca de comida. Talvez um militar use para apontar um canhão para um determinado
alvo. Se você está projetando um produto para outra pessoa usar, a última coisa que
você quer é dar ao usuário (guarda de segurança, estudante universitário, militar) a
capacidade de inserir um número errado que poderia danificar o equipamento.

Durante a execução do ServoControlWithDebug.bs2, é possível cometer um erro ao


digitar o valor Duration no DEBUG Terminal. Vamos dizer que você acidentalmente
digitou 100 em vez de 1000 ao pressionar Enter. O valor de 100 fará com que o servo
tente voltar para uma posição além de seus limites mecânicos. Embora ele não vá
quebrar instantaneamente o servo, com certeza não será bom para o servo ou para a sua
vida útil. Assim, o programa tem uma linha que impede que esse erro cause qualquer
dano:

duration = duration MIN 350 MAX 1150

Este comando corrige o acidente alterando a variável Duration de 100 para 350. Da
mesma forma, se você acidentalmente digitou 10000, reduziria a duração variável de
1150. Você poderia fazer algo equivalente com um par de declarações IF ... THEN:

IF duration < 350 THEN duration = 350


IF duration > 1150 THEN duration = 1150

Existem algumas máquinas onde até mesmo o valor corrigido automaticamente para o
mais próximo pode ter resultados indesejáveis. Por exemplo, se você tem um
computador que controla uma máquina que corta algum tipo de material caro, você não
deseja que a máquina simplesmente assuma que você quis dizer 350 quando tentou
digitar 1000, mas acidentalmente digitou 100. Se o material era para ser cortado apenas
na configuração 350, poderia vir a ser um erro caro. Outra abordagem que o programa
pode ter é a de simplesmente dizer-lhe que seu valor estava fora de alcance, e que você
deve tentar novamente. Aqui está um exemplo de como você pode modificar o código
para fazer isso:

 Salve o programa de exemplo ServoControlWithDebug.bs2 sob o novo nome


ServoControlWithDebugYourTurn.bs2.
 Substitua estes dois comandos:

DEBUG "Informe a posição como ", CR,


"PULSOUT Duration: "
Página - 105

DEBUGIN DEC duration

… Com este bloco de código:

DO
DEBUG "Informe a posição como um", CR,
"PULSOUT Duration: "
DEBUGIN DEC duration
IF duration < 350 THEN
DEBUG "O valor precisa ser maior do que 350", CR
PAUSE 1000
ENDIF
IF duração > 1150 THEN
DEBUG "O valor precisa ser maior do que 1150", CR
PAUSE 1000
ENDIF
LOOP UNTIL duration >= 350 AND duration <= 1150

 Salve o programa.
 Execute o programa e verifique se ele repete até que você digite o valor, na faixa
correta, de 350 a 1150.

ATIVIDADE #5: CONVERTENDO POSIÇÃO DE MOVIMENTO


Nesta atividade, você vai programar o servo para alterar a posição em taxas diferentes.
Mudando a posição em taxas diferentes, você fará com que o horn de seu servo gire em
velocidades diferentes. Você pode usar esta técnica para controlar o movimento do
servo ao invés de sua posição.

Programando uma Taxa de Variação para Posição


Você pode usar um loop FOR...NEXT para fazer o servo ter uma área de alcance de
movimento da seguinte maneira:

FOR counter = 500 TO 1000


PULSOUT 14, counter
PAUSE 20
NEXT

O loop FOR...NEXT faz com que o horn do servo comece em torno de 45° e em
seguida, gire lentamente para a esquerda até chegar a 135°. Como counter é o
indicador do loop FOR...NEXT, ele soma um a cada vez que é executado. O valor do
counter também é usado no argumento Duration do comando PULSOUT, o que
significa que a duração de cada pulso fica um pouco maior a cada vez que realiza um
loop. Uma vez que há mudanças na variável counter, o mesmo acontece com a
posição do horn do servo.

Loops FOR...NEXT têm um argumento STEP StepValue opcional. O argumento


StepValue pode ser usado para o servo fazer uma rotação mais rápida. Por exemplo,
você pode usar o argumento StepValue para adicionar 8 ao counter cada vez que
realizar um loop (em vez de um), modificando a instrução FOR assim:
Página - 106

FOR counter = 500 TO 1000 STEP 8

Você também pode fazer o servo girar na direção oposta, fazendo uma contagem
regressiva em vez de progressiva. Em PBASIC, o próximo loop FOR...NEXT vai fazer
uma contagem regressiva se o argumento StartValue for maior do que o argumento
EndValue. Aqui está um exemplo de como fazer uma contagem do loop FOR ...
NEXT de 1000 até 500:

FOR counter = 1000 TO 500

Você pode combinar a contagem regressiva com um argumento StepValue para fazer
com que o servo gire mais rápido no sentido horário assim:

FOR counter = 1000 TO 500 STEP 20

O truque para que o servo gire em velocidades diferentes é usar o loop FOR...NEXT
para contagens progressivas e regressivas com diferentes tamanhos de passos. O
exemplo de programa seguinte usa estas técnicas para fazer o horn do servo girar para
trás e para frente em velocidades diferentes.

Exemplo de Programa: ServoVelocities.bs2


 Coloque e execute ServoVelocities.bs2.
 Conforme o programa é executado, observe como o valor de counter varia no
DEBUG Terminal.
 Além disso, observe como o servo se comporta de forma diferente através dos
dois loops FOR...NEXT. Tanto a direção do horn do servo como a velocidade
mudam.

' O que é um Microcontrolador - ServoVelocities.bs2


' Rotaciona o servo no sentido anti-horário devagar, e então, no
' sentido horário rápido.

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Word

PAUSE 1000

DO
DEBUG "Incremento da largura de pulso em 8", CR

FOR counter = 500 TO 1000 STEP 8


PULSOUT 14, counter
PAUSE 7
DEBUG DEC5 counter, CR, CRSRUP
NEXT

DEBUG CR, "Decremento da largura de pulso em 20", CR

FOR counter = 1000 TO 500 STEP 20


PULSOUT 14, counter
PAUSE 7
DEBUG DEC5 counter, CR, CRSRUP
NEXT
Página - 107

DEBUG CR, "Repete", CR


LOOP

Como Funciona o ServoVelocities.bs2


O primeiro loop FOR...NEXT conta progressivamente de 500 a 1000 em passos de 8.
Como a variável counter é usada como o argumento Duration do comando PULSOUT, a
posição do horn do servo gira no sentido anti-horário em passos que são oito vezes o
menor possível.

FOR counter = 500 TO 1000 STEP 8


PULSOUT 14, counter
PAUSE 7
DEBUG DEC5 counter, CR, CRSRUP
NEXT

Por que PAUSE 7 em vez de PAUSE 20? O comando DEBUG DEC5


counter, CR, CRSRUP leva cerca de 8 ms para ser executado. Isto significa
que PAUSE 12 manteria um atraso de 20 ms entre os pulsos. Alguns
experimento de tentativa e erro mostraram que PAUSE 7 dá ao servo os
movimentos mais suaves. Uma vez que o tempo de baixa de 20 ms não precisa
ser preciso, não há problema em ajustá-lo.

Mais formatos DEBUG e controle de caracteres estão disponíveis no comando


DEBUG que exibe o valor da variável counter. Este valor é impresso no
formato decimal com 5 dígitos (DEC5). Depois que o valor é exibido, existe um
retorno (CR). Depois disso, o caractere de controle CRSRUP (cursor para cima)
envia o cursor de volta para cima na linha anterior. Isso faz com que o novo valor
do counter seja sobreposto ao antigo a cada vez em que um loop é realizado.

O segundo loop FOR...NEXT realiza uma contagem regressiva a partir de 1000 até 500
em passos de 20. A variável counter também é usada como um argumento para o
comando PULSOUT neste exemplo, fazendo o horn do servo girar no sentido horário.

FOR counter = 1000 TO 500 STEP 20


PULSOUT 14, counter
PAUSE 7
DEBUG DEC5 counter, CR, CRSRUP
NEXT

Sua Vez – Ajuste de Velocidade


 Tente diferentes valores de STEP para fazer o servo girar com diferentes
velocidades.
 Execute novamente o programa após cada modificação.
 Observe o efeito a cada novo valor de StepValue no que diz respeito a quão
rápido o horn do servo gira.
 Experimente diferentes valores Duration no comando PAUSE (entre 3 e 12) para
encontrar o valor que dá ao servo movimentos mais suaves para cada novo valor
StepValue.
Página - 108

ATIVIDADE #6: SERVO CONTROLADO POR BOTÃO


Neste capítulo, você escreveu programas que fazem o servo realizar um conjunto de
movimentos pré-definidos e controlou o servo usando o DEBUG Terminal. Você
também pode programar o BASIC Stamp para controlar o servo baseando-se nos dados
de entrada de botões. Nesta atividade, você vai:

• Construir um circuito para controlar o servo através de botões.


• Programar o BASIC Stamp para controlar o servo com base nas informações de
entradas dos botões.

Quando já tiver terminado, você será capaz de pressionar e segurar um botão para fazer
o BASIC Stamp girar o servo em uma direção, e pressionar e segurar outro botão para
que o servo gire em outra direção. Quando nenhum botão for pressionado, o servo irá
manter sua posição.

Peças Extras para o Controle por Botão do Servo


Serão usadas as mesmas peças das atividades anteriores deste capítulo. Além dessas,
você terá que reunir as seguintes peças para os circuitos de botões:

(2) Botões – normalmente abertos


(2) Resistores – 10 kΩ (marrom-preto-laranja)
(2) Resistores – 220 Ω (vermelho-vermelho-marrom)
(3) Fios

Adicionando o Controle de Controle por Botão


A Figura 4-26 mostra os circuitos de botão que você usará para controlar o servo.

 Adicione este circuito ao circuito do servo + LED que você vem usando até
agora. Quando você terminar, o seu circuito deve se parecer:
o Com a Figura 4-27 se você estiver usando o Board of Education USB
(qualquer Rev) ou Serial (Rev C ou mais recente).
o Figura 4-28 se você estiver usando BASIC Stamp HomeWork Board
(Rev C ou mais recente).
 Se a sua placa não estiver listada acima, vá para www.parallax.com/go/WAM e
consulte Servo Circuit Connections (Conexões do Circuito de Servo) para
encontrar instruções para a sua placa de circuito.

Vdd Vdd

P4
Figura 4-26
220 Ω
Circuitos de
P3 Botão para
220 Ω Controle do
10 kΩ 10 kΩ Servo

Vss Vss
Página - 109

15 14 Vdd 13 12 Figura 4-27


White Circuito do
Red Red servo do Board
Black Black
of Education
X4 X5
Vdd Vss
Servo com
Vin
X3 circuito de
+ botão
P15
P14 adicionado
P13
P12
P11 Para a série
P10
P9 Board of
P8 Education Rev
P7
P6 C ou superior,
P5 ou USB de
standard servo
P4
P3 www.parallax.com qualquer
P2
P1 revisão
P0
X2

Figura 4-28
Circuito do
servo do
HomeWork
Board Servo
com circuito de
botão
adicionado

Para o
HomeWork
Board Rev C
ou superior

 Teste o botão ligado ao P3 usando a versão original do


ReadPushbuttonState.bs2. A seção que tem este programa e as instruções de
como usá-lo começa na página 57.
 Modifique o programa para que ele leia P4.
 Execute o programa modificado para testar o botão ligado a P4.

Programando o Controle por Botão do Servo


Os blocos de código IF...THEN podem ser usados para verificar se a situação do
botão adiciona ou subtrai uma variável denominada Duration. Esta variável é usada no
argumento Duration do comando PULSOUT. Se um dos botões é pressionado, o valor de
duration aumenta. Se o outro botão é pressionado, o valor de duration diminui. Uma
declaração IF...THEN é usada para decidir se a variável duration é muito grande
(maior que 1000) ou muito pequena (menor que 500).
Página - 110

Exemplo de Programa: ServoControlWithPushbuttons.bs2


Este exemplo de programa faz o horn do servo girar no sentido anti-horário quando o
botão ligado em P4 for pressionado. O horn do servo vai manter a rotação enquanto o
botão estiver pressionado e o valor de tempo será menor do que 1000. Quando o botão
de pressão ligado a P3 for pressionado, o horn do servo vai girar no sentido horário. O
servo também é limitado em seu movimento no sentido horário, porque a variável de
tempo não é permitida ficar abaixo de 500. O DEBUG Terminal exibe o valor de
duration, enquanto o programa está sendo executado.

 Coloque e execute o programa ServoControlWithPushbuttons.bs2 no BASIC


Stamp Editor.
 Verifique se o servo gira no sentido anti-horário quando você pressiona e segura
o botão ligado a P4.
 Verifique se, assim que atingido, o limite de duration > 1000, o servo para de
girar no sentido anti-horário.
 Verifique se o servo gira no sentido horário quando você pressiona e segura o
botão ligado a P3.
 Verifique se, assim que atingido, o limite de duration < 500, o servo para de
girar no sentido horário.

' O que é um Microcontrolador - ServoControlWithPushbuttons.bs2


' Pressione e segure o botão P4 parar girar o servo no sentido anti-
' horário, ou pressione o botão P3 para girar o servo no sentido
' horário.

' {$STAMP BS2}


' {$PBASIC 2.5}

duration VAR Word


duration = 750
PAUSE 1000

DO
IF IN3 = 1 THEN
IF duration > 500 THEN
duration = duration - 25
ENDIF
ENDIF

IF IN4 = 1 THEN
IF duration < 1000 THEN
duration = duration + 25
ENDIF
ENDIF

PULSOUT 14, duration


PAUSE 10

DEBUG HOME, DEC4 duration, " = duration"


LOOP

Sua Vez – Limites Mecânicos vs Limites de Software


Travas mecânicas do servo evitam que o servo vire além de cerca de 0° e 180°, que
correspondem a argumentos PULSOUT Duration próximos de 250 e 1250. O
ServoControlWithPushbuttons.bs2 também tem limites de software, impostos pelas
Página - 111

declarações IF...THEN que impedem você de usar um botão para girar o servo além
de um certo ponto. Em contraste com os limites mecânicos, os limites de software são
muito fáceis de ajustar. Por exemplo, você pode dar ao botão de controle do servo uma
maior amplitude de movimento, simplesmente substituindo todas as instâncias de 500
por 350, e todos as de 1000 por 1150. Ou você pode atribuir a seu servo uma faixa mais
estreita de movimento, substituindo as instâncias de 500 por 650, e as de 1000 por 850.
Os limites de software não precisam ser simétricos. Por exemplo, você pode alterar os
limites de software a partir do intervalo 500-1000 para o intervalo 350-750.

 Experimente diferentes limites do servo com o software, incluindo 350-1150,


650-850 e 350-750.
 Teste cada conjunto de limites de software para ter certeza de que eles
funcionam como esperado.

Você também pode alterar a rapidez do servo pressionando o botão. Por exemplo, se
você alterar no programa os dois valores 25 para 50, o servo irá responder duas vezes
mais rápido. Alternativamente, você pode alterá-los para 30, para fazer o servo
responder um pouco mais rápido, ou para 20, para fazê-los responder um pouco mais
devagar, ou para 10, para fazê-lo responder ainda mais devagar.

 Tente!

SUMÁRIO
Este capítulo apresentou um movimento microcontrolado utilizando um Servo Padrão
Parallax. Um servo é um dispositivo que se move e mantém uma posição específica
com base nos sinais eletrônicos que recebe. Estes sinais tomam a forma de pulsos que
duram entre 0,5 e 2,5 ms, e eles têm que ser entregues aproximadamente a cada 20 ms
para o servo manter a sua posição.

Um programador pode usar o comando PULSOUT para fazer o BASIC Stamp enviar
estes sinais. Desde que os pulsos sejam enviados a cada 20 ms, para o servo para manter
sua posição, os comandos PULSOUT e PAUSE serão, geralmente, colocados em uma
espécie de loop. Variáveis ou constantes podem ser usadas para determinar tanto o
número de repetições do loop quanto do argumento Duration do comando PULSOUT.

Neste capítulo, foram apresentadas várias maneiras de obter valores para as variáveis. A
variável pode receber o valor de seu DEBUG Terminal usando o comando DEBUGIN. O
valor da variável pode passar por uma seqüência de valores, se ele for usado com o
contra-argumento de um loop FOR...NEXT. Esta técnica pode ser usada para fazer com
que o servo faça movimentos de varredura. As declarações IF...THEN podem ser
usadas para monitorar os botões e adicionar ou subtrair a variável usada no argumento
Duration do comando PULSOUT quando um determinado botão for pressionado. Isto
permite o controle da posição e de movimentos radicais dependendo de como o
programa for construído e como os botões são operados.

Questões
1. Quais são as cinco partes externas de um servo? E para que elas são usadas?
2. É necessário um circuito de LED para que o servo trabalhe?
Página - 112

3. Que comando controla o sinal de tempo de baixa enviado para um servo? Que
comando controla tempo de alta?
4. Que elemento de programação pode ser utilizado para controlar a quantidade de
tempo que um servo mantém uma determinada posição?
5. Como você usa o DEBUG Terminal para enviar mensagens para o BASIC
Stamp? Que comando do programa você usa para fazer o BASIC Stamp receber
mensagens a partir do DEBUG Terminal?
6. Que tipo de bloco de código que você pode escrever para limitar a amplitude de
movimento do servo?

Exercícios
1. Faça um bloco de código que varra o valor de PULSOUT controlando um servo a
partir de Duration de 700 a 800, e em seguida, volte a 700, em incrementos de
(a) 1 e de (b) 4.
2. Adicione um loop FOR...NEXT à sua resposta para o exercício 1b para que ele
ofereça dez pulsos antes de incrementar o argumento Duration PULSOUT por 4.

Projeto
1. Modifique ServoControlWithDebug.bs2 para que ele monitore uma chave geral.
Se a chave geral (botão P3) for pressionada, o DEBUG Terminal não deve
aceitar qualquer comando, e deve exibir “Pressione chave de Start para iniciar”.
Quando a chave Start (botão P4) for pressionada, o programa deve funcionar
normalmente. Se a energia for desconectada e reconectada, o programa deve se
comportar como se a chave geral tivesse sido pressionada.

Soluções
Q1.1)Plug – conecta o servo a energia e fontes de sinal, 2) Cabo - conduz energia e
sinais do plug para o servo; 3) Horn - parte móvel do servo; 4) Parafuso – liga o
horn do servo ao eixo de saída, 5) Caixa - contém motor CC, engrenagens, e
circuitos de controle.
Q2.Não, o LED apenas nos ajuda a ver o que está acontecendo com os sinais de
controle.
Q3.O tempo de baixa é controlado com o comando PAUSE. O de alta é controlado
com o comando PULSOUT.
Q4.Um loop FOR...NEXT.
Q5.Escreva mensagens na janela de transmissão do DEBUG Terminal. Use o
comando DEBUGIN e uma variável para fazer o BASIC Stamp receber os
caracteres.
Q6.Q.6 Ou uma declaração IF...THEN ou um comando que usa os operadores
MAX e MIN para manter a variável dentro de certos intervalos.

E1.
a) Incrementos de 1 b) Adicione STEP 4 para ambos
loops FOR...NEXT.
FOR counter = 700 TO
800 FOR counter = 700 TO 800
PULSOUT 14, counter STEP 4
PAUSE 20 PULSOUT 14, counter
NEXT PAUSE 20
FOR counter = 800 TO
Página - 113

700 NEXT
PULSOUT 14, counter FOR counter = 800 TO 700
PAUSE 20 STEP 4
NEXT PULSOUT 14, counter
PAUSE 20
NEXT

E2. Suponha que uma variável denominada pulso tenha sido declarada:

FOR counter = 700 TO 800 STEP 4


FOR pulses = 1 TO 10
PULSOUT 14, counter
PAUSE 20
NEXT
NEXT
FOR counter = 800 TO 700 STEP 4
FOR pulses = 1 TO 10
PULSOUT 14, counter
PAUSE 20
NEXT
NEXT

1. Há muitas soluções possíveis, duas são dadas aqui.

' O que é um Microcontrolaor - Ch04Prj01Soln1__KillSwitch.bs2


' Envia mensagens ao BASIC Stamp para controlar o servo usando o
' Debug Terminal desde que a chave geral não esteja sendo
' pressionada.

' Contribuição de: Professor Clark J. Radcliffe, Departamento


' de Engenharia Mecânica, Michigan State University

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Word


pulses VAR Word
duration VAR Word

DO

PAUSE 2000
IF (IN3 = 1) AND (IN4 = 0) THEN
DEBUG "Pressiona chave de Start para iniciar. ", CR
,CRSRUP
ELSEIF (IN3 = 0) AND (IN4 = 1) THEN
DEBUG CLS, "Informe número de pulsos:", CR
DEBUGIN DEC pulses

DEBUG "Informe PULSOUT duration:", CR


DEBUGIN DEC duration

DEBUG "Servo em movimento...", CR

FOR counter = 1 TO pulses


PULSOUT 14, duration
PAUSE 20
Página - 114

NEXT

DEBUG "Pronto!"
PAUSE 2000

ENDIF

LOOP

Abaixo está uma versão que pode até mesmo detectar o botão pressionado enquanto está
enviando um sinal para o servo. Isso é importante para as máquinas que precisam parar
imediatamente quando a chave geral é pressionada. Ele utiliza a técnica de espera que
foi introduzida no jogo reação de tempo no Capítulo 3, Atividade #5, em três lugares
diferentes no programa. Você pode verificar que o programa para de enviar um sinal de
controle para o servo, monitorando o sinal de luz do LED indicador ligado ao P14.

' O que é um Microcontrolador - Ch04Prj01Soln2__KillSwitch.bs2


' Envia mensagens ao BASIC Stamp para controlar o servo usando o
' Debug Terminal desde que a chave geral não esteja sendo
' pressionada.

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Word


pulses VAR Word
duration VAR Word

PAUSE 1000

DEBUG "Pressione chave de Start (P4) para iniciar.", CR

DO:LOOP UNTIL IN4 = 1


DEBUG "Pressione chave geral (P3) para parar.", CR

DEBUG CR, CR, "Tempo de execução do servo:", CR,


" ~44 pulsos em 1 segundo", CR,
"Posição do servo:", CR,
" 350 <= PULSOUT Duration <= 1150", CR, CR

DO

IF IN3 = 1 THEN
DEBUG "Pressione chave de Start (P4) para iniciar.", CR
DO:LOOP UNTIL IN4 = 1
DEBUG "Pressione chave geral (P3) para parar.", CR
ENDIF
DEBUG "Informe tempo de execução como ", CR,
"número de pulsos: "
DEBUGIN DEC pulses

DEBUG "Informe posição como ", CR,


"PULSOUT Duration: "
DEBUGIN DEC duration

duration = duration MIN 350 MAX 1150

DEBUG "Servo em movimento...", CR

FOR counter = 1 TO pulses


Página - 115

PULSOUT 14, duration


PAUSE 20
IF IN3 = 1 THEN
DEBUG "Pressione chave de Start (P4) para iniciar.", CR
DO:LOOP UNTIL IN4 = 1
DEBUG " Pressione chave geral (P3) para parar.", CR
ENDIF
NEXT

DEBUG "Pronto!", CR, CR


PAUSE 1000

LOOP
Página - 116

Capítulo 5: Medindo a Rotação


AJUSTANDO OS MOSTRADORES E MÁQUINAS DE MONITORAMENTO
Muitas casas têm seletores para controlar a iluminação de uma sala. Gire o seletor em
um sentido e a iluminação ficará mais clara; gire o seletor em outro sentido e a
iluminação ficará mais amena. Algumas miniaturas de trens usam seletores para
controlar a direção e a velocidade do motor. Muitas máquinas têm seletores ou
manivelas que são usadas para afinar a posição das lâminas de corte e orientar a área de
ação.

Seletores também podem ser encontrados em equipamentos de áudio, que são usados
para ajustar o volume da música e da voz. A Figura 5-1 mostra um exemplo simples de
um seletor com um botão que ao girar ajusta o volume do alto-falante. Girando o botão,
um circuito dentro do alto-falante faz com que o volume da música no alto-falante
também mude. Circuitos similares também podem ser encontrados dentro de joysticks, e
até mesmo dentro do servo utilizado no Capítulo 4: Controle de Movimento.

Figura 5-1
Ajuste de volume em
um alto-falante

O RESISTOR VARIÁVEL SOB O SELETOR - UM POTENCIÔMETRO


O dispositivo dentro de muitos seletores de um sistema de som, de joysticks e dos
servos é chamado de potenciômetro, muitas vezes abreviado como um "pot". A Figura
5-2 mostra uma imagem com alguns potenciômetros comuns. Note-se que todos eles
têm três pinos.

Figura 5-2
Alguns exemplos
potenciômetros

A Figura 5-3 mostra o símbolo esquemático e desenho da peça do potenciômetro que


você vai usar neste capítulo. Os terminais A e B estão ligados a um componente
resistente de 10 kΩ. O terminal W é chamado wiper terminal, e está ligado a um fio que
toca o componente resistente em algum ponto entre as suas extremidades.
Página - 117

Figura 5-3
Símbolo esquemático do
Potenciômetro e desenho da
peça.

A Figura 5-4 mostra como o wiper de um potenciômetro funciona. Quando você ajustar
o botão na parte superior do potenciômetro, o wiper terminal fica em contato com o
componente resistivo em diferentes posições. Conforme você gira o botão no sentido
horário, o wiper fica mais próximo do terminal A, e conforme você gira o botão no
sentido anti-horário, o wiper fica mais próximo do terminal B.

Figura 5-4
Ajustando o wiper terminal do
potenciômetro

ATIVIDADE #1: CONSTRUINDO E TESTANDO O CIRCUITO DO


POTENCIÔMETRO
Introduzir resistores de diferentes tamanhos, em série, com um LED faz com que
diferentes quantidades de corrente fluam através do circuito. Uma resistência maior no
circuito de LED faz com que uma menor quantidade de corrente flua através do circuito
e o LED brilhe com menos força. Pequenas resistências no circuito LED provocam mais
corrente fluindo através do circuito e o LED fica mais brilhante. Ao ligar os terminais
do potenciômetro a W e A, em série, com um circuito de LED, você pode usá-lo para
ajustar a resistência no circuito. Este, por sua vez, ajusta o brilho do LED. Nesta
atividade, você vai usar o potenciômetro como um resistor variável para mudar o brilho
do LED.

Peças do Circuito do Regulador


(1) Potenciômetro – 10 kΩ
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) LED – vermelho
(1) Fio

Construindo o Teste do Circuito do Potenciômetro


A Figura 5-5 mostra um circuito que pode ser utilizado para ajustar a luminosidade do
LED com um potenciômetro.

 Construa o circuito mostrado na Figura 5-5.


Página - 118

Dica: Se você tiver problemas para manter o potenciômetro nos soquetes do


protoboard, verifique suas pernas. Se cada uma tem uma pequena curva, usar um
alicate de bico para endireitá-las e, em seguida, tente ligar o potenciômetro no
protoboard novamente. Quando as pernas do potenciômetro estão retas, elas
conseguem manter um contato melhor com os soquetes do protoboard.

Figura 5-5
Circuito de Teste do
LED com
potenciômetro

Testando o Circuito do Potenciômetro


 Gire o potenciômetro no sentido horário até que ele atinja o seu limite mecânico
mostrado na Figura 5-6 (a).

Pressione um pouco o potenciômetro contra o protoboard quando você for
girar o seu botão. Para essas atividades, o potenciômetro deve estar firmemente
assentado nas bases do protoboard. Se você não tiver cuidado quando girar o
botão, o potenciômetro pode se desligar dos soquetes do protoboard, o que pode
acarretar medições incorretas. Então, aplique um pouco de pressão para baixo
quando você girar o botão do potenciômetro para mantê-lo no protoboard.
Cuidado ao manusear: Se o potenciômetro não girar até aqui, não tente forçá-
lo. Basta girá-lo até que ele atinja o seu limite mecânico, caso contrário, ele pode
quebrar.

 Gire o potenciômetro no sentido anti-horário gradualmente para as posições


mostradas na Figura 5-6 (b), (c), (d), (e) e (f), observando o brilho do LED em
cada posição.

Figura 5-6
Botão do
potenciômetro
(a) (c) (e)
(a) até (f) mostra o
(b) (d) (f) wiper terminal do
potenciômetro
ajustado para
diferentes posições.

Como Funciona o Circuito do Potenciômetro


A resistência total no seu circuito de teste é de 220 Ω mais a resistência entre os
terminais A e W do potenciômetro. A resistência entre os terminais A e W aumenta à
Página - 119

medida que o botão é ajustado no sentido anti-horário, o que por sua vez, reduz a
corrente através do LED, tornando a luz mais fraca.

ATIVIDADE #2: MEDINDO A RESISTÊNCIA AO MEDIR O TEMPO


Esta atividade introduz uma nova peça chamada capacitor. Um capacitor opera como
uma bateria recarregável que mantém a sua carga por curtos períodos de tempo. Esta
atividade também introduz RC-time, que é uma abreviatura de tempo de resistor-
capacitor. RC-time é a medida de tempo que o capacitor gasta para perder uma certa
quantidade de sua carga armazenada ao enviar corrente ao resistor. Você vai ficar mais
familiarizado com o RC-time ao medir o tempo que o capacitor leva para descarregar
com diferentes tamanhos de resistores e capacitores. Nesta atividade, você vai
programar o BASIC Stamp para carregar um capacitor e, em seguida, medir o tempo
que leva para descarregar através de um resistor.

Apresentando o Capacitor
A Figura 5-7 mostra o símbolo esquemático e o desenho da peça para o tipo de
capacitor utilizado nesta atividade. O valor de capacitância é expresso em microfarads
(µF), e a medição é comumente impressa nos capacitores.

A caixa cilíndrica deste capacitor especial é chamada de canister. Este tipo de capacitor,
chamado capacitor eletrolítico, deve ser manuseado com cuidado.

 Leia o quadro ATENÇÃO.

ATENÇÃO: Este capacitor tem um terminal positivo (+) e um negativo (-). O


terminal negativo é o condutor que sai do recipiente de metal mais próximo da
faixa com um sinal negativo (-). Certifique-se sempre de conectar esses terminais
como mostrado nos diagramas de circuitos. Se conectar um desses capacitores
incorretamente, você pode danificá-los. Em alguns circuitos, se ligar este tipo de
capacitor de forma incorreta e, em seguida, conectar a energia, poderá acontecer
uma ruptura ou até mesmo uma explosão.
ATENÇÃO: Não aplicar mais tensão para um capacitor eletrolítico além da
permitida para manuseio. A voltagem está impressa no lado da caixa.
ATENÇÃO: É recomendado o uso de óculos de proteção ou de equipamento de
segurança.

Figura 5-7
3300 µF

Símbolo esquemático do
capacitor de 3300 µF e desenho
3300 µF da peça

Preste muita atenção aos


+ - condutores e como eles se
conectam aos terminais positivo
e negativo.
Página - 120

Peças do Circuito de Resistência e Tempo


(1) Capacitor – 3300 µF
(1) Capacitor – 1000 µF
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) Resistor – 470 Ω (amarelo-violeta-marrom)
(1) Resistor – 1 kΩ (marrom-preto-vermelho)
(1) Resistor – 2 kΩ (vermelho-preto-vermelho)
(1) Resistor – 10 kΩ (marrom-preto-laranja)

Construindo e Testando o Circuito de Tempo de Resistor-Capacitor (RC)


A Figura 5-8 mostra o esquema do circuito e a Figura 5-9 mostra o diagrama de fiação
para esta atividade. Você medirá o tempo, utilizando diferentes valores de resistência no
lugar do resistor denominado Ri.

 Leia cuidadosamente o quadro de SEGURANÇA.

Segurança
Sempre observe a polaridade quando ligar o capacitor 3300 ou 1000 µF.
Lembre-se, o terminal negativo é o condutor que sai do recipiente de metal mais
próximo da faixa com um sinal negativo (-). Use a Figura 5-7 para identificar os
terminais (+) e (-).
Seu capacitor 3300 µF vai funcionar bem neste experimento, desde que você
tenha certeza que os terminais positivo (+) e negativo (-) estão ligados
exatamente como mostrado nas Figura 5-8 e 5-9.
Nunca inverta a polaridade da fonte 3300 µF ou qualquer outra polaridade
do capacitor. A tensão nos terminais do capacitor (+) tem de ser sempre maior
do que a tensão no seu terminal (-). Vss é a tensão mais baixa (0 V) no Board of
Education e no BASIC Stamp HomeWork Board. Ao ligar o terminal negativo
do capacitor para Vss, você garante que a polaridade entre os terminais do
capacitor seja sempre correta.
Nunca aplique voltagem no capacitor que exceda a voltagem indicada nele.
Use equipamento de segurança ou óculos de proteção durante esta atividade.
Sempre desconecte a alimentação antes de construir ou modificar circuitos.
Mantenha as mãos longe deste capacitor quando a alimentação estiver
ligada.

Com a alimentação desligada, construa o circuito, como mostrado, começando com um


resistor 470 Ω no lugar da resistência denominada Ri.

Figura 5-8
P7 Esquema para testar a
220 Ω queda de tensão em
R1 = 470 Ω
3300 µF Ri R2 = 1 kΩ RC-time
R3 = 2 kΩ
R4 = 10 kΩ As quatro resistências
diferentes serão
usadas, uma de cada
vez, no esquema com
Vss
Ri.
Página - 121

Quatro resistências diferentes serão utilizadas no lugar de Ri como mostrado no


esquema. Primeiro, o esquema será construído e testado com Ri = 470 Ω, e, mais tarde
com Ri = 1 kΩ etc.

Figura 5-9
R4 R3 R2 R1 Diagrama de fiação
para visualização da
Vdd Vin Vss
- 0 µF queda de tensão em
X3
3 30 RC-time

+
P15
P14
P13 Certifique-se de que o
P12
P11
+ condutor negativo do
P10 capacitor é ligado na
P9
P8 placa da mesma forma
P7
P6 que é mostrado na
P5 figura, com o polo
P4
P3 negativo ligado ao
P2 Vss.
P1
P0
X2

 Certifique-se de que o condutor negativo do capacitor é ligado na placa da


mesma forma que é mostrado na figura, com o polo negativo ligado ao Vss.
 Captação do Circuito RC-Time com o BASIC Stamp

Embora um cronômetro possa ser usado para gravar o tempo que a carga do capacitor
cai um certo nível, o BASIC Stamp também pode ser programado para monitorar o
circuito e dar uma medida de tempo mais consistente.

Exemplo de Programa: PolledRcTimer.bs2


 Coloque e execute PolledRcTimer.bs2.
 Observe como o BASIC Stamp carrega o capacitor e depois mede o tempo de
descarga.
 Anote o tempo medido (tempo de descarga do capacitor) na linha 470Ω da
Tabela 5-1.
 Desligue a energia do seu Board of Education ou do BASIC Stamp HomeWork
Board.
 Retire o resistor 470Ω marcado como Ri nas Figuras 5-8 e 5-9 na página 3, e
substitua-o por um resistor de 1 kΩ.
 Reconecte a energia de sua placa.
 Grave a sua próxima medição de tempo (para o resistor de 1 kΩ).
 Repita essas etapas para cada valor de resistor da Tabela 5-1.
Tabela 5 1: Resistência e RC-time para C=
3300 µF
Resistência (Ω) Medida de tempo (s)
470
1k
2k
10 k
Página - 122

' O que é um Microcontrolador - PolledRcTimer.bs2


' Programa de tempo de reação modificado para acompanhar o tempo de
' queda de tensão.

' {$STAMP BS2}


' {$PBASIC 2.5}

timeCounter VAR Word


counter VAR Nib
PAUSE 1000

DEBUG CLS

HIGH 7
DEBUG "Capacitor carregando...", CR

FOR counter = 5 TO 0
PAUSE 1000
DEBUG DEC2 counter, CR, CRSRUP
NEXT

DEBUG CR, CR, "Medindo o tempo de queda agora!", CR, CR


INPUT 7

DO
PAUSE 100
timeCounter = timeCounter + 1

DEBUG ? IN7
DEBUG DEC5 timeCounter, CR, CRSRUP, CRSRUP

LOOP UNTIL IN7 = 0

DEBUG CR, CR, CR, "O tempo de queda RC foi ",


DEC timeCounter, CR,
"décimos de segundo.", CR, CR
END

Como Funciona PolledRcTimer.bs2


Duas variáveis são declaradas. A variável timeCounter é usada para controlar quanto
tempo o capacitor leva para descarregar através de Ri. A variável counter é usada para
realizar uma contagem regressiva enquanto o capacitor está carregando.

timeCounter VAR Word


counter VAR Nib

O comando DEBUG CLS limpa o DEBUG Terminal para que ele não fique confuso
com medições sucessivas. HIGH 7 determina P7 alto e começa a carregar o capacitor,
em seguida, é exibida a mensagem “Capacitor carregando...”. Depois disso, enquanto o
capacitor está carregando um loop FOR...NEXT faz a contagem regressiva. Da mesma
forma que as cargas do capacitor a voltagem através de seus terminais aumenta para
qualquer lugar entre 3,4 e 4,9 V (dependendo do valor com Ri).

DEBUG CLS

HIGH 7
DEBUG "Capacitor carregando...", CR
Página - 123

FOR counter = 5 TO 0
PAUSE 1000
DEBUG DEC2 counter, CR, CRSRUP
NEXT

A mensagem informa quando a queda começa a ser captada.

DEBUG CR, CR, " Medindo o tempo de queda agora!", CR, CR

A fim de deixar o capacitor descarregar através do resistor Ri, o pino de I/O é alterado
de HIGH para INPUT. Como entrada, o pino de I/O, não tem efeito no circuito, mas pode
detectar sinais de alta ou baixa. Logo que o pino de I/O liberta o circuito, o capacitor
descarrega e alimenta a corrente através do resistor. Assim que o capacitor descarregar,
a voltagem entre seus terminais fica cada vez menor (decai).

INPUT 7

No capítulo que fala sobre botões, você usou o BASIC Stamp para detectar um sinal
alto ou baixo usando as variáveis IN3 e IN4. Lá, um sinal de alta Vdd foi considerado e
um sinal de baixa Vss foi considerado. Na verdade, para o BASIC Stamp, um sinal de
alta é qualquer voltagem acima de cerca de 1,4 V. É claro que poderia ser de até 5 V. Da
mesma forma, um sinal de baixa é qualquer coisa entre 1,4 V e 0 V. Este DO...LOOP
verifica P7 cada 100 ms até o valor de IN7 mudar de 1 para 0, o que indica que a
voltagem do capacitor decaiu para 1,4 V.

DO

PAUSE 100
timeCounter = timeCounter + 1

DEBUG ? IN7
DEBUG DEC5 timeCounter, CR, CRSRUP, CRSRUP

LOOP UNTIL IN7 = 0

O resultado é então exibido e o programa termina.

DEBUG CR, CR, CR, "O tempo de queda RC foi ",

DEC timeCounter, CR,


"décimos de segundo.", CR, CR
END

Sua Vez – Circuito Mais Rápido


Ao usar um capacitor, que tem cerca de 1/3 da capacidade para armazenar carga, a
medição de tempo, para cada valor do resistor, utilizada no circuito será reduzida em
1/3. Posteriormente, na próxima atividade, você vai usar um capacitor que tem 1/33 000
de capacidade! O BASIC Stamp ainda vai medir o tempo para você, usando o comando
chamado RCTIME.

 Desconecte a energia do seu Board of Education ou do HomeWork Board.


Página - 124

 Substitua o capacitor de 3300 µF pelo capacitor de 1000 µF.


 Verifique se a polaridade do seu capacitor está correta. O terminal negativo deve
ser conectado a Vss.
 Reconecte a energia.
 Repita as etapas do Programa de Exemplo na seção: PolledRcTimer.bs2, e grave
as suas medições de tempo na Tabela 5-2.
 Compare suas medições de tempo com as que você obteve anteriormente na
Tabela 5-1. Quão próximas elas estão do valor das medições de 1/3 realizadas
com o capacitor 3300 µF?

Tabela 5-2: Resistência e RC-time para C =


1000 µF
Resistência (Ω) Medida de tempo (s)
470
1k
2k
10 k

ATIVIDADE #3: LENDO UM SELETOR COM O BASIC STAMP


Na Atividade #1, um potenciômetro foi utilizado como um resistor variável. O resistor
no circuito variou, dependendo da posição do botão de regulagem do potenciômetro. Na
Atividade # 2, um circuito RC-time foi usado para medir as diferentes resistências.
Nesta atividade, você vai construir um circuito RC-time para ler o potenciômetro, e usar
o BASIC Stamp para fazer as medições de tempo. O resistor utilizado vai ser muito
pequeno e as medições de tempo vão estar em intervalos de microssegundos. Mesmo
que as medidas sejam de períodos muito curtos de tempo, o BASIC Stamp vai lhe dar
uma excelente indicação da resistência entre os terminais A e W do potenciômetro que
por sua vez indicará a posição do botão.

Peças para Leitura do RC-Time com o BASIC Stamp


(1) Potenciômetro – 10 kΩ
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(2) Fios
(1) Capacitor – 0.1 µF
(1) Capacitor – 0.01 µF

Estes capacitores não têm terminais + e -. Eles são não-polarizados. Assim,


você pode conectar, com segurança, esses capacitores em um circuito sem se
preocupar com os terminais positivos e negativos.
Página - 125

Figura 5-10
104 Capacitores de
103 cerâmica
0.1 µF 0.01 µF
Capacitor 0.1 µF (à
esquerda)
Capacitor 0.01 µF (à
direita)

Construindo um Circuito de Tempo RC para o BASIC Stamp


Figura 5-11 mostra um esquema e diagrama de fiação para o circuito rápido com RC-
time. Este é o circuito que você vai usar para monitorar a posição do botão do
potenciômetro com a ajuda do BASIC Stamp e do programa PBASIC.

 Construa o circuito mostrado na Figura 5-11.

Figura 5-11
Esquema e diagrama
de fiação para o
circuito RCTIME do
BASIC Stamp com
potenciômetro

Programando as Medidas com RC-Time


O programa de exemplo na Atividade #2 mediu o tempo de queda RC, verificando se
IN7 = 0 a cada 100 ms, mantendo o controle de quantas vezes ele teve que fazer a
verificação. Quando IN7 mudou de 1 para 0, indicou que a voltagem do capacitor
decaiu para 1,4 V. O resultado, quando foi feita uma pesquisa do programa, foi que a
variável timeCounter armazenou um número em décimos de segundo levando a
voltagem do capacitor a decair para 1,4 V.

O seguinte programa de exemplo usa um comando PBASIC chamado RCTIME que faz
com que o BASIC Stamp meça o tempo de queda RC em termos de unidades de 2 μs.
Então, ao invés de usar segundos, o resultado RCTIME 7, 1, time armazena na
variável time na unidade de dois milionésimos de segundo para que a voltagem do
capacitor decaia abaixo de 1,4 V. Uma vez que o comando RCTIME tem essas unidades
de medida finas, você pode reduzir o tamanho do capacitor de 3300 μF para 0,1 ou
Página - 126

também 0,01 μF, e ainda obter medições de tempo que indicam o valor do resistor. Uma
vez que a resistência entre o terminal A do potenciômetro muda quando você gira o
botão, a medição RCTIME lhe dará a medida de tempo correspondente a posição do
botão do potenciômetro.

Exemplo de Programa: ReadPotWithRcTime.bs2


 Coloque e execute ReadPotWithRcTime.bs2
 Tente girar o botão do potenciômetro durante a monitorização do valor da
variável de tempo, utilizando o DEBUG Terminal.

Lembre-se de aplicar um pouco de pressão para baixo para manter o


potenciômetro preso ao protoboard quando você girar o seu botão. Se o seu servo
começar a se mexer, de forma inesperada, em vez de manter a sua posição, um
potenciômetro mal colocado pode ser o culpado.

' O que é um Microcontrolador - ReadPotWithRcTime.bs2


' Leia o potenciômetro no circuito de tempo RC usando o comando
' RCTIME.

' {$STAMP BS2}


' {$PBASIC 2.5}

time VAR Word

PAUSE 1000

DO

HIGH 7
PAUSE 100
RCTIME 7, 1, time
DEBUG HOME, "time = ", DEC5 time

LOOP

Sua Vez – Alterando o Tempo Pela Mudança do Capacitor


 Substitua o capacitor de 0,1 µF pelo capacitor 0,01 µF.
 Experimente as mesmas posições, que você fez na atividade principal, no
potenciômetro e compare o valor exibido no DEBUG Terminal com os valores
obtidos para o capacitor de 0,1 µF. São as medidas RCTIME cerca de um décimo
do valor para uma determinada posição do potenciômetro?
 Volte para o capacitor 0,1 µF.
 Com o capacitor 0,1 µF de volta no circuito e o capacitor 0,01 µF removido, gire
o botão do potenciômetro ao seu limite em ambos os sentidos e faça anotações
dos maiores e menores valores para a próxima atividade. Maior:_________
Menor:_________

Como Funciona o ReadPotWithRcTime.bs2


A Figura 5-12 mostra como os comandos HIGH, PAUSE e RCTIME no
ReadPotWithRcTime.bs2 interagem com o circuito na Figura 5-11.
Página - 127

Figura 5-12: Voltagem para P7 entre HIGH, PAUSE, e RCTIME

À esquerda, o comando HIGH 7 faz com que o BASIC Stamp conecte internamente o
seu pino de I/O P7 a 5 V de alimentação (Vdd). A corrente de alimentação flui através
do resistor do potenciômetro e também carrega o capacitor. Quanto mais próximo o
capacitor estiver de alcançar a sua carga final (quase 5 V), menos corrente passa através
dele. O comando PAUSE 100 faz, principalmente, uma atualização do display do
DEBUG Terminal cerca de 10 vezes por segundo; PAUSE 1 é geralmente suficiente
para carregar o capacitor. À direita, o comando RCTIME 7, 1, time muda a direção
do pino de I/O de saída para entrada e começa a contar o tempo em incrementos de 2 μs.
Como entrada, o pino de I/O, não fornece o circuito com 5 V. Na verdade, a entrada, é
praticamente invisível para o circuito RC. Assim, o capacitor começa a perder sua carga
através do potenciômetro. Como o capacitor perde sua carga, sua voltagem decai. O
comando RCTIME mantém a contagem de tempo até P7 sentir um sinal baixo, ou seja, a
voltagem através do capacitor decai para 1,4 V, no ponto em que ele armazena a sua
medição na variável time.

A Figura 5-12 também mostra um gráfico de voltagem através do capacitor durante os


comandos HIGH, PAUSE e RCTIME. Em resposta ao comando HIGH 7, que liga o
circuito de 5 V, o resistor carrega rapidamente. Então, ele permanece em seu nível de
voltagem final durante a maior parte do comando PAUSE 100. Quando o programa
chega ao comando RCTIME 7, 1, a direção do pino de I/O muda, assim o capacitor
começa a descarregar através do potenciômetro. Quando o capacitor descarrega, a
voltagem de P7 decai. Quando a voltagem decai para 1,4 V (marca de 150 μs neste
exemplo), o comando RCTIME para a contagem de tempo e armazena o resultado da
medição da variável time. Uma vez que o comando RCTIME conta o tempo em duas
unidades μs, o resultado de 150μs que fica armazenado na variável time é 75.
Página - 128

I/O Pin Logic Threshold: 1,4 V é o limite da lógica de um pino de I/O do


BASIC Stamp 2. Quando o pino de I/O está configurado para entrada, armazena
um 1 na sua entrada de registro se a voltagem aplicada for superior a 1,4 V ou um
0 se a voltagem de entrada for de 1,4 V ou inferior. No primeiro exemplo de
botão no Capítulo 3, Atividade #2 foi aplicado 5 V ou 0 V para P3. Desde 5 V
seja acima de 1,4 V, IN3 armazena um 1, e desde 0 V seja inferior a 1,4 V, IN3
armazena um 0.
Argumento State do RCTIME: Em ReadPotWithRcTime.bs2, a voltagem
através do capacitor decai quase 5 V, e quando alcança 1,4 V, o valor em IN7
registra alterações 1 a 0. Nesse ponto, o comando RCTIME armazena a sua
medição em Duration, que é a variável de tempo no programa de exemplo. O
comando RCTIME argumento State é de 1 em RCTIME 7, 1, time, que
informa ao comando RCTIME que o IN7 irá armazenar a 1 quando a medição
começar. O comando RCTIME mede quanto tempo o registro IN7 leva para
mudar para o lado oposto, o que acontece quando a voltagem decai abaixo de
1,4V do limite da lógica do pino de I/O.
Para mais informações: Procure o comando RCTIME tanto no manual do
BASIC Stamp como no BASIC Stamp Editor’s Help.

A Figura 5-13 mostra como o tempo de decaimento muda com a resistência do


potenciômetro para o circuito na Figura 5-11. Cada posição do botão do potenciômetro
o ajusta em uma determinada resistência. Se girar em uma direção a resistência aumenta
e em outra a resistência diminui. Quando a resistência for maior, o decaimento demora
mais tempo, e o comando RCTIME armazena um valor maior da variável time. Quando a
resistência é menor, o decaimento leva um tempo mais curto, e o comando RCTIME
armazena um valor menor na variável time. O comando DEBUG em
ReadPotWithRcTime.bs2 exibe esta medição de tempo no DEBUG Terminal, desde que
as mudanças de tempo de decaimento com a resistência do potenciômetro, que por sua
vez variam com a posição do botão do potenciômetro, o número exibido no DEBUG
Terminal indica a posição do botão.

Figura 5-13
Como a resistência do
potenciômetro afeta o tempo
de decaimento
Página - 129

Por que a carga do capacitor tem uma voltagem mais baixa, quando o
potenciômetro tem menos resistência?
Dê uma olhada no esquema, no canto superior esquerdo da Figura 5-12 na página
3. Sem o resistor de 220 Ω, o pino de I/O seria capaz de carregar o capacitor a 5
V, mas o resistor de 220 Ω é necessário para evitar possíveis danos do pino de
I/O a partir de uma corrente de ligação quando o capacitor começar a ser
carregado. Ele também impede que o potenciômetro extraia muito mais corrente
se estiver a 0 Ω, enquanto o pino de I/O envia seu sinal de alta de 5 V.
Com 5 V aplicado através da resistência 220 Ω em cadeia com o potenciômetro,
a voltagem entre eles tem que ter alguma fração de 5 V. Quando duas resistências
do condutor de corrente são colocadas em cadeia, que resulta em uma voltagem
intermediária, o circuito é chamado divisor de voltagem (voltage divider). Assim,
resistor de 220 Ω e o potenciômetro formam um circuito divisor de tensão, e para
obter qualquer resistência do potenciômetro (Rpot), você pode usar esta
equação para calcular a voltagem sobre o potenciômetro (Vpot):
Vpot V = 5 × Rpot ÷ (Rpot + 220 Ω)
O valor da Vpot estabelece o limite de tensão do capacitor. Em outras palavras,
qualquer voltagem através do potenciômetro poderia ser se o capacitor não
estivesse ligado, é a voltagem que o capacitor pode carregar, e não superiores.
Para a maioria das faixas do botão do potenciômetro, os valores de resistência
estão em kΩ, e quando você calcular Vpot para valores, Rpot em kΩ os
resultados estarão muito mais próximos de 5 V. O resistor de 220 Ω não impede
Vpot carregar acima de 1,4 V até que o valor do potenciómetro esteja abaixo de
85,6 Ω, que é inferior a 1% da amplitude de movimento do potenciômetro. Este
1% resultaria em menores medições de qualquer maneira, por isso é difícil dizer
que as medições nesta escala são nada fora do comum. Mesmo com o adicional
de 220 Ω os resistores construídos no BASIC Stamp HomeWork Board com
conexões de pinos I/O, apenas a faixa do potenciômetro menor que 1,7% é
afetada, por isso ainda é praticamente imperceptível.
Assim, o resistor de 220 Ω protege o pino de I/O, com um impacto mínimo sobre
a capacidade de medição de decaimento RC e mostra onde posicionou o botão do
potenciômetro.

ATIVIDADE #4: CONTROLANDO O SERVO COM UM POTENCIÔMETRO


Os Joysticks de polegar, como o mostrado na Figura 5-14, são comumente encontrados
em controladores de vídeo games. Cada joystick normalmente tem dois potenciômetros
que permitem que os componentes eletrônicos no interior do controlador do jogo
relatem a posição do joystick para o console de videogame. Um potenciômetro gira com
o movimento horizontal do joystick (esquerda/direita), e o outro gira com movimento
vertical do joystick (frente/trás).
Página - 130

Potenciômetro
Figura 5-14
Horizontal
Potenciômetros dentro
do módulo Joystick de
polegar da Parallax

Potenciômetr
o Vertical

Outra aplicação do joystick de polegar que usa potenciômetros é o controlador de rádio


RC e o modelo de avião na Figura 4-1 na página 79. O controlador possui dois joysticks,
e cada um tem dois potenciômetros. Cada posição do potenciômetro é responsável por
controlar um servo diferente sobre o plano de RC.

Nesta atividade, você vai usar um potenciômetro semelhante aos encontrados em


joysticks de polegar para controlar a posição de um servo. Gire o botão do
potenciômetro, o horn de servo irá espelhar este movimento. Esta atividade utiliza dois
circuitos, o circuito do potenciômetro da Atividade #3, neste capítulo, e o circuito do
servo do Capítulo 4, Atividade #1. O programa PBASIC apresentado neste capítulo
mede repetidamente a posição do potenciômetro com um comando RCTIME e, em
seguida, utiliza a medição e um pouco de matemática para controlar a posição do servo
com um comando PULSOUT.

O BASIC Stamp pode medir a posição do joystick. Uma vez que existem dois
potenciômetros em cada joystick de polegar, cada um deles pode, por si só,
substituir o suporte do potenciômetro nos circuitos na figura 5-11, na página 125.
Um comando RCTIME pode medir a posição do potenciômetro vertical, e outra
pode medir o potenciômetro horizontal.

Peças do Servo Controlado por Potenciômetro


(1) Potenciômetro – 10 kΩ
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) Resistor – 470 Ω (amarelo-violeta-marrom)
(1) Capacitor – 0,1 µF
(1) Servo padrão da Parallax
(1) LED – qualquer cor
(2) Fios

O HomeWork Board também vai precisar de:

(1) Conector de 3 pinos macho-macho


(4) Fios
Página - 131

Construindo o Circuito do Servo Controlado por Potenciômetro


Esta atividade vai usar dois circuitos que você já construiu individualmente: circuito do
potenciômetro da atividade recentemente concluída e o circuito do servo do capítulo
anterior.

 Deixe o seu circuito RC-time do potenciômetro da Atividade # 3 na área de


prototipagem. Se você precisar reconstruí-lo, use a Figura 5-11 na página 125.
Certifique-se de usar o capacitor 0,1 µF, e não o capacitor 0,01 µF.
 Adicione seu circuito do servo do Capítulo 4, Atividade #1 ao projeto. Lembre-
se que o circuito do servo será diferente, dependendo da sua placa de suporte.
Abaixo estão as páginas das seções que você precisa ir:
o Página 80: Board of Education Servo Circuit
o Página 82: BASIC Stamp HomeWork Board Servo Circuit

Programando o Servo Controlado por Potenciômetro


Você precisará do menor e o maior valor da variável de tempo que você gravou de seu
circuito RC-time enquanto estava usando um capacitor de a 0,1 µF.

 Se você ainda não completou a seção “Sua Vez” da atividade anterior, retorne e
a conclua agora.

No próximo exemplo, estão os valores de tempo medidos por um técnico da Parallax;


seus valores, provavelmente, serão um pouco diferentes:

• Máximo no sentido horário: 1


• Máximo no sentido anti-horário: 691

Como ajustar estes valores de entrada para mapear o intervalo de 500-1000 ao controlar
o servo com o comando PULSOUT? A resposta é usando multiplicação e adição.
Primeiro, multiplique os valores de entrada por algo que faça a diferença entre os
valores de 500 em vez de 700 no sentido horário (mínimo) e anti-horário (máximo). Em
seguida, adicione um valor constante ao resultado de modo que a sua média seja entre
500 e 1000, em vez de 1 a 500. Na eletrônica, essas operações são chamadas scaling e
offset.

Veja como funciona o cálculo de multiplicação (scaling):

500
time(maximum) = 691× = 691 × 0.724 = 500
691
500
time(minimum) = 1 × = 0.724
691

Depois que os valores são escalados, aqui estão os passos da adição (offset).

time(maximum) = 500 + 500 = 1000


time(minimum) = 0.724 + 500 = 500
Página - 132

O sinal operador */ que foi introduzido na página 69 é construído em PBASIC para o


dimensionamento de valores fracionários, como 0,724. Aqui estão os passos para a
utilização */ aplicado a 0,724:

1. Coloque o valor ou variável que você deseja multiplicar por um valor fracionário
antes do operador */.

time = time */

2. Pegue o valor fracionário que você deseja usar e multiplique por 256.

new fractional value = 0.724 × 256 = 185.344

3. Livre-se de qualquer coisa à direita do ponto decimal.

new fractional value = 185

4. Coloque esse valor após o operador */ .

time = time */ 185

Isso cuidará da escala, agora tudo o que precisamos fazer é adicionar o deslocamento de
500. Isto pode ser feito com um segundo comando, que adiciona 500 ao time:

time = time */ 185


time = time + 500

Agora, o time está pronto para ser reciclado no argumento Duration do comando
PULSOUT.

time = time */ 185 ' Scale by 0.724.


time = time + 500 ' Offset by 500.
PULSOUT 14, time ’ Envie um pulso para o servo.

Exemplo de Programa: ControlServoWithPot.bs2


 Coloque e execute o programa, depois gire o botão do potenciômetro, e
certifique-se que os movimentos do servo são reflexo dos movimentos do
potenciômetro.

' O que é um Microcontrolador - ControlServoWithPot.bs2


' Lê o potenciômetro no circuito de tempo RC usando o comando RCTIME.
' Multiplica o tempo por 0,724 e adiciona 500 para o servo.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000
DEBUG "Programa funcionando!"

time VAR Word


Página - 133

DO

HIGH 7
PAUSE 10
RCTIME 7, 1, time
time = time */ 185 ' Multiplica por 0,724 (X 256 para */).
time = time + 500 ' Adiciona 500.
PULSOUT 14, time ' Envia pulso ao servo.

LOOP

Sua Vez – Multiplicando a Relação do Servo com o Seletor


Seu potenciômetro e capacitor, provavelmente, darão valores de tempo que são um
pouco diferentes dos discutidos nesta atividade. Estes são os valores que você coletou
na seção “Sua Vez” na atividade anterior.

 Repita o cálculo discutido na seção “Programando o Servo Controlado por


Potenciômetro” na página 131, usando seu valores máximos e mínimos.
 Substitua sua escala e valores de deslocamento em ControlServoWithPot.bs2.
 Comente DEBUG "Programa funcionando!" com um apóstrofo no início da linha.
 Adicione esta linha de código entre os comandos PULSOUT e LOOP para que
você possa ver os seus resultados:

DEBUG HOME, DEC5 time ‘ Mostra o valor de tempo ajustado

 Execute o programa modificado e verifique o seu andamento. Como os valores


foram arredondados, os limites podem não ser exatamente 500 e 1000, mas eles
devem ser muito próximos.

Declarando Constantes e Diretivas Pin


Em programas maiores, você pode terminar usando o valor ScaleFactor (que foi de 185)
e o deslocamento (que era de 500) muitas vezes no programa. Números como 185 e 500
em seu programa são chamados constantes, porque ao contrário das variáveis, seus
valores não podem ser alterados enquanto o programa está sendo executado. Em outras
palavras, o valor continua a ser "constante". Você pode criar nomes para essas
constantes com as diretivas CON:

ScaleFactor CON 185


Offset CON 500
delay CON 10

Estas diretivas CON são quase sempre declaradas próximas ao início do


programa, de modo que elas são fáceis de encontrar.

Uma vez que aos valores constantes foram dados nomes com as diretivas CON, você
pode usar o ScaleFactor no lugar de 185 e deslocamento (offset) no lugar de 500 em seu
programa. Por exemplo:

time = time */ scaleFactor “ ' Escala de 0.724.”


time = time + offset “ ' Deslocamento de
500”.
Página - 134

Com os valores nós nomes às constantes com diretivas CON, os comandos são:

time = time */ 185 “ ' Escala de 0.724”.


time = time + 500 “ ' Deslocamento de 500.”

Uma vantagem importante para o uso de constantes é que você pode alterar uma diretiva
CON, e atualizar cada instância desse nome constante no seu programa. Por exemplo, se
você escrever um programa grande que usa o ScaleFactor constante em 11 locais
diferentes, uma mudança do ScaleFactor CON ..., em todas as instâncias de
ScaleFactor em seu programa, usará esse valor atualizado para baixar o próximo
programa. Então, se você mudou o ScaleFactor CON 500 para ScaleFactor CON
510, todos os comandos com ScaleFactor vão usar 510 em vez de 500.

Você também pode dar aos pinos de I/O nomes usando as diretivas PIN. Por exemplo,
você pode declarar uma diretiva PIN para o pino de I/O P7 assim:

RcPin PIN 7

Existem dois pontos no exemplo de programa anterior, onde o número 7 é utilizado para
se referir ao pino de I/O P7. O primeiro pode agora ser escrito como:

HIGH RcPin

O segundo pode ser escrito como:

RCTIME RcPin, 1, time

Se mais tarde você mudar o seu circuito para usar diferentes pinos de I/O, tudo que você
tem a fazer é alterar o valor na sua diretiva PIN, e ambos os comandos HIGH e RCTIME
serão atualizados automaticamente. Da mesma forma, se você tem que recalibrar o scale
factor ou offset, você também pode simplesmente mudar as diretivas CON no início do
programa.

A diretiva PIN tem um recurso adicional: O compilador PBASIC pode


detectar se o nome do pino é usado como uma entrada ou saída, e substituir o
número do pino de I/O para saída ou o correspondente registro de entrada da
variável bit para entrada. Por exemplo, você poderia declarar duas diretivas de
pinos, como LedPin PIN 14 e ButtonPin PIN 3. Em seguida seu código
pode fazer uma declaração como IF ButtonPin = 1 THEN HIGH
LedPin. O compilador PBASIC converte isso para IF IN3 = 1 THEN
HIGH 14. O IF ButtonPin = 1... fez uma comparação, e o
compilador PBASIC sabe que você está usando ButtonPin como entrada.
Por isso, utiliza o registro de entrada bit IN3, em vez do número 3. Da mesma
forma, o compilador sabe que o PBASIC HIGH LedPin usa o pino com o
nome LedPin como valor constante 14 para uma operação de saída, então ele
substitui HIGH 14.

Programa de Exemplo: ControlServoWithPotUsingDirectives.bs2


 Coloque e execute ControlServoWithPotUsingDirectives.bs2.
Página - 135

 Observe como este programa responde ao potenciômetro e verifique se ele se


comporta da mesma maneira com o ControlServoWithPot.bs2

' O que é um Microcontrolador - ControlServoWithPotUsingDirectives.bs2


' Lê o potenciômetro no circuito de tempo RC usando o comando RCTIME.
' Aplica fator de escala e offset, então envia o valor para o servo.

' {$STAMP BS2}


' {$PBASIC 2.5}

rcPin PIN 7 ' Definições de pinos de I/O


servoPin PIN 14

scaleFactor CON 185 ' Declaração de constantes


offset CON 500
delay CON 10

time VAR Word ' Declaração de variáveis

PAUSE 1000 ' Inicialização

DO
' Rotina principal
HIGH rcPin ' Medição de queda RC
PAUSE delay
RCTIME rcPin, 1, time
time = time */ scaleFactor ' Escala scaleFactor.
time = time + offset ' Offset por offset.
PULSOUT servoPin, time ' Envia pulso ao servo.
DEBUG HOME, DEC5 time ' Mostra valor do tempo ajustado.

LOOP

Sua vez – Atualizando a Diretiva PIN


Como mencionado anteriormente, se você ligar o circuito RC a um pino de I/O
diferente, você pode simplesmente mudar o valor da diretiva RcPin PIN, e esta
mudança automaticamente se reflete nos comandos time HIGH RcPin e RCTIME
RcPin, 1.

 Salve o exemplo de programa com um novo nome.


 Altere scaleFactor e compense os únicos valores que você determinou na sua
seção anterior “Sua Vez” para o circuito RC.
 Execute o programa modificado e verifique se ele funciona corretamente.
 Modifique o circuito movendo a conexão do circuito RC–time do pino de I/O P7
para o pino de I/O P8.
 Modifique a declaração rcPin para que seja lido assim:

rcPin PIN 8

 Reexecute o programa e verifique se os comandos HIGH e RCTIME ainda estão


funcionando corretamente sobre os diferentes pinos de I/O com apenas uma
alteração da diretiva PIN RcPin.
Página - 136

SUMÁRIO
Este capítulo apresentou o potenciômetro, peça frequentemente encontrada em vários
botões e seletores. O potenciômetro tem um elemento resistivo que tipicamente conecta
seus dois terminais externos e um terminal do limpador que contata um ponto variável
sobre o elemento resistivo. O potenciômetro pode ser utilizado como uma resistência
variável, se o terminal do limpador e um dos dois terminais externos for utilizados num
circuito.

O capacitor também foi introduzido neste capítulo. Um capacitor pode ser usado para
armazenar e libertar carga. A quantidade de carga que um capacitor pode armazenar
está relacionada com o seu valor, que é medido em farads (F). O símbolo µ é a notação
de engenharia para micro, e significa um milionésimo. Os condensadores utilizados nas
atividades deste capítulo variaram de 0,01 para 3300 µF.

Uma resistência e um condensador podem ser ligados entre si num circuito que leva um
certo período de tempo para carga e descarga. Este circuito é comumente referido como
um circuito RC-time. O R e o C em RC-time significam resistência e condensador.
Quando um valor (C nas atividades deste capítulo) é constante, a variação de tempo
necessária para que o circuito descarregue está relacionada com o valor de R. Quando o
valor de R muda, o valor do tempo que leva para o circuito carregar e descarregar
também muda. O tempo total que o circuito RC-time leva para descarregar pode ser
dimensionado usando um condensador de um tamanho diferente.

O assentamento foi utilizado para monitorar o tempo de descarga de um capacitor em


um circuito RC onde o valor de C, era muito grande. Vários resistores diferentes foram
utilizados para mostrar como as alterações do tempo de descarga mudam quando o valor
do resistor no circuito muda. O comando RCTIME foi então usado para monitorar um
potenciômetro (um resistor variável) de um circuito RC-time com capacitores de valor
menor. Embora esses capacitores façam com que os tempos de descarga na faixa de
cerca de 2 a 1500 µs (milionésimos de segundo), o BASIC Stamp não tem nenhum
problema de rastreamento dessas medições de tempo com o comando RCTIME. O pino
de I/O deve ser estabelecido HIGH e então o capacitor no circuito RC-time poderá ser
carregado usando PAUSE antes do comando RCTIME.

Programação em PBASIC pode ser usada para medir um sensor resistivo tal como um
potenciômetro e dimensionar seu valor de modo que seja útil para outro dispositivo, tal
como um servo motor. Trata-se de realizar operações matemáticas sobre o tempo de
descarga RC medido, que um comando RCTIME armazena em uma variável. Esta
variável pode ser ajustada pela adição de um valor constante para isso, o que é útil para
o controle de um servo. Na seção Projetos, você pode encontrar também multiplicação e
divisão.

A diretiva CON pode ser utilizada no início de um programa para substituir um nome por
um valor constante (um número). Depois que uma constante foi nomeada, o nome pode
ser usado no lugar do número em todo o programa. Isto pode ajudar, especialmente se
você precisa usar o mesmo número em 2, 3, ou até mesmo 100 lugares diferentes no
programa. Você pode alterar o número na diretiva CON, e todas 2, 3, ou até 100
diferentes instâncias desse número serão atualizadas automaticamente na próxima vez
que você executar o programa. Diretivas PIN permitem nomear pinos de I/O. O nome
Página - 137

do pino I/O é sensível ao contexto, assim o compilador PBASIC substitui o número do


pino de I/O correspondente pelo nome do pino nos comandos como HIGH, LOW, e
RCTIME. Se o nome do pino vir a ser habitual em uma instrução condicional ele
substituirá o registro de entrada por IN2, IN3 etc.

Questões
1. Quando você gira o seletor ou o botão em um aparelho de som, qual componente
você está provavelmente ajustando?
2. Em um potenciômetro típico, a resistência entre os dois terminais externos pode
ser ajustada?
3. Quão semelhante é um capacitor de uma bateria recarregável? Como ele se
diferencia?
4. O que você pode fazer com um circuito RC-time para lhe dar uma indicação do
valor de um resistor variável?
5. O que acontece com o tempo de descarga RC, se o valor de R (o resistor) tornar-
se maior ou menor?
6. O que a diretiva CON faz? Explique isto em termos de um nome e de um número.

Exercícios
1. Vamos dizer que você tem um capacitor 0,5 µF no circuito RC timer, e você
quer que a medida fique dez vezes maior. Calcule o valor do novo capacitor.

Projetos
1. Adicione um circuito de LED bicolor na Atividade # 4. Modifique o programa
de exemplo para que o LED bicolor fique vermelho quando o servo estiver
girando no sentido anti-horário, verde quando o servo estiver girando no sentido
horário, e desligado quando o servo permanecer na sua posição.
2. Use IF...THEN para modificar o primeiro exemplo de programa da Atividade
#4 para que o servo só gire entre os valores PULSOUT de 650 e 850.

Soluções
Q1.O Potenciômetro.
Q2.Não, ela é fixa. A resistência variável é entre um terminal externo e o wiper
terminal (meio).
Q3.Um capacitor é semelhante a uma bateria recarregável, que pode ser carregado
para manter a tensão. A diferença é que ele só aguenta a carga por um período
muito curto de tempo.
Q4. Você pode medir o tempo que leva para o capacitor descarregar (ou carregar).
Este tempo está relacionado com a resistência e a capacitância. Se a capacitância
for conhecida e a resistência variável, o tempo de descarga dará a indicação da
resistência.
Q5.Se R ficar maior, o tempo de descarga RC aumentará na proporção direta ao
aumento de R. Se R ficar menor, o tempo de descarga RC diminuirá na
proporção direta à diminuição de R.
Q6.As diretivas CON substituem um nome por um número.

E1. Novo capacitor = (10 x valor do velho capacitor) = (10 x 0.5µF) = 5 µF


Página - 138

E1. Atividade #4 com LED bicolor adicionado.


P13 Esquema do Potenciômetro da Figura
1
5-11 na página 125, servo do
Capítulo 4m Atividade #1, e LED
2
bicolor da Figura 2-19 na página 45
P12 com P15 e P14 mudados para P13 e
470 Ω P12, como mostrado.
' O que é um Microcontrolador - Ch5Prj01_ControlServoWithPot.bs2
' Lê o potenciômetro no circuito de tempo RC usando o comando
' RCTIME.
' Usa o resultado RCTIME na variável time para controlar a
' posição do servo.
' LED bicolor em P12, P13 dita a direção de rotação do servo:
' verde para SH, vermelho para SAH, apagado quando o servo está
' parado.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000
DEBUG "Programa funcionando!"

time VAR Word ' Leitura de tempo do potenciômetro


prevTime VAR Word ' Leitura anterior

DO

prevTime = time ' Armazena leitura de tempo anterior

HIGH 7 ' Lê potenciômetro usando RCTIME


PAUSE 10
RCTIME 7, 1, time
time = time */ 185 ' Escala de 0,724 (X 256 for */).
time = time + 500 ' Offset de 500.
PULSOUT 14, time

IF ( time > prevTime + 2) THEN ' Aumenta, potenciômetro gira SAH


HIGH 13 ' LED bicolor vermelho
LOW 12
ELSEIF ( time < prevTime - 2) THEN 'Diminui potenciômetro gira SH
LOW 13 ' LED bicolor verde
HIGH 12
ELSE ' Servo mantém posição
LOW 13 ' LED apagado
LOW 12
ENDIF

LOOP

P2. A chave é adicionar blocos de IF ... THEN, um exemplo é mostrado abaixo.


CLREOL é um personagem de controle de depuração útil que significa "claro
para o fim da linha".

' O que é um Microcontrolador - Ch5Prj02_ControlServoWithPot.bs2


' Lê o potenciômetro no circuito de tempo RC usando o commando
' RCTIME.
Página - 139

' Modificado com IF…THEN para que o servo apenas gire de 650 a
' 850.
' A variável time vai de 1 a 691, então um offset de, no mínimo,
' 649 é necessário.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DEBUG "Programa funcionando!"

time VAR Word

DO

HIGH 7 ' Lê o potenciômetro com RCTIME


PAUSE 10

RCTIME 7, 1, time
time = time + 649 ' Escala time para variação do servo

IF (time < 650) THEN ' Restringe variação para 650 a 850
time = 650
ENDIF
IF (time > 850) THEN
time = 850
ENDIF

PULSOUT 14, time


DEBUG HOME, "time = ", DEC4 time, CLREOL

LOOP
Página - 140

Capítulo 6: Display Digital


O DISPLAY DIGITAL COTIDIANO
A Figura 6-1 mostra um display na parte da frente da porta de um forno. Quando o
aparelho não está em uso, ele exibe a hora. Quando em uso exibe o temporizador do
forno, configurações para cozimento, e pisca ao mesmo tempo que um alarme soa para
que você saiba que a comida está pronta. Um microcontrolador dentro da porta do forno
monitora os botões e atualiza os mostradores. Ele também monitora os sensores dentro
dos dispositivos do forno e muda os dispositivos que ligam os componentes de
aquecimento em ligado e desligado.

Figura 6-1
Relógio digital de
display de 7
segmentos na porta
do forno.

Cada um dos três dígitos na Figura 6-1 é chamado de display de 7 segmentos. Neste
capítulo, você vai programar o BASIC Stamp para exibir números e letras em um
display de 7 segmentos.

O QUE É UM DISPLAY DE 7 SEGMENTOS?


Um display de 7 segmentos é um bloco retangular de 7 linhas de igual comprimento que
podem ser iluminadas com LEDs seletivamente, para exibir dígitos e algumas letras. A
Figura 6-2 mostra uma parte do desenho do display do LED de 7 segmentos que você
vai usar nas atividades deste capítulo. Também tem um ponto que pode ser usado como
um ponto decimal. Cada um dos segmentos (A a G) e do ponto contém um LED
separado, que pode ser controlado individualmente. A maioria dos pinos tem um
número junto com uma etiqueta que corresponde a um dos segmentos de LED. O pino 5
rotulado DP significa ponto decimal. Os pinos 3 e 8 são rotulados como "cátodo
comum" (“common cathode”), e eles serão explicados quando o esquema para esta
parte for introduzido.

Common
Cathode

10 9 8 7 6
G F A B

A
F B Figura 6-2
G Desenho da peça e mapa de
pinos do display de 7 segmentos
E C
de LED
D

E D C DP

1 2 3 4 5
Common
Cathode
Página - 141

Mapa de pinos: A Figura 6-2 é um exemplo de mapa de pinos. O mapa de pinos


contém informações úteis que ajudam você a conectar uma peça a outros
circuitos. Mapas de pinos, usualmente, mostram o número e o nome de cada
pino e a sua referência.
Dê uma olhada na Figura 6-2. Cada pino é numerado, e o nome de cada pino é
a letra segmento próxima ao pino. A referência para esta parte é o ponto decimal.
Oriente a área para que o ponto decimal fique no canto inferior direito. Então
você pode ver a partir do pino no mapa que o pino 1 no canto inferior esquerdo, e
os números dos pinos aumentam no sentido anti-horário em torno do caixa.

A Figura 6-3 mostra um esquema dos LEDs dentro do display de LED de 7 segmentos.
Cada ânodo do LED está ligado a um pino individual. Todos os cátodos estão ligados
entre si por fios no interior da peça. Porque todos os cátodos partilham uma ligação
comum, o display de LED de 7 segmentos pode ser chamado de um display de cátodo
comum. Ao ligar tanto o pino 3 ou 8 na peça para Vss, você vai conectar todos os
cátodos do LED para Vss.

1 4 6 7 9 10 5

E C B A F G DP
Figura 6-3
Esquema do display
LED’s de LED de 7
segmentos

3 8

ATIVIDADE #1: CONSTRUINDO E TESTANDO O DISPLAY DE LED DE 7


SEGMENTOS
Nessa atividade, você construirá manualmente circuitos para testar cada segmento do
display.

Peças para o Teste do Display de LED de 7 Segmentos


(1) Display de LED de 7 segmentos
(5) Resistores – 1 kΩ (marrom-preto-vermelho)
(1) Fio

Teste dos Circuitos do Display de LED de 7 Segmentos


 Com a energia do seu Board of Education ou HomeWork Board desconectada,
construa o circuito mostrado na Figura 6-4 e na Figura 6-5.
 Reconecte a energia e verifique se o segmento A emite luz.

O que é o x com o nc acima dele no esquema? O nc representa não conectado


ou sem conexão. Ele indica que um determinado pino no display de LED de 7
segmentos não está ligado a nada. O x na extremidade do pino, também significa
não ligado. Esquemas, às vezes, usam apenas o x ou apenas o nc.
Página - 142

Vdd

1 kΩ

nc nc nc nc nc nc nc
X

X
1 4 6 9 10 5
Figura 6-4
7
Esquema do teste de
E C B A F G DP circuito para o
segmento “A” do
display de LED
LED’s

3 8
X

nc
Vss
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd

Figura 6-5
Diagrama de fiação
Vin

do teste de circuito
para o segmento “A”
Vss

do display de LED

 Desconecte a energia e modifique o circuito conectando o resistor à entrada do


LED B conforme mostrado na Figura 6-6 e na Figura 6-7.
Vdd

1 kΩ

nc nc nc nc nc nc nc
X

1 4 6 9 10 5
Figura 6-6
7
Esquema do teste de
E C B A F G DP circuito para o
segmento “B” do
display de LED
LED’s

3 8
X

nc
Vss
Página - 143

P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd
Figura 6-7
Diagrama de fiação

Vin
do teste de circuito
para o segmento “B”

Vss
do display de LED

 Reconecte a energia e verifique se o segmento B emite luz.


 Usando o mapa de pinos da Figura 6-2 como guia, repita esses passos para os
segmentos C a G.

Sua Vez – O Número 3 e a Letra H


A Figura 6-8 e a Figura 6-9 mostram o digito “3” conectado no display de LED de 7
segmentos.
Vdd Vdd Vdd Vdd Vdd

1 kΩ (all)

nc nc nc
X

1 4 6 7 9 10 5
Figura 6-8
E C B A F G DP Dígito “3”
conectado.

LED’s

3 8
X

nc
Vss
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd

Figura 6-9
Diagrama de
Vin

Fiação para a
Figura 6-8
Vss

 Construa e teste o circuito mostrado nas Figura 6-8 e Figura 6-9, e verifique se o
número 3 é exibido.
Página - 144

 Desenhe um esquema que mostra o número 2 no LED de 7 segmentos.


 Construa e teste o circuito, para verificar se ele funciona. Solucione o problema,
se necessário.
 Determine o circuito necessário para a letra "H" e, em seguida, construa-o e
teste.

ATIVIDADE #2: CONTROLANDO O DISPLAY DE LED DE 7 SEGMENTOS


Nesta atividade, você vai conectar o display de LED de 7 segmentos no BASIC Stamp
e, em seguida, executar um programa simples para testar e ter certeza se cada LED está
conectado corretamente.

Peças do Display de LED de 7 Segmentos


(1) Display LED de 7 segmentos
(8) Resistores - 1 kΩ (marrom-preto-vermelho)
(5) Fios

Conectando o Display de LED de 7 Segmentos no BASIC Stamp


A Figura 6-11 mostra o esquema e a Figura 6-12 mostra o diagrama de fiação para este
exemplo de controle de display de LED de 7 segmentos do BASIC Stamp.

 Construa o circuito mostrado na Figura 6-11 e na Figura 6-12.

Esquema e Mapa de Pinos: Se você está tentando construir o esquema de


circuito da Figura 6-11 sem depender da Figura 6-12, certifique-se de consultar o
mapa de pinos do display de LED de 7 segmentos, mostrado aqui novamente na
Figura 6-10 por conveniência.

Common
Cathode

10 9 8 7 6
G F A B

A
F B Figura 6-10
G Desenho da peça e mapa de
pinos do display de LED de 7
E C
segmentos.
D

E D C DP

1 2 3 4 5
Common
Cathode
Página - 145

1 kΩ
(All)
P15
P14
P13
P12 Figura 6-11
P11 Esquema
P10 display de
LED de 7
P9
segmentos
P8 controladado
E C DP G F A B
pelo BASIC
LED’s Stamp

common

Vss

Tenha cuidado com os resistores ligados a P13 e P14. Olhe atentamente para
os resistores ligados a P13 e P14 na Figura 6-12. Há um vão entre esses dois
resistores. O vão é mostrado porque o pino 8 no display de 7 segmentos do LED
é deixada desligada. Um resistor conecta o pino de I/O P13 para o pino 9 do
display de LED de 7 segmentos. Outro resistor liga P14 ao pino 7 do display de
LED de 7 segmentos.

DP
EDC GFAB
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15

Figura 6-12
X2

X3

Diagrama de Fiação
para a Figura 6-11
Vdd

Use as letras de
Vin

segmento acima
desse diagrama como
referência.
Vss

Dispositivo Paralelo: O display de LED de 7 segmentos é chamado de


dispositivo paralelo, porque o BASIC Stamp tem que usar um grupo de linhas de
I/O para enviar dados (informação de alta e baixa) para o dispositivo. No caso
deste display de LED de 7 segmentos, são necessários 8 pinos de I/O para instruir
ao dispositivo o que exibir.
Barramento Paralelo: Os fios que transmitem os sinais de baixa / alta do
BASIC Stamp para o display de LED 7 segmentos são chamados de barramento
paralelo. Note-se que estes fios são desenhados como linhas paralelas na Figura
6-11. O termo "paralelo" faz sentido, dada a geometria do esquema.
Página - 146

Programando o Teste do Display de LED de 7 Segmentos


Os comandos de HIGH e LOW vão aceitar uma variável como um argumento Pin. Para
testar cada segmento, um de cada vez, basta colocar os comandos HIGH e LOW em um
loop FOR ... NEXT, e usar o índice para definir o pino I/O de alta, depois o de baixa
novamente.

 Digite e execute SegmentTestWithHighLow.bs2.


 Verifique se todos os segmentos do LED de 7 segmentos acendem as luzes
brevemente, ligando e em seguida desligando novamente.
 Relacione qual segmento o pino de I/O controla.

Programa de Exemplo: SegmentTestWithHighLow.bs2


' O que é um Microcontrolador - SegmentTestWithHighLow.bs2
' Teste individualmente cada segment em um display de LED de 7
' segmentos.

'{$STAMP BS2}
'{$PBASIC 2.5}

pinCounter VAR Nib

PAUSE 1000
DEBUG "Pino de I/O", CR,
"-------", CR

FOR pinCounter = 8 TO 15

DEBUG DEC2 pinCounter, CR


HIGH pinCounter
PAUSE 1000
LOW pinCounter

NEXT

Sua Vez - um Padrão Diferente


Removendo o comando LOW pinCounter, será obtido um efeito interessante:

 Comente o comando LOW pinCounter adicionando um apóstrofo à esquerda.


 Execute o programa modificado e observe o efeito.

ATIVIDADE #3: EXIBINDO DÍGITOS


Se você incluir o ponto decimal, há oito pinos de I/O diferentes no BASIC Stamp que
enviam sinais de baixa / alta para o display de LED de 7 segmentos. São oito comandos
HIGH ou LOW diferentes para exibir apenas um número. Se você contar de zero a nove,
seria uma vasta quantidade de programação. Felizmente, existem variáveis especiais que
você pode usar para definir os valores máximos e mínimos para os grupos dos pinos de
I/O.

Nesta atividade, você vai usar números binários de 8 dígitos em vez dos comandos
HIGH e LOW para controlar os sinais de alta/baixa enviados pelos pinos de I/O para o
BASIC Stamp. Ao definir variáveis especiais chamadas DIRH e OUTH iguais aos
Página - 147

números binários, você será capaz de controlar os sinais de baixa/alta enviados por
todos os pinos de I/O conectados ao circuito de 7 segmentos do LED com um único
comando PBASIC.

8 bits: Um número binário que tem 8 dígitos diz-se que tem 8 bits. Cada bit é um
slot onde você pode armazenar ou 1 ou 0.
Um byte é uma variável, que contém 8 bits. Existem 256 combinações
diferentes de zeros e uns, que você pode usar para contar de 0 a 255, com 8 bits.
É por isso que uma variável de byte pode armazenar um número entre 0 e 255.

Peças e Circuito para Exibição de Dígitos


As mesmas da atividade anterior

Programando Padrões de On / Off Usando Números Binários


Nesta atividade, você vai experimentar as variáveis DIRH e OUTH. DIRH é uma variável
que controla a direção (entrada ou saída) dos pinos de I/O P8 a P15. OUTH controla os
sinais altos ou baixos que cada um destes pinos de I/O envia. Você verá brevemente que
OUTH é especialmente útil, pois você pode usá-lo para definir os sinais de alta/baixa
para oito pinos de I/O diferentes de uma só vez com apenas um comando. Aqui está um
exemplo de programa que mostra como essas duas variáveis podem ser usadas para
contar de 0 a 9, no display de 7 segmentos do LED, sem usar os comandos HIGH e LOW:

Programa de Exemplo: DisplayDigits.bs2


Esse programa de exemplo irá fazer com que o display de LED de 7 segmentos alterne
os dígitos de 0 à 9.

 Coloque e execute DisplayDigits.bs2.


 Verifique se os dígitos de 0 a 9 são exibidos.

' O que é um Microcontrolador - DisplayDigits.bs2


' Exibe dígitos de 0 à 9 no display de LED de 7 segmentos.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Program Running!"

OUTH = %00000000 ' OUTH inicializado em baixa.


DIRH = %11111111 ' Configura P8-P15, todas saídas em baixa.
' Dígito:
' BAFG.CDE
OUTH = %11100111 ' 0
PAUSE 1000
OUTH = %10000100 ' 1
PAUSE 1000
OUTH = %11010011 ' 2
PAUSE 1000
OUTH = %11010110 ' 3
PAUSE 1000
OUTH = %10110100 ' 4
PAUSE 1000
OUTH = %01110110 ' 5
PAUSE 1000
Página - 148

OUTH = %01110111 ' 6


PAUSE 1000
OUTH = %11000100 ' 7
PAUSE 1000
OUTH = %11110111 ' 8
PAUSE 1000
OUTH = %11110110 ' 9
PAUSE 1000

DIRH = %00000000 ' Pinos de I/O para entrada,


' Segmentos apagados.
END

Como Funciona o DisplayDigits.bs2


A Figura 6-13 mostra como você pode usar as variáveis DIRH e OUTH para controlar a
direção e definir os estados (de alta/baixa) dos pinos de I/O P8 a P15.
Vss
Vin

Figura 6-13
Usando DIRH e OUTH
para configurar todos
Vdd

os pinos de I/O para


saída baixa.
X3

X2
P15
P14
P13
P12

P10
P11

P9
P8
P7
P6
P5
P4
P3
P2
P1
P0

OUTH = %00000000
DIRH = %11111111

O primeiro comando:

OUTH = %00000000

... deixa todos os pinos de I/O (P8 a P15) prontos para enviar os sinais de baixa. Se
todos eles enviarem sinais de baixa, eles desligarão todos os segmentos no display de
LED de 7 segmentos. Se você quisesse que todos os pinos de I/O enviassem um sinal de
alta, você poderia usar OUTH =% 11111111.

O que % faz? O formatador binário % é usado para dizer ao BASIC Stamp Editor
que o número é um número binário. Por exemplo, o número binário
%00001100 é o mesmo que o número decimal 12. Como você vai ver nesta
atividade, números binários podem fazer facilmente muitas tarefas de
programação.

Os sinais de baixa não serão realmente enviados pelos pinos de I/O até que você use a
variável DIRH para mudar todos os pinos de I/O de entrada para a saída. O comando:

DIRH = %11111111
Página - 149

... define os pinos de I/O P8 a P15 para a saída. Assim que este comando é executado,
de P8 a P15, todos, começarão a enviar sinais de baixa. Isso ocorre porque o comando
OUTH = %00000000 foi executado pouco antes do comando DIRH. Assim que o
comando DIRH definir todos os pinos de I/O para a saída, eles começarão a enviar seus
sinais de baixa. Você também pode usar DIRH =% 00000000 para mudar todos os
pinos de I/O de volta para entrada.

Antes dos pinos de I/O se tornarem saídas: até os pinos de I/O serem alterados
de entrada para saída, eles apenas ficam atentos aos sinais e atualizam a variável
INH. Esta é a variável que contém IN8, IN9 até IN15. Essas variáveis podem
ser usadas da mesma forma que IN3 e IN4 foram usadas para leitura dos botões
no Capítulo 3.
Todos os pinos de I/O no BASIC Stamp começam como entrada. Isso é
chamado de padrão (default). Você tem que dizer ao pino de I/O do BASIC
Stamp para iniciar como saída, antes que ele comece enviar um sinal de alta ou
baixa. Ambos os comandos HIGH e LOW mudam automaticamente a direção de
um pino de I/O do BASIC Stamp para saída. Colocar um 1 na variável DIRH
também muda um dos pinos de I/O para saída.
Sempre definir valores em um determinado registro OUT antes de fazer as
saídas com os valores no registro DIR correspondente. Isso evita o envio de
breves sinais não intencionais. Por exemplo, se DIR5 = 1 é seguido por OUT5
= 1, no início de um programa, será enviado um breve sinal de baixa, não
intencional, antes de mudar para alta porque OUT5 armazena 0, quando o
programa é iniciado. (Inicializar todas as variáveis/registros no PBASIC com 0.)
Se OUT5 = 1 for seguido por DIR5 = 1, o pino de I / O irá enviar um sinal
de alta, tão logo ele se torne uma saída.
Uma vez que os valores armazenados são 0 por todas as variáveis padrão
quando o programa é iniciado, o comando OUTH =% 00000000 é
realmente redundante.

 A Figura 6-14 mostra como usar a variável OUTH, para seletivamente, enviar
sinais de alta e baixa para P8 a P15. O binário-1 é usado para enviar um sinal de
alta, e binário-0 é usado para enviar um sinal de baixa. Esse exemplo mostra o
número três no display de LED de 7 segmentos:

' BAFG.CDE
OUTH = %11010110
Página - 150

Vss
Vin

Figura 6-14
Usando OUTH para
controlar os sinais de
Vdd

alta e baixa do P8 –
P15
X3

X2
P15
P14
P13
P12

P10
P11

P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
‘ BAFG.CDE
OUTH = %11010110

O display está ligado e o número três no display está de cabeça para baixo, para mostrar,
de modo mais claro, os valores da linha OUTH até os pinos de I/O. O comando OUTH =%
11010110 usa zeros binários para definir pinos de I/O P8, P11, P13 baixo, e usa os
binários para definir P9, P10, P12, P14 e P15 alto. A linha pouco antes do comando é
um comentário que mostra os rótulos do segmento alinhados com o valor binário que
transforma esse segmento on / off.

Dentro dos comandos HIGH e LOW:


HIGH 15 OUT15 = 1
...é o mesmo que:
DIR15 = 1

Da mesma forma, o comando :


LOW 15 OUT15 = 0
...é o mesmo que:
DIR15 = 1

Se você quiser retornar P15 para entrada, use DIR15 = 0. Você pode então
usar IN15 para detectar (em vez de enviar) sinais de alta / baixa.

Sua Vez – Exibindo de A à F


 Descubra quais padrões de bits (combinações de zeros e outros) você precisará
para exibir as letras A, b, C, d, E e F.
 Modifique DisplayDigits.bs2 para que ele exiba A, b, C, d, E, F.

Decimal vs. Hexadecimal Os dígitos básicos no sistema de numeração


decimal (base 10) são:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
No sistema hexadecimal (base-16) os números básicos são:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, C, d, E, F.
A base-16 é amplamente utilizada em computadores e na programação de
microcontroladores. Depois de descobrir como exibir os caracteres de A à F,
você pode modificar o seu programa para que ele conte em hexadecimal de 0 a F.
Página - 151

Mantendo Listas de Padões On / Off


O comando LOOKUP escreve um código para o display de LED de 7 segmentos exibir
padrões com mais facilidade. O comando LOOKUP permite "procurar" elementos em
uma lista. Aqui está um exemplo de código que usa o comando LOOKUP:

LOOKUP index, [7, 85, 19, 167, 28], value

Há duas variáveis utilizadas neste comando, index e value. Se index é 0, valeu armazena
7. Se o index é 1, value armazena 85. No próximo programa de exemplo, index é
definido como 2, para o comando LOOKUP colocar 19 em value, e é isso que o DEBUG
Terminal exibe.

Programa de Exemplo: SimpleLookup.bs2


 Coloque e execute SimpleLookup.bs2.
 Execute o programa como está, com a variável index igual a 2.
 Tente configurar a variável index igual para números entre 0 e 4.
 Reexecute o programa depois de cada alteração na variável index e note que o
valor da lista é colocado na variável value.
 Opcional: Modifique o programa, colocando o comando LOOKUP em um loop
FOR ... NEXT que conta de 0 a 4.

' O que é um Microcontrolador - SimpleLookup.bs2


' Debug um valor usando index e uma tabela de consulta.

' {$STAMP BS2}


' {$PBASIC 2.5}

value VAR Byte


index VAR Nib

index = 2
PAUSE 1000

DEBUG ? index

LOOKUP index, [7, 85, 19, 167, 28], value

DEBUG ? value, CR

DEBUG "Mude a variável index para um ", CR,


"número diferente (entre 0 e 4).", CR, CR,

"Execute o programa modificado e ", CR,


"verifique qual número o comando ", CR,
"LOOKUP coloca na variável ", CR,
"value."

END

Programa de Exemplo: DisplayDigitsWithLookup.bs2


Este programa de exemplo mostra como o comando LOOKUP pode ser realmente útil
para armazenar os padrões de bits usados na variável OUTH. Novamente, a variável
index é utilizada para selecionar o valor binário que é colocado na variável OUTH. Este
Página - 152

Programa de Exemplo tem a contagem de 0 a 9 novamente. A diferença entre este


programa e DisplayDigits.bs2 é que este programa é muito mais versátil. É muito mais
rápido e mais fácil de ajustar para sequências de números diferentes, utilizando tabelas
de consulta.

 Coloque e execute DisplayDigitsWithLookup.bs2.


 Verifique se ele faz a mesma coisa que o programa anterior (com muito menos
trabalho).
 Dê uma olhada no DEBUG Terminal enquanto o programa esta sendo
executado. Ele mostra como o valor de index é usado pelo comando LOOKUP
para carregar o valor binário correto da lista para OUTH.

' O que é um Microcontrolador - DisplayDigitsWithLookup.bs2


' Use uma tabela de consulta para armazenar e exibir dígitos com o
' display de LED de 7 segmentos.

'{$STAMP BS2}
'{$PBASIC 2.5}

index VAR Nib

OUTH = %00000000
DIRH = %11111111
PAUSE 1000

DEBUG "index OUTH ", CR,


"----- --------", CR

FOR index = 0 TO 9
LOOKUP index, [ %11100111, %10000100, %11010011,
%11010110, %10110100, %01110110,
%01110111, %11000100, %11110111, %11110110 ], OUTH

DEBUG " ", DEC2 index, " ", BIN8 OUTH, CR


PAUSE 1000
NEXT

DIRH = %00000000
END

Sua Vez – Exibindo 0 à F novamente


 Modifique DisplayDigitsWithLookup.bs2 para que ele conte de 0 à F em
hexadecimal. Não se esqueça de atualizar o argumento EndValue do loop
FOR...NEXT.

ATIVIDADE #4: EXIBINDO A POSIÇÃO DE UM DIAL


No Capítulo 5, Atividade #4 utilizou o potenciômetro para controlar a posição de um
servo. Nesta atividade, você vai mostrar a posição do potenciômetro usando o display
de LED de 7 segmentos.

Peças do Dial e Display


(1) Display LED de 7 segmentos
(8) Resistores – 1 kΩ (marrom-preto-vermelho)
Página - 153

(1) Potenciômetro – 10 kΩ
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) Capacitor – 0,1 µF
(7) Fios

Construindo o Circuito do Dial e Display


A Figura 6-15 mostra um diagrama esquemático do circuito do potenciômetro que deve
ser adicionado ao projeto. A Figura 6-16 mostra o diagrama de fiação do circuito a
partir da Figura 6-15 combinado com o circuito da Figura 6-11, na página 146.

 Adicione o circuito do potenciômetro ao circuito do display de LED de 7


segmentos, conforme mostrado na Figura 6-16.

Figura 6-15
Esquema do circuito
do potenciômetro
adicionado ao projeto

Figura 6-16
Diagrama de fiação
para a Figura 6 -15

Programando o Dial e o Display


Há um comando bastante útil denominado LOOKDOWN, e sim, ele é o inverso do
comando LOOKUP. Enquanto o comando LOOKUP lhe dá um número com base em um
índice, o comando LOOKDOWN lhe dá um índice baseado em um número.

Programa de Exemplo: SimpleLookdown.bs2


Este programa de exemplo demonstra como o comando LOOKDOWN funciona.
 Coloque e execute SimpleLookdown.bs2.
 Execute o programa como está, com a variável value definida igual a 167, e use
o DEBUG Terminal para observar o valor de index.
 Tente configurar a variável value igual a cada um dos números listados pelo
comando LOOKDOWN: 7, 85, 19, 28.
 Reexecute o programa depois de cada alteração na variável value e note qual
valor da lista foi colocado na variável index.
Página - 154

Pegadinha: O que acontece se o seu valor for maior que 167? Esta pequena
variação no comando LOOKDOWN pode causar problemas porque o comando
LOOKDOWN não faz qualquer alteração no índice.

' O que é um Microcontrolador - SimpleLookdown.bs2


' Debug um índice usando um valor e uma tabela de consulta.

' {$STAMP BS2}


' {$PBASIC 2.5}

value VAR Byte


index VAR Nib

value = 167
PAUSE 1000
DEBUG ? value

LOOKDOWN value, [7, 85, 19, 167, 28], index

DEBUG ? index, CR

DEBUG "Mude a variável value para um ", CR,


" número diferente dessa lista:", CR,
"7, 85, 19, 167, or 28.", CR, CR,

"Execute o programa modificado e ", CR,


"verifique qual o número o comando ", CR,
"LOOKDOWN colocou na variável ", CR,
"index."

END

A menos que você diga a ele para fazer um tipo diferente de comparação, o comando
LOOKDOWN verifica se o valor está igual a uma entrada na lista. Você também pode
verificar se um valor é maior que, menor que ou igual a, etc. Por exemplo, para
procurar uma entrada em que a variável value é menor que ou igual a, use o operador <=
pouco antes da primeira faixa que inicia a lista. Em outras palavras, o operador retorna o
índice do primeiro valor na lista que faz a indicação na instrução real.

 Modifique SimpleLookdown.bs2 substituindo este valor e a declaração


LOOKDOWN no lugar dos já existentes:

value = 35
LOOKDOWN value, <= [ 7, 19, 28, 85, 167 ], index

 Modifique o comando DEBUG para que se leia:

DEBUG "Mude a variável value para um ", CR,


"número diferente, nesta faixa:", CR,
"0 à 170.", CR, CR

"Execute o programa modificado e ", CR,


"verifique qual o número o comando ", CR,
"LOOKDOWN colocou na variável ", CR,
Página - 155

"index."

 Experimente com valores diferentes e veja se a variável index mostra o que


você tinha em mente.

Programa de Exemplo: DialDisplay.bs2


Este programa de exemplo espelha a posição do botão do potenciômetro iluminando os
segmentos externos do display de LED de 7 segmentos, conforme mostrado na Figura
6-17.

Figura 6-17
Exibindo a posição do
potenciômetro com o display de
LED de 7 segmentos.

 Coloque e execute DialDisplay.bs2.


 Gire o botão do potenciômetro e verifique se ele funciona. Lembre-se de
pressioná-lo para baixo para mantê-lo preso à placa do protoboard.
 Quando você executar o programa de exemplo, a execução pode não ser tão
precisa como mostrada na Figura 6-17. Ajuste os valores na tabela de LOOKDOWN
para que o display digital exiba uma posição mais precisa do potenciômetro.

' O que é um Microcontrolador - DialDisplay.bs2


' Exibe a posição do potenciômetro usando um display de LED de 7
' segmentos.

'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000
DEBUG "Programa funcionando!"

index VAR Nib


time VAR Word

OUTH = %00000000
DIRH = %11111111

DO

HIGH 5
PAUSE 100
RCTIME 5, 1, time

LOOKDOWN time, <= [40, 150, 275, 400, 550, 800], index

LOOKUP index, [ %11100101, %11100001, %01100001,


%00100001, %00000001, %00000000 ], OUTH

LOOP
Página - 156

Como Funciona o DialDisplay.bs2


Este programa de exemplo toma uma medida RCTIME do potenciômetro e a armazena
em uma variável chamada time.

HIGH 5
PAUSE 100
RCTIME 5, 1, time

A variável time é então usada numa tabela LOOKDOWN. A tabela LOOKDOWN decide
qual o número na lista time é menor, em seguida, carrega o número de entrada (de 0 a
5, neste caso) para a variável index.

LOOKDOWN time, <= [40, 150, 275, 400, 550, 800], index

Em seguida, a variável index é usada em uma tabela LOOKUP para escolher o valor
binário a ser carregado na variável OUTH.

LOOKUP index, [ %11100101, %11100001, %01100001,


%00100001, %00000001, %00000000 ], OUTH

Sua Vez – Adicionando um Segmento


DialDisplay.bs2 só liga cinco dos seis segmentos quando você gira o botão. A sequência
para acender os LEDs no DialDisplay.bs2 é E, F, A, B, C, mas não D.

 Salve DialDisplay.bs2 como DialDisplayYourTurn.bs2.


 Modifique DialDisplayYourTurn.bs2 para que ele faça todos os seis LEDs
externos ligarem na mesma sequência, conforme o potenciômetro é girado. A
sequência deve ser: E, F, A, B, C e D;

Dica: Deixe o seu circuito do seu display de LED de 7 segmentos na sua placa.
Nós usaremos o LED de 7 segmentos novamente com outros circuitos no
Capítulo 7, Atividade #4.

SUMÁRIO
Este capítulo introduziu o display de LED de 7 segmentos, e como ler um mapa de
pinos. Este capítulo introduziu também algumas técnicas para dispositivos e circuitos
que têm entradas paralelas. As variáveis DIRH e OUTH foram introduzidas como um
meio de controlar os valores dos pinos de I/O P8 a P15 no BASIC Stamp. Os comandos
LOOKUP e LOOKDOWN foram introduzidos como um meio de recorrer às listas de valores
usados para exibir letras e números.

Questões
1. Em um display de LED de 7 segmentos, qual é o ingrediente ativo que faz com
que o display fique legível quando um microcontrolador envia um sinal de alta
ou baixa?
2. O que significa cátodo comum? O que você acha que ânodo comum significa?
3. Qual é o grupo de fios que conduzem sinais de e para um dispositivo chamado
paralelo?
Página - 157

4. Quais são os nomes dos comandos neste capítulo que são usados para lidar com
listas de valores?

Exercícios
1. Escreva um comando OUTH para definir P8, P10, P12 altos e P9, P11, P13
baixos. Supondo que todos os seus pinos de I/O começaram como entrada,
escreva o comando DIRH que fará com que os pinos de I/O P8 a P13 enviem
sinais de alta / baixa, deixando P14 e P15 configurados como entradas.
2. Adicione os valores de OUTH necessários para fazer as letras: a, C, d, F, H, I, n,
P, S.

Projeto
1. Soletre "FISH CHIPS And dIP" várias vezes com o seu display de LED de 7
segmentos. Faça com que cada letra dure 400 ms.

Soluções
Q1.O ingrediente ativo é um LED.
Q2.Cátodo comum significa que todos os cátodos estão ligados entre si, ou seja, que
partilham um ponto de ligação comum. Ânodo comum significa que todos os
ânodos são ligados entre si.
Q3.Um barramento paralelo.
Q4.LOOKUP e LOOKDOWN usam listas de valores.

E1. O primeiro passo para configurar OUTH é definido como "1" em cada posição de
bit especificado como HIGH. Então bits 8, 10 e 12 são definidos “1". Em
seguida, coloque um "0" para cada baixa, então os bits 9, 11 e 13 recebem um
"0", como mostrado. Para configurar DIRH, os pinos especificados como 8, 10,
12, 9, 11 e 13 devem ser definidos como saídas, definindo os bits para "1". 15 e
14 estão configurados como entradas, colocando zeros nos bits 15 e 14. O
segundo passo é traduzir isso para uma declaração PBASIC.

Bit 15 14 13 12 11 10 9 8 Bit 15 14 13 12 11 10 9 8
OUTH 0 0 0 1 0 1 0 1 DIRH 0 0 1 1 1 1 1 1

OUTH = %00010101 DIRH = %00111111

E2. A chave para resolver este problema é desenhar cada letra e notar quais
segmentos devem estar acesos. Coloque um 1 em cada segmento que está aceso.
Traduza para o valor binário OUTH. A lista dos segmentos BAFG.CDE para bits
em OUTH estão na Figura 6-14 na página 152.
Página - 158

LED Common
Letras B A F G.C D E OUTH Valor =
Segmentos Cathode

a e, f, a, b, c, g 11110101 %11110101 10 9 8 7 6
C a, f, e, d 01100011 %01100011 G F A B

d b, c, d, e, g 10010111 %10010111 A

F a, f, e, g 01110001 %01110001 F B
G
H f, e, b, c, g 10110101 %10110101
E C
I f, e 00100001 %00100001 D

n e, g, c 00010101 %00010101
E D C DP
P all but c and d 11110001 %11110001
1 2 3 4 5
S a, f, g, c, d 01110110 %01110110
Common
Da Figura 6-2 na página 140. Cathode

P1. Usar o esquema da Figura 6-11 da página 146. Para resolver esse problema,
modifique DisplayDigitsWithLookup.bs2, usando os padrões de letras
trabalhadas no Exercício 2. Na solução, as letras foram criadas como constantes
para tornar o programa mais intuitivo. Usando os valores binários é muito mais
fácil, mas mais propenso a erros.

' O que é um Microcontrolador - Ch6Prj01_FishAndChips.bs2


' Use uma tabela de consulta para armazenar e exbir dígitos com
' o display de LED de 7 segmentos. Soletre a mensagem: FISH
' CHIPS And dIP

'{$STAMP BS2}
'{$PBASIC 2.5}

' Padrões do display de LED de 7 segmentos para criar letras


A CON %11110101
C CON %01100011
d CON %10010111
F CON %01110001
H CON %10110101
I CON %00100001
n CON %00010101
P CON %11110001
S CON %01110110
space CON %00000000

index VAR Byte ' 19 caracteres na mensagem

OUTH = %00000000 ' Todos apagados para começar


DIRH = %11111111 ' Todos os LEDs devem ser saídas

PAUSE 1000 ' 1 s antes da 1a mensagem

DO

DEBUG "index OUTH ", CR,


"----- --------", CR

FOR index = 0 TO 18 ' 19 caracteres na mensagem

LOOKUP index, [ F, I, S, H, space, C, H, I, P, S, space,


Página - 159

A, n, d, space, d, I, P, space ], OUTH

DEBUG " ", DEC2 index, " ", BIN8 OUTH, CR

PAUSE 400 ' 400 ms entre letras

NEXT

LOOP
Página - 160

Capítulo 7: Medição de Luz


DISPOSITIVOS QUE CONTÉM SENSORES DE LUZ
Os capítulos anteriores introduziram botões como sensores de contato e pressão e
potenciômetros como sensores de rotação e posição. Ambos os sensores são comuns em
produtos eletrônicos, basta pensar em quantos dispositivos com botões e mostradores
você usa diariamente. Outro sensor comum encontrado em muitos produtos, é o sensor
de luz. Aqui estão alguns exemplos de dispositivos que necessitam de sensores de luz
para funcionar corretamente:

• Faróis de carros que, automaticamente, acendem quando está escuro.


• Iluminação pública que, automaticamente, acende quando está começando a
escurecer.
• Iluminação de segurança ao ar livre, que liga quando alguém passa por ela (mas
só à noite).
• O visor do notebook fica mais brilhante em áreas bem iluminadas e mais escuro
em áreas mal iluminadas.
• Câmeras com ajustes de exposição automática.
• Sensores dentro de TVs, aparelhos de DVD e outros componentes de sistemas
de entretenimento que detectam a luz infravermelha de um controle remoto.

Os três primeiros exemplos da lista falam em acendimento automático, e eles dependem


de sensores de luz ambiente para distinguir o dia da noite. Os dispositivos eletrônicos
dentro desses equipamentos só precisam saber se está claro ou escuro, para que possam
tratar seus sensores de luz como saídas binárias, como botões. Notebooks e câmeras de
ajuste de exposição automática ajustam para área iluminada condições de obter
informação dos sensores de luz sobre quão claro ou escuro está. Eles têm que tratar os
seus sensores de luz como saídas analógicas que fornecem um número que indica o
quão clara ou escuras estão, muito parecido com os exemplos de potenciômetros do
Capítulo 5 onde o número indica a posição do botão.

Os sensores de luz dentro das TVs e de outros componentes de sistemas de


entretenimento detectam infravermelho (IR), que é uma luz não visível ao olho humano,
mas pode ser detectada por vários dispositivos eletrônicos. Por exemplo, se você olhar
para o final do controle remoto que você aponta para uma TV ou outros dispositivos de
entretenimento, você encontrará um LED IR. Quando você pressionar o botão do
controle remoto, ele enviará sinais codificados para o componente do sistema de
entretenimento, piscando o IR LED on / off. Como não podemos ver a luz
infravermelha, temos a impressão de que o LED do controle remoto não faz nada
quando você pressiona o botão. No entanto, se você tentar fazer isso enquanto olha para
o LED através da lente de uma câmera digital, o LED vai ficar quase branco. A luz
branca contém todas as cores do espectro. Os sensores verdes, azuis e vermelhos dentro
de uma câmera com chip, todos, reportarão que detectam luz em resposta a luz branca.
Acontece que os sensores de vermelho / verde / azul todos detectam a luz infravermelha
do IR LED do controle remoto também. Assim, a câmara também interpreta a luz de um
LED de infravermelhos como branca.
Página - 161

Mais sobre LEDs infravermelhos e detectores:


Robótica com o Boe-Bot tem exemplos onde o robô Boe-Bot controlado pelo
BASIC Stamp usa o LED IR, encontrado dentro dos controles remotos de TV, e
o receptor IR, encontrado dentro dos aparelhos de TV, para detectar objetos em
frente dele. O Boe-Bot usa o LED IR como uma pequena lanterna, e o receptor
IR encontrado dentro das TVs para detectar o IR reflexo das lanternas em objetos
na frente dele. O controle remoto IR para o Boe-Bot explica como os controles
remotos de TV codificam as mensagens que eles enviam para as TVs e tem
exemplos de como programar o microcontrolador BASIC Stamp para decodificar
as mensagens do controle remoto para que você possa enviar mensagens para o
seu robô Boe-Bot, e até mesmo conduzi-lo ao redor, tudo com um controle
remoto de TV.

O tipo de luz que um determinado dispositivo detecta depende do que ele foi projetado
para fazer. Por exemplo, sensores de luz para dispositivos que se ajustam às condições
de iluminação do ambiente precisam sentir a luz visível. Os sensores de pixels
vermelhos, verdes e azuis dentro câmeras digitais vão detectar cada um dos níveis de
cores específicas de uma imagem digital. O sensor IR dentro de uma TV está à procura
de luz infravermelha, que está piscando on / off próximo 40 kHz. Estes são apenas
alguns exemplos, e cada aplicação requer um tipo diferente de sensor de luz.

A Figura 7-1 mostra alguns exemplos dos muitos sensores de luz disponíveis para
vários requisitos dos sensores de luz. Da esquerda para a direita, ele mostra um
fototransistor, fotoresistor de sulfeto de cádmio, sensor de luz linear, fotodiodo azul
realçado, luz para conversor de frequência, fototransistor infravermelho e um receptor
remoto infravermelho de uma TV.

Figura 7-1: Exemplos de sensores de luz

Sobre a célula de sulfeto de cádmio (CdS) ou Fotoresistor


A célula de sulfeto de cádmio (CdS), ou fotoresistor, foi um dos sensores de luz
ambiente mais comuns em iluminação automática. Com o advento da diretiva da
União Europeia da restrição do uso de determinadas Substâncias Perigosas
(RoHS), os fotoresistores de sulfeto de cádmio já não podem ser incorporados na
maioria dos dispositivos importados ou fabricados na Europa. Isto tem
aumentado a utilização de um certo número de produtos em substituição ao
fotoresistor, incluindo o fototransistor e sensor de luz linear. Como resultado
destas alterações, esta edição apresenta agora um fototransistor que detecta níveis
de luz no lugar do fotoresistor de sulfeto de cádmio.

A documentação para cada sensor de luz descreve o tipo de luz que ele detecta em
termos de comprimento de onda. Comprimento de onda é a medida da distância entre as
formas ou ciclos de repetição. Por exemplo, imagine uma onda que viaja através do
Página - 162

oceano, subindo e descendo. O comprimento desta onda seria a distância entre cada pico
(ou whitecap) de seu ciclo. O comprimento de uma onda de luz pode ser medido de
forma semelhante, em vez disto, estamos medindo a distância entre os dois picos nas
oscilações eletromagnéticas de luz. Cada cor de luz tem o seu próprio comprimento de
onda e é considerada uma luz visível, o que significa que pode ser detectada pelo olho
humano. A Figura 7-2 mostra dois comprimentos de onda para a luz visível, bem como
para alguns tipos de luz que o olho humano não consegue detectar, incluindo radiação
ultravioleta e infravermelha. Estes comprimentos de onda são medidos em nanômetros,
que é abreviado nm. Um nanômetro é um bilionésimo de um metro.

Figura 7-2: Comprimentos de onda e as suas cores correspondentes

Comprimento de 10…380 450 495 570 590 620 750…100,00


onda (nm)
Cor Violeta Verde Laranj Infravermelh
Ultraviolet Azul Amarel Vermelho
o

NOTA: Se você estiver vendo isso no livro impresso em escala de cinza, você pode
baixar em PDF, totalmente colorido, pelo site www.parallax.com/go/WAM.

INTRODUÇÃO DO FOTOTRANSISTOR
Um transistor é como uma válvula que permite que certa quantidade de corrente elétrica
passe através de dois dos seus terminais. O terceiro terminal de um transistor controla
apenas a quantidade de corrente que passa através dos outros dois. Dependendo do tipo
de transistor, o fluxo de corrente pode ser controlado pela tensão, corrente, ou, no caso
do fototransistor, pela luz. Figura 7-3 mostra o esquema e desenho da peça para o
fototransistor em seu kit “O que é um Microcontrolador. Quanto mais luz atingir o
terminal da base do fototransistor (B), mais corrente será conduzida no seu coletor
terminal (C), que fluirá para fora do seu emissor terminal (E). Por outro lado, menos luz
que brilha sobre o terminal de base resulta em menos corrente conduzida.
B

C Figura 7-3
Símbolo esquemático do
B Fototransistor e desenho da
E peça.

E
C

Este pico de sensibilidade do fototransistor é de 850 nm, o que de acordo com a Figura
7-2, está na gama de infravermelhos. Ele também responde a luz visível, embora de
maneira um pouco menos sensível, especialmente para os comprimentos de onda abaixo
de 450 nm, mostrado em azul na Figura 7-2. A luz halógena e lâmpadas incandescentes
e, especialmente, luz solar são fontes muito mais fortes do infravermelho do que as
lâmpadas fluorescentes. O transistor infravermelho responde bem a todas estas fontes de
Página - 163

luz, mas é mais sensível à luz do sol, em seguida, com lâmpadas de halogêneo e
incandescente, e um pouco menos sensível às lâmpadas fluorescentes.

Projetos de circuitos, usando o transistor, podem ser ajustados para funcionar melhor em
certos tipos de condições de iluminação, e os circuitos do Fototransistor, neste capítulo,
são projetados para uso interno. Existe um aplicativo de detecção de luz ao ar livre, mas
usaria um dispositivo diferente que possa parecer à primeira vista como um candidato
improvável para um sensor de luz: um diodo emissor de luz.

ATIVIDADE #1: CONSTRUINDO E TESTANDO O MEDIDOR DE LUZ


O Capítulo 5 introduziu medidas de queda de RC com o comando RCTIME para medir o
tempo que o capacitor levou para perder sua carga através de um resistor variável dentro
de um potenciômetro. Com maior resistência (para o fluxo de corrente elétrica), o
potenciômetro desacelerou o ritmo, o capacitor perdeu sua carga, e as resistências
menores aceleraram o ritmo. A medição do tempo de queda deu uma indicação da
resistência do potenciômetro, que por sua vez possibilitou ao BASIC Stamp saber a
posição do seletor do potenciômetro.

Quando colocado em um circuito de queda RC, um fototransistor, que permite a


passagem de mais ou menos corrente, quando mais ou menos luz brilha sobre ele, se
comporta de maneira semelhante ao potenciômetro. Quando brilha mais luz sobre o
fototransistor, ele conduz mais corrente, e o capacitor perde sua carga mais
rapidamente. Com menos luz, o fototransistor permite a passagem de menos corrente e
o capacitor perde sua carga mais devagar. Assim, a mesma medida RCTIME que nos deu
uma indicação da posição da marcação com um potenciômetro no Capítulo 5, pode ser
agora usada para medir os níveis de luz com um fototransistor.

Nesta atividade, você vai construir e testar um circuito de queda RC que mede o tempo
que leva para a carga do capacitor cair através de um fototransistor. A medição de queda
RC vai lhe dar uma ideia dos níveis de luz detectados pela área de luz sentida pelo
fototransistor. Tal como acontece com os testes do potenciômetro, os valores de tempo
medidos pelo comando RCTIME serão exibidos no DEBUG Terminal.

Peças para o Teste do Detector de Luz


(1) Fototransistor
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(2) Capacitores – 0,01 µF (rotulado 103)
(1) Capacitor – 0,1 µF (rotulado 104)
(1) Fio

Construindo o Circuito Tempo RC com um Fototransistor


A Figura 7-4 mostra um diagrama esquemático e diagrama de fiação do circuito RC-
time que você vai usar neste capítulo. Este circuito é diferente do circuito do
potenciômetro do Capítulo 5, Atividade #3, de duas maneiras. Em primeiro lugar, o
pino de I/O utilizado para medir o tempo de queda é diferente (P2). Em segundo lugar, o
potenciômetro foi substituído por um fototransistor.
Página - 164

Dica: Deixe o seu LED de 7 segmentos conectado, e adicione o circuito de


fototransistor à sua placa. Nós vamos usar o LED de 7 segmentos com o
fototransistor na Atividade #4.

 Construa o circuito mostrado na Figura 7-4.


 Certifique-se de que o coletor do fototransistor e os terminais emissores (C e E)
estejam conectados conforme mostrado no diagrama de fiação.

Figura 7-4
Esquema e3 diagrama
Vdd Vin Vss de fiação do circuito
X3 tempo RC com um
P15 fototransistor
P14
P13
P12
P11 Comece com o
P10
Longer pin capacitor de 0,01 µF,
P9
P8 (C) terminal rotulado 103.
P7
P6
P5
P4 Flat spot
P3
P2 (E) terminal
P1
P0
X2

Programando o Teste do Fototransistor


O primeiro programa de exemplo (TestPhototransistor.bs2) é realmente apenas uma
versão ligeiramente revisada de ReadPotWithRcTime.bs2 do Capítulo 5, Atividade #3.
O circuito do potenciômetro do Capítulo 5 foi ligado ao pino de I / O P7. O circuito
nesta atividade está ligado a P2. Devido a essa diferença, o programa de exemplo tem
que ter dois comandos atualizados para fazê-lo funcionar. O comando HIGH 7 do
programa de exemplo anterior é agora HIGH 2, pois o circuito do fototransistor está
ligado a P2 e não P7. Pela mesma razão, o comando RCTIME 7, 1, time foi alterado
para RCTIME 2, 1, time.

Exemplo de Programa: TestPhototransistor.bs2


O coletor de luz de superfície do fototransistor está na cúpula de plástico transparente,
que é o terminal de base (B), mostrado na Figura 7-3. Um quadradinho preto deve ser
visível através dessa cúpula. Esse quadrado preto é o fototransistor real, um pequeno
pedaço de silício. O resto do dispositivo é a “embalagem”, incluindo caixa de plástico,
quadro condutor e eletrodos.

Em vez de girar o botão do potenciômetro, como fizemos no Capítulo 5, este circuito é


testado através da exposição da superfície de coleta de luz do fototransistor a diferentes
níveis de luz. Quando o programa de exemplo estiver sendo executado, o DEBUG
Página - 165

Terminal deverá exibir valores pequenos para as condições de luz brilhante e grandes
para condições de baixa luminosidade.

Evite luz solar direta! O circuito e o programa que você está usando são
projetados para detectar variações na iluminação interna e não trabalham na luz
solar direta. Deixe as luzes internas ligadas, mas feche as cortinas, caso o sol
esteja entrando através das janelas mais próximas.

 Coloque e execute o TestPhototransistor.bs2.


 Anote a variável time no DEBUG Terminal sob condições normais de
iluminação.
 Lance uma sombra sobre o circuito com a sua mão e verifique a variável time
novamente. Deve mostrar um número maior.
 Coloque a mão sobre o circuito para lançar uma sombra mais escura, o DEBUG
Terminal deve exibir um valor significativamente maior para time.

' O que é um Microcontrolador - TestPhototransistor.bs2


' Lê Fototransistor em circuito RC-time usando comando RCTIME.

' {$STAMP BS2}


' {$PBASIC 2.5}

time VAR Word


PAUSE 1000

DO
HIGH 2
PAUSE 100
RCTIME 2, 1, time
DEBUG HOME, "time = ", DEC5 time
LOOP

Sua Vez – Usando um Capacitor Diferente Para Diferentes Condições de


Luminosidade
As medições do tempo, com um capacitor de 0,1 μF, levarão dez vezes mais tempo do
que aquelas feitas com um capacitor de 0,01 μF, o que significa que o valor da variável
time exibido pelo DEBUG Terminal deverá ser dez vezes maior. Substituir o capacitor
de 0,01 μF por um capacitor de 0,1 μF pode ser útil para salas mais iluminadas onde
você costuma ver medidas menores com um capacitor de 0,01 μF. Por exemplo, vamos
dizer que as condições de iluminação são muito brilhantes, e as medidas são de 1 a 13,
com um capacitor de 0,01 μF. Se você substituí-lo por um capacitor de 0,1 μF, suas
medidas, ao contrário, vão variar de 1 a 130, e sua aplicação será mais sensível às
variações de luz dentro da sala.

 Modifique o circuito substituindo o capacitor de 0,01 μF, por um capacitor de


0,1 μF (rotulado 104).
 Reexecute o TestPhototransistor.bs2 e verifique se as medidas de RC-time são
cerca de dez vezes seus valores anteriores.

O intervalo de tempo mais longo que o comando RCTIME pode medir é de 65.535
unidades de 2 µs cada, o que corresponde a um tempo de queda de: 65535 × 2 µs = 131
Página - 166

ms = 0,131 segundos. Se o tempo de queda for superior a 0,131 segundos, o comando


RCTIME retorna para 0, para indicar que o tempo máximo de medição foi excedido.

 Você pode lançar uma sombra bem escura sobre o fototransistor e ultrapassar a
medida máxima 65535 e fazer o comando RCTIME voltar a 0?

A próxima atividade contará com o menor dos dois capacitores.

 Antes de passar para a próxima atividade, retorne o circuito ao original como


mostrado na Figura 7-4, remova o capacitor de 0,1 μF e substitua-o pelo
capacitor de 0,01 μF.

ATIVIDADE #2: RASTREANDO EVENTOS DE LUZ


Uma das características mais úteis da memória do programa do módulo BASIC Stamp é
que você pode desligar a alimentação da placa, sem perder o seu programa. Assim como
a energia é restabelecida, o programa começa a correr a partir do início. Desde que o
código para a sua aplicação não encha a memória do módulo BASIC Stamp, qualquer
parte que não for usada para o programa poderá ser usada para armazenar dados. Esta
memória é especialmente boa para o armazenamento de dados que você não deseja que
o BASIC Stamp esqueça. Enquanto os valores armazenados por variáveis são apagados
quando a energia é desligada, o BASIC Stamp ainda vai se lembrar de todos os valores
armazenados em sua memória de programa quando o aparelho for religado.

O que é um registro de dados? O registro de dados é o que um


microcontrolador faz quando grava e armazena as medições periódicas do sensor
por um determinado período de tempo. Dispositivos de registro de dados, ou
dataloggers, são especialmente úteis em pesquisas científica. Por exemplo, em
vez de enviar uma pessoa para um local distante para fazer as medições
meteorológicas, pode ser implantada uma estação meteorológica de registro de
dados, que registra as medições periódicas, e os cientistas visitam-na de vez em
quando para coletar os dados, ou em alguns casos, eles transferem suas medições
para um computador por telefone celular, rádio ou satélite.

O chip do BASIC Stamp que armazena a memória do programa e os dados é mostrado


na Figura 7-5. Este chip é chamado de EEPROM, que significa Electrically Erasable
Programmable Read-Only Memory, (que é, basicamente, em tradução livre, uma
memória que pode ser apagada várias vezes, eletricamente). Isso é um pouco
complicado de se pronunciar, soletra-se cada uma das primeiras letras da palavra
EEPROM. Quando as pessoas falam sobre uma EEPROM, elas costumam pronunciar:
EE-Prom.
Página - 167

Figura 7-5
2 KB da
EEPROM Chip EEPROM no
armazena o Módulo BASIC Stamp
código de fonte
do seu PBASIC Este EEPROM
armazena seu código
de programa e
quaisquer outros
dados que o programa
coloca lá, mesmo
quando a energia é
desligada.

Figura 7-6 mostra a janela do mapa de memória do BASIC Stamp Editor. Você pode
visualizar esta janela clicando no BASIC Stamp Editor Run no menu e selecionar
Memory Map.

O Mapa de memória usa cores diferentes para mostrar como ambos os módulos do
BASIC Stamp RAM (variáveis na memória de acesso aleatório) e EEPROM (memória
de programa) estão sendo usados. O quadrado vermelho na barra de rolagem no canto
esquerdo indica que parte da EEPROM é visível no mapa da EEPROM. Você pode
clicar e arrastar esta área para cima e para baixo para ver as várias porções da memória
EEPROM. Ao arrastar aquele quadrado vermelho até o fundo, você pode ver quanto
espaço de memória EEPROM é usado por TestPhototransistor.bs2 de Atividade #1. Os
bytes que contêm símbolos do programa são destacados em azul, e apenas 35 bytes fora
dos 2048 bytes EEPROM são usados para o programa. Os restantes 2.013 bytes são
livres para armazenar dados.

Figura 7-6
Mapa da Memória

Para visualizar esta


janela, clique em
“Run” (Executar), e
selecione “Memory
Map” (Mapa da
Memória).

O Mapa EEPROM mostra os endereços como valores hexadecimais, que foram


discutidos brevemente na caixa “Decimal vs Hexadecimal” na página 150. Os valores
ao longo do lado esquerdo mostram o endereço de partida de cada linha de bytes. Os
números na parte superior mostram o número de bytes no interior dessa linha, de 0 a F
em hexadecimal, que é de 0 a 15 em decimal. Por exemplo, na Figura 6-7, o valor
hexadecimal C1 é armazenado no endereço 7E0. CC é armazenado no endereço 7E1,
6D é armazenado em 7E2, e assim por diante até E8, que é armazenado no endereço
7EF. Se você rolar para cima e para baixo com a barra de rolagem, você verá que os
maiores endereços de memória estão na parte inferior do mapa da EEPROM e os
endereços menores estão no topo, com a linha superior iniciando em 000.
Página - 168

Os programas PBASIC são sempre armazenados em endereços maiores na EEPROM,


mostrados na parte inferior do mapa da EEPROM. Assim, se o seu programa for
armazenar dados na EEPROM, deve começar com os endereços menores, iniciando
com o endereço 0. Isso ajuda a garantir que os dados armazenados não sobrescreverão o
seu programa PBASIC, o que resultará em um acidente de programa. No caso do Mapa
EEPROM mostrado na Figura 6-7, o programa PBASIC reside em endereços 7FF a
7DD, começando no endereço maior para a construção de endereços menores. Portanto,
sua aplicação pode armazenar dados de endereços 000 a 7DC, construídos desde o
menor até o maior. Em decimal os endereços são de 0 a 2012.

Se você planeja armazenar dados na memória EEPROM, é importante que você faça a
conversão de hexadecimal para decimal, a fim de calcular o maior endereço gravável.
Abaixo segue o cálculo para converter o número 7DC hexadecimal para decimal.
Hexadecimal é um sistema numérico com uma base de 16, o que significa que usa 16
dígitos diferentes para representar seus valores. Os dígitos 0 à 9 representam os
primeiros 10 valores, e as letras A à F representam valores de 10 à 15. Ao converter a
partir de hexadecimal para decimal, cada dígito da direita representa uma maior
potência de dezesseis. O dígito mais à direita é o número de uns, que é o número de
160s. O dígito seguinte, a partir da direita, é o número de 16s, que é o número de 161s. O
terceiro dígito é o número de 256s, que é o número de 162s.

Hexadecimal 7DC = (7 × 162) + (D × 161) + (C × 160)


= (7 × 162) + (13 × 161) + (12 × 160)
= (7 × 256) + (13 × 16) + (12 × 1)
= 1792 + 208 + 12
= 2012 (valor decimal)

Esta abordagem de conversão funciona da mesma forma em outras bases, incluindo a


base de 10 valores decimais. Por exemplo:

2102 = (2 × 103) + (1 × 102) + (0 × 101) + (2 × 100)


= (2 × 1000) + (1 × 100) + (0 × 10) + (2 × 1)

2048 bytes = 2 KB.


Embora tanto a maiúscula quanto a minúscula “K” sejam chamadas
"quilo", elas são ligeiramente diferentes. Em eletrônica e computação, a
maiúscula K é usada para indicar um kilobyte binário, que é 1 × 210 = 1024. Ao
se referir a exatamente 1.000 bytes, use a minúscula k, que significa quilo e é 1 x
103 = 1000 no sistema métrico.
Além disso, a maiúscula "B" 'significa bytes, enquanto a minúscula "b"
significa bits. Isso pode fazer uma grande diferença porque significa 2 Kb 2048
bits, que são 2048 números diferentes, mas cada número é limitado a um valor de
0 ou 1. Em contraste, 2 KB são 2048 bytes, em cada um pode ser armazenado um
valor na gama de 0 a 255.

Usar o EEPROM para o armazenamento de dados pode ser muito útil para aplicações
remotas. Um exemplo de uma aplicação remota seria um monitor de temperatura
colocado num veículo que transporta alimentos congelados. Ele controlaria a
temperatura durante toda a viagem verificando se ela se manteve fria o suficiente e que
Página - 169

nada no desembarque estava descongelado. Um segundo exemplo é uma estação


meteorológica. Uma das peças de registro de dados de uma estação meteorológica que
pode ser armazenada para posterior recuperação é a dos níveis de luz. Isso pode dar uma
indicação da nebulosidade em momentos do dia, alguns estudos usam para monitorar os
efeitos da poluição e de trilhas de condensação de rastros de avião (com trilhas) em
níveis de luz que atingem a superfície da Terra.

Com o acompanhamento do nível de luz na mente, esta atividade apresenta uma técnica
para armazenar os níveis de iluminação medidos para a EEPROM e depois recuperá-los
novamente. Nesta atividade, você vai executar um exemplo de programa PBASIC que
armazena uma série de medições de luz na EEPROM do módulo BASIC Stamp. Depois
que o programa estiver concluído, você vai correr um segundo programa que recupera
os valores da EEPROM e os exibe no DEBUG Terminal.

Programando o Armazenamento de Dados a Longo Prazo


O comando WRITE é utilizado para armazenar valores na EEPROM, e o comando READ
é utilizado para obter esses valores.

A sintaxe do comando é:

WRITE Location, {WORD} Value

Por exemplo, se você quer escrever o valor de 195 para endereçar 7 na EEPROM, você
pode usar o comando:

WRITE 7, 195

Os valores de WORD podem estar entre 0 e 65565, enquanto os valores de byte podem
conter apenas os números de 0 a 255. O valor da palavra ocupa o espaço de dois bytes.
Se você quiser escrever o tamanho do valor da palavra na EEPROM, você tem que usar
o modificador WORD opcional. Porém, tenha cuidado: Uma vez que a palavra ocupa dois
bytes, você tem que pular um dos endereços do tamanho dos bytes da EEPROM antes
de escrever outra palavra. Vamos dizer que você precisa para salvar dois valores de
palavra para EEPROM: 659 e 50012. Se você deseja armazenar o primeiro valor no
endereço 8, você terá que escrever o segundo valor para o endereço 10.

WRITE 8, Word 659


WRITE 10, Word 50012
Página - 170

É possível escrever sobre o seu programa? Sim, e se você fizer isso, é provável
que o programa comece a se comportar de modo estranho ou pare de funcionar
completamente. Uma vez que os sinais do programa PBASIC residem nos
maiores endereços da EEPROM, é melhor usar os menores valores de Location
para armazenar números com o comando WRITE.
Como eu sei se o Location que estou usando é muito grande? Você pode usar
o mapa de memória para descobrir o maior valor não utilizado pelo seu programa
PBASIC. A explicação após a Figura 7-6 na página 168 descreve como calcular
quantos endereços de memória estão disponíveis. Como um atalho para converter
hexadecimal para decimal, você pode usar o formatador DEC e o formatador $
hexadecimal do comando DEBUG assim:
DEBUG DEC $7DC
O programa vai exibir o valor decimal de 7DC hexadecimais porque o
formatador $ hexadecimal diz ao comando DEBUG que 7DC é um número
hexadecimal. Então, o formatador DEC faz com que o comando DEBUG exiba
esse valor em formato decimal.

Exemplo de Programa: StoreLightMeasurementsInEeprom.bs2


Este programa de exemplo demonstra como usar o comando WRITE, tomando medições
de luz cada 5 segundos por 2 minutos e meio e as armazenando na EEPROM. Como
exemplo de programa da atividade anterior, ele exibe as medições no DEBUG
Terminal, mas também armazena cada medição na EEPROM para posterior recuperação
por um programa diferente, que usa o comando READ.

 Coloque e execute StoreLightMeasurementsInEeprom.bs2.


 Registre os valores apresentados pelo DEBUG Terminal para que você possa
verificar as medições e relê-las na EEPROM.
 Aumente gradualmente a sombra sobre o fototransistor durante o período de
teste de 2 ½ minutos para dados significativos.

Especialmente se você tem uma placa USB, ligá-la ao computador poderia restabelecer
o BASIC Stamp e reiniciar o programa, neste caso, ele começaria a tomar um novo
conjunto de medições.

 Após o término de StoreLightMeasurementsInEeprom.bs2, desconecte a


alimentação de sua placa imediatamente e deixe-a desligada até que você esteja
pronto para executar o próximo programa de exemplo:
ReadLightMeasurementsFromEeprom.bs2.

Você pode alterar as pausas no loop FOR...NEXT. Este exemplo de


programa tem cinco segundos de pausa, que enfatizam as medições periódicas
que os dispositivos de registro de dados tem. Eles podem parecer meio longos,
por isso, você pode reduzir o PAUSE 5000 para PAUSE 500 para fazer o
programa executar dez vezes o teste mais rápido.
Página - 171

' O que é um Microcontrolador - StoreLightMeasurementsInEeprom.bs2


' Escreve medições de luz para EEPROM.

' {$STAMP BS2}


' {$PBASIC 2.5}

time VAR Word


eepromAddress VAR Byte

PAUSE 1000
DEBUG "Iniciando medições...", CR, CR
"Valor da medição", CR,
"----------- -----", CR
FOR eepromAddress = 0 TO 58 STEP 2
HIGH 2
PAUSE 5000
RCTIME 2, 1, time
DEBUG DEC2 eepromAddress,
" ", DEC time, CR
WRITE eepromAddress, Word time
NEXT

DEBUG "Pronto. Agora, execute:", CR,


"ReadLightMeasurementsFromEeprom.bs2"
END

Como Funciona StoreLightMeasurementsInEeprom.bs2


O loop FOR...NEXT que mede os valores de RC-time e os armazena na EEPROM tem
que contar em intervalos de 2, porque os valores da palavra estão escritos na EEPROM.

FOR eepromAddress = 0 to 58 STEP 2

O comando RCTIME carrega a medição do tempo de queda para o tamanho da palavra


na variável time.

RCTIME 2, 1, time

O valor que a variável time armazena é copiado para o endereço na EEPROM obtido
pelo valor atual da variável eepromAddress cada vez através do loop. Lembre-se de
que o endereço de um comando WRITE é sempre em termos de bytes. Assim, a variável
eepromAddress é incrementada por dois de cada vez através do loop, porque uma
variável Word ocupa dois bytes.

WRITE eepromAddress, Word time


NEXT

Programando a Recuperação de Dados


Para recuperar os valores que você acabou de gravar a partir da EEPROM, você pode
usar o comando READ. A sintaxe para o comando READ é:

READ Location, {WORD} Variable

Enquanto o comando WRITE pode copiar tanto um valor de uma constante ou de uma
variável para a EEPROM, o comando READ tem que copiar o valor armazenado no
Página - 172

endereço da EEPROM para a variável, assim como o próprio nome sugere, o argumento
variável deve ser uma variável.

Tenha em mente que as variáveis são armazenadas na memória RAM do módulo


BASIC Stamp. Ao contrário da EEPROM, os valores de RAM são apagados
sempre que a alimentação for desligada e também sempre que o botão Reset na
sua placa for pressionado.
O BASIC Stamp 2 tem 26 bytes de RAM, mostrados no lado direito do mapa de
memória na Figura 7-6 na página 167. Se você declarar uma variável Word,
você está usando dois bytes. A declaração da variável byte usa um byte, um
nibble usa metade de um byte, e um bit utiliza 1/8 de um byte.

Digamos que eepromValueA e eepromValueB são variáveis de Word e littleEE é


uma variável Byte. Estas variáveis têm de ser definidas no início do programa com
declarações de variáveis VAR. Aqui estão alguns comandos para recuperar os valores
que foram armazenados anteriormente em determinados endereços EEPROM com
comandos WRITE, talvez até mesmo em um programa diferente.

READ 7, littleEE
READ 8, Word eepromValueA
READ 10, Word eepromValueB

O primeiro comando recupera um valor byte do endereço EEPROM 7 e copia para a


variável denominado littleEE. O próximo comando copia a palavra ocupando
EEPROM byte endereços 8 e 9 e as armazena em eepromValueA da variável word. O
último dos três comandos copia a palavra ocupando EEPROM byte endereços 10 e 11 e
as armazena na variável eepromValueB.

Exemplo de Programa: ReadLightMeasurementsFromEeprom.bs2


Este programa de exemplo demonstra como utilizar o comando READ para recuperar as
medições de luz que foram armazenadas na EEPROM por
StoreLightMeasurementsInEeprom.bs2.

 Reconecte a energia de sua placa.


 Coloque ReadLightMeasurementsFromEeprom.bs2 no BASIC Stamp Editor.
 Se você tiver desligado a energia de sua placa, quando a reconectar, clique
imediatamente no botão Run do BASIC Stamp Editor para baixar o programa
para o BASIC Stamp.

Não espere mais de 6 segundos entre reconectar a energia e carregar


ReadLightMeasurementsFromEeprom.bs2 no BASIC Stamp ou o programa que
ainda está na memória de programa (StoreLightMeasurementsInEeprom.bs2) vai
começar a gravar sobre as medições anteriores. Além disso, se você reduziu
Duration do comando PAUSE 5000 para 500, você terá apenas 1,5
segundo!

 Compare a tabela do DEBUG Terminal apresentada neste programa, com a


exibida no StoreLightMeasurementsInEeprom.bs2, e verifique se os valores são
os mesmos.
Página - 173

' O que é um Microcontrolador - ReadLightMeasurementsFromEeprom.bs2


' Lê as medições de luz da EEPROM.

' {$STAMP BS2}


' {$PBASIC 2.5}

time VAR Word


eepromAddress VAR Byte

PAUSE 1000

DEBUG "Recuperando as medições", CR, CR,


"Valor da medição", CR,
"---------- -----", CR

FOR eepromAddress = 0 TO 58 STEP 2

READ eepromAddress, Word time


DEBUG DEC2 eepromAddress, " ", DEC time, CR

NEXT

END

Como Funciona o ReadLightMeasurementsFromEeprom.bs2


Tal como acontece com o comando WRITE, o comando READ conta com endereços de
byte. Se nós quisermos ler os valores da palavra da EEPROM, a variável
eepromAddress tem que ter dois adicionado a ela cada vez através do loop
FOR...NEXT.

FOR eepromAddress = 0 to 58 STEP 2

O comando READ recebe o valor do tamanho da palavra em eepromAddress, que é


copiado para a variável time.

READ eepromAddress, Word time

Os valores do tempo e as variáveis eepromAddress são exibidas em colunas


adjacentes, como uma tabela no DEBUG Terminal.

DEBUG DEC2 eepromAddress, " ", DEC time, CR


NEXT

Sua Vez – Mais Medições


 Modifique StoreLightMeasurementsInEeprom.bs2 para que ele leve e registre o
dobro de medições na mesma quantidade de tempo.
 Modifique ReadLightMeasurementsFromEeprom.bs2 para que exiba todas as
medições já modificadas do StoreLightMeasurementsInEeprom.bs2.

ATIVIDADE #3: MEDIÇÕES GRÁFICAS DE LUZ (OPCIONAL)


Listas de medições como as da Atividade #2 podem ser tediosas de analisar. Imagine ler
centenas de números sem interrupção até o sol se por. Ou talvez você esteja olhando
Página - 174

para um evento especial, como quando o sensor de luz foi brevemente coberto. Você
pode até estar a olhar para um padrão na forma como muitas vezes o sensor de luz foi
coberto. Esta informação pode ser útil se o sensor de luz for colocado em uma área onde
uma pessoa ou animal caminhar sobre ela, ou um objeto que passar por cima de uma
correia transportadora precisar ser registrado e analisado. Independentemente da
aplicação, se tudo que você tem para trabalhar é uma longa lista de números, encontrar
esses eventos e padrões podem ser uma tarefa difícil e demorada.

Se você fizer um gráfico da lista de medições será muito mais fácil encontrar eventos e
padrões. A pessoa, animal ou objeto que passar sobre o sensor de luz vai aparecer como
um ponto alto ou pico nas medições. A Figura 7-7 mostra um exemplo de um gráfico
que indica a taxa quando os objetos sobre uma correia transportadora estão passando
sobre o sensor. Os picos no gráfico ocorrem quando as medições forem grandes. No
caso de uma correia transportadora, indicaria que um objeto passou sobre o sensor
lançando uma sombra. Este gráfico facilita com um olhar de relance ver que um objeto
passa sobre o sensor aproximadamente a cada 7 segundos, mas que o objeto esperado
em 28 segundos não estava lá.

Figura 7-7: Gráfico de medições de luz do fototransistor


Decay Time Vs. Time
for Phototransistor RC Circuit
9000

8000

7000
Decay Time (2 us)

6000

5000

4000

3000

2000

1000

0
0 10 20 30 40 50 60

"Decay Time" Tim e (s)

O gráfico da figura 7-7 foi gerado copiando e colando valores no DEBUG Terminal
para um arquivo de texto que foi, em seguida, importado para uma planilha do
Microsoft Excel. Alguns utilitários gráficos podem tomar o lugar do DEBUG Terminal
e traçar os valores diretamente, em vez de exibi-los como listas de números. A Figura 7-
8 mostra um exemplo de um desses utilitários, chamado StampPlot LITE.
Página - 175

Figura 7-8: StampPlot LITE

Nesta atividade opcional, você pode ir para www.parallax.com/go/WAM e seguir o link


“Dados de Plotagem” (Data Plotting) para tentar uma série de atividades que
demonstram como plotar valores utilizando várias planilhas e gráficos de pacotes de
software de utilitários.

ATIVIDADE #4: SIMPLES MEDIDOR DE LUZ


As informações do sensor de luz podem ser transmitidas de várias formas. O medidor de
luz que você vai trabalhar nessa atividade altera a taxa das cintilações dependendo da
intensidade de luz que ele detecta.

Peças do Medidor de Luz


(1) Fototransistor
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(2) Capacitores – 0,01 μF (rotulado 103)
(1) Capacitor – 0,1 μF (rotulado 104)
(1) Display de LED de 7 segmentos
(8) Resistores – 1 kΩ (marrom-preto-vermelho)
(6) Fios

Construindo o Circuito do Medidor de Luz


Figura 7-9 mostra o display de LED de 7 segmentos e esquemas de circuitos do
fototransistor que serão utilizados para fazer o medidor de luz, e a Figura 7-10 mostra o
diagrama de fiação dos circuitos. O circuito do fototransistor é o mesmo que você usou
nas duas últimas atividades, e o circuito do display do LED de 7 segmentos é o mesmo
da Figura 6-11 na página 145.

 Construa o circuito mostrado na Figura 7-9 e na Figura7-10.


Página - 176

 Teste o display de LED de 7 segmentos para ter certeza de que está conectado
corretamente, usando o programa SegmentTestWithHighLow.bs2 do Capítulo 6,
Atividade #2, que começa na página 144.

Figura 7-9
Esma do circuito
do medidor de
luz

Figura 7-10
Diagrama de
fiação para a
Figura 7-9

Utilizando Sub-rotinas
A maioria dos programas que você escreveu até agora operam dentro de um
DO...LOOP. Uma vez que a atividade principal de todo o programa acontece dentro do
DO...LOOP, ela é normalmente chamada de rotina principal. À medida que você
adicionar mais circuitos e funções mais úteis ao seu programa, poderá ficar um pouco
difícil manter o controle de todo o código na rotina principal. Seus programas serão
muito mais fáceis de trabalhar se você em vez organizá-los em pequenos segmentos de
código para fazer determinados trabalhos. O PBASIC tem alguns comandos que você
pode usar para fazer o programa saltar para fora da rotina principal, fazer um trabalho e,
em seguida, retornar para o mesmo local na rotina principal. Isto irá permitir que você
mantenha cada segmento de código que faz um trabalho específico em algum lugar
diferente da rotina principal. Cada vez que você precisar do programa para fazer um
Página - 177

desses trabalhos, você pode escrever um comando dentro da rotina principal que diz ao
programa para saltar para esse trabalho, fazê-lo, e voltar quando o trabalho estiver feito.
Os trabalhos são chamados de sub-rotinas e este processo está chamando uma sub-
rotina.

A Figura 7-11 mostra um exemplo de uma sub-rotina e como ela é usada. O comando
GOSUB Subroutine_Name faz com que o programa salte para a Subroutine_Name:
label. Quando o programa chega a esse rótulo, ele continua correndo e executa
comandos até chegar a um comando RETURN. Então, o programa volta ao comando que
vem após o comando GOSUB. No caso do exemplo mostrado na Figura 7-11, o próximo
comando é: DEBUG "Next command”.

DO
GOSUB Subroutine_Name
DEBUG "Next command"
LOOP
Figura 7-11
Como as sub-rotinas
Subroutine_Name: trabalham
DEBUG "This is a subroutine..."
PAUSE 3000
RETURN

O que é um label? Label é um nome que pode ser usado como um espaço
reservado em seu programa. GOSUB é um dos comandos que você pode usar
para saltar para um label. Alguns outros são GOTO, ON GOTO, e ON GOSUB.
O label deve terminar com dois pontos, e por uma questão de estilo, palavras
separadas terão o caractere sublinhado para ficar mais fácil de reconhecer. Ao
escolher um nome para um label, certifique-se de não usar uma palavra reservada
ou um nome que já está sendo usado em uma variável ou constante. O resto das
regras para o nome do label são os mesmos que os nomes das variáveis, que
estão listadas na caixa de informações na página 36.

Exemplo de Programa: SimpleSubroutines.bs2


Este programa de exemplo mostra como sub-rotinas operam enviando mensagens para o
DEBUG Terminal.

 Examine SimpleSubroutines.bs2 e tente adivinhar a ordem em que os comandos


DEBUG serão executados.
 Coloque e execute o programa.
 Compare o comportamento atual de seu programa com suas previsões.

' O que é um Microcontrolador - SimpleSubroutines.bs2


' Demonstra como sub-rotinas funcionam.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DO
Página - 178

DEBUG CLS, "Inicia rotina principal.", CR


PAUSE 2000
GOSUB First_Subroutine
DEBUG "Retorna à principal.", CR
PAUSE 2000
GOSUB Second_Subroutine
DEBUG "Repete principal...", CR
PAUSE 2000

LOOP

First_Subroutine:

DEBUG " Executando primeira "


DEBUG "sub-rotina.", CR
PAUSE 3000

RETURN

Second_Subroutine:

DEBUG " Executando segunda "


DEBUG "sub-rotina.", CR
PAUSE 3000

RETURN

Como Funciona SimpleSubroutines.bs2


A Figura 7-12 mostra como a chamada First_Subroutine na rotina principal
(DO...LOOP) funciona. O comando GOSUB First_Subroutine envia o programa
para a First_Subroutine: label. Em seguida, os três comandos dentro dessa sub-
rotina são executados. Quando o programa chega ao comando RETURN, ele pula de volta
para o comando que vem logo após GOSUB First_subroutine, que é DEBUG
"Retorna à principal", CR.

O que é uma chamada de sub-rotina? Quando você usa o comando GOSUB


para fazer o programa saltar para uma sub-rotina, isso é chamado de chamada de
sub-rotina.

PAUSE 2000
GOSUB First_Subroutine
DEBUG "Back in main.", CR

Figura 7-12
First_Subroutine: Primeira Chamada de
DEBUG " Executing first " Sub-rotina
DEBUG "subroutine.", CR
PAUSE 3000
RETURN
Página - 179

A Figura 7-13 mostra um segundo exemplo do mesmo processo com a chamada da


segunda sub-rotina (GOSUB Second_Subroutine).

PAUSE 2000
GOSUB Second_Subroutine
DEBUG "Repeat main...", CR

Second_Subroutine:
Figura 7-13
Chamada de Segunda
DEBUG " Executing second " Sub-rotina
DEBUG "subroutine", CR
PAUSE 3000
RETURN

Sua Vez – Adicionando Identando Sub-Rotinas


Você pode adicionar sub-rotinas após as duas que estão no programa e chamá-las de
dentro da rotina principal.

 Adicione a sub-rotina mostrada na Figura 7-11, na página 177 à


SimpleSubroutines.bs2.
 Faça os ajustes necessários aos comandos DEBUG, de modo que o visor pareça
correto com todas as três sub-rotinas.

Você também pode chamar uma sub-rotina de dentro de outra. Isso é chamado de
identamento de sub-rotinas.

 Tente mover o comando GOSUB que chama SUBROUTINE_NAME em uma das


outras sub-rotinas, e ver como ele funciona.

Ao identar as sub-rotinas, a regra é: não mais do que quatro. Consulte o


Manual de BASIC Stamp ou Ajuda do BASIC Stamp Editor para mais
informações. Localize GOSUB e RETURN.

Medidor de Luz Utilizando Sub-rotinas


O programa seguinte, LightMeter.bs2, utiliza rotinas para controlar o display de LED de
7 segmentos de acordo com o nível de luz detectada pelo fototransistor. O ciclo do
display dos segmentos on e off em um padrão circular, fica mais rápido quando a luz no
fototransistor fica mais brilhante. Quando a luz fica mais fraca, o padrão circular vai
mais devagar. O exemplo de programa LightMeter.bs2 utiliza uma sub-rotina
denominada Update_Display para controlar a ordem em que os segmentos do
medidor de luz avançam. O programa que executa o medidor de luz vai lidar com três
operações diferentes:

1. Ler o Fototransistor.
2. Calcular o tempo de espera antes de atualizar o display de LED de 7 segmentos.
3. Atualizar o display de LED de 7 segmentos.
Página - 180

Cada operação está contida dentro de sua própria sub-rotina, e a rotina principal
DO...LOOP chamará cada uma em sequência, repetidamente.

Exemplo de Programa: LightMeter.bs2

Condições controladas de iluminação fazem uma grande diferença! Para


melhores resultados, realize este teste em uma sala iluminada por lâmpadas
fluorescentes com pouca, ou nenhuma, luz solar direta (feche as cortinas). Para
obter informações sobre como calibrar este medidor para outras condições de
iluminação, consulte a seção “Sua Vez”.

 Coloque e execute LightMeter.bs2.


 Verifique se a velocidade do ciclo do teste padrão circular exibido pelo LED de
7 segmentos é controlada pelas condições de iluminação que o fototransistor está
percebendo. Para fazer isso, projete uma sombra sobre ele com a mão ou um
pedaço de papel e verifique se a taxa de exibição do padrão circular desacelera.

' O que é um Microcontrolador - LightMeter.bs2


' Indica nível de luz usando display de LED de 7 segmentos.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DEBUG "Programa funcionando!"

index VAR Nib ' Declaração de variáveis.


time VAR Word

OUTH = %00000000 ' Inicializa display de 7 segmentos.


DIRH = %11111111

DO ' Rotina principal.

GOSUB Get_Rc_Time
GOSUB Delay
GOSUB Update_Display

LOOP
' Sub-rotinas

Get_Rc_Time: ' Sub-rotina RC-time

HIGH 2
PAUSE 3
RCTIME 2, 1, time

RETURN

Delay: ' Sub-rotina de espera

PAUSE time / 3

RETURN

Update_Display: ' Sub-rotina de atualização do display


Página - 181

IF index = 6 THEN index = 0


' BAFG.CDE
LOOKUP index, [ %01000000,
%10000000,
%00000100,
%00000010,
%00000001,
%00100000 ], OUTH
index = index + 1

RETURN

Como Funciona LightMeter.bs2


As duas primeiras linhas do programa declararam variáveis. Não importa se essas
variáveis são utilizadas em sub-rotinas ou na rotina principal, é sempre melhor declarar
variáveis (e constantes) no início de seu programa.

Uma vez que esta é uma prática bastante comum, esta seção de código tem um nome,
"Declarações de variáveis". Este nome é mostrado no comentário à direita da primeira
declaração de variável.

index VAR Nib ' Declaração de variáveis.


time VAR Word

Muitos programas também têm coisas que precisam ser feitas uma vez no início do
programa. Definir todos os pinos de I/O de 7 segmentos como baixos e, em seguida,
torna-los saídas é um exemplo. Esta seção de um programa PBASIC também tem um
nome, "Inicialização"

OUTH = %00000000 ' Inicializa display de 7 segmentos


DIRH = %11111111

O próximo segmento de código é chamado de rotina principal. A rotina principal chama


primeiro a sub-rotina Get_Rc_Time. Em seguida, ela chama a sub-rotina Delay e,
depois disso, ela chama a sub-rotina Update_Display. Lembre-se que o programa
passa por três sub-rotinas tão rápido quanto possível, repetidamente.

DO ' Rotina principal


GOSUB Delay
GOSUB Update_Display
LOOP

Todas as sub-rotinas são, normalmente, colocadas após a rotina principal. O nome da


primeira sub-rotina é Get_Rc_Time: e assume as medidas de RC-time do circuito do
fototransistor. Esta sub-rotina tem um comando PAUSE que carrega o capacitor. A
duração deste comando é pequena, porque ele só precisa fazer uma pausa longa o
suficiente para garantir que o capacitor esteja carregado. Note-se que o comando
RCTIME define o valor da variável time. Esta variável vai ser utilizada na segunda sub-
rotina.

' Sub-rotinas
Get_Rc_Time: ' Sub-rotina RC-time
HIGH 2
Página - 182

PAUSE 3
RCTIME 2, 1, time
RETURN

O segundo nome da sub-rotina é Delay, e tudo que ela contém é PAUSE time / 3. O
comando PAUSE permite que o tempo de queda medido (quão brilhante é a luz) controle
o atraso ao ligar cada segmento de luz no mostrador giratório circular do LED de 7
segmentos. O valor a direita do operador de divisão / pode ser feito maior para uma
rotação mais rápida, em condições inferiores de luz, ou menor para retardar a exibição
das condições de luz mais brilhantes. Você também pode usar * para multiplicar a
variável time por um valor, em vez de dividir para fazer a exibição ficar muito mais
lenta, e para um controle mais preciso sobre a taxa, não se esqueça dos operadores */.
Mais informações sobre este operador na seção “Sua Vez”.

Delay:
PAUSE time / 3
RETURN

A terceira sub-rotina é chamada Update_Display. O comando LOOKUP nesta sub-


rotina contém uma tabela com seis padrões de bits que são usados para criar o padrão
circular em torno do exterior do visor do LED de 7 segmentos. Ao adicionar 1 a
variável index cada vez que a sub-rotina é chamada, ele faz com que o padrão de bits na
próxima sequência seja colocado na OUTH. Existem apenas seis entradas na tabela
LOOKUP para os valores index de 0 a 5. O que acontece quando o valor do índice recebe
6? O comando PROC não sabe voltar automaticamente para a primeira entrada, mas você
pode usar uma instrução IF...THEN para corrigir esse problema. O comando IF
index = 6 THEN index = 0 redefine o valor do índice de 0 a cada vez que recebe
6. Ele também faz com que a sequência de padrões de bits colocados em OUTH repita
alternadamente. Este, por sua vez, faz com que o LED de 7 segmentos repita seu padrão
circular uma e outra vez.

Update_Display:

IF index = 6 THEN index = 0


' BAFG.CDE
LOOKUP index, [ %01000000,
%10000000,
%00000100,
%00000010,
%00000001,
%00100000 ], OUTH
index = index + 1
RETURN

Sua Vez – Ajuste do Hardware e Software do Medidor


Há duas maneiras de alterar a sensibilidade do medidor. Primeiro, o "software", que é o
programa PBASIC, pode ser alterado para ajustar a velocidade. Como mencionado
anteriormente, dividindo a variável tempo na sub-rotina Delay comando PAUSE time / 3
por números maiores que 3 vai acelerar a exibição, e os números menores vão retardá-
Página - 183

la. Para realmente retardá-la, o tempo também pode ser multiplicado por valores com o
operador de multiplicação *, e para ajustá-los há o operador */.

Ao conectar os capacitores em paralelo, seus valores se somam. Então, se você conectar


um segundo capacitor de 0,01 μF ao lado do primeiro, como mostrado na Figura 7-14 e
na Figura 7-15, a capacitância será 0,02 μF. Com o dobro da capacidade, a queda de
medição para o mesmo nível de luz vai demorar o dobro do tempo.

 Ligue o segundo capacitor de 0,01 μF ao lado do primeiro na parte do sensor de


luz do circuito medidor de luz na Figura 7-14 e Figura 7- 15.
 Execute LightMeter.bs2 e observe o resultado.

Se as medições do tempo forem duas vezes maior, o teste padrão circular do LED de 7
segmentos deverá girar a metade da velocidade.

Figura 7-14
Dois capacitores de
0,01 μF em paralelo =
0,02 μF

Figura 7-15
Circuitos de medidor
de luz com dois
capacitores de 0,01
μF em paralelo

Em vez de metade da velocidade de um capacitor de 0,01 μF, que tal um com um


décimo da velocidade? Você pode fazer isso através da substituição dos dois capacitores
de 0,01 μF por um capacitor de 0,1 μF. Ele vai trabalhar bem em salas iluminadas, mas
provavelmente vai ser um pouco lento para a iluminação normal. Lembre-se que quando
você usa um capacitor que é dez vezes maior, a medição RC-time vai demorar dez vezes
mais tempo.

 Substitua os capacitores de 0,01 μF capacitores por um capacitor de 0,1 μF.


 Execute o programa e veja se ocorreu o efeito previsto.
 Antes de continuar, restaure o circuito para um capacitor de 0,01 em paralelo
com o fototransistor como mostrado na Figura 7-9 e Figura 7-10, começando na
página 176.
 Antes de continuar, teste seu circuito restaurado para verificar se ele funciona.
Página - 184

O que é melhor, ajustar o software ou o hardware? Você deve sempre tentar


usar o melhor dos dois mundos. Escolha um capacitor que lhe de as medições
mais precisas sobre a ampla gama de níveis de luz. Uma vez que seu hardware é
o melhor que pode ser, use o software para ajustar automaticamente o medidor de
luz para que ele funcione bem para o usuário sob as mais diversas condições. Isso
leva uma quantidade considerável de testes e refinamento, mas isso é tudo parte
do processo de elaboração do produto.

ATIVIDADE #5: SAÍDAS ON/OFF DO FOTOTRANSISTOR


Antes dos microcontroladores se tornarem comuns nos produtos, os fotoresistores foram
usados em circuitos que variavam em sua saída de tensão. Quando a tensão ficou aquém
do limite, indicando o anoitecer, outros circuitos no aparelho acenderam as luzes.
Quando a tensão ultrapassou o limite, indicando o dia, os outros circuitos no aparelho
apagaram as luzes. Este comportamento do interruptor de binário de luz pode ser
emulado com o mesmo BASIC Stamp e circuito de queda do RC, basta modificar o
programa PBASIC. Alternativamente, o circuito pode ser modificado para que ele envie
um 1 ou 0 para um pino de I/O de acordo com a quantidade de tensão fornecida ao pino,
semelhante à maneira como um botão de pressão faz. Nesta atividade, você vai tentar
essas duas abordagens.

Ajustando o Programa para Situações On / Off


O PhototransistorAnalogToBinary.bs2 pega a gama de medida do fototransistor e
compara-a ao ponto a meio caminho entre as medidas maiores e menores. Se a medida
estiver acima do ponto a meio caminho, ele exibe "Acenda a luz”; caso contrário, ele
exibe “Apague a luz”. O programa usa diretivas constantes para definir as maiores e as
menores medidas que o programa deve esperar do circuito do fototransistor.

valMax CON 4000


valMin CON 100

O programa também utiliza operadores MIN e MAX para garantir que os valores fiquem
dentro desses limites antes de usá-los para tomar qualquer decisão. Se o tempo é maior
do que valMax (4000 no programa de exemplo), a instrução define o tempo para
valMax = 4000. Da mesma forma, se o tempo é menor do que valMin (100 no
programa de exemplo), a instrução define o tempo para valMin = 100.

time = time MAX valMax MIN valMin

Uma declaração IF...THEN...ELSE converte o intervalo de valores analógicos


digitalizados em uma saída binária que assume a forma de mensagens de luz acesa ou
luz apagada.

IF time > (valMax - valMin) / 2 THEN


DEBUG CR, "Acenda a luz "
ELSE
DEBUG CR, "Apague a luz"
ENDIF
Página - 185

Para que este programa funcione corretamente, antes você tem que calibrar as condições
de iluminação da seguinte forma:

 Verifique se o circuito do fototransistor para se certificar de que tem apenas um


capacitor 0,01 μF (rotulado 103).
 Coloque o PhototransistorAnalogToBinary.bs2 no BASIC Stamp Editor.
Certifique-se de adicionar um espaço extra após o "z" na mensagem "Acenda a
luz ". Caso contrário, você vai ter um "z" fantasma da mensagem "Apague a
luz", que tem um caractere a mais nela.
 Carregue o programa para o BASIC Stamp.
 Assista ao DEBUG Terminal quando você aplicar as condições de iluminação
mais escuras e mais brilhantes que você deseja testar, e faça anotações dos
valores de tempo mínimos e máximos resultantes.
 Coloque esses valores em valMax e valMin na diretivas COM do programa.

Agora, seu programa está pronto para ser executados e testado.

 Carregue o programa modificado para o BASIC Stamp.


 Teste para verificar se as condições de iluminação fraca resultarão na mensagem
“Acenda a luz” e as condições de iluminação brilhante resultarão na mensagem
"Apague a luz".

' O que é um Microcontrolador - PhototransistorAnalogToBinary.bs2


' Mude a medida analógica digitalizada do Fototransistor para um
' resultado binário.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100

time VAR Word

PAUSE 1000

DO

HIGH 2
PAUSE 100
RCTIME 2, 1, time

time = time MAX valMax MIN valMin

DEBUG HOME, "time = ", DEC5 time


IF time > (valMax - valMin) / 2 THEN
DEBUG CR, "Acenda a luz "
ELSE
DEBUG CR, "Apague a luz"
ENDIF
Página - 186

LOOP

Sua Vez – Diferentes Limites para Claro e Escuro


Se você tentar incorporar o PhototransistorAnalogToBinary.bs2 em um sistema
automático de iluminação, ele terá um defeito potencial. Vamos dizer que está bastante
escuro lá fora para fazer a medição do tempo ficar aquém (valMax - valMin) / 2,
assim as luzes acendem. Mas se o sensor detectar luz, faria a medição ficar abaixo
(valMax - valMin) / 2, então a luz desligaria novamente. Este ciclo lights-
on/lights-off poderia se repetir rapidamente a noite toda!

A Figura 7-16 mostra como isso poderia funcionar em um gráfico. À medida que o nível
de luz cai, o valor das variáveis de tempo aumenta, e quando ultrapassa o limite, as
luzes automáticas acedem. Uma vez que o fototransistor detectar a luz que acabou de
acender, a medição da variável tempo cai para abaixo do limite, assim que as luzes
apagarem. Em seguida, o valor da variável tempo aumenta novamente, e ultrapassa o
limite, então as luzes acendem e a variável de tempo cai abaixo do limite novamente, e
assim por diante...

valMax
"Turn light on "

Figura 7-16
(valMax - valMin) / 2 Oscilações
acima/abaixo do limite
"Turn light off"
valMin

Uma solução para este problema consiste em adicionar uma segunda entrada, tal como
ilustrado na Figura 7-17. A entrada “Acenda a luz” só acende a luz depois que ficou
muito escuro, e a entrada “Apague a luz” só reacende a luz depois que ficou muito
claro. Com este sistema, a luz acende depois que alcançasse a área “Acenda a luz”. A
luz acesa tornou mais clara, assim o tempo caiu um pouco, mas desde que não caiu para
baixo após a entrada “Apague a luz”, nada mudou, e a luz ficará acesa como deveria. O
termo histerese é utilizado para descrever este tipo de sistema, que tem dois limites de
entradas diferentes que afetam a sua saída juntamente com uma zona de transição entre
elas.

valMax
"Turn light on "
(valMax - valMin) / 4 * 3 Figura 7-17
No transition Usando diferentes
limites de alta e baixa
(valMax - valMin) / 4 para evitar oscilações
"Turn light off"
valMin

Você pode implementar este sistema de duas entradas em seu código PBASIC
modificando a declaração IF...THEN...ELSEIF PhotransistorAnalogToBinary.bs2 's.
Aqui está um exemplo:
Página - 187

IF time > (valMax - valMin) / 4 * 3 THEN


DEBUG CR, "Acenda a luz "
ELSEIF time < (valMax - valMin ) / 4 THEN
DEBUG CR, "Apague a luz"
ENDIF

O primeiro bloco de código IF...THEN exibe “Acenda a luz ”, quando a variável


time armazena um valor que é mais do que ¾ do caminho para o maior valor do tempo
(luz mais baixa). O bloco de código ELSEIF exibe apenas “Apague a luz” quando a
variável tempo armazena um valor que é menos de ¼ do caminho acima do menor valor
do tempo (mais brilhante).

 Salve PhototransistorAnalogToBinary.bs2 como PhotransistorHysteresis.bs2.


 Antes de modificar PhotransistorHysteresis.bs2, teste-o para certificar-se se a
entrada existente funciona. Se a iluminação mudou, repita as etapas de
calibração valMin e valMax (antes do código de exemplo
PhototransistorAnalogToBinary.bs2).
 Substitua a declaração IF...ELSE...ENDIF do PhotransistorHysteresis.bs2 's
por IF...ENDIF...ELSEIF que acabamos de discutir.
 Carregue o PhotransistorHysteresis.bs2 para o BASIC Stamp.
 Teste e verifique se a entrada “Acenda a luz” está mais escura, e a entrada
“Apague a luz” está mais clara.

Se você adicionar um circuito de LED e modificar o código para que ele ligue e
desligue o LED, algumas coisas interessantes podem acontecer. Especialmente se você
colocar o LED próximo ao fototransistor, você ainda pode ver o comportamento ligado
e desligado quando fica escuro, mesmo com a histerese programada. Quão longe do
fototransistor o LED tem que estar para obter os dois limiares e evitar comportamento
on / off? Assumindo que valMin e valMax são as mesmas em ambos os programas, a
que distância o LED tem que estar para o PhototransistorAnalogToBinary.bs2 sem
modificações funcionar corretamente?
Página - 188

TTL Vs. Gatilho Schmitt


Seu pino de I/O do BASIC Stamp envia e recebe sinais usando a lógica
transistor-transistor (TTL). Como saída, o pino de I/O envia um sinal de 5 V de
alta ou 0 V de sinal de baixa. O lado esquerdo da Figura 7-18 mostra como o
pino de I/O comportando-se como uma entrada. O pino de I/O no registro IN
(IN0, IN1, IN2 etc.) armazena 1 se a tensão aplicada está acima de 1,4 V,
ou se está abaixo de 1,4 V. Estes são mostrados como Logic 1 e Logic 0 na
figura.
Um gatilho de Schmitt é um circuito representado pelo símbolo no centro da
Figura 7-18. O lado direito da Figura 7-18 mostra como um pino de I/O
configurado como entrada se comportaria se tivesse um circuito de disparo
Schmitt construído nele. O gatilhos de Schmitt tem histerese da mesma forma
que o código PBASIC com duas entradas tem. O valor de entrada armazenada
pelo registro INx do pino de I/O não muda de 0 a 1 até que a tensão de entrada
esteja acima de 4,25 V. Da mesma forma, não muda de 1 para 0 até que a tensão
de entrada passe abaixo de 0,75 V. O BASIC Stamp 2px tem um comando
PBASIC que permite que você configure seus pinos de entrada para Schmitt.
Figura 7-18 TTL Vs. Limites do Gatilho Schmitt e Símbolo

Limite TTL Símbolo do Gatilho de Limite Gatilho


Schmitt de Schmitt
5V 5V Logic 1
≈4.25 V
Logic 1

≈1.4 V No Change
Logic 0 ≈0.75 V
0V 0V Logic 0

Ajustando o Circuito para Situações de On / Off


Como mencionado no Capítulo 5, Atividade #2, o limite de tensão para um pino de I/O
do BASIC Stamp é de 1,4 V. Quando um pino de I/O é definido como entrada, tensões
acima de 1,4 V aplicada ao pino I/O resultam em um binário 1 e tensões abaixo de 1,4 V
resultam em um binário 0. O nó Vo no circuito representado na figura 7-19 varia em
tensão com a luz. Este circuito pode ser ligado a um pino de I/O do BASIC Stamp, e
com pouca luz, a tensão vai passar abaixo do limiar de 1.4 V do BASIC Stamp e o
registro de entrada do pino de I/O vai armazenar 0. Em condições de luz brilhante, Vo
ultrapassa 1,4 V, e o registro de entrada do pino de I/O vai armazenar 1.

Figura 7-19
Saída de Tensão do
Circuito de Luz
+
V =R
– I
Página - 189

A razão pela qual a tensão Vo muda com os níveis de luz é devido a Lei de Ohm, que
indica que a tensão através de uma resistência (V na Figura 7-19) é igual à corrente que
passa através dessa resistência (I), multiplicada pela resistência do resistor (R).

V=I×R

Lembre-se que um fototransistor deixa passar mais corrente quando exposto a mais luz
e menos energia quando exposto a menos luz. Vamos dar uma olhada mais detalhada no
circuito de exemplo na Figura 7-19 e calcular a quantidade de corrente que o resistor
teria que passar para criar uma queda de 1,4 V sobre o resistor. Primeiro, sabemos que o
valor do resistor é de 10 kΩ, ou 10 000 Ω. Nós também sabemos que queremos que a
tensão seja igual a 1,4 V, por isso precisamos modificar a Lei de Ohm para resolver I.
Para fazer isso, divida ambos os lados da equação V = I × R por R, o que resulta em I =
V ÷ R. Em seguida, substitua os valores que você conhece (V = 1,4 V e R = 10 kΩ) e
resolver para I.

I = V÷R
= 1.4 V ÷ 10 kΩ
= 1.4 V ÷ 10,000 Ω
= 0.00014 V/Ω
= 0.00014 A
= 0.14 mA

Agora, se o transistor permitisse que por duas vezes mais corrente passasse por ele,
porque está mais brilhante, qual seria a tensão através do resistor? Por duas vezes a
corrente, I = 0,28 mA, e a resistência ainda é 10 kΩ, então agora estamos de volta para
resolver V da equação original V = I × R com I = 0,28 mA e R = 10 kΩ.

V = I×R
= 0.28 mA × 10 kΩ
= 0.00028 A × 10,000 Ω
= 2.8 AΩ
= 2.8 V

Com 2,8 V aplicada a um pino de I/O, o seu registro de entrada iria armazenar 1 desde
que 2,8 V esteja acima de 1,4 V da tensão de entrada do pino de I/O.

Sua Vez – Mais Cálculos


E se o fototransistor permitisse a metade da tensão da corrente de entrada (0,07 mA)
através do circuito, qual seria a voltagem através da resistência? Além disso, qual seria
o registro de entrada que o pino de I/O armazenaria?

Teste do Sensor Binário de Luz


O teste do circuito do sensor binário de luz é muito parecido com o teste do circuito de
botão do Capítulo 3. Quando o circuito é ligado a um pino de I/O, a tensão será ou
acima ou abaixo do limiar de 1,4V do pino de I/O do BASIC Stamp o que resultará em
um 1 ou um 0, que poderá ser exibido com o DEBUG Terminal.
Página - 190

Peças para o Sensor de Luz Analógico para Binário


(1) Fototransistor
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) Resistor – 10 kΩ (marrom-preto-laranja)
(1) Resistor – 2 kΩ (vermelho-preto-vermelho)
(1) Resistor – 4.7 kΩ (amarelo-violeta-vermelho)
(1) Resistor – 100 kΩ (marrom-preto-amarelo)
(2) Fios

Circuito para o Sensor de Luz Analógico para Binário


Com o circuito mostrado na Figura 7-20, o circuito se comporta como uma sombra
controlada pelo botão. A sombra resulta em in2 = 0, luz brilhante resulta em in2 =
1. Tenha em mente que um pino de I/O configurado como entrada não afeta o circuito
que monitora porque não aumenta ou reduz qualquer corrente. Isto faz com que tanto o
pino de I/O e quanto o resistor de 220 Ω fiquem essencialmente invisíveis para o
circuito. Assim, os resultados de tensão de circuito dos nossos cálculos a partir da
secção anterior sejam os mesmos com ou sem o resistor de 220 Ω e pino de I/O ligados.

 Construa o circuito mostrado na Figura 7-20.

Figura 7-20: Esquema e Diagrama de fiação para circuito do sensor de luz


analógico para binário ligado a um pino de I / O

Código De Teste Para O Sensor De Luz Analógico Para Binário


TestBinaryPhototransistor.bs2 é uma versão modificada do ReadPushbuttonState.bs2 do
Capítulo 3, Atividade #2. Além de ajustar as observações, há uma mudança para o
programa atual que é a linha DEBUG? IN2, que era DEBUG? IN3 no programa de
exemplo de botão, porque o botão de pressão foi ligado a P3 em vez de P2.

 Reveja o Capítulo 3, Atividade #2 (página 55).


 Use o TestBinaryPhototransistor.bs2 abaixo para verificar se a luz brilhante do
fototransistor resulta em 1, enquanto a escuridão resulta em 0. Você pode
precisar de uma luz bem forte. Se a sua iluminação interna ainda resultar em 0,
tente luz do sol ou use uma lanterna bem de perto. Um recurso alternativo para
baixa iluminação é substituir o resistor de 10 kΩ por um resistor de 100 kΩ.
Página - 191

' O que é um Microcontrolador - TestBinaryPhototransistor.bs2


' Verifique o estado da saída binária do circuito do fototransistor a
' cada ¼ de segundo.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO
DEBUG ? IN2
PAUSE 250
LOOP

Testando Resistências em Série


Dê uma olhada nos cálculos V = I × R cálculos anteriormente realizados nesta atividade.
Se a resistência em série é de 1/5, o valor da tensão através da resistência será de 1/5
para as mesmas condições de iluminação. Da mesma forma, uma resistência que é 10
vezes maior do que isso fará com que a tensão seja dez vezes maior.

O que isso faz para o seu circuito? Um resistor de 100 kΩ no lugar de um resistor de 10
kΩ significa que o fototransistor só tem de conduzir a corrente 1/10 para cruzar o limiar
de 1,4V do pino de I/O do BASIC Stamp, o que significa que ele leva menos luz para
desencadear um binário 1 na entrada do pino de I/O e se fazer notar. Isto pode funcionar
como um sensor num ambiente que é supostamente escuro, uma vez que será sensível a
pequenas quantidades de luz. Em contraste, 1/5 do valor da resistência significa que o
fototransistor tem que conduzir 5 vezes corrente para obter a tensão através da
resistência e atravessar o limiar de 1,4 V, que por sua vez significa levar mais luz para
acionar o binário 1 no registro de entrada do pino de I/O. Assim, este circuito seria
melhor para detectar luz mais forte.

 Experimente os resistores de 2 kΩ, 4,7 kΩ, 10 kΩ e 100 kΩ e compare as


alterações na sensibilidade à luz com cada resistor.

Sua Vez – Indicador de Baixo Nível de Luz


 Escolha um resistor com a melhor resposta a 1/0 a baixos níveis de luz em sua
área de trabalho.
 Adicione o LED apresentado no Capítulo 3, Atividade #3, para o circuito limiar
do fototransistor.
 Coloque algo entre o LED e o fototransistor para que o fototransistor não possa
"ver" o LED. Isto elimina o potencial de interferência entre os dois dispositivos.
 Modifique o programa para que ele faça piscar a luz quando a sombra é
projetada sobre o fototransistor.

ATIVIDADE #6: PARA DIVERSÃO - MEÇA A LUZ EXTERNA COM UM LED


Como mencionado anteriormente, o circuito introduzido na Atividade #1 é projetado
para medições de luz no interior. E se o seu aplicativo precisar fazer as medições de luz
ao ar livre? Uma opção seria encontrar um fototransistor que gerasse menos corrente
para a mesma quantidade de luz. Outra opção seria a utilização de um dos outros
sensores de luz do kit “O que é um Microcontrolador”. Eles estão disfarçados de LEDs
e executam muito bem as medições de luz mais intensas.
Página - 192

Quando a corrente elétrica passa através do LED, que emite luz, o que você acha que
acontece quando a luz brilha em um LED? Sim, de fato, ela pode causar uma corrente
elétrica que flua através de um circuito. Figura 7-21 mostra um circuito de LED para
detectar os níveis de luz ao ar livre e em outras áreas com luz mais intensa. Enquanto o
fototransistor permite que a corrente passe é aplicada uma pressão elétrica fornecida
(voltagem), o LED é mais parecido com um pequeno painel solar que cria a sua própria
tensão para fornecer a corrente. Na medida em que a deterioração do circuito RC é a
causa, o resultado com um LED é praticamente o mesmo. O LED conduz mais corrente
e drena a carga do capacitor mais rapidamente, com mais luz, conduz menos corrente e
drena mais lentamente com menos luz.

Figura 7-21
Yello Esquema para o LED
no circuito do sensor
de luz RC-Time

Porque o LED é ligado para trás? No Capítulo 2, o ânodo do LED foi ligado
ao resistor de 220Ω e o cátodo foi ligado ao terra. Esse circuito fez o LED emitir
luz como resultado da passagem de corrente elétrica através do LED quando a
tensão foi aplicada ao circuito. Quando a luz está brilhando sobre o LED, cria
uma pequena tensão que gera uma pequena corrente no sentido oposto. Assim, o
LED tem que ser ligado para trás de modo que ele conduza a corrente e permita
que o capacitor drene através dele para as medições de queda de RC.

Peças do Sensor de Luz do LED


(1) LED – amarelo
(1) LED – verde
(1) LED – vermelho
(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) Fio

Circuito do Sensor de Luz de LED


Uma diferença importante entre o LED e o fototransistor é que o LED conduz muito
menos corrente para a mesma quantidade de luz, por isso é preciso muita luz para o
LED conduzir corrente suficiente para descarregar o capacitor de forma suficientemente
rápida para a medição RCTIME. Lembre-se que a máxima medição de tempo que
RCTIME pode medir é 65535 × 2 µs ≈ 131 ms. Assim, para boas medidas de queda de
RC com o BASIC Stamp, é necessário um capacitor muito menor. Na verdade, o
circuito trabalha melhor sem qualquer capacitor externo. O LED tem uma pequena
quantidade de capacitância dentro dele, chamada capacitância de junção, e os clipes de
metal que prendem os fios que você pluga na placa de ensaio também têm capacitância.
Esta é a razão de um capacitor ser duas placas metálicas separadas por um isolador
chamado dielétrico. Assim, dois clipes de metal dentro do protoboard, separados por
plástico e ar, formam um capacitor. A combinação de junção capacitância do LED e
capacitância do clip do protoboard faz com que você possa usar o LED sem capacitor
externo, como mostrado na Figura 7-22.
Página - 193

 Construa o circuito mostrado na Figura 7-22 e na Figura 7-23, usando o LED


amarelo. Certifique-se de observar a polaridade representada nas figuras!

Figura 7-202
Esquema do Circuito
de LED RCTIME

Local plano e mais


curto do pino
Figura 7-23
cátodo Diagrama de Fiação
do Circuito RC Time
do LED.

Pino ânodo mais longo

Testando o Sensor de Luz de LED com Código


O circuito de detecção de luz com LED pode ser testado em uma sala bem iluminada ou
ao ar livre durante o dia. Em uma sala mal iluminada os tempos de medição são
susceptíveis de exceder 65535, caso em que RCTIME vai armazenar a zero na variável
resultado. Na maioria das situações, o código é o mesmo código de Atividade #1,
TestPhototransistor.bs2.

Se você estiver em uma sala bem iluminada tente o seguinte:

 Execute TestPhototransistor.bs2 da Atividade #1.


 Aponte o LED para a fonte de luz mais brilhante, colocando sua placa em
direção a ela.
 Gradualmente, leve a placa para longe da fonte de luz mais brilhante na sala, os
valores indicados pelo DEBUG Terminal devem ficar maiores conforme a luz
ficar mais fraca.

Se você tem uma lanterna brilhante, tente o seguinte:

 Execute TestPhototransistor.bs2 da Atividade #1.


 Elimine fontes de luz mais brilhantes, como a luz do sol entrando pelas janelas.
 Ligue a lanterna e aponte para o topo do LED, a uma distância de cerca de 10
cm. Se possível, desligue algumas das luzes fluorescentes de forma que os níveis
de luz ambiente fiquem baixos.
Página - 194

 Veja as medições que o DEBUG Terminal exibe conforme você aumenta


gradualmente a distância da lanterna do topo do LED. Isto permitirá que você
determine a distância entre a lanterna e o LED.

Se você está em uma sala só com luzes fluorescentes e sem fontes de luz brilhantes:

 Execute TestPhototransistor.bs2 da Atividade #1.


 Elimine as fontes de luz mais brilhantes, como a luz do sol nas janelas. Se
possível, desligue algumas das luzes fluorescentes de modo que os níveis de luz
fiquem baixos.
 Aponte o LED para o seu computador como se ele tivesse quase tocando-o e
veja se as medidas permitem distinguir entre as várias cores da tela.

Testes ao ar livre:

 Execute StoreLightMeasurementsInEeprom.bs2 da Atividade #2.


 Desligue o cabo de programação e leve sua placa para fora.
 Aponte sua placa de forma que o LED esteja apontando diretamente para o sol.
 Pressione e solte o botão Reset da sua placa para reiniciar o programa de registro
de dados.
 Aos poucos rode sua placa longe do sol por mais de 2 ½ minutos.
 Leve sua placa de volta para dentro e volte a ligar ao PC.
 Execute ReadLightMeasurementsFromEeprom.bs2 e examine as medições de
luz. Desde que você, gradualmente, levou o LED para longe do sol, as medições
sucessivas devem ficar maiores.

Sua Vez – O Seu BASIC Stamp Consegue Diferenciar Vermelho de Verde?


Na Figura 7-2, verde está no centro do espectro, e vermelho está a direita. Se você
baixar a versão colorida em PDF deste livro do site www.parallax.com, você pode
colocar o verde e, em seguida, o LED vermelho contra a tela e registra medições de luz
em todo o espectro de cores. Então, comparando as menores medições com cada LED,
você pode detectar que seu LED é colocado contra verde ou vermelho na tela.

 Comece o circuito de detecção de luz com um LED verde na Figura 7-22 e


Figura 7-23.
 Baixe a versão em PDF “O que é um microcontrolador do site
www.parallax.com/go/WAM.
 Exiba o espectro de cores mostrado na Figura 7-2 (página 162) em seu monitor,
e dê um zoom na imagem.
 Com o programa TestPhototransistor.bs2 exibindo medições no DEBUG
Terminal, segure a placa de modo que a cúpula do LED verde esteja apontando
diretamente para o monitor, todo o espectro de cores. Para melhores resultados,
a cúpula do LED deve apenas estar mal tocando o monitor, e os níveis de luz na
sala devem ser bastante baixos.
 Deslize o LED verde lentamente ao longo da barra do espectro exibido no
monitor e observe a cor que resultou na menor medida.
 Repita com o LED vermelho. Será que o LED vermelho relatou medições mais
baixas sobre o vermelho, enquanto o LED verde relatou medições menores sobre
o verde?
Página - 195

As menores medições do LED vermelho devem ocorrer ao longo da cor vermelha na


tela, e as menores medições para o LED verde devem ocorrer ao longo do verde na tela.

SUMÁRIO
Este capítulo introduziu sensores de luz e descreveu como eles são utilizados em uma
variedade de produtos. Sensores de luz diferentes detectam diferentes tipos de luz, e
suas folhas de dados descrevem sua sensibilidade relativa ao comprimento das ondas de
luz. Este capítulo focou no fototransistor, um dispositivo que controla a corrente através
de seus terminais coletores e emissores pela quantidade de luz que brilha no seu
terminal de base. Porque a luz pode controlar a quantidade de corrente que conduz um
fototransistor, a técnica para medir a posição do botão de um potenciômetro no Capítulo
5 circuito RC também funciona para medir a luz que brilha em um fototransistor. O
tempo que leva para um capacitor perder sua carga resulta de uma medição RC Time no
fototransistor que fornece um número que corresponde ao brilho da luz sobre o
fototransistor.

Os registros de dados, armazenando medições de luz na parte não utilizada a memória


de programa EEPROM do módulo BASIC Stamp também foi introduzido. Os
comandos WRITE e READ foram usados para armazenar valores e para recuperar
valores da EEPROM do módulo BASIC Stamp. O volume de números envolvidos no
registro de dados pode ser difícil de analisar, mas colocando os dados em um gráfico
fica mais fácil de ver padrões, tendências e eventos. Os dados registrados podem ser
transferidos para planilhas eletrônicas convencionais e gráficas, alguns utilitários
gráficos podem até substituir o DEBUG Terminal, e podem traçar os valores do BASIC
Stamp em um gráfico, ao invés de exibi-los como texto. Um exemplo de aplicação do
medidor de luz também foi desenvolvido, demonstrando como medições de luz podem
ser utilizadas para controlar outro processo, neste caso, a taxa de um padrão circular
exibida por um LED de 7 segmentos. Estas aplicações também são usadas nas sub-
rotinas para realizar três empregos diferentes para a aplicação do medidor de luz.

O BASIC Stamp pode ser programado para converter uma medida de tempo de queda
RC para um valor binário com declarações IF...THEN. Além disso, o programa pode
tomar uma série de medidas de queda de RC e aplicar histerese com uma entrada
"Acenda a luz" que está na área escura das medidas e um entrada "Apague a luz" que
está na faixa mais leve. Isto pode ajudar a prevenir oscilações de ligar / desligar que
possam ocorrer quando o sensor relatar escuridão e o dispositivo ligar uma luz na área.
Sem histerese, o dispositivo pode sentir esta luz, desligar e repetir este ciclo
indefinidamente.

Uma abordagem de hardware para detecção de ligar/desligar a luz é a aplicação de


energia em série para o fototransistor com um resistor. De acordo com a Lei de Ohm, a
quantidade de corrente que o fototransistor conduz afeta a tensão sobre o resistor. Esta
tensão variável pode ser conectada a um pino de I/O, e resultará num binário 1, se a
tensão for superior a limiar de 1,4 V do pino de I/O, ou um binário 0 se for abaixo do
limiar.

O LED (diodo emissor de luz) que emite luz quando a corrente passa por ele também se
comporta como um pequeno painel solar quando a luz incide sobre ele, gerando uma
Página - 196

pequena tensão que por sua vez pode levar corrente elétrica para os circuitos. As
correntes que o LED gera são suficientemente pequenas para que uma combinação da
própria capacitância de junção do LED e a capacitância inerente aos grampos dentro da
protoboard forneçam capacitância suficiente para um circuito RC com nenhuma queda
do resistor externo. Enquanto o fototransistor do kit “O que é um Microcontrolador?”
tem melhor desempenho dentro de casa, o LED é excelente para medições de luz mais
intensa e ao ar livre.

Questões
1. Quais são alguns exemplos de aplicações de iluminação automática que
dependem de sensores de luz ambiente?
2. Quais são alguns exemplos de produtos que respondem às mudanças no brilho
da luz ambiente?
3. Qual a faixa de comprimento de onda que o espectro de luz visível está situada?
4. Quais são os nomes dos terminais do fototransistor, e qual deles controla a
quantidade de corrente que o dispositivo permite passar?
5. O que significa EEPROM?
6. Quantos bytes podem armazenar a EEPROM do módulo BASIC Stamp?
Quantos bits ele pode armazenar?
7. Qual comando você usa para armazenar um valor em uma EEPROM? Qual
comando que você usa para recuperar um valor de uma EEPROM? Qual delas
requer uma variável?
8. O que é um rótulo?
9. O que é uma sub-rotina?
10. Que comando é usado para chamar uma sub-rotina? Qual comando é usado para
terminar uma sub-rotina?

Exercícios
1. Desenhe o esquema de um circuito RC-time de fototransistor conectado a P5.
2. Modifique TestPhototransistor.bs2 de modo que ele funcione em um circuito
ligado a P5, em vez de P2.
3. Explique como você poderia modificar LightMeter.bs2 para que o teste de
padrão circular exibido pelo display de LED de 7 segmentos vá na direção
oposta.

Projetos
1. Faça um pequeno protótipo de um sistema que automaticamente feche as
cortinas quando fica muito brilhante e abra novamente quando fica menos
brilhante. Use o servo para um atuador mecânico. Dica: Para obter o código,
você pode adicionar dois comandos de controle do servo para
PhototransistorAnalogToBinary.bs2, e mudar o comando PAUSE 100 para
PAUSE 1. Certifique-se de seguir as instruções do texto para calibrar as
condições de luz na área antes de testar.
2. Como crédito extra, melhore a sua solução para o projeto 1, incorporando as
modificações de histerese discutidas na Atividade #5.
Página - 197

Soluções
Q1.Os faróis dos carros, postes e luzes de segurança ao ar livre que ligam
automaticamente quando está escuro.
Q2.Monitores portáteis e câmeras com exposição automática.
Q3.380 nm a 750 nm de acordo com a Figura 7-2, na página 162.
Q4.Coletor, base e emissor. A base controla a quantidade de corrente passa para o
coletor e volta para fora do emissor.
Q5.Electrically Erasable Programmable Read-Only Memory.
Q6.2048 bytes. 2048 x 8 = 16,384 bits.
Q7.Para armazenar um valor - WRITE, Para recuperar um valor - READ, o comando
READ requer uma variável.
Q8.A etiqueta é um nome que pode ser usado como um marcador em um programa
PBASIC.
Q9.Uma sub-rotina é um pequeno segmento de código que faz um determinado
trabalho.
Q10. Chamando: GOSUB; terminando: RETURN

E1. Esquema baseado na Figura 7-4, na página 164, com P2 mudou para P5.

E2. As modificações necessárias são muito semelhantes as descritas na página 164.

DO
HIGH 5
PAUSE 100
RCTIME 5, 1, time
DEBUG HOME, "time = ", DEC5 time
LOOP

E3. Para ir em direção oposta, os padrões devem ser exibidos na ordem inversa. Isso
pode ser feito mudando os padrões em ao redor da instrução PROC, ou
invertendo a ordem em que se olhou para cima. Aqui estão duas soluções feitas
com sub-rotinas alternativas UPDATE_DISPLAY.

Solução 1 Solução 2

Update_Display: Index = 5 '<<Add after Index


IF index = 6 THEN index = variable
0
' BAFG.CDE Update_Display:
LOOKUP index, [ ' BAFG.CDE
%01000000, LOOKUP index, [ %01000000,
%10000000,
Página - 198

%10000000, %00000100,
%00000010,
%00000100, %00000001,
%00100000 ],
%00000010, OUTH
IF (index = 0) THEN
%00000001, index = 5
%00100000 ELSE
], OUTH index = index - 1
index = index + 1 ENDIF
RETURN RETURN

P1. Fototransistor da Figura 7- 4 na página 164, esquema do servo para a sua placa
do Capítulo 4, Atividade # 1.

' O que é um Microcontrolador - Ch07Prj01_Blinds_Control.bs2


' Controla a posição do servo usando luz.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100
time VAR Word

PAUSE 1000

DO

HIGH 2
PAUSE 1 ' PAUSE 100 -> PAUSE 1
RCTIME 2, 1, time
DEBUG HOME, "time = ", DEC5 time

time = time MAX valMax MIN valMin

IF time > (valMax - valMin) / 2 THEN


DEBUG CR, "Abre cortina " ' Modifique
PULSOUT 14, 500 ' Adicione
ELSE
DEBUG CR, "Fecha cortina " ' Modifique
PULSOUT 14, 1000 ' Adicione
ENDIF

LOOP

P2. Funcionalidade de Histerese adicionada como crédito extra:

' O que é um Microcontrolador -


' Ch07Prj02_Blinds_Control_Extra.bs2
' Controla a posição do servo usando luz e incluindo histerese.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100
Página - 199

time VAR Word

PAUSE 1000

DO

HIGH 2
PAUSE 1 ' PAUSE 100 -> PAUSE 1
RCTIME 2, 1, time
DEBUG HOME, "time = ", DEC5 time

time = time MAX valMax MIN valMin

IF time > (valMax - valMin) / 4 * 3 THEN


DEBUG CR, "Abre cortina " ' Modifique
PULSOUT 14, 500 ' Adicione
ELSEIF time < (valMax - valMin ) / 4 THEN
DEBUG CR, "Fecha cortina" ' Modifique
PULSOUT 14, 1000 ' Adicione
ENDIF

LOOP
Página - 200

Capítulo 8: Frequência e Som


O SEU DIA E BIPS ELETRÔNICOS
Aqui estão alguns exemplos de bips que você pode ouvir durante um dia normal: O
forno de micro-ondas emite um bip sonoro quando sua comida está pronta. O telefone
celular tem diferentes tons de bips que se assemelham a músicas para chamar sua
atenção quando alguém te liga. O caixa eletrônico emite um bip para lembrá-lo de não
esquecer seu cartão. Os bips da caixa registradora da loja deixam o contador saber qual
código de barras de um item do supermercado foi lido pelo digitalizador. Muitas
calculadoras emitem bips quando as teclas são pressionadas de forma errada. Você pode
ter começado o dia com um bip de seu despertador.

MICROCONTROLADORES, ALTO-FALANTES E SINAIS ON/OFF


Praticamente todos os bips eletrônicos que você ouve durante a sua rotina diária são
feitos por microcontroladores conectados a alto-falantes. O microcontrolador cria esses
bips enviando sinais rápidos de alta/baixa para vários tipos de alto-falantes. A taxa
desses sinais de alta/baixa é chamada de frequência, e determina o tom ou a intensidade
do bip. Cada vez que um sinal de alta/baixa se repete, ele é chamado de um ciclo.
Muitas vezes você vai ver o número de ciclos por segundo referidos como hertz, e é
abreviado Hz. Por exemplo, uma das frequências mais comuns de bips que as máquinas
de ajuda usam para chamar sua atenção é de 2 kHz. Isso significa que os sinais de
alta/baixa se repetem 2 000 vezes por segundo.

APRESENTANDO O SPEAKER PIEZOELÉTRICO


Nesta atividade, você vai experimentar enviar uma variedade de sinais para um alto-
falante comum, pequeno e barato chamado piezoelétrico. Um alto-falante piezoelétrico
é comumente referido como um alto-falante ou uma campainha piezo. Seu símbolo
esquemático e desenho da peça são mostrados na Figura 8- 1.

Figura 8-1
Desenho da peça e símbolo
esquemático do alto-falante
piezoelétrico.

ATIVIDADE #1: CRIANDO E TESTANDO O ALTO-FALANTE


Nesta atividade, você vai construir e testar o circuito de alto-falante piezoelétrico.

Peças do Circuito do Alto-Falante


(1) Alto-falante piezoelétrico
(2) Fios
Página - 201

Construindo o Circuito do Alto-Falante Piezoelétrico


O terminal negativo do alto-falante piezoelétrico deve ser ligado a Vss e o terminal
positivo deve ser ligado a um pino de I/O. O BASIC Stamp, então, será programado
para enviar sinais de alta/baixa para o terminal positivo do falante piezoelétrico.

 Se o seu alto-falante piezo tiver um adesivo sobre ele, basta removê-lo (não há
necessidade de lavar).
 Construa o circuito mostrado na Figura 8-2.

Vdd Vin Vss


X3
P15
P14
P13
P12 Figura 8-1
P11
P9 P10 + Esquema e Diagrama
P9 de Fiação do Circuito
P8
P7 do Alto-Falante
P6 Piezoelétrico
P5
P4
Vss P3
P2
P1
P0
X2

Como Funciona o Circuito do Alto-Falante Piezoelétrico


Quando uma corda de violão vibra, ela provoca mudanças na pressão do ar. Essas
mudanças na pressão do ar são o que seu ouvido detecta como um tom. Quanto mais
rápidas as alterações na pressão do ar, mais alto é o tom, e quanto mais lentas, mais
baixo. O elemento dentro de caixa de plástico do alto-falante piezo é chamado um
elemento piezoelétrico. Quando sinais de alta / baixa são aplicados ao terminal positivo
do alto-falante, o elemento piezoelétrico vibra provocando mudanças na pressão do ar,
da mesma maneira que uma corda de violão faz. Tal como acontece com a corda da
guitarra, seu ouvido detecta as alterações na pressão do ar causadas pelo alto-falante
piezoelétrico, que normalmente soa como um bip ou um tom.

Programando o Controle do Alto-Falante.


O comando FREQOUT é uma maneira conveniente de enviar sinais de alta/baixa a um
alto-falante para obter um som. O manual do BASIC Stamp mostra uma sintaxe do
comando como esta:

FREQOUT Pin, Duration, Freq1 {, Freq2}

Tal como acontece com a maioria dos outros comandos usados neste livro, Pin é um
valor que você pode usar para escolher qual pino de I/O usar no BASIC Stamp. O
argumento Duration é um valor que diz ao comando FREQOUT quanto tempo o tom deve
soar em milésimos de segundos. O argumento Freq1 é usado para definir a frequência
do tom, em hertz. Existe um argumento opcional Freq2 que pode ser utilizado para
reproduzir dois tons diferentes ao mesmo tempo.

Esta é a sintaxe para o envio de um tom do pino de I/O P9 que dura 1,5 segundos e tem
uma frequência de 2 kHz:
Página - 202

FREQOUT 9, 1500, 2000

Programa de Exemplo: TestPiezoWithFreqout.bs2


Este programa de exemplo envia o tom de 2 kHz para o alto-falante no pino de I/O P9
por 1,5 segundos. Você pode usar o DEBUG Terminal para ver quando o alto-falante
deveria estar bipando e quando deveria parar.

 Coloque e execute TestPiezoWithFreqout.bs2.


 Verifique se o alto-falante emite um tom claramente audível durante o tempo em
que o DEBUG Terminal exibe a mensagem "Enviando o tom...” (“Tone
sending...”).

' O que é um Microcontrolador - TestPiezoWithFreqout.bs2


' Envie um tom ao piezospeaker utilizando o comando FREQOUT.

'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000

DEBUG "Enviando tom...", CR

FREQOUT 9, 1500, 2000

DEBUG "Tom enviado."

Sua Vez – Regular Frequência e Duração


 Salve TestPiezoWithFreqout.bs2 com um nome diferente.
 Tente alguns valores diferentes para os argumentos Duration e Freq1.
 Após cada alteração, execute o programa e tome nota do efeito.
 No momento em que o argumento Freq1 ficar maior, pode a intensidade do tom
ir para cima ou para baixo? Experimente valores de 1500, 2000, 2500 e 3000
para responder a esta pergunta.

ATIVIDADE #2: SONS DE AÇÃO


Muitos brinquedos contêm microcontroladores, que são usados para fazer “sons de
ação”. Sons de ação tendem a se envolver rapidamente mudando a frequência
desempenhada pelo alto-falante. Você também pode obter alguns efeitos interessantes
executando dois tons diferentes ao mesmo tempo, utilizando argumento opcional Freq2
do comando FREQOUT. Esta atividade apresenta ambas as técnicas.

Programando Sons de Ação


Os sons de ação de eletrodomésticos têm três componentes diferentes:

1. Pausa
2. Duração
3. Frequência

A pausa é o tempo entre os tons, e você pode usar o comando PAUSE para criá-la. A
duração é a quantidade de tempo que um tom dura e você pode configurá-la usando o
Página - 203

argumento Duration do comando FREQOUT. A frequência determina a intensidade do


tom. Quanto mais elevada for a frequência, mais elevado o tom, quanto menos elevada
for frequência, menos elevado é o tom. Isto é, naturalmente, determinado pelo
argumento Freq1 do comando FREQOUT.

Exemplo de Programa: ActionTones.bs2


ActionTones.bs2 demonstra algumas combinações diferentes de PAUSE, Duration e
Frequency. A primeira sequência de tons soa semelhante a um alarme eletrônico de
relógio. O segundo, pode-se dizer, soa algo semelhante a um robô em um filme de
ficção. O terceiro é mais o tipo de efeito sonoro que você pode ouvir em um velho jogo
de vídeo.

 Coloque e execute ActionTones.bs2.

' O que é um Microcontrolador - ActionTones.bs2


' Demonstra como diferentes combinações de pausa, duração e frequência
' podem ser utilizadas para criar diferntes efeitos sonoros.

'{$STAMP BS2}
'{$PBASIC 2.5}

duration VAR Word


frequency VAR Word

PAUSE 1000

DEBUG "Alarme...", CR
PAUSE 100
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500

DEBUG "Imitando um robô...", CR


PAUSE 100
FREQOUT 9, 100, 2800
FREQOUT 9, 200, 2400
FREQOUT 9, 140, 4200
FREQOUT 9, 30, 2000
PAUSE 500

DEBUG "Hiperespaço...", CR
PAUSE 100
FOR duration = 15 TO 1 STEP 1
FOR frequency = 2000 TO 2500 STEP 20
FREQOUT 9, duration, frequency
NEXT
NEXT

DEBUG "Pronto!", CR

END
Página - 204

Como Funciona ActionTones.bs2


A rotina de “alarme” soa como um despertador. Esta rotina toca sons em uma
frequência fixa de 1,5 kHz, com duração de 0,5 s com atrasos fixos entre os tons de 0,5
s. A rotina de “imitando um robô" usa várias frequências por breves períodos.
A rotina de “hiperespaço” não atrasa, mas a frequência e a duração podem variar.
Usando o loop FOR...NEXT para mudar rapidamente as variáveis de frequência e
duração, você pode obter alguns efeitos sonoros interessantes. Quando um loop
FOR...NEXT é executado dentro de outro, é chamado de um loop assentado. Aqui está
como o loop assentado FOR...NEXT mostrado abaixo funciona. A variável de duração
começa a 15, então o loop FOR frequency ... assume e envia frequências de 2.000, em
seguida 2.020, depois 2040, e assim por diante, até 2500 através do alto-falante piezo.
Quando o loop FOR frequency ... estiver concluído, o loop FOR duration... apenas repetiu
um de seus 15 passos. Por isso, subtrai 1 do valor de duração e repete o loop FOR
frequency...novamente.

FOR duration = 15 TO 1
FOR frequency = 2000 TO 2500 STEP 15
FREQOUT 9, duration, frequency
NEXT
NEXT

Programa de Exemplo: NestedLoops.bs2


Para entender melhor como os loops assentados FOR...NEXT trabalham, o
NestedLoops.bs2 usa o comando DEBUG para mostrar o valor de uma versão muito
menos complicada do loop assentado utilizado em ActionTones.bs2.

 Coloque e execute NestedLoops.bs2.


 Examine a saída do DEBUG Terminal e verifique como a duração e a frequência
das variáveis mudam a cada vez através do loop.

' O que é um Microcontrolador - NestedLoops.bs2


' Demonstra como o loop assentado em ActionTones.bs2 funciona.

'{$STAMP BS2}
'{$PBASIC 2.5}

duration VAR Word


frequency VAR Word

PAUSE 1000

DEBUG "Duration Frequency", CR,


"-------- ---------", CR

FOR duration = 4000 TO 1000 STEP 1000


FOR frequency = 1000 TO 3000 STEP 500
DEBUG " " , DEC5 duration,
" ", DEC5 frequency, CR
FREQOUT 9, duration, frequency
NEXT
DEBUG CR
NEXT

END
Página - 205

Sua Vez – Mais Efeitos Sonoros


Existe uma infinidade de maneiras de modificar ActionTones.bs2 para obter diferentes
combinações de som. Aqui está uma das modificações da rotina “Hiperespaço”:

DEBUG "Salto de hiperespaço...", CR


FOR duration = 15 TO 1 STEP 3
FOR frequency = 2000 TO 2500 STEP 15
FREQOUT 9, duration, frequency
NEXT
NEXT
FOR duration = 1 TO 36 STEP 3
FOR frequency = 2500 TO 2000 STEP 15
FREQOUT 9, duration, frequency
NEXT
NEXT

 Salve o seu programa de exemplo com o seguinte nome


ActionTonesYourTurn.bs2.
 Divirta-se com esta e outras modificações de sua própria criação.

Duas Frequências de Uma Só Vez


Você pode tocar duas frequências ao mesmo tempo. Lembre-se da sintaxe do comando
FREQOUT de Atividade #1:

FREQOUT Pin, Duration, Freq1 {, Freq2}


Você pode usar o argumento opcional Freq2 para tocar duas frequências com um único
comando FREQOUT. Por exemplo, você pode tocar 2 kHz e 3 kHz assim:

FREQOUT 9, 1000, 2000, 3000

Cada tom do teclado de discagem é também um exemplo de duas


frequências combinadas. Nas telecomunicações, é chamada de DTMF (Dual
Tone Multi Frequency). Há também um comando chamado PBASIC DTMFOUT
que é projetado apenas para o envio de sons de telefone. Para exemplos, procure
este comando no Manual do BASIC Stamp ou na Ajuda.

Exemplo de Programa: PairsOfTones.bs2


Este programa de exemplo demonstra a diferença no tom que você recebe quando você
toca 2 e 3 kHz juntos. Ele também demonstra um fenômeno interessante que ocorre
quando você adiciona duas ondas sonoras que estão muito próximas na frequência.
Quando você toca 2000 Hz e 2001 Hz, ao mesmo tempo, o tom vai aumentar e diminuir
uma vez por segundo (a uma frequência de 1 Hz). Se você tocar 2000 Hz a 2002 Hz, ele
vai aumentar e diminuir duas vezes por segundo (2 Hz), e assim por diante.
Página - 206

Ritmo é quando dois tons de frequência muito próximas são tocados juntos
fazendo com que o som que se ouve aumente e diminua. A frequência do
aumento e da diminuição é a diferença entre as duas frequências. Se a diferença é
de 1 Hz, o tom aumenta e diminui em um 1 Hz. Se a diferença for de 2 Hz, o tom
vai aumentar e diminuir em 2 Hz.

As variações da pressão de ar feitas pelo alto-falante piezoelétrico são


chamadas de ondas sonoras. Quando o tom é mais alto, as variações na pressão
do ar causadas pelas frequências são adicionadas umas as outras (chamada de
sobreposição). Quando o tom está bastante silencioso, as variações na pressão do
ar vão sendo canceladas mutuamente (chamada de interferência).

 Coloque e execute PairsOfTones.bs2.


 Mantenha um olho no DEBUG Terminal enquanto os tons vão sendo
reproduzidos e observe os diferentes efeitos provenientes da mixagem dos
diferentes tons.

' O que é um Microcontrolador - PairsOfTones.bs2


' Demonstra o que pode acontecer quando você mistyra dois tons.

'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000

DEBUG "Frequency = 2000", CR


FREQOUT 9, 4000, 2000

DEBUG "Frequency = 3000", CR


FREQOUT 9, 4000, 3000

DEBUG "Frequency = 2000 + 3000", CR


FREQOUT 9, 4000, 2000, 3000

DEBUG "Frequency = 2000 + 2001", CR


FREQOUT 9, 4000, 2000, 2001

DEBUG "Frequency = 2000 + 2002", CR


FREQOUT 9, 4000, 2000, 2002

DEBUG "Frequency = 2000 + 2003", CR


FREQOUT 9, 4000, 2000, 2003

DEBUG "Frequency = 2000 + 2005", CR


FREQOUT 9, 4000, 2000, 2005

DEBUG "Frequency = 2000 + 2010", CR


FREQOUT 9, 4000, 2000, 2010

DEBUG "Pronto!", CR
END

Sua Vez – Condensando o Código


PairsOfTones.bs2 foi escrito para demonstrar algumas coisas interessantes que podem
acontecer quando você toca duas frequências diferentes ao mesmo tempo usando o
Página - 207

argumento opcional Freq2 do comando FREQOUT. No entanto, isto é extremamente


ineficiente.

 Modifique PairsOfTones.bs2 para que ele percorra todos os argumentos Freq2


que vão de 2001 a 2005 usando uma variável de texto e um loop.

ATIVIDADE #3: NOTAS MUSICAIS E CANÇÕES SIMPLES


A Figura 8-3 mostra as 25 teclas da parte direita do teclado de um piano. Ela também
mostra as frequências em que cada corda dentro do piano vibra quando acionadas pela
tecla.

Figura 8-3: Parte direita de um piano, suas teclas e frequências.

As teclas e as suas notas correspondentes são rotuladas de C6 a C8. Estas teclas são
separadas em grupos de 12, compostos por sete teclas brancas e cinco teclas pretas. A
sequência de notas se repete a cada 12 teclas. As notas de uma mesma letra são
relacionadas pela frequência, dobrando a cada oitava acima. Por exemplo, C7 é o dobro
da frequência de C6, e C8 é o dobro da frequência de C7. Da mesma forma, se você for
uma oitava abaixo, a frequência será a metade do valor, por exemplo, A6 é a metade da
frequência de A7.
Se você já ouviu um cantor solfejar as notas "Dó Ré Mi Fá Sol Lá Si Dó", ele está
tentando combinar as notas recebidas ao “bater” as teclas brancas do teclado do piano.
Essas teclas brancas são chamadas de teclas naturais, e o nome "oitava" refere-se a
duplicação da frequência de cada oitava. A tecla preta em um piano pode ser chamada
de sustenido ou bemol. Por exemplo, a tecla preta entre as teclas C e D é chamada C-
Sustenido (C#) ou D-Bemol (Db). Uma tecla é chamada de sustenido ou bemol
conforme a música que está sendo executada, mas as regras para isso é melhor deixar
para as aulas de música.
Página - 208

Pesquisa na Internet sobre "escala musical": Ao usar as palavras "escala


musical", você vai encontrar informações fascinantes sobre história, física e
psicologia do assunto. A 12 nota em uma oitava é a principal escala da música
ocidental. Outras culturas utilizam escalas que contêm 2 a 35 notas por oitava.
Método de Afinação: O teclado na Figura 8-3 utiliza um método de afinação
chamado temperamento igual. As frequências são determinadas usando uma nota
de referência, em seguida, multiplicando-a por 2 (n/12) para valores de n = 1, 2, 3
etc. Por exemplo, você pode ter a frequência de A6, e multiplicar por 2 (1/12)
para obter a frequência de A6 #. Multiplique por 2 (2/12) para obter a frequência
de B6, e assim por diante. Aqui está um exemplo de cálculo da frequência de B6
usando A6 como uma frequência de referência:
A frequência de A6 é 1760
2(2/12) = 1.1224
1760 X 1.224 = 1975.5
1975.5 é a frequência de B6

Programando as Notas Musicais


O comando FREQOUT também é útil para notas musicais. A programação do BASIC
Stamp para reproduzir músicas usando um piezospeaker envolve seguir uma série de
regras usadas na reprodução de músicas usando qualquer outro instrumento musical.
Estas regras se aplicam aos mesmos elementos que foram usados para fazer os efeitos
sonoros: frequência, duração e pausa. Este próximo programa de exemplo reproduz
algumas das frequências de notas musicais no piezospeaker, cada uma com uma
duração de meio segundo.

Exemplo de Programa: DoReMiFaSolLaTiDo.bs2


 Coloque e execute DoReMiFaSolLaTiDo.bs2

' O que é um Microcontrolador - DoReMiFaSolLaTiDo.bs2


' Envia uma oitava de meio segundo usando um alto-falante
' piezoelétrico.

'{$STAMP BS2}
'{$PBASIC 2.5}
PAUSE 1000

'Solfege Tone Note

DEBUG "Do...", CR: FREQOUT 9,500,1047 ' C6

DEBUG "Re...", CR: FREQOUT 9,500,1175 ' D6

DEBUG "Mi...", CR: FREQOUT 9,500,1319 ' E6

DEBUG "Fa...", CR: FREQOUT 9,500,1396 ' F6

DEBUG "Sol..", CR: FREQOUT 9,500,1568 ' G6

DEBUG "La...", CR: FREQOUT 9,500,1760 ' A6

DEBUG "Ti...", CR: FREQOUT 9,500,1976 ' B6

DEBUG "Do...", CR: FREQOUT 9,500,2093 ' C7


Página - 209

END

Sua Vez – Notas Sustenido/Bemol


 Use as frequências mostradas na Figura 8-3 para adicionar cinco notas
sustenidas/bemois para DoReMiFaSolLaTiDo.bs2
 Modifique o programa para que ele reproduza a próxima oitava acima. Dica:
Salve você mesmo a digitação e use apenas o operador * 2 após cada
argumento Freq1. Por exemplo, FREQOUT 9, 500, 1175 * 2 vai multiplicar
D6 por 2 para lhe dar D7, que é a nota D na sétima oitava.
 Armazenando e recuperarando seqüências de notas musicais.

Uma boa maneira de salvar as notas musicais é armazená-las usando EEPROM do


módulo BASIC Stamp. Embora você possa usar muitos comandos WRITE para fazer
isso, a melhor maneira é usar a diretiva DATA. Esta é a sintaxe para a diretiva DATA:

{Symbol} DATA {Word} DataItem {, {Word} DataItem, … }

Aqui está um exemplo de como utilizar a diretiva DATA para armazenar os caracteres
que correspondam às notas musicais.

Notes DATA "C","C","G","G","A","A","G"

Você pode usar o comando READ para acessar esses caracteres. A letra "C" está
localizada no endereço Notes + 0, e uma segunda letra "C" está localizada em Notes
+ 1. Em seguida uma letra "G" em Notes + 2, e assim por diante. Por exemplo, se
você deseja carregar a última letra "G" em uma variável byte chamada noteLetter, use o
comando:

READ Notes + 6, noteLetter

Você também pode armazenar listas de números usando a diretiva DATA. Os valores de
frequência e duração, que o BASIC Stamp usa para as notas musicais, precisam ser
armazenados em variáveis de texto, porque eles são geralmente maiores do que 255.
Aqui está como fazer isso com uma diretiva DATA:

Frequencies DATA Word 2093, Word 2093, Word 3136, Word 3136,
Word 3520, Word 3520, Word 3136

Uma vez que cada um desses valores ocupa dois bytes, acessá-los com o comando
READ é diferente de acessar caracteres. O primeiro 2093 está em Frequencies + 0,
mas o segundo 2093 está localizado em Frequencies + 2. O primeiro 3136 está
localizado em Frequencies + 4, e o segundo 3136 está localizado em
Frequencies + 6.

Os valores em Frequencies da diretiva DATA correspondem com as notas


musicais em Notes da diretiva DATA.

Aqui está um loop FOR ... NEXT, que coloca notes DATA em uma variável chamada
noteLetter, e coloca Frequencies DATA em uma variável chamada noteFreq.
Página - 210

FOR index = 0 to 6

READ Notes + index, noteLetter


READ Frequencies + (index * 2), Word noteFreq
DEBUG noteLetter, " ", DEC noteFreq, CR

NEXT

O que o (índex * 2) faz?


Cada valor armazenado em Frequencies da diretiva DATA leva uma palavra (dois
bytes), enquanto cada caractere em Notes da diretiva DATA leva apenas um byte.
O valor do índice aumenta em um cada vez através do loop FOR...NEXT. Isso
é bom para acessar os caracteres de notas usando o comando READ Notes +
index, noteLetter. O problema é que, para cada byte em Notes, a
variável index precisa apontar duas vezes mais para baixo na lista
Frequencies. O comando READ Frequencies + (index *
2), Word noteFreq, cuida disso.

O próximo programa de exemplo armazena notas e durações usando DATA, e usa o


comando FREQOUT para reproduzir cada frequência da nota por uma duração específica.
O resultado é as primeiras notas da canção infantil “Brilha, Brilha Estrelinha” ("Twinkle
Twinkle Little Star").

A "Canção do alfabeto", usada por crianças para memorizar os "ABCs" usa as


mesmas notas de “Brilha, Brilha Estrelinha” ("Twinkle Twinkle Little Star").

Programa de Exemplo: TwinkleTwinkle.bs2


Este programa de exemplo demonstra como usar a diretiva DATA para armazenar as
listas e como usar o comando READ para acessar os valores nas listas.

 Coloque e execute TwinkleTwinkle.bs2


 Verifique se as notas soam como as da música “Brilha, Brilha Estrelinha”
(“Twinkle Twinkle Little Star”).
 Use o DEBUG Terminal para verificar se funcionou como esperado.

' O que é um Microcontrolador - TwinkleTwinkle.bs2


' Toque as sete primeiras notas de “Brilha, Brilha Estrelinha”.

'{$STAMP BS2}
'{$PBASIC 2.5}

Notes DATA "C","C","G","G","A","A","G"

Frequencies DATA Word 2093, Word 2093, Word 3136, Word 3136,
Word 3520, Word 3520, Word 3136

Durations DATA Word 500, Word 500, Word 500, Word 500,
Word 500, Word 500, Word 1000

index VAR Nib


noteLetter VAR Byte
Página - 211

noteFreq VAR Word


noteDuration VAR Word

PAUSE 1000

DEBUG "Nota Duração Frequência", CR,


"---- ------- ----------", CR

FOR index = 0 TO 6

READ Notes + index, noteLetter


DEBUG " ", noteLetter

READ Durations + (index * 2), Word noteDuration


DEBUG " ", DEC4 noteDuration

READ Frequencies + (index * 2), Word noteFreq


DEBUG " ", DEC4 noteFreq, CR

FREQOUT 9, noteDuration, noteFreq

NEXT

END

Sua Vez – Adicionando e Reproduzindo Mais Notas


Este programa reproduziu as sete primeiras notas de Brilha, Brilha Estrelinha. As
palavras são "Bri-lha bri-lha es-tre-linha." A próxima frase da canção "Como eu quero
saber o que você é" e suas notas são F, F, E, E, D, D, C . Tal como com a primeira frase,
a última nota é reproduzida duas vezes, tão longas quanto às outras. Para adicionar esta
frase para a música do TwinkleTwinkle.bs2, você vai precisar expandir cada diretiva
DATA adequadamente. Não se esqueça de mudar o loop FOR...NEXT para que ele vá
de 0-13 em vez de 0-6.

 Modifique TwinkleTwinkle.bs2 para que ele reproduza as duas primeiras frases


da canção, e não somente a primeira.

ATIVIDADE #4: MÚSICA COM MICROCONTROLADOR


As durações das notas não são registradas na partitura em termos de milésimos de
segundos. Em vez disso, são descritas como uma semibreve, mínima, semínima,
colcheia, semicolcheia e trigésima segunda nota. Tal como o nome sugere uma nota
dura metade do tempo de uma semibreve. A semínima dura um quarto do tempo de uma
nota inteira, e assim por diante. Quanto tempo é uma semibreve? Depende da peça de
música que está sendo executada. Uma peça pode ser tocada a um ritmo que faz com
que uma semibreve dure por quatro segundos, outra peça pode ter uma semibreve por
dois segundos, e ainda outra pode ter uma duração diferente.

Pausa é o tempo entre as notas quando nenhum som é reproduzido. Períodos de pausa
também são medidos com semibreve, mínima, semínima, colcheia, semicolcheia e
trigésima segunda.
Página - 212

Mais sobre música com microcontrolador: Após completar esta atividade,


você estará pronto para aprender a escrever um código musical em PBASIC a
partir da partitura. Consulte o tutorial reproduzindo a partitura com o
Piezospeaker ( Playing Sheet Music with the Piezospeaker) e o manual em vídeo
que acompanha em www.parallax.com/go/WAM.

Um Sistema Melhor para Armazenar e Recuperar Músicas


Você pode escrever programas que armazenam duas vezes mais músicas em seu BASIC
Stamp usando bytes em vez de palavras em suas diretivas DATA. Você também pode
modificar o seu programa para tornar mais fácil a leitura das notas musicais usando
algumas das convenções musicais mais comuns para as notas e durações. Esta atividade
começará com a introdução de como armazenar informações musicais de uma forma
que se relaciona com os conceitos de notas, durações e pausas. O ritmo também é
introduzido, e ele vai ser revisto na próxima atividade.

Aqui está uma das diretivas DATA que armazena as notas musicais e as durações para o
próximo programa de exemplo. Quando tocada, ela deve parecer com a canção "Frère
Jacques". Somente os caracteres de notas são armazenados na diretiva Notes DATA
porque os comandos LOOKUP e LOOKDOWN serão usados para combinar as letras para as
suas correspondentes frequências.

Notes DATA
"C","D","E","C","C","D","E","C","E","F",
"G","E","F","G","Q"

Durations DATA 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
2, 4, 4, 2

WholeNote CON 2000

O primeiro número da diretiva Durations DATA diz ao programa por quanto tempo a
primeira nota na diretiva notes DATA deve durar. A segunda é para a duração da
segunda nota, e assim por diante. As durações não estão mais em termos de milésimos
de segundos. Em vez disso, eles são números muito menores que podem ser
armazenados em bytes, por isso não há prefixo Word na diretiva DATA. Comparando
com o armazenamento dos valores em termos de milésimos de segundos, esses
números estão mais próximos dos relacionados com as partituras.

Aqui está uma lista do que cada duração significa.


• 1 – semibreve
• 2 – mínima
• 4 – semínima
• 8 – colcheia
• 16 – semicolcheia
• 32 – trigésima segunda nota

Depois que cada valor for lido a partir de diretiva Durations DATA ele é dividido
pelo valor da semibreve para obter a diretiva Durations utilizada no comando
FREQOUT. A quantidade de tempo de cada nota dura depende do ritmo da música. Um
ritmo mais rápido significa que cada nota dura menos tempo, enquanto um ritmo mais
Página - 213

lento significa que cada nota dura mais tempo. Uma vez que todas as durações de nota
são frações de uma semibreve, você pode usar a duração de uma nota inteira para definir
o ritmo.

O que significa o "Q" em Notes DATA? O "Q" é para sair, e DO


UNTIL...LOOP verifica a existência de um "Q" de cada vez através do loop e
se repetirá até que ele seja encontrado.
Como faço para executar uma pausa? Você pode inserir uma pausa entre as
notas através da inserção de um "P". Na seção Sua Vez você tem as primeiras
notas da 5ª Sinfonia de Beethoven, com uma pausa.
Como faço para executar sustenidos/bemóis? NotesAndDurations.bs2 tem
valores nas suas tabelas de referência para sustenidos/bemóis. Para tocar um
bemol você usará a nota minúscula. Por exemplo, se você quiser tocar B-bemol,
use "b" em vez de "B". Lembre-se que esta é a mesma frequência para A-
sustenido.

Exemplo de Programa: NotesAndDurations.bs2


 Coloque e execute NotesAndDurations.bs2.
 Como é o som?

' O que é um Microcontrolador - NotesAndDurations.bs2


' Toque as primeiras notas de Frere Jacques.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Programa funcionando!"

Notes DATA "C","D","E","C","C","D","E","C","E","F",


"G","E","F","G","Q"

Durations DATA 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
2, 4, 4, 2

WholeNote CON 2000

index VAR Byte


offset VAR Nib

noteLetter VAR Byte


noteFreq VAR Word
noteDuration VAR Word

DO UNTIL noteLetter = "Q"

READ Notes + index, noteLetter

LOOKDOWN noteLetter, [ "A", "b", "B", "C", "d",


"D", "e", "E", "F", "g",
"G", "a", "P", "Q" ], offset

LOOKUP offset, [ 1760, 1865, 1976, 2093, 2217,


2349, 2489, 2637, 2794, 2960,
3136, 3322, 0, 0 ], noteFreq

READ Durations + index, noteDuration


Página - 214

noteDuration = WholeNote / noteDuration

FREQOUT 9, noteDuration, noteFreq

index = index + 1

LOOP

END

Como Funciona NotesAndDurations.bs2


Notes e as diretivas Durations DATA foram discutidas anteriomente no programa.
Estas diretivas combinadas com a constante WholeNote são usadas para armazenar
todos os dados musicais utilizados pelo programa.

As declarações para as cinco variáveis usadas no programa são mostradas abaixo.


Mesmo que um loop FOR...NEXT não seja mais usado para acessar os dados, ainda
deve haver uma variável (index) para manter o controle de qual DATA de entrada está
sendo lida em Notes e Durations. A variável de deslocamento é usada nos comandos
LOOKDOWN e LOOKUP para selecionar um determinado valor. A variável noteLetter
armazena um caractere acessado pelo comando READ. Os comandos LOOKUP e
LOOKDOWN são usados para converter este caractere em um valor de frequência. Este
valor é armazenado na variável noteFreq e é usado como o argumento Freq1 do
comando FREQOUT. A variável noteDuration é usada em um comando READ para
receber um valor a partir de Durations DATA. É também utilizada para calcular o
argumento Duration para o comando FREQOUT.

index VAR Byte


offset VAR Nib

noteLetter VAR Byte


noteFreq VAR Word
noteDuration VAR Word

O loop principal continua a execução até que a letra "Q" seja lida a partir das Notes
DATA.

DO UNTIL noteLetter = "Q"

Um comando READ recebe um caractere a partir de Notes DATA e o armazena na


variável noteLetter. A variável noteLetter é então utilizada em um comando
LOOKDOWN para definir o valor da variável de deslocamento. Lembre-se que o offset
armazena 1 se "b" for detectado, um 2 se "B" for detectado, um 3 se "C" for detectado, e
assim por diante. Este valor de deslocamento é então utilizado em um comando LOOKUP
para descobrir qual deveria ser o valor da variável noteFreq. Se o deslocamento é 1,
noteFreq será 1865, se o deslocamento é 2, noteFreq será 1976, se 3, noteFreq
será 2093, e assim por diante.

READ Notes + index, noteLetter

LOOKDOWN noteLetter, [ "A", "b", "B", "C", "d",


Página - 215

"D", "e", "E", "F", "g",


"G", "a", "P", "Q" ], offset

LOOKUP offset, [ 1760, 1865, 1976, 2093, 2217,


2349, 2489, 2637, 2794, 2960,
3136, 3322, 0, 0 ], noteFreq

A frequência da nota foi determinada, mas a duração ainda tem que ser. O comando
READ usa o valor do índice para colocar um valor a partir de Durations DATA em
noteDuration.

READ Durations + index, noteDuration

Então, noteDuration é definido igual a constante WholeNote dividida por


noteDuration. Se noteDuration começar como 4 a partir de um comando READ,
será 2000 ÷ 4 = 500. Se noteDuration para 8, será 2000 ÷ 8 = 250.

noteDuration = WholeNote / noteDuration

Agora que noteDuration e noteFreq já estão determinados, o comando FREQOUT


reproduz a nota.

FREQOUT 9, noteDuration, noteFreq

Cada vez através do loop principal, o valor index será aumentado em um. Quando o
loop principal retornar ao início, a primeira coisa que o programa fará é ler a nota
seguinte, usando a variável index.

index = index + 1
LOOP

Sua Vez – Experiências com Ritmo e uma Música Diferente


A duração de cada nota está relacionada ao ritmo. Você pode alterar o ritmo, ajustando
a constante WholeNote. Se você aumentar para 2250, o ritmo vai diminuir, e a música
será mais lenta. Se você diminuir a 1750, o ritmo vai aumentar e a música será mais
rápida.

 Salve NotesAndDurations.bs2 sob o nome NotesAndDurationsYourTurn.bs2.


 Modifique o ritmo de NotesAndDurationsYourTurn.bs2 ajustando o valor de
WholeNote. Experimente valores de 1500, 1750, 2000 e 2250.
 Execute novamente o programa depois de cada modificação, e decida qual deles
soa melhor.

A inserção de dados musicais é muito mais fácil quando tudo que você tem a fazer é
gravar notas e durações. Aqui estão as primeiras oito notas da Quinta Sinfonia de
Beethoven.

Notes DATA "G","G","G","e","P","F","F","F","D","Q"

Durations DATA 8, 8, 8, 2, 8, 8, 8, 8, 2

WholeNote CON 2000


Página - 216

 Salve o programa modificado como Beethoven'sFifth.bs2.


 Substitua Notes as diretivas Durations DATA e a declaração constante
WholeNote pelo código acima.
 Execute o programa. Soa familiar?

Adicionando Recursos Musicais


O programa de exemplo que você finalizou introduziu notas, durações e pausas. Foi
também usada a duração de semibreves para determinar o ritmo. Aqui estão mais três
recursos que podem ser adicionados a um programa de reprodução de música.

• Toque notas "pontilhadas"


• Determine a duração de uma semibreve a partir do ritmo.
• Toque as notas uma oitava acima.

O termo pontilhado refere-se a um ponto usado em partituras para indicar que o tempo
de duração de uma nota deverá ser uma vez e meia maior que sua duração normal. Por
exemplo, uma semínima pontilhada deve durar uma semínima e uma colcheia. A
mínima pontilhada dura uma mínima mais a duração de uma semínima. Você pode
adicionar uma tabela de dados que armazena notas pontilhadas ou não. Neste exemplo,
um zero significa que não há um ponto enquanto um significa que existe um ponto.

Dots DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

Os programas de reprodução de música expressam o ritmo de uma canção em


batimentos por minuto. Isto é o mesmo que dizer semínimas por minuto.

BeatsPerMin CON 200

A Figura 8-4 é uma repetição da Figura 8-3 da página 207. Ela mostra as sextas e
sétimas oitavas no teclado de piano. Estas são as duas oitavas em que o som fica mais
claro quando desempenhado pelo piezospeaker. Aqui está um exemplo de uma diretiva
DATA que você vai usar na sua seção Sua Vez para tocar as notas uma oitava acima
usando a diretiva Notes DATA.

Octaves DATA 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6,
6, 6, 6
Página - 217

Figura 8-4: Teclas de piano à direita e suas frequências

Exemplo de Programa: MusicWithMoreFeatures.bs2


Este programa exemplo reproduz as primeiras notas de "Ele é um bom companheiro".
Todas as notas vêm da mesma (sétima) oitava, mas algumas das notas são pontilhadas.
Na seção Sua Vez, você vai tentar um exemplo que usa notas de mais de uma oitava, e
notas pontilhadas.

 Coloque e execute MusicWithMoreFeatures.bs2.


 Conte as notas e veja se você pode ouvir as notas pontilhadas de 1 ½ de duração.
 Escute também as notas em sétima oitava. Tente alterar uma dessas notas para
sexta oitava. A mudança na forma como a música soa é muito drástica.

' O que é um Microcontrolador - MusicWithMoreFeatures.bs2


' Toca o início de “Ele é um bom companheiro”.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Programa funcionando!"

Notes DATA "C","E","E","E","D","E","F","E","E","D","D",


"D","C","D","E","C","Q"
Octaves DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7
Durations DATA 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4,
4, 4, 4, 2, 2
Dots DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

BeatsPerMin CON 320

index VAR Byte


offset VAR Nib
Página - 218

noteLetter VAR Byte


noteFreq VAR Word
noteDuration VAR Word
noteOctave VAR Nib
noteDot VAR Bit

wholeNote VAR Word


wholeNote = 60000 / BeatsPerMin * 4

DO UNTIL noteLetter = "Q"

READ Notes + index, noteLetter

LOOKDOWN noteLetter, [ "C", "d", "D", "e", "E",


"F", "g", "G", "a", "A",
"b", "B", "P", "Q" ], offset

LOOKUP offset, [ 4186, 4435, 4699, 4978, 5274,


5588, 5920, 6272, 6645, 7040,
7459, 7902, 0, 0 ], noteFreq

READ Octaves + index, noteOctave


noteOctave = 8 - noteOctave
noteFreq = noteFreq / (DCD noteOctave)

READ Durations + index, noteDuration


noteDuration = WholeNote / noteDuration

READ Dots + index, noteDot


IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2

FREQOUT 9, noteDuration, noteFreq

index = index + 1

LOOP

END

Como Funciona MusicWithMoreFeatures.bs2


Abaixo estão os dados musicais para a canção inteira. Para cada nota na diretiva Notes
DATA, há uma entrada correspondente nas diretivas Octaves, Notes, Durations e
Dots DATA. Por exemplo, a primeira nota é uma nota C na sétima oitava, é uma
semínima e não é pontilhada. Aqui está outro exemplo: a segunda a partir da última nota
(não incluindo o "Q") é uma nota E, na sétima oitava. É uma mínima, e é pontilhada. Há
também uma constante BeatsPerMin que define o ritmo para a música.

Notes DATA
"C","E","E","E","D","E","F","E","E","D","D",
"D","C","D","E","C","Q"
Octaves DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7
Durations DATA 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4,
4, 4, 4, 2, 2
Dots DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

BeatsPerMin CON 320


Página - 219

No programa do exemplo anterior, a semíbreve foi uma constante. Desta vez, é uma
variável que vai manter a duração da semínima em ms. Depois que este valor for
calculado, a semibreve será usada para determinar todas as outras durações das notas,
assim como no programa anterior. As variáveis index, offset, noteLetter e
noteDuration também são usadas da mesma maneira que estavam no programa
anterior. A variável noteFreq é tratada um pouco diferente já que agora ela tem de ser
ajustada dependendo da oitava nota que está sendo executada. As variáveis
noteOctave e noteDot foram adicionadas para lidar com as características de uma
oitava e ponto.

wholeNote VAR Word

index VAR Byte


offset VAR Nib

noteLetter VAR Byte


noteFreq VAR Word
noteDuration VAR Word
noteOctave VAR Nib
noteDot VAR Bit

A variável wholeNote é calculada usando BeatsPerMin. O ritmo da música é


definido em batimentos por minuto, e o programa tem que dividir BeatsPerMin em
60000 ms, em seguida, multiplicar por 4. O resultado é o valor correto para uma
semibreve.

wholeNote = 60000 / BeatsPerMin * 4

O cálculo é feito da esquerda para a direita. No cálculo wholeNote =


60000 / beatsPerMin * 4, o BASIC Stamp primeiro calcula 60000
/ beatsPerMin. Em seguida, ele multiplica esse resultado por 4.

Para um grupo de operações podem ser usados parênteses. Se você quiser


dividir quatro em beatsPerMin, primeiro você tem que fazer isso:
wholeNote = 60000 / (beatsPerMin * 4)

É o mesmo que o do programa anterior:

DO UNTIL noteLetter = "Q"

READ Notes + index, noteLetter

LOOKDOWN noteLetter, [ "C", "d", "D", "e", "E",


"F", "g", "G", "a", "A",
"b", "B", "P", "Q" ], offset

Agora que as oitavas estão misturadas a parte do código que estabelece a frequência da
nota mudou. A tabela de valores do comando LOOKUP contém as frequências das notas a
partir das oitavas da oitava. Estes valores podem ser divididos por um, se você quiser
Página - 220

tocar notas oitavas na oitava, com 2 se você quiser tocar notas na sétima oitava, com 4
se você quiser tocar notas na sexta oitava e com 8 se você quiser tocar as notas na quinta
oitava. A divisão acontece em seguida. Tudo o que esse comando LOOKUP faz é colocar
uma nota a partir da oitava na oitava na variável noteFreq.

LOOKUP offset, [ 4186, 4435, 4699, 4978, 5274,


5588, 5920, 6272, 6645, 7040,
7459, 7902, 0, 0 ], noteFreq

Aqui está como a variável noteFreq é ajustada para a oitava correta. Primeiro, o
comando READ pega o valor da oitava armazenada nas Octaves DATA. Este poderia
ser um valor entre 5 e 8.

READ Octaves + index, noteOctave

Dependendo da oitava, queremos dividir noteFreq por 1, 2, 4 ou 8. Isso significa que


o objetivo é realmente dividir por 20 = 1, 21 = 2, 22 = 4, ou 23 = 8. A declaração abaixo
pega o valor de noteOctave, que pode ser um valor entre 5 e 8, e subtrai esse valor a
partir de 8. Se noteOctave era 8 agora é 0. Se noteOctave era 7 agora é 1. Se
noteOctave era 6 agora é 2, e se noteOctave era 5 agora é 3.

noteOctave = 8 – noteOctave

Agora, noteOctave é um valor que pode ser usado como um expoente de 2, mas como
se elevar 2 a uma potência em PBASIC? Uma resposta é a utilização do operador. DCD
0 é 1, DCD 1 é 2, DCD 2 é 4 e DCD 3 é 8. Dividir noteFreq por DCD noteOctave
significa que você está dividindo por 1, 2, 4 ou 8, que divide noteFreq abaixo do valor
correto. O resultado final é que noteFreq está definido para a oitava correta. Você
usará o DEBUG Terminal na seção Sua Vez para dar uma olhada em como isso
funciona.

noteFreq = noteFreq / (DCD noteOctave)

Como vou saber usar o operador DCD? Continue aprendendo e praticando.


Toda vez que você ver um novo comando, operador ou qualquer outra palavra-
chave usada em um exemplo, procure-o no manual do BASIC Stamp. Leia mais
sobre isso, e tente usá-lo em um programa do seu próprio projeto.
Adquira o hábito de ler periodicamente o manual do BASIC Stamp e tente os
programas de exemplo curtos. Essa é a melhor maneira de se familiarizar com os
vários comandos e operadores e como eles funcionam. Ao fazer essas coisas,
você vai desenvolver o hábito de sempre adicionar à lista de programação
ferramentas que você pode usar para resolver os problemas.

As duas primeiras linhas de código para determinar a duração da nota usa o mesmo
código do programa de exemplo anterior. Agora, no entanto, toda a nota pode ser
pontilhada, o que significa que a duração pode ter que ser multiplicada por 1,5. Um
comando READ é utilizado para acessar valores armazenados na EEPROM pela diretiva
Dots DATA. Uma IF...THEN é usada para multiplicar por 3 e dividir por dois sempre
que o valor da variável noteDot for 1.

READ Durations + index, noteDuration


Página - 221

noteDuration = WholeNote / noteDuration

READ Dots + index, noteDot


IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2

Cálculo com números inteiros. O BASIC Stamp não processa automaticamente


um número como 1,5. Ao realizar o cálculo, ele só funciona com inteiros: ..., -5, -
4, -3, -2, -1, 0, 1, 2, 3, ... A melhor solução para multiplicar por 1,5 é multiplicar
por 3/2 . Primeiro, multiplique por três e, em seguida, divida por 2.
Há muitas maneiras de programar o BASIC Stamp para lidar com valores
fracionários. Você pode programar o BASIC Stamp para usar números inteiros
para descobrir a parte fracionária de um número. Isto é introduzido no Guia
Básico Analógico e Digital do Etudante (Basic Analog and Digital Student
Guide). Há também dois operadores que fazem valores fracionários ficarem mais
fáceis de se usar, eles são: ** e */. Isto é explicado detalhadamente em
Sensores Aplicados do Guia do Estudante (Applied Sensors Student Guide) no
manual do BASIC Stamp.

O restante deste exemplo de programa funciona da mesma maneira que no programa de


exemplo anterior:

FREQOUT 9, noteDuration, noteFreq


index = index + 1
LOOP
END

Sua Vez – Execução de uma Canção com Mais de uma Oitava


O MusicWithMoreFeatures.bs2 fez uso de pausas, mas pemaneceu em uma oitava. A
música “Leve-me ao jogo de bola” (“Take Me Out to the Ball Game”) abaixo tem a
maioria de suas notas na sexta oitava. Há duas notas na sétima oitava, e elas fazem uma
grande diferença na maneira como soam.

 Salve uma cópia do programa como MusicWithMoreFeaturesYourTurn.bs2.


 Modifique o programa, substituindo as quatro diretivas de dados e uma
declaração constante com estas:

Notes DATA
"C","C","A","G","E","G","D","P","C","C","A",
"G","E","G","Q"
Octaves DATA 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6,
6, 6, 6
Durations DATA 2, 4, 4, 4, 4, 2, 2, 4, 2, 4, 4,
4, 4, 2
Dots DATA 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0,
0, 0, 1

BeatsPerMin CON 240

 Execute o programa e verifique se ele soa bem.


Página - 222

Essas duas notas na sétima oitava são essenciais para fazer uma boa melodia. É
interessante ouvir o que acontece se os 7 valores são alterados para 6.

 Tente alterar os dois valores em 7 na diretiva Octaves DATA para que fiquem
6. Lembre-se que isso fará com um som estranho seja emitido em “Leve-me
para o jogo de bola” ( “Take Me out to the Ball Game”).
 Execute o programa e ouça os efeitos errados das oitavas na música.
 Altere os dados das oitavas de volta para seu estado original.
 Execute o programa novamente e ouça para ver se soa correto.

ATIVIDADE #5: TOQUES COM RTTTL


Telefones celulares mais antigos usavam toques com um piezospeaker. Os toques eram
baixados da web em um computador, e em seguida, carregados a partir do computador
para o microcontrolador do telefone celular. Na época, uma das formas mais utilizadas
para compor, gravar e postar toques foi a que apresentou trechos de texto com
caracteres que descreviam cada nota da canção. Aqui está um exemplo de como as
primeiras notas da 5ª de Beethoven aparece em um desses textos:

Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d

Este formato de armazenamento de dados musicais é chamado RTTTL, que significa


“Linguagem de Tom de Toque para Transferência de Texto” (Ringing Tone Text
Transfer Language). A grande coisa sobre os ficheiros RTTTL é que na época eles
foram amplamente compartilhados através da Web. Muitos sites tinham arquivos
RTTTL disponíveis para download gratuito. Havia também programas gratuitos que
podiam ser usados para compor e emular esses arquivos, bem como enviá-los para seu
telefone celular. A especificação RTTTL ainda é publicada online. O Apêndice C
resume como um arquivo RTTTL armazena notas, durações, pausas, ritmo, e notas
pontilhadas.

Esta atividade introduz algumas técnicas de programação PBASIC que podem ser
utilizadas para reconhecer diferentes elementos de texto. A capacidade de reconhecer
diferentes caracteres ou grupos de caracteres e agir com base no que os caracteres
contêm são extremamente úteis. Na verdade, é a chave para a conversão de um toque
em formato RTTTL (como a 5ª de Beethoven acima) em música. Ao final desta
atividade, há um programa de aplicação que você pode usar para reproduzir toque em
formato RTTTL.

Defina o Bloco de Código a Ser Executado Caso a Caso.


A instrução SELECT...CASE é provavelmente a melhor ferramenta de programação
para reconhecer caracteres ou valores. Tenha em mente que esta é uma das ferramentas
mais usadas para converter um toque em formato RTTTL em notas musicais.

Em geral, SELECT...CASE é usado para:

• Selecionar uma variável ou expressão.


• Avaliar a variável ou expressão caso a caso.
Página - 223

• Executar diferentes blocos de código, dependendo do caso, e do o valor em que


a variável se encaixa.

Aqui está a sintaxe SELECT...CASE: SELECT expression


CASE condition(s)
statement(s)
{ CASE ELSE
Statement(s) }
ENDSELECT

Você pode tentar os próximos dois exemplos de programas para ver como
SELECT...CASE funciona. SelectCaseWithValues.bs2 leva valores numéricos
inseridos no DEBUG Terminal e diz-lhe o tamanho mínimo da variável que você vai
precisar para realizar esse valor. SelectCaseWithCharacters.bs2 informa se o caractere
que você entrou no DEBUG Terminal é maiúsculo ou minúsculo, um dígito, ou
pontuação.

Lembre-se de usar a janela de transmissão no DEBUG Terminal para enviar os


caracteres digitados para o BASIC Stamp. As janelas de transmissão e recepção são
mostradas na Figura 8-5.
Figura 8-5
Envio de
Janela de mensagens para
Transmissão o BASIC Stamp
Transmite → Clique na janela
de transmissão
(superior) e digite
o valor ou os
Recebe → caracteres que
você quer
transmitir para o
BASIC Stamp.

Exemplo de Programa: SelectCaseWithValues.bs2


 Coloque e execute SelectCaseWithValues.bs2.
 No DEBUG Terminal, certifique-se de que a caixa Echo off não esteja marcada.
 Clique na janela de transmissão do DEBUG Terminal.
 Insira um valor entre 0 e 65535, e pressione a tecla Enter.

O que acontece se você digitar um número maior do que 65535? Se você digitar o
número 65536, o BASIC Stamp irá armazenar o número 0. Se você digitar o número
65537, o BASIC Stamp irá armazenar o número 1 e assim por diante. Quando um
número é muito grande para a variável que se encaixa, ele é chamado de overflow.

Use a Tabela 8- 1 para verificar se o programa de exemplo tomou as decisões corretas


sobre o tamanho dos números que você entrou no DEBUG Terminal.

Tabela 8-1: Tipos de variáveis e valores que podem ser


armazenados
Tipo de variável Faixa de valores
Bit 0 para 1
Página - 224

Nib 0 para 15
Byte 0 para 255
Word 0 para 65535

' O que é um Microcontrolador - SelectCaseWithValues.bs2


' Informe um valor e veja o tamanho mínimo da variável necessário para
' mantê-la.

'{$STAMP BS2}
'{$PBASIC 2.5}

value VAR Word


PAUSE 1000

DEBUG "Informe um valor de", CR,


"0 à 65535: "

DO

DEBUGIN DEC value

SELECT value

CASE 0, 1
DEBUG "Bit", CR
PAUSE 100

CASE 2 TO 15
DEBUG "Nib (Nibble)", CR
PAUSE 200

CASE 16 TO 255
DEBUG "Byte", CR
PAUSE 300

CASE 256 TO 65535


DEBUG "Word", CR
PAUSE 400

ENDSELECT

DEBUG CR, "Informe outro valor: "

LOOP

Como Funciona SelectCaseWithValues.bs2


A palavra variável é declarada para manter os valores inseridos no DEBUG Terminal.

value VAR Word

O comando DEBUGIN leva o número digitado e o coloca na variável value.

DEBUGIN DEC value

A instrução SELECT escolhe a variável value como a única para avaliar estes casos.

SELECT value
Página - 225

O primeiro caso é se a variável value for igual a 0 ou 1. Se o valor for igual a qualquer
um desses números, os comandos DEBUG e PAUSE que seguem serão executados.

CASE 0, 1
DEBUG "BIT", CR
PAUSE 100

O segundo caso é, se o valor for igual a qualquer número de 2 a 15. Se ele for igual a
qualquer um desses números, os comandos DEBUG e PAUSE abaixo serão executados.

CASE 2 to 15
DEBUG "NIB (Nibble)", CR
PAUSE 200

Quando todos os casos forem resolvidos, a palavra-chave ENDSELECT será usada para
completar a instrução SELECT...CASE.

ENDSELECT

Programa de Exemplo: SelectCaseWithCharacters.bs2


Este programa de exemplo avalia cada caractere que você digitou na janela de
transmissão do DEBUG Terminal. Ele pode reconhecer caracteres maiúsculos e
minúsculos, números e alguns sinais de pontuação. Se você digitar um caractere, que o
programa não reconhece, ele irá lhe dizer para tentar novamente (entrando com
caractere diferente).

 Coloque e execute SelectCaseWithCharacters.bs2.


 Verifique se a caixa de seleção Echo Off não está marcada.
 Clique na janela de transmissão do DEBUG Terminal para colocar o cursor lá.
 Digite os caracteres na janela de transmissão e observe os resultados.

' O que é um Microcontrolador - SelectCaseWithCharacters.bs2


' Programa é capaz de identificar alguns caracteres: caixa, dígito,
' pontuação.

'{$STAMP BS2}
'{$PBASIC 2.5}

character VAR Byte


PAUSE 1000

DEBUG "Informe um caractere: ", CR

DO
DEBUGIN character

SELECT character

CASE "A" TO "Z"


DEBUG CR, "Caixa alta", CR

CASE "a" TO "z"


DEBUG CR, "Caixa baixa", CR
Página - 226

CASE "0" TO "9"


DEBUG CR, "Dígito", CR

CASE "!", "?", ".", ","


DEBUG CR, "Pontuação", CR

CASE ELSE
DEBUG CR, "Caractere desconhecido.", CR,
"Tente um diferente."

ENDSELECT

DEBUG CR, "Informe outro caractere", CR


LOOP

Como Funciona SelectCaseWithCharacters.bs2


Quando comparado com SelectCaseWithValues.bs2, este programa de exemplo tem
algumas diferenças. Em primeiro lugar, o nome da variável de valor foi mudado para
caractere, e o seu tamanho foi alterado de word para byte. Isso ocorre porque todos os
caracteres em PBASIC são de tamanho byte. A instrução SELECT escolhe a variável de
caracteres para avaliação caso-a-caso.

SELECT character

As aspas são usadas para dizer ao BASIC Stamp Editor que você está se referindo aos
caracteres. Podemos tratar dos seguintes grupos de caracteres e sinais de pontuação da
mesma forma que uma série de números, uma vez que o BASIC Stamp reconhece-os
pelo seu ASCII numérico equivalente veja a tabela ASCII no BASIC Stamp Editor.

SELECT character

CASE "A" TO "Z"


DEBUG CR, "Caixa alta", CR

CASE "a" TO "z"


DEBUG CR, "Caixa baixa", CR

CASE "0" TO "9"


DEBUG CR, "Dígito", CR

CASE "!", "?", ".", ","


DEBUG CR, "Pontuação", CR

Há também uma declaração CASE diferente que não foi utilizada no exemplo anterior:

CASE ELSE
DEBUG CR, "Caractere desconhecido.", CR,
"Tente um diferente."

Esta declaração CASE diz ao bloco de código o que fazer se nenhum dos outros casos
for verdadeiro. Você pode obter este caso que funciona com a entrada de um caractere,
como % ou $.
Página - 227

Sua Vez – Selecionando Caracteres Especiais


 Modifique a instrução SELECT...CASE no SelectCaseWithCharacters.bs2 para
que ele exiba um “caractere especial” quando você entrar com um desses
caracteres: @, #, $, %, ’^’ , &, *, (, ), _, ou +.

Programa de Aplicação de Toques RTTTL


Abaixo está o arquivo RTTTL que contém a informação musical usada no próximo
programa de exemplo. Existe mais cinco diretivas RTTTL_File DATA que você pode
tentar na seção Sua Vez. Este programa toca uma música chamada Reveille, que é o
toque de clarim usado em acampamentos militares ao amanhecer . Você pode ter ouvido
isso em inúmeros filmes ou programas de televisão.

RTTTL_File DATA
"Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,",

"8c,16e,16c,8g6,8e,8c,16e,16c,8a6,8c,e,8c,8g6,",

"8c,16e,16c,8g6,8e,8c,16e,16c,8g6,8e,8c,16e,",

"16c,8g6,8e,c,p,8e,8e,8e,8e,g,8e,8c,8e,8c,8e,8c,",

"e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."

Exemplo de Programa: MicroMusicWithRtttl.bs2


Este aplicativo é muito longo, e é uma boa idéia fazer o download da versão mais
recente na www.parallax.com/gopage/WAM. Baixar o programa e abri-lo com o
BASIC Stamp Editor deve poupar uma quantidade significativa de tempo. A alternativa,
claro, é dar um enter manualmente e depurar quatro páginas de código.

 Com o BASIC Stamp Editor, abra o arquivo baixado MicroMusicWithRtttl.bs2,


ou manualmente insira o exemplo abaixo cuidadosamente.
 Execute o programa e verifique se o som é reconhecido como o clarim de
Reveille.
 Vá para a seção Sua Vez e tente mais alguns toques (diretivas RTTTL_File
DATA).

' O que é um Microcontrolador - MicroMusicWithRtttl.bs2


' Toque o ringtone da Nokia no format RTTTL usando DATA.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Programa funcionando!"

' -----[ I/O Definitions ]--------------------------------------------

SpeakerPin PIN 9 ' Piezospeaker conectado à P9.

' -----[ Variables ]--------------------------------------------------

counter VAR Word ' Contador de propósito geral.


char VAR Byte ' Variável armazena caracteres.
Página - 228

index VAR Word ' Índice para apontas dados.

noteLetter VAR Byte ' Armazena caracteres da nota.


noteFreq VAR Word ' Armazena frequência da nota.
noteOctave VAR Word ' Armazena oitava da nota.

duration VAR Word ' Armazena duração da nota.


tempo VAR Word ' Armazena ritmo.

default_d VAR Byte ' Armazena duração padrão.


default_o VAR Byte ' Armazena oitava padrão.
default_b VAR Word ' Armazena batidas/min padrão.

' -----[ EEPROM Data ]------------------------------------------------

RTTTL_File DATA
"Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,",

"8c,16e,16c,8g6,8e,8c,16e,16c,8a6,8c,e,8c,8g6,",

"8c,16e,16c,8g6,8e,8c,16e,16c,8g6,8e,8c,16e,",

"16c,8g6,8e,c,p,8e,8e,8e,8e,g,8e,8c,8e,8c,8e,8c,",

"e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."

Done DATA ",q,"

Notes DATA "p", "a", "#", "b",


"c", "#", "d", "#",
"e", "f", "#", "g",
"#"
Octave8 DATA Word 0, Word 3520, Word 3729, Word 3951,
Word 4186, Word 4435, Word 4699, Word 4978,
Word 5274, Word 5588, Word 5920, Word 6272,
Word 6645

' -----[ Initialization ]---------------------------------------------

counter = 0 ' Inicializa contador.

GOSUB FindEquals ' Encontra primeiro '=' no arq.


GOSUB ProcessDuration ' Obtém duração padrão.
GOSUB FindEquals ' Encontra próximo '='.
GOSUB ProcessOctave ' Obtém oitava padrão.
GOSUB FindEquals ' Encontra último '='.
GOSUB GetTempo ' Obtém ritmo padrão.

' -----[ Program Code ]-----------------------------------------------

DO UNTIL char = "q" ' Loop até 'q' em DATA.


GOSUB ProcessDuration ' Obtém duração da nota.
GOSUB ProcessNote ' Obtém valor do índice da nota.
GOSUB CheckForDot ' Se dot, 3/2 duração.
GOSUB ProcessOctave ' Obtém oitava.
GOSUB PlayNote ' Obtém freq, toca nota, próx.
LOOP ' Fim do loop principal.

END ' Fim do programa.

' -----[ Subroutine - Find Equals Character ]-------------------------


Página - 229

FindEquals: ' Busca por '=' através dos


' caracteres no arq RTTTL.
DO ' Incrementa contador até
READ RTTTL_File + counter, char ' achar '=', então, retorna.
counter = counter + 1
LOOP UNTIL char = "="

RETURN

' -----[ Subroutine - Read Tempo from RTTTL Header ]------------------


' Cada caractere do teclado tem um número único chamado valor ASCII.
' Os caracteres 0, 1, 2,..., 9 possuem valores ASCII de 48, 49, 50,
' ..., 57.
' Você pode sempre converter do caractere representando um dígito para
' o seu valor subtraundo 48 da variável que armazena o dígito.
' Você pode examinar isso comparando DEC 49 e DEBUG 49.

GetTempo: ' Analisa arq RTTTL para ritmo.


' Converte caracteres para
default_b = 0 ' dígitos subtraindo 48
DO ' de cada valor ASCII do
READ RTTTL_File + counter, char ' caractere. Iterativamente
IF char = ":" THEN ' multiplica cada dígito por 10
default_b = default_b / 10 ' se houver outro dígito, então
counter = counter + 1 ' adiciona o ultimo dígito à
EXIT ' uma coluna.
ENDIF ' Por exemplo, a sequência
default_b = default_b + char - 48 ' "120" é (1 X 10 X 10)
counter = counter + 1 ' + (2 X 10) + 0. O '1'
default_b = default_b * 10 ' é convertido primeiro, então
LOOP UNTIL char = ":" ' multiplicado por 10. O '2'
' é então convertido/adicionado.
RETURN ' 0 é convertido/adicionado, fim

' -----[ Subroutine - Look up Octave ]--------------------------------

ProcessOctave: ' Oitava pode ou não ser


' incluída em dada nota
READ RTTTL_File + counter, char ' porque qualquer nota que é
SELECT char ' tocada na oitava padrão
CASE "5" TO "8" ' não especifica a oitava.
noteOctave = char - "0" ' Se um caractere de '5'
counter = counter + 1 ' a '8' então a usa, ELSE usa
CASE ELSE ' default_o.
noteOctave = default_o ' Caracteres são convertidos
ENDSELECT ' para dígitos subtraindo
IF default_o = 0 THEN ' '0', que é o mesmo que
default_o = noteOctave ' subtrair 48. A primeira vez
ENDIF ' que essa sub-rotina é
' chamada, default_o é 0.
RETURN ' Se 0, então define default_o.

' -----[ Subroutine - Find Index of Note ]----------------------------

ProcessNote: ' Define valor do índice para


' busca da freq da nota baseada
READ RTTTL_File + counter, char ' no caractere da nota. Se 'p',
SELECT char ' o índice é 0. Se 'a' à 'g',
CASE "p" ' lê os valores dos caracteres
index = 0 ' na tabela DATA e encontra com-
Página - 230

counter = counter + 1 ' binação. Grava valor do índi-


CASE "a" TO "g" ' ce quando a combinação é
' encontrada, caractere éum
FOR index = 1 TO 12 ' sustenido (#), adiciona
READ Notes + index, noteLetter ' 1 ao valor do índice para
IF noteLetter = char THEN EXIT ' aumentar o índice (e
NEXT ' frequência) por 1 nível.
counter = counter + 1 ' Como em outras sub-rotinas,
READ RTTTL_File + counter, char ' o contador de increment para
SELECT char ' caracteres é o processado.
CASE "#"
index = index + 1
counter = counter + 1
ENDSELECT
ENDSELECT

RETURN

' -----[ Subroutine - Determine Note Duration ]-----------------------

ProcessDuration: ' Verifica se a forma dos chars


' é 1, 2, 4, 8, 16 ou 32.
READ RTTTL_File + counter, char ' Se sim, então converte do
' caractere ASCII para um valor
SELECT char ' subtraindo 48. Se for o caso
CASE "1", "2", "3", "4", "8" ' de 16 ou 32, multiplica
duration = char - 48 ' por 10 e adiciona o próximo
counter = counter + 1 ' dígito à colunas de “uns”.
READ RTTTL_File + counter, char
SELECT char
CASE "6", "2"
duration = duration * 10 + char - 48
counter = counter + 1
ENDSELECT
CASE ELSE ' Se não houver duração, usa
duration = default_d ' a padrão.
ENDSELECT

IF default_d <> 0 THEN ' Se default_d não é definida


duration = 60000/default_b/duration*3 '(if default_d = 0), então
ELSE ' define default_d = para a
default_d = duration ' duração de d=#.
ENDIF

RETURN

' -----[ Subroutine - Check For '.' Indicating 1.5 Duration ]---------

CheckForDot: ' Verifica indicação de dots mul


' tiplicando a duração por 3/2.
READ RTTTL_File + counter, char ' Se encontra dor, multiplica
SELECT char ' por 3/2 e incrementa contador,
CASE "." ' se não, não faz nada e
duration = duration * 3 / 2 ' retorna.
counter = counter + 1
ENDSELECT

RETURN

' -----[ Subroutine - Find Comma and Play Note/Duration ]-------------


Página - 231

PlayNote: ' Encontra últma vírgula na


' entrada da nota atual. Então,
READ RTTTL_File + counter, char ' busca a frequência da nota
SELECT char ' no data, e a toca, ou pausa,
CASE "," ' se a frequência for = 0.
counter = counter + 1
READ Octave8 + (index * 2), Word noteFreq
noteOctave = 8 - noteOctave
noteFreq = noteFreq / (DCD noteOctave)
IF noteFreq = 0 THEN
PAUSE duration
ELSE
FREQOUT SpeakerPin, duration, noteFreq
ENDIF
ENDSELECT

RETURN

Como Funciona MicroMusicWithRtttl.bs2


Este programa de exemplo é divertido de usar, ele mostra o tipo de código que você será
capaz de escrever com um pouco de prática. No entanto, ele foi incluído neste texto
mais por diversão do que para os conceitos de codificação que emprega. Se você
examinar o código brevemente, você pode notar que você já usou todos os comandos e
operadores do programa, exceto um!

Aqui está uma lista dos elementos que esse programa usa, eles, agora, já devem ser bem
familiares:
• Comentários para ajudar a explicar o seu código;
• Declarações constantes e variáveis;
• Declarações DATA;
• Comandos READ;
• Blocos IF...ELSE...ENDIF;
• DO...LOOP com ou sem WHILE e UNTIL;
• Sub-rotinas com GOSUB, rótulos, e RETURN;
• Loops FOR...NEXT;
• Comandos LOOKUP e LOOKDOWN;
• Comandos FREQOUT e PAUSE;
• Comandos SELECT...CASE;
• EXIT é novo, mas simplesmente permite que o programa "saia" um loop antes
de terminar. É frequentemente usado em declaraçaões IF...THEN.

Sua Vez - Toques Diferentes


 Tente substituir a diretiva RTTTL_File DATA em MicroMusicWithRTTTL.bs2
com cada um dos cinco arquivos de música diferentes abaixo.

Apenas uma diretiva RTTTL_File DATA de cada vez! Certifique-se de


substituir, e não adicionar a sua nova directiva RTTTL_File DATA.

 Execute MicroMusicWithRTTTL.bs2 para testar cada arquivo RTTTL.


Página - 232

RTTTL_File DATA
"TwinkleTwinkle:d=4,o=7,b=120:c,c,g,g,a,a,2g,f,",

"f,e,e,d,d,2c,g,g,f,f,e,e,2d,g,g,f,f,e,e,2d,c,c,",
"g,g,a,a,2g,f,f,e,e,d,d,1c"

RTTTL_File DATA
"FrereJacques:d=4,o=7,b=125:c,d,e,c,c,d,e,c,e,f",

",2g,e,f,2g,8g,8a,8g,8f,e,c,8g,8a,8g,8f,e,c,c,g6",
",2c,c,g6,2c"

RTTTL_File DATA
"Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d"

RTTTL_File DATA
"ForHe'sAJollyGoodFellow:d=4,o=7,b=320:c,2e,e,e,",

"d,e,2f.,2e,e,2d,d,d,c,d,2e.,2c,d,2e,e,e,d,e,2f,",
"g,2a,a,g,g,g,2f,d,2c"

RTTTL_File DATA
"TakeMeOutToTheBallgame:d=4,o=7,b=225:2c6,c,a6,",

"g6,e6,2g.6,2d6,p,2c6,c,a6,g6,e6,2g.6,g6,p,p,a6",

",g#6,a6,e6,f6,g6,a6,p,f6,2d6,p,2a6,a6,a6,b6,c,",
"d,b6,a6,g6"

Baixando arquivos RTTTL: Há arquivos RTTTL disponíveis para download a


partir de diversos sites na internet. Esses arquivos são fornecidos pelos
entusiastas de toques de celular, muitos dos quais não são especialistas em
música. Alguns tons de telefone são muito bons, outros são quase
irreconhecíveis. Se você quiser baixar e executar alguns arquivos RTTTL,
certifique-se de remover os espaços entre caracteres, em seguida, insira o arquivo
de texto entre aspas.

SUMÁRIO
Este capítulo introduziu técnicas para fazer sons e tons musicais com o BASIC Stamp e
um alto-falante piezoelétrico. O comando FREQOUT pode ser usado para enviar para um
alto-falante piezoelétrico sinais de alta/baixa que provocam efeitos sonoros e/ou notas
musicais. O comando FREQOUT tem argumentos que controlam o sinal do pino de I/O
enviado para a duração do tom, e a frequência do som (Freq1). O argumento opcional
Freq2 pode ser usado para tocar duas notas de uma só vez.

Os efeitos sonoros podem ser feitos ajustando a frequência e duração dos tons e as
pausas entre eles. O valor da frequência também pode ser varrido através de uma gama
de valores para criar uma variedade de efeitos.

Fazer notas musicais depende também de frequência, duração e pausas. O valor do


argumento Duration do comando FREQOUT é determinado pelo ritmo da música e da
duração da nota (semibreve, mínima, semínima etc.) O valor Freq1 da nota é
Página - 233

determinado por letra da nota e oitava. As pausas entre as notas são usadas para definir
a duração do comando PAUSE.

A reprodução de músicas simples pode ser feita usando o comando FREQOUT, mas
existem maneiras melhores de armazenar e recuperar dados musicais. A diretiva DATA
em conjunto com rótulos opcionais Symbol foi usada para armazenar valores de bytes
sem prefixo e os valores de textos usando o prefixo Word. O comando READ foi usado
para recuperar valores armazenados pelas diretivas DATA. Nos exemplos deste capítulo,
o argumento Location do comando READ usou sempre a etiqueta opcional Symbol da
diretiva DATA para diferenciar os diferentes tipos de dados. Alguns dos rótulos Symbol
que foram usados eram notas, durações, pontos e oitavas.

Dados musicais podem ser armazenados em formatos que se prestam para a tradução a
partir de partituras. Os estilos de dados da partitura podem ser convertidos em
frequências usando os comandos LOOKUP e LOOKDOWN. Operações matemáticas
também podem ser realizadas sobre os valores de variáveis para alterar a oitava de uma
nota dividindo sua frequência a uma potência de dois. Operações matemáticas também
são úteis para as durações de notas dando o ritmo ou a duração de uma semibreve.
SELECT...CASE foi introduzido como uma forma de avaliar uma variável em uma
base caso a caso. SELECT...CASE é particularmente útil para examinar caracteres ou
números quando há muitas opções, como o que poderia ser uma variável, e muitos
diferentes conjuntos de ações que precisam ser tomadas com base no valor da variável.
Um programa que converte sequências de caracteres que descrevem tons musicais para
telefones celulares mais antigos (chamados de arquivos RTTTL) foi utilizado para
introduzir um programa maior, que faz uso de todas as técnicas de programação
apresentadas neste texto. SELECT...CASE desempenhou um papel de destaque neste
programa porque ele é usado para examinar os caracteres selecionados em um arquivo
RTTTL caso-a-caso.

Questões
1. O que causa um tom de som alto e agudo? O que causa um tom de som de baixa
frequência?
2. O que FREQOUT 15, 1000, 3000 não faz? Qual o efeito que cada um dos
números tem?
3. Como você pode modificar o comando FREQOUT da questão 2, de modo que ele
envie duas frequências de uma só vez?
4. Se você encontrar uma chave de piano B6, que frequência ela enviará?
5. Como modificar uma diretiva DATA ou comando READ se desejar armazenar e
recuperar valores de texto?
6. Você pode ter mais de uma diretiva DATA? Se sim, como você diria a um
comando READ para obter dados a partir de uma ou de outra diretiva DATA?
7. Se souber a frequência de uma nota em uma oitava, o que você tem que fazer
para que a frequência a reproduza uma oitava acima?
8. O que SELECT...CASE faz?

Exercícios
1. Modifique o tom de Alarme ... de ActionTones.bs2 para que a frequência do tom
que desempenha aumente em 500 cada vez que o tom se repetir.
Página - 234

2. Explique como modificar MusicWithMoreFeatures.bs2 para que ele exiba uma


mensagem de alerta no DEBUG Terminal cada vez que uma nota pontilhada é
tocada.

Projeto
1. Construa um gerador de tom, controlado por botão. Se um botão for
pressionado, o alto-falante deverá fazer um bip de 2 kHz para 0,5 segundo. Se
outro botão for pressionado, o alto-falante deverá fazer um sinal sonoro 3 kHz
para 1/10 de segundo.

Soluções
Q1.Nossos ouvidos detectam alterações na pressão do ar como tons. Um tom agudo
alto é proveniente de mudanças rápidas na pressão do ar, um tom baixo provém
de mudanças mais lentas na pressão do ar.
Q2.FREQOUT 15, 1000, 3000 envia um sinal de 3000 Hz a P15 por um segundo
(1000 ms). O efeito de cada número: 15 – para o pino de I/O P15, 1000 -
duração do tom equivalente a 1.000 ms ou um segundo; 3000 - a frequência do
tom, em hertz, de modo que este envia um tom de 3000 Hz.
Q3.Use o argumento opcional Freq2. Para reproduzir 3000 Hz e dizer 2000 Hz,
basta adicionar uma segunda frequência para o comando, depois de uma vírgula:

FREQOUT 15, 1000, 3000, 2000

Q4.1975,5 Hz, veja Figura 8-3 na página 207.


Q5.Use o modificador opcional Word antes de cada item de dados.
Q6.Sim. Cada diretiva DATA pode ter um parâmetro opcional Symbol diferente. Para
especificar quais diretivas DATA para obter os dados, inclua o parâmetro Symbol
após a palavra-chave READ. Por exemplo: READ Notes, noteLetter. Neste
exemplo, o Notes é o parâmetro Symbol.
Q7.Para ter uma determinada nota na próxima oitava acima, multiplique a
frequência por dois.
Q8. SELECT...CASE seleciona uma variável ou expressão, avalia-as caso a caso e
executa diferentes blocos de código, dependendo do caso em que o valor da
variável se encaixa.

E1. Este problema pode ser resolvido aumentando manualmente cada tom por 500,
ou através da utilização de um loop FOR ... NEXT, com um valor de 500
STEP.

Utilizando o loop FOR...NEXT: Aumente manualmente o tom :


Página - 235

DEBUG "Aumentando alarme...", DEBUG "Aumentando


CR alarme...",CR
PAUSE 100 PAUSE 100
FOR frequency = 1500 TO FREQOUT 9, 500, 1500
3000 STEP 500 PAUSE 500
FREQOUT 9, 500, FREQOUT 9, 500, 2000
frequency PAUSE 500
PAUSE 500 FREQOUT 9, 500, 2500
NEXT PAUSE 500
FREQOUT 9, 500, 3000
PAUSE 500
E2. Modifique as linhas que verificam a nota pontilhada:

READ Dots + index, noteDot


IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2

Adicione um comando DEBUG ao IF ... THEN. Não se esqueça do ENDIF.

READ Dots + index, noteDot


IF noteDot = 1 THEN
noteDuration = noteDuration * 3 / 2
DEBUG "Dotted Note!", CR
ENDIF

P1. Use o circuito do piezospeaker da Figura 8-2, na página 201, e circuitos de


botão de pressão da Figura 4 -26 na página 108.

' O que é um Microcontrolador -


' Ch8Prj01_PushButtonToneGenerator.bs2
' P4 Pressionado: Bip de 2 kHz por 1/5 de segundo. 2 kHz = 2000
' Hz.
' 1/5 s = 1000 / 5 ms = 200 ms
' P3 Pressionado: Bip de 3 kHz por 1/10 de segundo. 3 kHz =
' 3000 Hz.
' 1/10 s = 1000 / 10 ms = 100 ms
'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Programa funcionando!"


DO
IF (IN4 = 1) THEN
FREQOUT 9, 200, 2000 ' 2000 Hz por 200 ms
ELSEIF (IN3 = 1) THEN
FREQOUT 9, 100, 3000 ' 3000 Hz por 100 ms
ENDIF
LOOP
Página - 236

Capítulo 9: Construindo Blocos Eletrônicos


ESSES PEQUENOS CHIPS PRETOS
Você precisa apenas olhar para o seu BASIC Stamp (veja Figura 9-1) para encontrar
exemplos “desses pequenos chips pretos”. Cada um desses chips tem uma função
especial. O chip superior direito é o regulador de voltagem. Ele pega a voltagem da
bateria e a converte para quase exatamente 5,0 V, que é o que o resto dos componentes
do BASIC Stamp precisa para funcionar adequadamente. O chip superior esquerdo é a
EEPROM do módulo BASIC Stamp. Programas PBASIC são condensados em números
chamados tokens que são baixados para o BASIC Stamp. Esses tokens são armazenados
na EEPROM, e você pode vê-los clicando em Executar (Run) e, em seguida, Mapa de
Memória (Memory Map) no BASIC Stamp Editor. O chip maior é chamado de
Intérprete. É um microcontrolador pré-programado com o PBASIC interpretar que
busca os sinais da EEPROM e depois interpreta o comando PBASIC que o token
representa. Em seguida, ele executa o comando, busca o próximo token e assim por
diante. Este processo é chamado de busca e execução.

Regulador de
5V converte a
A EEPROM de 2K voltagem de
armazena o código entrada para
PBASIC e os dados 5 volt
registrados regulados
→ ← Figura 9-1
Circuitos
integrados
no BASIC
Stamp 2

Chip Interpreter
PBASIC (um
microcontrolador pré-
programado)

As pessoas usam o termo "circuito integrado" (CI) para falar sobre esses pequenos chips
pretos. O circuito integrado é na verdade um minúsculo chip de silício contido dentro do
plástico preto ou da caixa de cerâmica. Dependendo do chip, ele pode ter um lugar entre
centenas e milhares de transistores. Um transistor é um bloco básico de construção de
circuitos integrados, e você terá a oportunidade de experimentá-los com um transistor
neste capítulo. Outros componentes familiares que são projetados em chips de silício
incluem diodos, resistores e capacitores.

Tire um momento para pensar sobre as atividades que você realizou com este livro até
agora. A lista inclui a mudança dos LEDs em on e off, leitura de botões, controle dos
servos, leitura dos potenciômetros, medição de luz, displays controlados e reprodução
de sons. Mesmo que isso seja apenas o começo, ainda é bastante impressionante,
especialmente considerando que você pode combinar essas atividades para fazer
Página - 237

aparelhos mais complexos. O coração do sistema que fez todas estas atividades
possíveis é constituído apenas pelos três circuitos mostrados na Figura 9-1 e algumas
outras peças. Ele apenas mostra quão poderosos os circuitos integrados podem ser,
quando projetados para trabalhar em conjunto.

EXPANDA SEUS PROJETOS COM CIRCUITOS PERIFÉRICOS


INTEGRADOS
Existem milhares de circuitos integrados projetados para serem usados com
microcontroladores. Ocasionalmente, diferentes fabricantes de circuitos integrados
fazem chips que executam a mesma função. Às vezes, as características de cada chip
diferem um pouco, e, em outras, os chips são quase idênticos, mas um pode custar um
pouco menos do que o outro. Cada um dos milhares de diferentes circuitos integrados
pode ser usado como um bloco de construção para uma variedade de modelos. As
empresas publicam informações sobre a forma como cada um de seus circuitos
integrados age em documentos chamados folha de dados e as disponibiliza em seus
sites. Estes fabricantes também publicam notas de aplicação, que mostram como usar o
circuito integrado de forma única e útil tornando mais fácil o design dos produtos. Os
fabricantes de circuitos integrados dão esta informação na esperança de que os
engenheiros usem-nas para construir seus chips na mais recente versão que os
brinquedos ou equipamentos devem ter. Se milhares de brinquedos são vendidos, isso
significa que a empresa vende milhares de seus circuitos integrados.

Neste capítulo, você vai trabalhar com um transistor e um circuito integrado para fins
especiais chamado potenciômetro digital. Como mencionado anteriormente, o transistor
é um bloco básico para construção de circuitos integrados. É também um bloco básico
para construção dos lotes de outros circuitos. O potenciômetro digital também tem uma
variedade de utilizações. Tenha em mente que para cada atividade que você fizer,
provavelmente existirão centenas de maneiras diferentes que você poderá usar com cada
um desses circuitos integrados.

ATIVIDADE #1: CONTROLE DO FLUXO ATUAL COM UM TRANSISTOR


Nesta atividade, você vai usar um transistor como uma forma de controlar a passagem
de corrente através de um LED. Você pode usar o LED para monitorar a corrente, visto
que ele brilha mais intensamente quando mais corrente passa através dele e menos
intensamente quando menos corrente passa.

Apresentando o Transistor
A Figura 9-2 mostra o símbolo esquemático e peças do desenho do transistor 2N3904.
Existem muitos tipos diferentes de transistores. Este é chamado NPN, que se refere aos
tipos de material usado para fabricar o transistor e como esses materiais são
mergulhados no silício. A melhor maneira de começar a pensar em um transistor é
imaginá-lo como uma válvula que é usada para controlar a corrente. Diferentes
transistores controlam a quantidade de corrente que passa através deles por diferentes
meios. Este transistor controla a quantidade de corrente que passa em C (coletor) e sai
em E (emissor). Ele usa a quantidade de corrente permitida no terminal B (base) para
controlar a passagem de corrente através de C a E. Com uma pequena quantidade de
Página - 238

corrente permitida em B, a corrente passa 416 vezes mais que o fluxo de corrente do
transistor em C e E

C Figura 9-2
B
B Transistor 2N3904
E
2N3904
E

Ficha Técnica da Peça 2N3904: Como mencionado anteriormente, os


fabricantes de semicondutores publicam documentos chamados fichas técnicas
para as peças que fazem. Estas fichas contêm informações que os engenheiros
usam para projetar uma peça em um produto. Para ver um exemplo de ficha
técnica da peça 2N3904: vá para www.fairchildsemi.com. Digite "2N3904" no
campo de pesquisa (Search) na página inicial do Fairchild Semiconductor, e
clique em Ir (Go). Um dos resultados da pesquisa deverá ser um link para
informações sobre o produto 2N3904. Siga-o e procure o link Ficha Técnica. A
maioria dos navegadores abre a ficha técnica com o programa Adobe Acrobat
Reader.

Exemplo de Peças do Transistor


(1) Transistor – 2N3904
(2) Resistores – 100 kΩ (marrom-preto-amarelo)
(1) LED – qualquer cor
(1) Potenciômetro – 10 kΩ
(3) Fios

Construindo e Testando o Circuito do Transistor


A Figura 9-3 mostra um circuito que pode ser usado manualmente para controlar a
quantidade de corrente que o transistor permite passar através do LED. Ao torcer o
botão do potenciômetro, o circuito transmitirá diferentes quantidades de corrente para a
base do transistor. Isto vai causar uma alteração na quantidade de corrente que o
transistor permite passar de seu coletor para o seu emissor. O LED lhe dará dar uma
indicação clara da mudança, brilhando mais ou menos intensamente.

 Construa o circuito mostrado na Figura 9-3.


o Certifique-se de que o pino de ânodo do LED (o maior) está ligado a
VDD.
o Verifique o circuito de seu transistor. Note se a face plana do transistor
está virada para a direita no diagrama de fiação.
 Gire o botão do potenciômetro e verifique se o LED muda o brilho, em resposta
a uma mudança na posição do wiper terminal do potenciômetro.
Página - 239

Vdd Vdd

LED

POT 100 kΩ
10 kΩ

100 kΩ

Vss Vss Figura 9-3


Potenciômetro Manual
– Circuito do
Transistor Controlado

Sua Vez – Mudar o Transistor On/Off


Se tudo que você quer fazer é ligar e desligar um transistor, você poderá usar o circuito
mostrado na Figura 9-4. Quando o BASIC Stamp enviar um sinal de alta para este
circuito, ele fará com que o transistor conduza mais corrente como se você tivesse
ajustado o potenciômetro para um brilho máximo. Quando o BASIC Stamp enviar um
sinal de baixa para este circuito, ele fará com que o transistor pare de conduzir de
corrente, e o LED deverá emitir luz.

Qual é a diferença entre conectar este circuito e um circuito de LED para


um pino de I/O? Os pinos de I/O do BASIC Stamp têm limitações quanto à
quantidade de corrente que podem transmitir. Os transistores têm limitações
também, mas são muito mais elevadas. No Sistema de Controle do Guia do
Estudante (Process Control Student Guide), um transistor é usado para acionar
um pequeno ventilador DC. É também utilizado para fornecer grandes
quantidades de corrente a um pequeno resistor que é utilizado como um elemento
de aquecimento. Qualquer uma destas duas aplicações atrairia tanta corrente que
danificaria, rapidamente, o BASIC Stamp, mas o transistor leva com facilidade.

 Construa o circuito mostrado na Figura 9- 4.


 Escreva um programa que envie sinais de alta e baixa para P8 duas vezes por
segundo. DICA: LedOnOff.bs2 do Capítulo 2 só precisa ser modificado para
enviar sinais de alta/baixa para P8 em vez de P14. Lembre-se de salvá-lo com
um novo nome antes de fazer as modificações.
 Execute o programa e verifique se ele liga/desliga o controle do LED.
Página - 240

Vdd Vdd Vin Vss


X3
P15
P14 Figura 9-4
LED P13
P12
Circuito que dá ao
P11 BASIC Stamp controle
P10
P9 de corrente on/off para
P8 100 kΩ P8 o LED com um
P7
P6 transistor
P5
100 kΩ P4
P3
P2
P1
P0
Vss X2

ATIVIDADE #2: INTRODUÇÃO AO POTENCIÔMETRO DIGITAL


Nesta atividade, você irá substituir o potenciômetro ajustado manualmente por um
potenciômetro de circuito integrado que é ajustado digitalmente. Então, você vai
programar o BASIC Stamp para ajustar o potenciômetro digital, que por sua vez irá
ajustar o brilho do LED da mesma forma que o potenciômetro manual fez na atividade
anterior.

Apresentando os Potenciômetros Digitais


A Figura 9-5 mostra um mapa do pino do potenciômetro digital que você vai usar nesta
atividade. Este chip tem 8 pinos, quatro de cada lado, espaçados para facilitar a ligação
na protoboard (1/10 de polegada de distância). O fabricante coloca uma marca de
referência na caixa de plástico de modo que você possa diferenciar os pinos 1 e 5. A
marca de referência é um semicírculo pequeno no caso do chip. Você pode usar essa
marca como uma referência para os números dos pinos no chip, que são contados de
baixo para cima, no sentido anti-horário a partir da marca de referência.

Substituições de peças: Às vezes é necessário que a Parallax faça substituição


de peças. A peça funcionará do mesmo modo, mas o rótulo poderá ser diferente.
Se você achar que o potenciômetro digital incluso no kit de peças do seu BASIC
Stamp - Kit de Atividades não está etiquetado AD5220, saiba que ele funcionará
da mesma maneira e executará corretamente essa atividade.

Reference
Notch
Figura 9-5
Mapa do Pino AD5220

1 CLK Vdd 8 Use a marca de referência para


se certificar de que você tem o
2 U/D CS 7
AD5220 do lado direito para cima
3 A1 B1 6
quando construí-lo em seu
4 GND W1 5
circuito no protoboard.
AD5220
Página - 241

Aqui está um resumo de cada um dos pinos AD5220 e suas funções:


1. CLK: Pino que recebe pulsos de relógio (sinais baixo-alto-baixo) para mover o
wiper terminal.
2. U/D: Pino que recebe um sinal de alta para fazer o wiper terminal (W1) mudar
para A1, e um sinal de baixa para fazê-lo avançar para B1. Este pino só define a
direção, o wiper terminal na verdade não se move até que um pulso (sinal baixo-
alto-baixo) seja enviado para o pino CLK.
3. A1: Terminal A do potenciômetro.
4. GND: Fio terra. O fio terra no Board of Education e no BASIC Stamp
HomeWork Board é um terminal Vss.
5. W1: Wiper Terminal do potenciômetro (W).
6. B1: Terminal B do potenciômetro.
7. CS: O chip seleciona um pino. Aplique um sinal de alta para este pino, e o chip
ignorará todos os sinais de controle enviados para CLK e U/D. Aplique um sinal
de baixa para este pino, que agirá em todos os sinais de controle recebidos.
8. Vdd: Ligue +5 V, que é Vdd no Board of Education e no BASIC Stamp
HomeWork Board.

Dados Técnicos da Peça AD5220: Para ver os dados técnicos de AD5220: Vá


para www.analog.com. Digite "AD5220" no campo de busca na página principal
em Dispositivos Analógicos (Analog Devices), e clique no botão Busca (Search).
Clique no link Dados Técnicos (Data Sheets). Clique no link que diz "AD5220:
Aumento/Diminuição de Dados Técnicos do Potenciômetro Digital
(Increment/Decrement Digital Potentiometer Datasheet).

Peças do Potenciômetro Digital Controlado pelo Transistor


(1) Transistor – 2N3904
(2) Resistor – 100 kΩ (marrom-preto-amarelo)
(1) LED – qualquer cor
(1) Digital potenciômetro – AD5220
(10) Fios

Construindo o Circuito de Potenciômetros Digitais


A Figura 9-6 mostra um diagrama esquemático do circuito com o potenciômetro digital
utilizado no lugar de um potenciômetro manual, e a Figura 9-7 mostra um diagrama de
ligações para o circuito. O BASIC Stamp pode controlar o potenciômetro digital através
da emissão de sinais de controle para P5 e P6.

 Construa o circuito mostrado na Figura 9-6 e na Figura 9-7.

Vdd Vdd
Vdd
AD5220
P6 1
CLK Vdd 8 Figura 9-6
U/D CS 7 Circuito
P5 2
Esquemático do
3
A1 B1 6
Potenciômetro
GND W1 5 100 kΩ
4 Digital Controlado
pelo Transistor
100 kΩ

Vss Vss
Página - 242

Vdd Vin Vss


X3
P15
P14
P13 Figura 9-7
P12
P11 Diagrama de
P10
P9 Fiação para a
P8 Figura 9-6
P7
P6
AD5220

P5
P4
P3
P2
P1
P0
X2

Controle da Programação de Potenciômetros Digitais


Imagine que o botão do potenciômetro manual do exercício anterior tem 128 posições.
Imagine também que o potenciômetro está no meio da sua gama de movimentos. Isso
significa que você pode girar o botão em uma direção por 63 etapas e em outra por 64.

Vamos dizer que você gire o botão do potenciômetro uma vez em sentido horário. O
LED vai ficar apenas um pouco mais brilhante. Este seria o mesmo que enviar um sinal
de alta ao pino L/D do AD5220 e enviar um pulso (alto-baixo-alto) para o pino CLK.

HIGH 5
PULSOUT 6, 1

Imagine agora que você girou o seu potenciômetro manual em 3 etapas no anti-horário.
O LED vai ficar um pouco mais escuro. Este seria o mesmo que enviar um sinal de
baixa para o pino L/D do AD5220 e enviar três pulsos ao pino CLK.
LOW 5
FOR counter = 1 TO 3
PULSOUT 6, 1
PAUSE 1
NEXT

Agora imagine que você girou o potenciômetro totalmente no sentido horário. Isso é o
mesmo que enviar um sinal de alta para o pino do U/D AD5220 e enviar 65 pulsos ao
pino CLK. Agora, o LED deverá estar brilhando.

HIGH 5
FOR counter = 1 TO 65
PULSOUT 6, 1
PAUSE 1
NEXT

Finalmente, imagine que você girou o seu potenciômetro manual totalmente no sentido
anti-horário. O LED não deve emitir luz. Isso é o mesmo que enviar um sinal de baixa
para o pino U/D, e aplicar 128 pulsos ao pino CLK.

LOW 5
FOR counter = 0 TO 127
Página - 243

PULSOUT 6, 1
PAUSE 1
NEXT

Exemplo de Programa: DigitalPotUpDown.bs2


Este programa de exemplo ajusta o potenciômetro para cima e para baixo, a partir de
uma extremidade de seu alcance para outra, fazendo com que o LED fique
gradualmente mais brilhante e, em seguida, gradualmente, mais opaco.

 Coloque e execute DigitalPotUpDown.bs2.

' O que é um Microcontrolador - DigitalPotUpDown.bs2


' Varre o potenciômetro digital através de valores.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa funcionando!"

counter VAR Byte

DO
LOW 5

FOR counter = 0 TO 127


PULSOUT 6, 1
PAUSE 10
NEXT

HIGH 5

FOR counter = 0 TO 127


PULSOUT 6, 1
PAUSE 10
NEXT
LOOP

Sua Vez – Alterando a Taxa e Condensando o Código


Você pode aumentar ou diminuir a velocidade para que o LED brilhe e escureça
alterando o argumento Duration do comando PAUSE.

 Modifique e execute novamente o programa usando PAUSE 20 e note a


diferença na área em que o LED fica mais brilhante e escuro.
 Repita o procedimento para PAUSE 5.

Você também pode usar um comando chamado TOGGLE para tornar este programa mais
simples. O comando TOGGLE alterna o estado de um pino de I/O do BASIC Stamp. Se o
pino de I/O estava enviando um sinal alto, o comando TOGGLE faz com que ele envie
um sinal baixo. Se o pino de I/O enviou um sinal baixo TOGGLE torna a enviar um sinal
alto.

 Salve DigitalPotUpDown.bs2 como DigitalPotUpDownWithToggle.bs2.


 Modifique o programa para que ele se pareça com o nome indicado abaixo.
Página - 244

 Execute o programa e verifique se ele funciona da mesma forma que o


DigitalPotUpDown.bs2.
 Compare o número de linhas de código que ele usou para fazer o mesmo
trabalho.

A falta de memória do programa é um problema que algumas pessoas encontram


quando seus projetos com o BASIC Stamp ficam muito grandes e complicados.
Usar o comando TOGGLE em vez de dois loops FOR...NEXT é apenas um
exemplo das muitas técnicas que podem ser usadas para fazer o mesmo trabalho
com metade do código.

' O que é um Microcontrolador - DigitalPotUpDownWithToggle.bs2


' Varre o potenciômetro digital através de valores.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa funcionando!"

counter VAR Byte


LOW 5

DO
FOR counter = 0 TO 127
PULSOUT 6,5
PAUSE 10
NEXT
TOGGLE 5
LOOP

Olhando um Potenciômetro Digital por Dentro


A Figura 9-8 mostra um diagrama do potenciômetro dentro do AD5220. O AD5220 tem
128 elementos resistivos, cada um deles é de 78.125 Ω (valor nominal). Todos estes 128
somam 10.000 Ω ou 10 kΩ.
3
A1
Ad5220 78 Ω
pos. 127
78 Ω
1 CLK
2 U/D pos. 126
W1 78 Ω
5 Figura 9-8
7 CS 40 Ω pos. 125
Dentro do AD5220
… …
78 Ω
pos. 1
78 Ω
pos. 0 B1
6

Um valor nominal significa um valor nomeado. Peças como resistores e


capacitores normalmente têm um valor nominal e tolerância. Cada um dos
elementos resistivos do AD5220 tem um valor nominal de 78.125 Ω, acima ou
abaixo do valor nominal com uma tolerância de 30% (23,438Ω), acima ou abaixo
do valor nominal.
Página - 245

Entre cada um desses elementos resistivos há um interruptor, chamado tomada. Cada


interruptor é na verdade um grupo de transistores que são ligados ou desligados para
permitir ou não a passagem de corrente. Apenas um destes interruptores pode ser
fechado de uma só vez. Se uma das chaves superiores estiver fechada (na pos. 125, 126,
ou 127), é como ter o botão do potenciômetro manual girado mais ou todo para o
sentido horário. Se pos. 0 ou 1 estiver fechada, é como ter um potenciômetro manual
girado todo para o sentido anti-horário.

Imagine que pos. 126 está fechada. Se você quiser definir a tomada para 125, (pos.
aberta 126 e pos. fechada 125), ajuste U/D baixo, em seguida, aplique um pulso para
CLK. Se você quiser definir a tomada para Pos 127, ajuste L/D em alta, e aplique 2
pulsos. Se você quiser trazer a tomada até 1, defina U/D baixo e aplique 126 pulsos.

Este próximo programa de exemplo usa o DEBUG Terminal para perguntar que
interruptor você deseja. Em seguida, ele decide se define o pino U/D para alto ou baixo,
e aplica o número correto de pulsos que deslocará o interruptor de sua configuração
antiga para a nova.

Com a exceção de EEPROM DATA, o próximo programa de exemplo também tem


todas as seções que você normalmente espera encontrar em um programa de aplicação:

• Título - comentários que incluem o nome de um programa, sua descrição e as


diretivas Stamp e PBASIC.
• EEPROM Data - declarações DATA que armazenam listas predefinidas de
valores em partes da memória EEPROM que não são necessárias no
armazenamento do programa.
• Definições de I/O - Diretivas PIN que são chamadas de pinos de I/O.
• Constantes - CON declarações que nomeiam os valores no programa.
• Variáveis - VAR declarações que atribuem nomes as partes da memória RAM
do BASIC Stamp para armazenar valores.
• Inicialização - uma rotina que faz o programa começar com o pé direito. Neste
próximo programa, o interruptor do potenciômetro precisa ser derrubado para
baixo de zero.
• Principal – rotina que manipula as tarefas primárias do programa.
• Sub-rotinas - segmentos de código que fazem trabalhos específicos, ou para um
ou para outro, neste caso, para a rotina principal.

Exemplo de Programa: TerminalControlledDigtialPot.bs2


Você pode usar este programa de exemplo e o DEBUG Terminal para definir o
interruptor do potenciômetro digital. Ao alterar a configuração do interruptor do
potenciômetro digital, você altera o brilho do LED ligado ao transistor que controla o
potenciômetro digital. A Figura 9- 9 mostra um exemplo de entrada do valor de 120 na
janela de transmissão do DEBUG Terminal enquanto o programa está sendo executado.
Uma vez que a configuração antiga do interruptor estava em 65, o LED tornou-se
aproximadamente duas vezes mais brilhante do que quando ajustado para 120.
Página - 246

Janelas Figura 9-9


Enviando mensagens
para o BASIC Stamp.
Transmite →
Clique na janela de
transmissão (superior)
e digite os números
Recebe → para nova
configuração do
interruptor.

 Coloque e execute TerminalControlledDigtialPot.bs2.


 Verifique se a caixa Echo Off não está marcada.
 Clique na janela de transmissão do DEBUG Terminal para colocar o cursor lá.
 Digite valores de 0 a 127 para o DEBUG Terminal. Certifique-se de pressionar a
tecla Enter depois de digitar os algarismos.

' -----[ Título ]-----------------------------------------------------


' O que é um Microcontrolador - TerminalControlledDigitalPot.bs2
' Atualiza o botão do potenciômetro digital com base na entrada do
' usuário no Debug Terminal.

' {$STAMP BS2}


' {$PBASIC 2.5}

' -----[ EEPROM Data ]------------------------------------------------

' -----[ Definições de I/O ]------------------------------------------

UdPin PIN 5 ' Configura valores dos pinos de


ClkPin PIN 6 ' I/O conectados à CLK e U/D

' -----[ Constantes ]-------------------------------------------------

DelayPulses CON 10 ' Atrasa para observar o LED


DelayReader CON 2000 ' apagar

' -----[ Variáveis ]--------------------------------------------------

counter VAR Byte ' Contador para FOR...NEXT


oldTapSetting VAR Byte ' Configuração do botão anterior
newTapSetting VAR Byte ' Nova configuração de botão

' -----[ Inicialização ]----------------------------------------------

oldTapSetting = 0 ' Inicializa nova e velha old


newTapSetting = 0 ' configuração do botão para 0

LOW UdPin ' Configura pino U/D para Down


FOR counter = 0 TO 127 ' Configura botão para posição
' mais baixa
PULSOUT 6,5
PAUSE 1
NEXT
PAUSE 1000 ' Aguarda 1s antes da 1a msg

' -----[ Rotina Principal ]-------------------------------------------


Página - 247

DO

GOSUB Get_New_Tap_Setting ' Display do usuário e obtém


' entrada
GOSUB Set_Ud_Pin ' Configura pino U/D para up/down
GOSUB Pulse_Clk_pin ' Entrega pulsos

LOOP

' -----[ Sub-rotinas ]------------------------------------------------

Get_New_Tap_Setting: ' Exibe instruções e obtém


' entrada do usuário para nova
DEBUG CLS, "Configuração do botão é: ", ' configuração do valor do
' botão
DEC newTapSetting, CR, CR
DEBUG "Informe novo botão", CR, "setting (0 TO 127): "
DEBUGIN DEC newTapSetting

RETURN

Set_Ud_Pin: ' Examina novo e velho valor


' para decidir valor do pino U/D
IF newTapSetting > oldTapSetting THEN ' Notifica usuário se valores
HIGH UdPin ' são iguais
oldTapSetting = oldTapSetting + 1 ' Incrementa para Pulse_Clk_pin
ELSEIF newTapSetting < oldTapSetting THEN
LOW UdPin
oldTapSetting = oldTapSetting - 1 ' Decrementa para Pulse_Clk_pin

ELSE
DEBUG CR, "Nova e velha configurações ", CR,
"são iguais, tente ", CR,
"de novo...", CR
PAUSE DelayReader ' Dá tempo para visualizar
ENDIF ' mensagem

RETURN

Pulse_Clk_pin:

' Entrega valores de velhos a novos valores. Lembre-se que


' Set_Ud_Pin
' ajustou o valor de oldTapSetting para newTapSetting por um.
' Isso mantém o loop FOR...NEXT executando de uma a várias vezes.

FOR counter = oldTapSetting TO newTapSetting


PULSOUT ClkPin, 1
PAUSE DelayPulses
NEXT

oldTapSetting = newTapSetting ' Acompanha novos e velhos


' valores de tapSetting
RETURN

SUMÁRIO
Este capítulo introduziu circuitos integrados e como eles podem ser usados com o
BASIC STAMP. Um transistor foi utilizado como uma válvula de corrente e um
potenciômetro digital foi usado para controlar a quantidade de corrente que passa
Página - 248

através do transistor. Ao examinar o potenciômetro digital foram introduzidos marca de


referência e mapa do pino como elementos importantes dos chips eletrônicos. Foi
discutida a função de cada um dos pinos do potenciômetro digital, assim como a
estrutura interna do dispositivo. O comando PBASIC TOGGLE foi introduzido como um
meio para salvar a memória do programa.

Questões
1. Quais são os nomes dos terminais do transistor que você usou neste capítulo?
2. Que terminal controla a corrente que passa através do transistor?
3. O que você pode fazer para aumentar ou diminuir a passagem de corrente
através do transistor?

Exercício
1. Escreva um programa que ajusta o interruptor no potenciômetro digital para a
posição 0, independente de sua configuração atual.

Projeto - Desafio Avançado


1. Adicionar um fototransistor ao seu projeto e fazer com que o brilho do LED seja
ajustado com o brilho visto pelo fototransistor. Nota: vale a pena ler a solução
dada, pois demonstra uma abordagem útil para o dimensionamento de uma
entrada para uma saída.

Soluções
Q1.Emissor, base e coletor.
Q2.A base controla a corrente que passa através do transistor.
Q3.Aumentar ou diminuir a corrente permitida na base do transistor.

E1. Para resolver este exercício, olhe para TerminalControlledDigitalPot.bs2. A


primeira coisa que ele faz, na seção de inicialização, é definir o botão para a
posição mais baixa. O código exato está na solução abaixo.

' O que é um Microcontrolador - Ch9Ex01_SetTapToZero.bs2


' Vire o botão no potenciômetro digital até o fim, zero.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa funcionando!"

UdPin PIN 5 ' Configura valores dos pinos


ClkPin PIN 6 ' I/O conectados à CLK e U/D
counter VAR Byte ' Contador de FOR...NEXT

LOW UdPin ' Configura pino U/D p/ Down


FOR counter = 0 TO 128 ' Configura botão para
' posição mais baixa
PULSOUT ClkPin,5
PAUSE 1
NEXT
Página - 249

P1. Usar o circuito do potenciômetro digital a partir da Figura 9-6 na página 238 e o
circuito do fototransistor da Figura 7-4 na página 171.

Esta solução se baseia no TerminalControlledDigitalPot.bs2, e incorpora


elementos do PhototransistorAnalogToBinary.bs2 do Capítulo 7, Atividade #5.
Aplica-se também alguma álgebra para resolver um problema de escala que faz
com que o intervalo de valores que você poderia conseguir a partir da medida
que o fototransistor RCTIME se encaixe em um intervalo de 0 a 128 para o
potenciômetro digital. Tenha em mente que este é exemplo de solução, e, de
modo algum, a única solução ou abordagem.

O sub-rotina GOSUB Get_New_Tap_Setting chamada do programa


TerminalControlledDigitalPot.bs2 é substituída por duas outras chamadas de
sub-rotinas: GOSUB Read_Phototransistor e GOSUB
Scale_Phototransistor. Da mesma forma, a sub-rotina
Get_New_Tap_Setting é substituída pelas sub-rotinas
Read_Phototransistor e Scale_Phototransistor.
Read_Phototransistor é uma versão da sub-rotina dos comandos que levam
a medição RCTIME do fototransistor e limitam a sua gama de entrada em
PhototransistorAnalogToBinary.bs2. Os nomes do pino, das constantes e das
variáveis foram ajustados, e o PAUSE 100 para uma exibição de 10 vezes por
segundo foi alterado para PAUSE 1, que é tudo que é necessário para carregar o
capacitor antes de tomar a medida RCTIME. Depois que esta sub-rotina
armazenar um valor na variável lightReading, ele será algo entre ValMin
(100) e ValMax (4000). Certifique-se de testar e ajustar esses valores para
suas próprias condições de iluminação.

O problema que temos agora é que existem apenas 128 interruptores


configurados e 3.900 possíveis medidas RCTIME para o fototransistor. Para
corrigir isso, precisamos dividir a medição RCTIME do fototransistor por algum
valor para torná-lo apto para a faixa de 0 a 127. Então, nós sabemos que
precisamos dividir a gama de valores de entrada por algum valor para fazê-lo
caber em 128 valores. Isto é parecido com uma equação:

Range of Possible Phototransistor Measurements


= 128 Possible Tap Settings
Scale Divisor

Para resolver isso, multiplique ambos os lados da equação pelo Scale Divisor, em
seguida, divida ambos os lados por 128 possíveis configurações do interruptor.

Range of Possible Phototransistor Measurements


Scale Divisor =
128 Possible Tap Settings

No código, o leque de possíveis medidas do fototransistor é ValMax -


ValMin, scaleDivisor é uma variável, e 128 é uma constante. Assim, este
código a partir seção Declarações e Inicialização (Declarations and
Initialization) estabelece o valor de scaleDivisor assim:

scaleDivisor = (valMax – valMin) / 128


Página - 250

Depois de cada medição RCTIME do fototransistor, a sub-rotina


Scale_Phototransistor subtrai valMin de lightReading e depois divide
a medição por scaleDivisor. O resultado mapeia a faixa de medição 100 a
4000 entradas para 0 a 127 saídas da faixa de ajuste do interruptor.

Scale_Phototransistor:
lightReading = (lightReading – valMin) / scaleDivisor
RETURN

Assumindo que ValMin é 100 e ValMax é 4000, a variável lightReading


poderia armazenar 3.900 valores possíveis. E se a faixa de entrada foi ValMin
= 10.000 para ValMax = 13900? Ao subtrair ValMin = 10.000, ainda
existem 3900 valores possíveis, e dividir scaleDivisor corretamente é que
vai mapear a medida para o ajuste do interruptor do potenciômetro digital
correspondente. Se o seu código não subtrair primeiro ValMin, o valor
resultante em escala seria completamente fora do intervalo de 0 a 128 para o
potenciômetro digital

' O que é um Microcontrolador - '


Ch9Prj01_PhotoControlledDigitalPot.bs2
' Atualiza botão do potenciômetro digital baseado na leitura do
' Fototransistor

' {$STAMP BS2}


' {$PBASIC 2.5}

' -----[ Declarações e Inicialização ]----------------------------

UdPin PIN 5 ' Config. valores dos pinos I/O


ClkPin PIN 6 ' conectados à CLK e U/D.
PhotoPin PIN 2 ' Fototransistor no pino P2
DelayPulses CON 10 ' Atraso p/ observar LED apagar
DelayReader CON 2000
valMax CON 4000 ' Valor máx. fototransistor
valMin CON 100 ' Valor min. fototransistor

counter VAR Byte ' Contador para FOR...NEXT


oldTapSetting VAR Byte ' Configuração anterior do botão
newTapSetting VAR Byte ' Nova configuração do botão
lightReading VAR Word ' lida pelo fototransistor
scaleDivisor VAR Word ' Para valores de escala

' Estabelece um valor que pode ser dividido em uma medida do


' RCTIME do fototransistor para dimensionar sua escala em um
' intervalo de 0 à 128

scaleDivisor = (valMax - valMin) / 128

oldTapSetting = 0 ' Inicializa nova e velha


newTapSetting = 0 ' configuração do botão em zero

LOW UdPin ' Configura pino U/D para Down


FOR counter = 0 TO 127 ' Configura botão para posição
' mais baixa
PULSOUT ClkPin,5
PAUSE 1
Página - 251

NEXT

PAUSE 1000 ' 1 s antes da primeira mensagem

' -----[ Rotina principal ]---------------------------------------

DO
GOSUB Read_Phototransistor
GOSUB Scale_Phototransistor
newTapSetting = lightReading MIN 1 MAX 127
DEBUG HOME, DEC5 lightReading
GOSUB Set_Ud_Pin ' Configura pino U/D p/ up/down
GOSUB Pulse_Clk_pin ' Entrega pulsos
LOOP

' -----[ Sub-rotinas ]--------------------------------------------

Set_Ud_Pin: ' Examina velho e novo


IF newTapSetting > oldTapSetting THEN 'valor do botão p/ decidir
HIGH UdPin
ELSEIF newTapSetting < oldTapSetting THEN 'valor de UdPin. Avisa
LOW UdPin ' usuário se os valores
ENDIF ' forem iguais
RETURN

Pulse_Clk_pin: ' Entrega pulsos


FOR counter = oldTapSetting TO newTapSetting ' do velho a novo
PULSOUT ClkPin, 1 ' valor
PAUSE DelayPulses
NEXT
oldTapSetting = newTapSetting ' Controla novo e velho valor
RETURN ' de tapSetting

Read_Phototransistor:
HIGH PhotoPin
PAUSE 1
RCTIME PhotoPin, 1, lightReading
lightReading = lightReading MAX valMax MIN valMin
RETURN

Scale_Phototransistor:
lightReading = (lightReading - valMin) / scaleDivisor
RETURN
Página - 252

Capítulo 10: Protótipos De Suas Próprias Invenções


Este texto introduziu conceitos básicos de um computador de bordo em projetos e
invenções. Você agora já tem alguma experiência com os componentes de um circuito
comum em produtos de uso diário que incluem: luzes indicadoras, botões, servos,
mostradores, displays digitais, sensores de luz, alto-falantes, transistores, e outros
circuitos integrados. Você agora também já sabe conectar esses circuitos para o
microcontrolador BASIC Stamp e escrever códigos para testar cada um deles, bem
como integrá-los em pequenas aplicações.

A esta altura, você pode estar interessado em usar suas novas habilidades para inventar
alguma coisa, ou para saber mais, ou talvez ambos. O que você aprendeu neste livro
pode introduzi-lo no caminho para fazer protótipos para uma ampla variedade de
invenções. Neste capítulo, vamos usar um sistema de micro alarme, por exemplo, um
protótipo de um dispositivo familiar. Ao longo do caminho, nós vamos cobrir algumas
técnicas e práticas importantes de prototipagem, incluindo:

• Sugestões para iniciar o desenvolvimento de suas ideias de design e invenções;


• Um exemplo de como construir e testar cada subsistema no protótipo;
• Exemplos de como incorporar o código de teste para o código do projeto;
• Boas práticas de comentários de código e versões de arquivos;
• Exemplos de como usar peças conhecidas como dispositivos substitutos com
interfaces semelhantes;
• Dicas e truques para superar os obstáculos dos últimos projetos;
• Qual o próximo passo para encontrar mais projetos Stamps in Class e
dispositivos interessantes;

APLICANDO O QUE VOCÊ SABE COM OUTRAS PEÇAS E


COMPONENTES
O circuito do botão de pressão que vimos no Capítulo 3 é um exemplo de um
dispositivo de entrada muito simples, que converte uma condição física (mesmo que
alguém tenha ou não pressionado um botão), para um sinal de alta ou baixa, que o Basic
Stamp pode detectar e processar. Você também usou botões em aplicações para
controlar luzes piscando, posições do servo e tons do alto-falante. Existem muitos
sensores que detectam uma condição física diferente de "contato" que também enviam
sinais de alta ou baixa a um pino de I/O que o BASIC Stamp pode monitorar. Alguns
exemplos incluem gás, movimento e sensores de som e muitos outros mais. Agora que
você já tem experiência em fazer o BASIC Stamp monitorar um circuito de botão, o
monitoramento de um som ou sensor de movimento é muito semelhante, e, certamente,
um próximo passo razoável.

Outra técnica deste livro é a medição da queda de RC com o comando RCTIME para
sentir a posição do botão do potenciômetro e os níveis de luz, tanto com um
fototransistor ou com um LED. Estes exemplos são apenas a ponta do iceberg em
termos de sensores, que podem ser usados com um circuito de decaimento RC. Outros
exemplos incluem umidade, temperatura e pressão e, ainda, é só o começo. A luz
indicadora de LED proporciona ainda outro exemplo de circuito que representa uma
variedade de circuitos, com diferentes funções. O circuito de LED é controlado pela
saída do pino de I/O de alta/baixa do BASIC Stamp. Com circuitos de suporte
Página - 253

adicionais, você pode usar os sinais de alta/baixa para fazer motores elétricos irem para
frente e para trás, ligar/desligar as luzes, dispositivos de aquecimento e muito mais.

Agora, pense em todos os outros dispositivos que você experimentou neste livro. Cada
um deles é apenas um exemplo de uma lista de dispositivos com interfaces semelhantes
que você pode usar para criar protótipos para todo tipo de invenções.

PROTÓTIPO DE UM MICRO SISTEMA DE SEGURANÇA


Neste capítulo, vamos usar peças do BASIC Stamp - Kit de Atividades para fazer um
pequeno protótipo de sistema de segurança que você poderá usar em uma mesa,
aparador, caixa de ferramentas, ou armário. Pode servir para aqueles irmãos ou colegas
de trabalho que você suspeita que pegam suas coisas sem pedir. Com este protótipo, nós
também vamos investigar outras peças e componentes que você pode substituir em seu
sistema de segurança que operam sobre os mesmos princípios que as peças dos kits
familiares, mas poderia dar ao seu sistema uma funcionalidade muito maior. A partir
daí, veremos como encontrar, entender, testar e incorporar outras peças que você pode
nunca ter trabalhado antes.
Página - 254

ATIVIDADE #1: DA IDEIA A PROVA DE CONCEITO


Muitos produtos começam como uma ideia, em alguns casos, uma invenção que poderia
ser "muito legal", e em outros é algo que resolve um problema. Esta ideia pode ser
desenvolvida em um conceito com desenhos e especificações e em algum projeto inicial
de trabalho. O próximo passo é, tipicamente, desenvolver um protótipo de trabalho.
Pode não ser bonito, mas deve demonstrar de forma confiável que um dispositivo pode
ser feito para funcionar de acordo com o conceito e especificação. Em empresas que
desenvolvem produtos, esta prova de conceito é, normalmente, necessária para obter a
aprovação, gestão e financiamento para continuar o desenvolvimento do produto.

Ideia, Conceito e Descrição das Funções


Digamos que você tenha um armário com uma porta em uma dobradiça e uma gaveta, e
ele precisa de um sistema de alarme muito pequeno. Ou talvez você deseja criar um
gabinete especial embutido com segurança. A Figura 10-1 mostra um esboço da forma
como um potenciômetro e contato elétrico semelhante a um botão de pressão pode ser
utilizado para detectar quando uma porta ou gaveta estiver aberta. Este esboço é
semelhante a um diagrama de conceito, que se concentra apenas em transmitir o que o
produto ou a invenção faz.

Figura 10-1
Esboço da modelo de
um micro Sistema de
Segurança de um
Gabinete

A descrição funcional é importante. Quando você tem uma ideia melhor do que o seu
dispositivo está, a princípio, para fazer, evita problemas que poderão acontecer se você
tiver que redesenhar o dispositivo para acomodar algo que você não pensava. Designers
e empresas que criam dispositivos personalizados para os clientes têm que ter muito
cuidado ao interrogar os seus clientes para entender o que eles desejam. Especialmente,
para os dispositivos feitos sob medida, redesenhar pode ser extremamente caro e
demorado.

Aqui está um exemplo de uma breve descrição funcional que podemos usar para o nosso
sistema simples: Desenvolver um protótipo de circuito e programa para um micro
sistema de alarme que pode monitorar uma pequena porta que tem uma dobradiça e uma
gaveta. Se armado, o alarme deve soar se a porta ou gaveta estiver aberta. Um LED de
Página - 255

status deverá brilhar verde quando o alarme não estiver armado, e vermelho quando
estiver. Um protótipo pode ser armado e desarmado pelo controle do computador. Um
tempo de atraso deve ser incorporado depois que o dispositivo foi armado para permitir
que o usuário feche o gabinete.

Especificação
Além da descrição funcional, se possível, uma especificação normalmente é responsável
pelos muitos aspectos do dispositivo proposto, incluindo: custo, consumo de energia,
tensão, dimensões, peso, volume do alto-falante, entre outros detalhes.

Design Inicial
Muitas vezes, o projeto inicial envolve um brainstorming de abordagens que "pode"
resolver o problema de design, e muitas dessas ideias têm de ser testadas para saber se
elas realmente são viáveis. Outras partes do projeto podem envolver peças bastante
normais ou comuns e práticas de design. Nosso micro alarme se encaixa nesta categoria,
pelo menos, para o protótipo. Um botão de pressão pode ser montado no armário de
modo que quando a gaveta for fechada, ela pressionará o botão de pressão. Para a
dobradiça de uma porta, um potenciômetro poderá ser ligado de modo que torça com a
porta e possa detectar a posição da mesma. O LED bicolor é um indicador familiar, e o
piezospeaker é, certamente, um gerador de ruído já bem familiar.

Então, agora já conhecemos os circuitos necessários para o nosso micro protótipo de


segurança do gabinete: LED bicolor, botão, potenciômetro e piezospeaker. Aqui está
uma lista de capítulos e atividades, onde cada um desses circuitos foi introduzido:

• LED Bicolor: Capítulo 2, Atividade #5


• Botão: Capítulo 3, Atividade #2
• Potenciômetro: Capítulo 5, Atividade #3
• Piezospeaker: Capítulo 8, Atividade #1

Lista de Peças do Alarme do Gabinete


Retornando a todos os capítulos e colocando todas as peças juntas, você obterá essa lista
de peças:

(3) Resistores – 220 Ω (vermelho-vermelho-marrom)


(1) Resistores – 10 kΩ (marrom-preto-laranja)
(1) LED – bicolor
(1) Botão – normalmente aberto
(1) Piezospeaker
(1) Capacitor – 0.01 µF
(1) Potenciômetro – 10 kΩ
(4) Fios

Esquema do Alarme do Gabinete


O esquema na Figura 10-2 é organizado para dar a todos os componentes muito espaço
para a protoboard, por isso nem todas as conexões dos pinos de I/O são as mesmas dos
capítulos anteriores. Você terá que ter isso em mente quando colher exemplos de código
a partir dos capítulos anteriores para testar cada um dos circuitos.
Página - 256

Figura 10-2: Esquema do Protótipo do Sistema de Alarme

ATIVIDADE #2: CONSTRUIR E TESTAR CADA CIRCUITO


INDIVIDUALMENTE
Sempre que possível, teste cada subsistema individualmente antes de tentar fazê-los
trabalhar juntos. Se você seguir esta regra, seus projetos serão mais tranquilos, e isto
economizará tempo para resolução dos problemas. Por exemplo, se todos os circuitos
são construídos, mas não testados, as pessoas têm uma tendência natural de gastar muito
tempo examinando o código e esquecer de verificar cada circuito. Assim, a economia de
tempo, mais importante, neste processo é garantir que não há erros de circuito do que
você tentar se enganar pensando que eles são erros de codificação.

Construindo e Testando Cada Circuito


Esta atividade se concentra nos subsistemas individuais, construção e teste de cada
circuito. Uma vez que o circuito de botão for construído e testado, vamos construir e
testar o circuito de alto-falante. Depois de repetir esse processo com o potenciômetro e
com o LED bicolor. Assim, os circuitos já serão todos "bem conhecidos" e estarão
prontos para aplicação de alguns códigos.

 Encontre o código de teste no Capítulo 3, Atividade #2 para que você possa


adaptar e testar o circuito de botão da Figura 10-2.
 Altere as referências dos pinos de I/O para que ele funcione com o circuito na
Figura 10-2.
Página - 257

 Teste o código e corrija eventuais defeitos (bugs) ou erros de fiação antes de


continuar.
 Repita este mesmo processo para:
o Circuito do Piezospeaker: Capítulo 8, Atividade #1
o Circuito do Potenciômetro: Capítulo 5, Atividade #3
o Circuito do LED bicolor: Capítulo 2, Atividade #5
 Certifique-se de salvar cada programa modificado sob um novo nome, de
preferência em uma pasta separada, talvez chamada "WAM Capítulo 10".

Sua Vez – Sistema de Teste


Agora que todos os circuitos estão testados, e todos os programas de teste salvos no seu
PC, é hora de construir um teste do sistema que exibe mensagens de debug, indicando
que o circuito está sendo testado e como ele executa o código de teste. Este é um
exercício útil, pois os sistemas de alarme têm auto teste e formas de diagnóstico que
utilizam todos os recursos em uma rotina.

 Combine os elementos em seus programas de teste em um único programa que:


o Comece por exibir a cor do LED bicolor no DEBUG Terminal conforme
ele atualiza a cor....
o Em seguida, exibe uma mensagem dizendo que o piezospeaker está
emitindo um som enquanto ele apita...
o Finalmente entre em um loop que relata repetidamente o sensor do botão
da gaveta e o status do sensor do potenciômetro na dobradiça da porta no
DEBUG Terminal.
 Teste e corrija todos os erros antes de continuar.

ATIVIDADE #3: ORGANIZAR A CODIFICAÇÃO DE TAREFAS EM


PEQUENOS PEDAÇOS
Assim como cada circuito deve ser construído e testado antes de fazê-los trabalhar
juntos, cada característica do código também deve ser desenvolvida e testada,
individualmente, antes de incorporá-la a uma aplicação maior. MicroAlarmProto(Dev-
009).bs2 é o exemplo de um programa que está em seu caminho para uma prova de
conceito. Sua interface do DEBUG Terminal está no lugar, e o sistema de alarme circula
corretamente através de suas várias formas ou estados, incluindo não armado, armando,
armado e disparado.

Neste ponto, a sub-rotina Alarm_Arming no final do programa ainda está em


construção. Ela tem um código no lugar que dispara o alarme se o botão de pressão for
liberado, o que indica que a gaveta foi aberta, mas que ainda não monitora a dobradiça
da porta. O código do potenciômetro tem de ser adicionado à sub-rotina
Check_Sensors que mede a sua posição. Se a sua posição estiver além de um certo
limite, 15, por exemplo, a variável state, deve ser alterada para triggered. Duas tarefas
adicionais, que permanecem, são ligar o LED bicolor verde quando o alarme não estiver
armado, e vermelho, quando ele estiver. Estas tarefas restantes são indicadas pelos
comentários no código que se parecem com estes:

' A Fazer: LED bicolor verde


...
Página - 258

' A Fazer: LED bicolor vermelho


...
' A Fazer: Verificar se o potenciômetro está acima do limite
de valor. Se sim, então, engatilhe o alarme.

 Coloque manualmente o Hand-enter MicroAlarmProto(Dev-009).bs2 no BASIC


Stamp Editor (recomendado), ou baixe-o a partir de
www.parallax.com/go/WAM e abra-o com o BASIC Stamp Editor.
 Analise o programa e observe como cada sub-rotina é modular e faz um trabalho
específico. Isso faz parte da organização de tarefas de codificação em pequenos
pedaços.
 Se você não se lembra de como usar a janela de Transmissão e Recebimento no
DEBUG Terminal (Debug Terminal’s Transmit and Receive), reveja a Figura 9-
9 na página 246.
 Carregue o MicroAlarmProto(Dev-009).bs2 para o BASIC Stamp e use a janela
de transmissão do DEBUG Terminal para digitar o caractere A para armar o
alarme, e D para desarmar o alarme. O sistema faz uma breve contagem
regressiva antes de armar o alarme. Certifique-se de pressionar e segurar o botão
antes de armar o alarme.
 Enquanto o alarme está armado, solte o botão. Você terá a chance de desarmar o
alarme após alguns segundos do alarme soar.
 Arme o alarme novamente. Desta vez, digite "D" para desarmar o alarme antes
de soltar o botão.

' -----[ Título ]-----------------------------------------------------

' O que é um Microcontrolador - MicroAlarmProto(Dev-009).bs2


' Teste do sistema de alarme de armário.

' {$STAMP BS2} ' Target = BASIC Stamp 2


' {$PBASIC 2.5} ' Linguagem = PBASIC 2.5

' -----[ Constants ]--------------------------------------------------

NotArmed CON 0 ' Estados do sistema de alarme


Arming CON 1
Armed CON 3
Triggered CON 4

' -----[ Variables ]--------------------------------------------------

seconds VAR Word ' Armazena contagem de segundos


counter VAR Byte ' Para contagem
char VAR Byte ' Armazena caracteres
state VAR Nib ' Armazena estado do sistema de alarme

' -----[ Inicialização ]----------------------------------------------

PAUSE 1000 ' Aguarda 1 segundo


DEBUG "Programa funcionando..." ' Exibe mensagem de funcionamento
state = NotArmed ' Inicializa estado do alarme

' -----[ Rotina principal ]-------------------------------------------

DO ' Loop principal


SELECT state ' Avalia estado caso a caso
CASE NotArmed ' Se estado = não armado
Página - 259

' Faz: LED bicolor verde


GOSUB Prompt_to_Arm ' Chama Prompt_to_Arm
CASE Arming ' Se estado = Armando
GOSUB Alarm_Arming ' Chama Alarm_Arming
CASE Armed ' Se estado = Armado
' Faz: LED bicolor vermelho
GOSUB Check_Sensors ' Chama Check_Sensors
GOSUB Prompt_to_Disarm ' Chama Prompt_to_Disarm
CASE Triggered ' Se estado = Acionado
GOSUB Alarm_Triggered ' Chama Alarm_Triggered
ENDSELECT ' Termina de avaliar caractere
LOOP ' Repete loop principal

' =====[ Sub-rotinas ]================================================

' -----[ Sub-rotina - Prompt_To_Arm ]---------------------------------

Prompt_to_Arm:
DEBUG CLS, "Pressione A para armar", CR, ">" ' Exibe mensagem
GOSUB Get_User_Input ' Chama Get_User_Input
RETURN ' Retorna de Prompt_to_Arm

' -----[ Sub-rotina - Prompt_to_Disarm ]------------------------------

Prompt_to_Disarm:
DEBUG CLS, "Pressione D para desarmar", CR, ">" ' Exibe mensagem
GOSUB Get_User_Input ' Chama Get_User_Input
RETURN ' Retorna de Prompt_to_Disarm

' -----[ Sub-rotina - Alarm_Arming ]----------------------------------

Alarm_Arming:
DEBUG CLS, "Feche a porta.", ' Avisa usuário para fechar a porta
CR, "Você tem"
FOR seconds = 8 TO 0 ' Contagem regressiva
DEBUG CRSRX, 9, DEC seconds, CLREOL, ' Exibe tempo restante
" segundos..."
PAUSE 1000 ' Aguarda 1 segundo
NEXT ' Repete contagem regressiva
state = Armed ' Configura estado da variável para Armado
RETURN ' Retorna de Alarm_Arming

' -----[ Sub-rotina - Alarm_Armed ]-----------------------------------

Alarm_Armed:
DO ' Loop Armado
GOSUB Prompt_To_disarm ' Busca por entrada do usuário
GOSUB Check_Sensors ' Checa sensores
LOOP UNTIL state <> Armed ' Repete até estado não armado
RETURN ' Retorna de Alarm_Armed

' -----[ Sub-rotina - Alarm_Triggered ]-------------------------------

Alarm_Triggered:
DO ' Loop do Alarme Acionado
DEBUG CLS, "Alarme acionado!!!" ' Exibe aviso
FOR counter = 1 TO 15 ' Toca 15 tons de alarme
FREQOUT 6, 100, 4500
PAUSE 100
NEXT
FOR seconds = 1 TO 6 ' 3 s para usuário desarmar
Página - 260

IF state <> triggered THEN EXIT


GOSUB Prompt_to_Disarm
NEXT
LOOP UNTIL state <> triggered ' Repete até desarme

' -----[ Sub-rotina - Get_User_Input ]--------------------------------

Get_User_Input:
char = 0 ' Limpa variável de caractere
SERIN 16, 84, 500, Timeout_Label, [char] ' Aguarda 0,5 s para
' pressionarem tecla
GOSUB Process_Char ' Com tecla, chama Process_Char
Timeout_Label: ' Sem tecla, pula chamada
RETURN ' Retorna de Get_User_Input

' -----[ Sub-rotina - Process_Char ]----------------------------------

Process_Char:
SELECT char ' Avalia caractere caso a caso
CASE "A", "a" ' Se "A" ou "a"
state = Arming ' Muda estado da variável para Armando
CASE "D", "d" ' Se "D" ou "d"
state = NotArmed ' Muda estado da variável para Não Armado
CASE ELSE ' Se não for "A", "a", "D",
"d"
DEBUG "Wrong character, try again" ' Exibe mensagem de erro
PAUSE 2000 ' Dá 2 s para usuário ler
ENDSELECT ' Termina de avaliar caractere
RETURN ' Retorna de Process_Char

' -----[ Sub-rotina - Check_Sensors ]---------------------------------

Check_Sensors:
' Faz: Verifica se o potenciômetro está no valor limite.
' Se sim, então, aciona o alarme
IF IN0 = 0 THEN state = Triggered
' Botão liberado? Dispara alarme.
RETURN ' Retorna de Check_Sensors

Novas Técnicas de Codificação no Código de Exemplo


Dê uma olhada no segundo loop FOR...NEXT na subrotina Alarm_Triggered:

FOR seconds = 1 TO 6
IF state <> triggered THEN EXIT
GOSUB Prompt_to_Disarm
NEXT

Se uma chamada para a sub-rotina Prompt_to_Disarm resultar em uma mudança na


variável de estado, a instrução IF...THEN usa EXIT para sair do loop FOR...NEXT
antes que sejam feitas as 6 repetições.

Outro novo comando chamado SERIN aparece na sub-rotina Get_User_Input. DEBUG e


DEBUGIN são versões especiais dos comandos SEROUT e SERIN. Para ver como isso
funciona, tente substituir o comando DEBUG do “Programa funcionando...” por SEROUT
16, 84, ["Programa funcionando..."]. Ao contrário dos comandos DEBUG e DEBUGIN, os
comandos SEROUT e SERIN podem se comunicar com qualquer pino de I/O, ou pino 16
para comunicação com o DEBUG Terminal. Eles também têm códigos especiais que
Página - 261

você pode usar para selecionar a taxa de transmissão descrita nos comandos SERIN e
SEROUT tabelas de taxa de transmissão no manual do BASIC Stamp.

Get_User_Input:
char = 0
SERIN 16, 84, 500, Timeout_Label, [char]
GOSUB Process_Char
Timeout_Label:
RETURN

A sub-rotina Get_User_Input começa definindo a variável de char para 0 para


limpar os antigos valores que char pode estar armazenando. Em seguida, ela executa o
comando SERIN, com o seu valor opcional Timeout ajustado para 500 ms (metade de
um segundo), com a etiqueta de tempo limite opcional definida para Timeout_Label,
que está duas linhas abaixo. Se o comando SERIN receber um caractere dentro em 500
ms, ele armazenará o resultado na variável char e passará para a próxima linha, que
chamará a sub-rotina Process_Char. Se ele não conseguir um caractere em 500 ms,
ele saltará para Timeout_Label, o que faz com que ele pule sobre a sub-rotina
chamada.

Sua Vez – Próximos Passos para a Prova de Conceito


É hora de fazer este programa funcionar, como uma prova de conceito.

 Salve uma cópia do MicroAlarmProto(Dev-009).bs2 como


MicroAlarmProto(Dev-010).bs2.
 Use segmentos do seu código testado na Atividade #2 para completar os três
itens “Faz”.
 Teste seu código modificado, e quando ele estiver funcionando bem, salve uma
cópia do código como MicroAlarmProto(Dev-011).bs2.

ATIVIDADE #4: DOCUMENTAR O SEU CÓDIGO!


MicroAlarmProto (Dev-011).bs2 não está completamente terminado, porque ele ainda
precisa de alguma documentação e outras mudanças que tornam o programa mais fácil
de modificar e manter. Por exemplo, na sub-rotina Alarm_Triggered, o comando
FREQOUT 6, 100, 4500 tem o que alguns programadores chamam de "números
misteriosos”. Números misteriosos são valores que são usados de uma forma que o
observador casual possa não ser capaz de discernir com facilidade. Você poderia
reescrever este comando como FREQOUT SpeakerPin, BeepTime, AlarmTone. Depois,
você pode adicionar uma seção de diretivas Pin acima da seção Constants, e declarar
SpeakerPin PIN 6. Além disso, na seção Constants, declarar BeepTime CON 100, e
AlarmTone CON 4500.

Nem toda constante em um determinado programa tem que ser nomeada. Tenha em
mente que os números misteriosos são valores que são usados de uma forma que o
observador casual possa não ser capaz de discernir com facilidade. Outro exemplo a
partir da sub-rotina Alarm_Triggered é:

FOR seconds = 1 TO 6 ' 3 s para usuário desarmar


Página - 262

Os números 1 e 6 não são números misteriosos, porque é claro que eles fazem o loop
FOR...NEXT repetir seis vezes, e o comentário à sua direita indica que seis repetições
têm a duração de três segundos. Nem todos os supervisores podem concordar com essa
interpretação, e alguns podem enfaticamente proclamar que o 1 e o 6 são realmente
números misteriosos. Se você acabar de codificar o seu trabalho e seu chefe for um
defensor da nomeação de constantes, é uma boa ideia apenas aderir a qualquer estilo de
codificação.

 Vá para MicroAlarmProto(Dev-011).bs2 e documente os números misteriosos,


declarando as diretivas dos pinos e as constantes, e substituindo seus nomes por
números no programa.
 Uma exceção às diretivas PIN é o argumento Pin do comando SERIN, que deve
ser declarado como uma constante e não como um pino. Argumentos pinos são
para pinos de I/O e variam de P0 a P15. O argumento Pin 16 faz com que o
comando SERIN ouça o pino SIN do módulo BASIC Stamp, que está conectado
à porta de programação da sua placa.

Outra área onde a documentação MicroAlarmProto(Dev-011).bs2 ainda é fraca é nos


comentários que explicam cada rotina e sub-rotina. Cada sub-rotina deve ter
comentários que explicam o que ela faz, e qualquer variável depende dela para fazer seu
trabalho, e de todas as variáveis que a sub-rotina usa para armazenar os resultados antes
de seu RETORNO. Aqui está um exemplo de boa documentação adicionada ao início da
sub-rotina Process_Char.

' -----[ Sub-rotina - Process_Char ]---------------------------

'Atualize a variável de estado com base no conteúdo da


'variável do tipo char. Se char contém "A" ou "a", a constante
'Armed fica armazenada no lugar. Se char contém "D" ou "d",
'a constante Not-Armed fica armazenada no lugar.
'
Process_Char:
'... code omitted here
RETURN ' Return from...

 Atualize as descrições entre os títulos das sub-rotinas e seus rótulos, e repita a


rotina principal também.
 Quando você terminar, salve uma cópia do seu código com o nome
MicroAlarmProofOfConcept(v1.0).bs2

Guardar Cópias e Números de Versão de Incremento Após Cada Pequena


Mudança
Não se esqueça de continuar salvando as cópias de seu código com os pequenos ajustes.
Isto facilita retroceder pequenos passos, para o código correto, se sua(s) mudança(s)
causar(em) erro(s). Por exemplo, antes de sua próxima modificação, salve o arquivo
como MicroAlarmProofOfConcept(v1.01).bs2, ou talvez mesmo v1.01a. Quando a sua
próximo função estiver totalmente implementada, escolha um passo de revisão razoável.
Se for uma revisão menor, tente v1.1, se grande, vá até a v2.0.
Página - 263

ATIVIDADE #5: DÊ AO SEU APP UMA SURPREENDENTE NOVA


FUNCIONALIDADE
Como mencionado anteriormente, cada circuito que você trabalhou neste texto é
realmente um exemplo de um grupo de componentes e módulos que interagem da
mesma maneira com o BASIC Stamp. A Figura 10-3 mostra algumas substituições de
peças que você poderia fazer para converter o atual sistema de segurança do gabinete
em um que vai proteger um objeto de estar a céu aberto. Esse sistema modificado pode,
em vez detectar movimentos na sala, também detectar se alguém levanta o objeto que
você deseja proteger:

• Botão de pressão: saída alta-baixa → substitua pelo Sensor de movimento PIR


• Potenciômetro: resistor variável → substitua pelo Sensor FLEXIFORCE

O sensor PIR detecta mudanças nos padrões de luz infravermelha passiva na área
circundante, e envia um sinal de alta para indicar que o movimento foi detectado, ou
envia um sinal de baixa para indicar que não houve nenhum movimento. A resistência
do sensor FLEXIFORCE varia com a força aplicada no ponto redondo da extremidade
(por exemplo, um objeto posicionado sobre ela), de modo que possa ser medida em um
circuito RC com o comando RCTIME.

Figura 10-3: Sensores para atualizar o sistema de alarme

Sensor Sensor FLEXIFORCE


PIR

 Vá para www.parallax.com e digite “motion detection” (detecção de


movimento) no campo “Search” (pesquisa) e clique no botão “Go” (ir).
 Encontre o Sensor PIR nos resultados da pesquisa e vá para a página do produto.
 Baixe a documentação do Sensor PIR (.pdf) e, opcionalmente, assista ao vídeo
do Sensor PIR. O arquivo PDF estará na seção Downloads da página.
 Leia as explicações da documentação, esquemas e exemplos de código
PIR_Simple.bs2. Você pode substituir este sensor para um botão de pressão?
 Volte para os seus resultados de busca (ou para a página inicial da Parallax) e
digite “pressure” (pressão) no campo de pesquisa. Então, siga o link do sensor
FLEXIFORCE.
 Encontre-o e descompacte a Documentação de FLEXIFORCE e do código-
fonte.
 Na pasta descompactada, abra e leia a documentação, o diagrama esquemático, e
o código fonte do FLEXIFORCE Simple.bs2. Você pode substituir este sensor
por um potenciômetro?

Um exemplo passo-a-passo demonstra como as melhorias, tanto nesta como na


próxima atividade em um aplicativo de sistema de seu micro alarme pode ser
incorporado, siga o link Stamp in Class "Mini Projetos" em:
www.parallax.com/Education.
Página - 264

ATIVIDADE #6: SUPERANDO OBSTÁCULOS DO PROJETO


Agora que você está prestes a terminar as atividades com o BASIC Stamp - Kit de
Atividades, um dos passos mais importantes que você pode tomar é encontrar respostas
para as tarefas que você ainda não sabe como resolver com o seu microcontrolador.
Aqui estão as etapas gerais:

Passo 1: Procure os componentes ou circuitos que poderiam resolver o seu


problema.
Passo 2: Leia sobre o componente/circuito e descubra como ele funciona. Preste
especial atenção à forma como o BASIC Stamp seria necessário para interagir com o
componente/circuito.
Passo 3: Descubra se o exemplo de código está disponível para o circuito ou
componente. Isso vai torná-lo muito mais fácil de ser incorporado à sua aplicação.

Vamos dizer que o próximo passo em seu projeto é exibir o status do sistema, sem a
conexão com o computador. Aqui está um exemplo de como você pode encontrar e
avaliar um componente para sua aplicação.

 (Etapa 1) Vá para www.parallax.com e tente o termo "display" no campo de


pesquisa. Na página inicial, você pode precisar clicar no botão Go em vez de
apenas pressionar Enter. Vá para as páginas do produto dos vários itens
resultantes da pesquisa e veja se você pode encontrar um que é relativamente
barato e capaz de exibir algumas linhas de texto.

Se você decidiu que o Parallax Serial 2x16 LCD na Figura 10-4 é um bom candidato,
você está no caminho certo. No entanto, qualquer display funcionará.

Figura 10-4
Parallax 2x16 Serial
LCD

 (Passo 2) Vá para a página do produto Parallax Serial 2x16 LCD. Se você não
tiver feito isso, leia a descrição do produto. Em seguida, localize o link da
Documentação em PDF do Parallax Serial 2x16 de LCD. Vai estar na página
“Downloads and Resources”, da seção, provavelmente, chamada "Parallax
Serial 2x16 LCD Documentation v2.0 (.pdf)”. A versão 2.0 pode ser mais
recente.
 (Passo 3) Verifique se há um exemplo de código na documentação em PDF do
Parallax Serial 2x16 LCD, bem como links para download do código na página
da web, seção Downloads and Resources. Procure um bom exemplo de
programa que seja curto, simples e que exiba uma mensagem de teste, pois
geralmente fornece um bom ponto de partida.
Página - 265

Após a breve introdução ao SERIN e SEROUT no exemplo de programa deste capítulo, o


exemplo de código para o Parallax Serial LCD, que se baseia em SEROUT, pode parecer
bastante familiar.

Se você seguir o link “Smart Sensors and Applications” (Sensores Inteligentes e


Aplicativos), você pode baixar os sensores inteligentes e aplicativos dos livros
didáticos, que têm um capítulo inteiro sobre como controlar esta exposição com o
BASIC Stamp 2.

Três Exemplos de Quantos Outros?


Os sensores PIR e FLEXIFORCE e o LCD Serial Parallax são três exemplos de
módulos e componentes que você pode usar para aumentar significativamente a
funcionalidade do seu protótipo. Estes três são apenas uma gota no oceano em
comparação com o que está disponível.

A Figura 10-5 mostra mais alguns módulos e componentes, que são apenas uma
pequena amostra. Os exemplos apresentados na figura são: (a) o módulo RF para
comunicação de rádio, (b) giroscópio para detectar a velocidade de rotação, (c) bússola
para encontrar direção, (d) sensor de vibração, (e) acelerômetro para detectar mudanças
de inclinação e de velocidade, (f) sensor de ultrassom para detectar a distância, (g)
sensor de intensidade de luz, (h) servo controlador, (i) controlador do motor DC, (j)
matriz Darlington para conduzir as bobinas do motor de passo e (k) motor de passo.
Você pode encontrar qualquer um destes dispositivos em www.parallax.com com uma
pesquisa por palavra chave. Por exemplo, para saber mais sobre o (f) digite "sensor de
ultrassom" no campo de busca da página principal da Parallax e, em seguida, clique no
botão Ir (Go).

Figura 10-5: Mais Módulos e Exemplos de Acessórios

Comunicação Sensores Controles de Motor


b e h
a j

c f

k
i
d g

Sua Vez - Investigando Mais Recursos


Se você tem um projeto em mente e precisa encontrar um circuito e um código para
suportar uma das características do seu projeto, o processo de pesquisa que acabamos de
discutir fornece um bom ponto de partida, mas as páginas de produtos são encontradas
Página - 266

somente em www.parallax.com, e há uma série de questões de projetos que as páginas


de produtos não terão a solução. Felizmente, existem muitos mais recursos, incluindo:

• Stamps in Class em livros didáticos em PDF;


• Documentação do produto Parallax em PDF;
• Respostas às perguntas e artigos nos fóruns parallax.com;
• Artigos do BASIC Stamp publicados na Internet.

Quando você estiver à procura de componentes e informações sobre como usá-los com
o BASIC Stamp, eles se enquadrarão na categoria de “informações do aplicativo”. Ao
procurar informações sobre o aplicativo, é melhor começar com o site do fabricante, em
seguida, expandir a pesquisa para incluir os fóruns, e se você ainda não encontrou uma
boa solução, tente expandi-la ainda mais incluindo a internet. A Figura 10-6 mostra um
exemplo de pesquisa de palavras chaves no Google que vai procurar os termos
"infravermelho" e "remoto" em documentos em PDF e em páginas de produtos no
www.parallax.com. O importante aqui é que o Google procura documentos PDF em vez
de apenas páginas de produtos. Certifique-se de que não há espaços ao digitar o site:
www.parallax.com.

Figura 10-5
Pesquisa no Google
no site
www.parallax.com

Você pode modificar a pesquisa para incluir perguntas e respostas nos fóruns de suporte
da Parallax, alterando o "www" para "foruns" como este:

infrared remote site:forums.parallax.com

Este fórum procura por todas as perguntas, respostas e artigos curtos que contenham as
palavras "infravermelho" e "remoto" em foruns.parallax.com. Para encontrar um
aplicativo específico para o BASIC Stamp, mude a sua pesquisa para os termos abaixo.
Certifique-se que as palavras BASIC Stamp estejam entre aspas para filtrar a coleta de
resultados.

Aqui está um resumo das sequências de pesquisa do Google para "BASIC Stamp”
infravermelho remoto.

 site infravermelho remoto: www.parallax.com


o Pesquise os termos "infravermelho" e "remoto" em PDF e páginas de
produto em www.parallax.com
 site infravermelho remoto: foruns.parallax.com
o Pesquise os termos "infravermelho" e "remoto" em discussões nos fóruns
parallax.com
 “BASIC Stamp” infravermelho remote
o Busque na rede mundial de computadores as palavras “infravermelho”
(“infrared”) e “remoto” (“remote”) na mesma página em PDF com a
frase "BASIC Stamp".
Página - 267

Vamos dizer que o próximo passo, para o seu projeto de Alarme, seja um teclado. Mas a
documentação e exemplos que você encontrou com uma simples pesquisa na página do
produto em parallax.com acabou por ser escassa e desprovida de exemplos de circuitos
e código. Supondo que algumas pesquisas estariam em ordem, vamos tentar uma
pesquisa no Google no site da Parallax para todas as referências de teclado. Lembre-se,
a busca no Google inclui documentos em PDF.
 Vá para www.google.com.
 Digite “keypad site:www.parallax.com” dentro do campo Search e pressione
Enter.

Para filtrar os resultados é necessário um pouco de paciência e persistência, pois pode


haver muitas páginas de resultados. Normalmente há trechos suficientes de cada
resultado de busca para obter algum contexto para cada link. Isto lhe dará uma ideia de
quais ignorar e quais devem ser levados em conta. Depois de algumas páginas, você
pode encontrar e seguir o link do kit de Peças do Controle Remoto IR, mostrado na
Figura 10-7. Isto pode não ser a solução que você estava esperando, mas depois de
examinar o preço, documentação e código de exemplo, ele pode ter um grande potencial
para o seu sistema de segurança com teclado.

Figura 10-6: Kit de Peças do Controle Remoto IR

Se depois de tudo isso, você ainda não encontrou a informação que você precisa, é hora
de ir aos fóruns da parallax.com. Quando você postar uma pergunta lá, ela será vista por
especialistas em uma variedade de campos, bem como por professores, amadores e
estudantes. A experiência coletiva dos Fóruns Parallax deve ser capaz de ajudá-lo em
praticamente qualquer obstáculo do projeto!

Processador de Memória e Obstáculos de Velocidade do Projeto


Em alguns casos, programas para projetos maiores podem crescer o suficiente e
ultrapassar a memória de programa do BASIC Stamp 2. Este obstáculo do projeto pode,
às vezes, ser saltado reescrevendo o código, para trabalhar mais com menos comandos.
Outra opção é fazer a atualização para um modelo BASIC Stamp com uma memória de
programa maior. Em outros casos, o projeto pode envolver uma maior armazenagem de
valores do que o BASIC Stamp 2 pode acomodar. Há também modelos do BASIC
Stamp 2 que apresentam memória de rascunho RAM para os valores das variáveis.
Outros projetos podem precisar fazer mais tarefas em menos tempo do que o BASIC
Stamp 2 foi projetado para fazer, por isso alguns modelos do BASIC Stamp 2 são
projetados com velocidades de processamento mais rápidas.

A Figura 10-8 mostra todos os diferentes modelos BASIC Stamp. Para obter detalhes
sobre um, siga o link "Comparar módulos BASIC Stamp" no
www.parallax.com/BasicStamp.
Página - 268

Figura 10-7: Linha completa de modelos BASIC Stamp

A partir da esquerda: BS1, BS2, BS2E, BS2SX, BS2P24, BS2P40, BS2pe, BS2px

BS1: Econômico, mas capaz, perfeito para pequenos projetos ou espaços apertados.
BS2: Ideal para iniciantes, com uma vasta base de recursos de código de amostra; o
coração dos programas Stamps Class.
BS2E: Perfeito para usuários do BS2 que precisam de mais espaço no programa e
variável.
BS2SX: Suporta o conjunto de comandos BS2 com mais variáveis e espaço no
programa em mais de duas vezes a velocidade de execução.
BS2P24: Além de mais velocidade e espaço variável, comandos especiais apoiam o
polling I/O, caracteres LCDs e protocolos I2C e 1-fio.
BS2P40: Todos os recursos do BS2P24 com um banco de 16 pinos de I/O adicionais.
BS2pe: Suporta o comando BS2P24 emparelhado com menor consumo de energia e
mais memória para aplicações de registro de dados movidos a bateria.
BS2px: O mais rápido modelo BASIC Stamp BS2P24, suporta todos os comandos,
além de recursos especiais de configuração de I/O.

Uma coisa a ter em mente é que se você atualizar para um modelo mais rápido do
BASIC Stamp existirão diferenças de unidades de comandos sensíveis ao tempo como
RCTIME e FREQOUT. Uma vez que os processadores de diferentes modelos decorrem em
velocidades diferentes, as unidades de duração e frequência e outros argumentos podem
ser diferentes. Por exemplo, quando BS2 executa FREQOUT 6, 100, 4500, ele envia
um sinal de alarme estridente de P6 para 100 ms (1/10 de um segundo) a uma
frequência de 4500 Hz. O mesmo comando executado pelo BS2px envia um tom que
dura apenas 16,6 ms com uma frequência de 27.135 Hz, tão agudo que não é audível
aos ouvidos humanos! Para uma descrição completa de como cada comando funciona
em cada modelo, e para obter dicas sobre a conversão de programas BS2 para executar
corretamente em outros modelos, consulte a ajuda do BASIC Stamp Editor.

Processamento Paralelo de Alto Desempenho


Alguns aplicativos complexos exigem agilidade de processamento e memória que está
bem além das linhas de capacidade do BASIC Stamp 2. Estes são os tipos de projetos
que o microcontrolador Propeller é projetado para fazer. Este microcontrolador único,
capaz, tem oito processadores muito mais velozes em um único chip, juntamente com
32 pinos de I/O e amplo programa de memória, e memória RAM. Os processadores
podem operar ao mesmo tempo, tanto de forma independente e cooperativamente,
partilhando a memória de acesso mundial e um relógio do sistema. Cada processador
tem a sua própria memória e hardware adicional para executar tarefas complexas, como
monitorar o estado de alta velocidade do pino de I/O, ou gerar sinais para uma tela de
televisão ou computador.
Página - 269

O Propeller Education - Kit Educacional mostrado na Figura 10-9 é uma boa maneira
de começar a trabalhar com o microcontrolador Propeller. Este kit não é
necessariamente o melhor próximo passo depois do BASIC Stamp - Kit de
Atividades. A próxima atividade tem algumas boas recomendações para as próximas
etapas do livro/kit. No entanto, quando você perceber que seus projetos estão ficando
mais ambiciosos e exigentes, lembre-se do microcontrolador Propeller e do Propeller
Education - Kit Educacional.

Figura 10-8
Propeller Education
- Kit Educacional (à
esquerda) e
Plataforma PE (à
direita)

ATIVIDADE #7: QUAL SERÁ A PRÓXIMA?


Agora que você está prestes a terminar BASIC Stamp - Kit de Atividade é hora de
pensar sobre o que aprender em seguida. Antes de continuar, tire um tempo para
considerar em que mais você está interessado. Algumas categorias gerais que você
futuramente pode se aprofundar ainda mais, incluem:

• Robótica;
• Eletrônica;
• Sensores;
• Automação;
• Projetos de Diversão;
• Ciências da Terra e medições climáticas.

Esta atividade levantou recursos que você pode usar para avançar com cada uma dessas
categorias.

Os recursos, kits e componentes discutidos nesta atividade foram atualizados


quando este capítulo foi escrito (2009). As melhores e mais recentes versões
dos recursos, kits e componentes podem se tornar disponíveis e substituir as
informações aqui apresentadas. Certifique-se de verificar www.parallax.com para
últimas informações.

O que é um Microcontrolador? - Sequência


A Figura 10-10 mostra os 10 livros e kits que fazem as melhores sequências para este
livro. Robótica com o Boe-Bot é muito divertido e um grande aprendizado, porque você
começa a aplicar muitas das técnicas deste livro para aplicações robóticas com o robô
Boe-Bot. Sensores inteligentes e Aplicações foram escritos para ser "O que é um
microcontrolador, parte 2". Foi rebatizado porque todos os elegantes sensores e visor de
Página - 270

cristal líquido mostrado no centro da Figura 10-10 têm coprocessadores que se


comunicam com o BASIC Stamp. Os coprocessadores fazem-no sensores "inteligentes".
Sinais de entendimento são ótimos porque permitem "ver" as interações entre o BASIC
Stamp e os circuitos com um osciloscópio da Parallax que você pode conectar na porta
USB do seu computador.
Figura 10-9: Grandes próximos passos após “O que é um microcontrolador?”

Sensores
Entendendo
Inteligentes e
sinais, peças e
Kit do Robô Boe-Bot Aplicação de
texto
Peças de Teste

Stamps in Class e Mais Livros Didáticos


A Figura 10-11 mostra um fluxograma que descreve todos os kits de Stamps in Class e
livros didáticos disponíveis no momento da redação desse texto. Estão acessíveis
através da Visão Global do Programa Stamps in Class (Stamps in Class Program
Overviews) e do link Fluxograma (Flowchart) no www.parallax.com/Education, e você
pode clicar em cada foto para visitar a página do produto no livro e o kit que
acompanha. O que é um Microcontrolador? está no canto superior esquerdo da figura. A
partir daí, o fluxograma indica que você pode saltar para Robótica com o Boe-Bot ou
qualquer texto/kit nos sensores ou série de sinais.

Download completo de livros didáticos em PDF: Você pode fazer o download


de todo o PDF totalmente colorido de cada Stamp in Class em
www.parallax.com. Clique em qualquer uma das fotos do gráfico para navegar
até a página do texto + Kit, e você vai encontrar o link em PDF na seção de
Downloads da página.
Página - 271

Figura 10-10
Fluxograma do
Stamps in Class

Se a categoria que você está interessado é:


• Robótica, então, o próximo passo é definitivamente Robótica com o Boe-Bot.
• Sensores, inventos ou projetos de diversão, então o próximo passo seria
Sensores inteligentes e aplicações.
• Eletrônicos (sinais), então o próximo passo seria Entendendo Sinais.
• Automação, então o próximo passo seria Controle de Processos.
• Ciências da Terra e medições climáticas, então o próximo passo seria Sensores
Aplicados.

Recurso Adicionais dos Stamps In Class


Além do que está nos livros didáticos Stamps in Class, existem “Mini Projetos” Stamps
in Class linkados no www.parallax.com/Education. Alguns projetos utilizam apenas as
peças em estoque de um determinado kit, mas demonstram novas maneiras de usá-las,
juntamente com novos conceitos. Muitos desses projetos são como capítulos completos
dos livros didáticos Stamps in Class com atividades, esquemas, diagramas de fiação, e
listagens de código completas que podem ser baixadas. Alguns até têm tutoriais em
vídeo que acompanham. A Figura 10-12 é retirada do vídeo do projeto “Construa seu
próprio mini temporizador ("Build Your Own Mini timer"), que pode ser feito apenas
com as peças que você tem usado neste livro. Se você está procurando mais
informações ou uma inspiração criativa, você pode encontrá-la aqui.
Página - 272

Figura 10-11: Exemplo do “Mini Projeto” Stamps in Class

SUMÁRIO
Este livro introduziu uma variedade de circuitos e técnicas de todos os que são blocos
de construção em produtos comuns, bem como nas invenções. Este livro também
apresentou técnicas para orquestrar os vários blocos de construção com o
microcontrolador BASIC Stamp. Este capítulo demonstrou como incorporar essas
técnicas e blocos de construção em um protótipo, e também recomendou alguns
próximos passos para aprender mais na sua área de interesse.

A abordagem para fazer o BASIC Stamp interagir com um determinado circuito pode
ser aplicada a uma variedade de outros circuitos e módulos para realizar uma gama
ainda mais vasta de tarefas. Foram aplicados dois exemplos ao protótipo de alarme: (1)
com um sensor de movimento de uma interface semelhante a um botão de pressão e (2)
um sensor de pressão com uma interface semelhante ao potenciômetro.

Ao desenvolver o código para sua aplicação, certifique-se de salvar seu trabalho com
frequência sob os nomes de revisão incrementados. Além disso, certifique-se de usar
nomes significativos para os pinos de I/O e números com as diretivas PIN e CON. Por
último, acrescente muitos comentários ao seu código, explicando o que ele faz e como
ele faz isso. Sub-rotinas devem incluir comentários que explicam o que a rotina faz com
todas as variáveis com valores que ele usa para fazer seu trabalho, bem como as
variáveis em que os resultados são armazenados quando a sub-rotina está pronta.

Este capítulo também introduziu uma variedade de técnicas de pesquisa para programar
recursos em seu protótipo. Mesmo se você começar sem nenhuma pista sobre como
fazer um trabalho com uma característica peculiar, você pode usar termos de pesquisa
para encontrar exemplos úteis de componente, circuito e código. Livros didáticos e kits
do Stamps in Class também apresentam uma grande variedade de circuitos e técnicas
úteis de design, e eles são um ótimo lugar para aprender mais nas áreas de robótica,
Página - 273

sensores, eletrônica, automação, ciências da terra, e muito mais. Todos os livros que
vêm com kits Stamps in Class têm downloads gratuitos.

Agora que você chegou ao final deste livro, tire um momento para pensar em quatro
coisas: (1) nas técnicas que você aprendeu, (2) na sua próxima invenção, projeto ou
protótipo, (3) como pode ser aplicado o que você aprendeu e (4) o que você quer
aprender a seguir.

 Agora, é hora de começar a fazer o seu próximo projeto ou protótipo.


 Certifique-se de continuar estudando e aprendendo novas técnicas conforme
você for fazendo.
 Divirta-se e boa sorte!
Página - 274

Apêndice A: Lista de Peças e Opções de Kit

Kit de Peças e Livro #28152, Apenas Peças #28122 de “O que é um


Microcontrolador?”
Peças e quantidades estão sujeitas a alterações sem aviso prévio
Peças
Descrição Quantidade
Parallax #
150-01020 Resistor, 5%, 1/4W, 1 kΩ 10
150-01030 Resistor, 5%, 1/4W, 10 kΩ 4
150-01040 Resistor, 5%, 1/4W, 100 kΩ 2
150-02020 Resistor, 5%, 1/4W, 2 kΩ 2
150-02210 Resistor, 5%, 1/4W, 220 Ω 6
150-04710 Resistor, 5%, 1/4W, 470 Ω 6
152-01031 Potenciômetro - 10 kΩ 1
200-01031 Capacitor, 0.01 µF 2
200-01040 Capacitor, 0.1 µF 2
201-01080 Capacitor, 1000 µF 1
201-03080 Capacitor 3300 µF 1
Livro “O que é Microcontrolador?” (apenas
28123 1
no #28152)
350-00001 LED - Verde - T1 3/4 2
350-00005 LED - Bicolor - T1 3/4 1
350-00006 LED - Vermelho - T1 3/4 2
350-00007 LED - Amarelo - T1 3/4 2
350-00027 Display de LED de 7 segmentos 1
350-00029 Fototransistor, 850 nm, T1 3/4 1
400-00002 Botão – Normalmente aberto 2
451-00303 3 cabeçalho de Pino – Macho/Macho 1
500-00001 Transistor – 2N3904 1
604-00010 Potenciômetro digital de 10 kΩ 1
800-00016 Fios de 3” – Saco com 10 2
900-00001 Alto-falante 1
900-00005 Servo Padrão Parallax 1
Página - 275

OPÇÕES DE KIT COMPLETO


Existem várias opções de kits disponíveis que incluem a placa de desenvolvimento do
microcontrolador Basic Stamp 2 e todos os componentes eletrônicos para concluir as
atividades neste texto:

• Kit de atividades do BASIC Stamp (#90005) inclusos:


o BASIC Stamp HomeWork Board com a superfície de montagem BS2
o USB para Adaptador Serial com cabo USB A para Mini-B (#28031)
o “O que é Microcontrolador?” Peças e Livro (#28152)
• Kit Descobrindo o BASIC Stamp (Serial #27207 ou USB #27807) inclusos:
o Board of Education (Serial #28150 ou USB #28850)
o Módulo do microcontrolador BASIC Stamp 2 (#BS2-IC)
o Cabo de Programação (Serial #800-00003 ou USB A para Mini-B
#805-00006)
o “O que é Microcontrolador?” Peças e Livro (#28152)
o Manual do BASIC Stamp (#27218)
• “O que é Microcontrolador?” Peças e Livro (#28152). PLUS
• Kit completo do Board of Education (Serial #28103 ou USB #28803)
inclusos:
o Board of Education (Serial #28150 ou USB #28850)
o Módulo do microcontrolador do BASIC Stamp 2 (#BS2-IC)
o Cabo de Programação (Serial #800-00003 ou USB A para Mini-B
#805-00006)
o Fios (1 pacote com 10

Nota para os Educadores: descontos nas compras em quantidade estão disponíveis


para todos os kits listados acima. Consulte a página de produtos de cada kit em
www.bseducacional.com.br para mais informações. Além disso, o BASIC Stamp
HomeWork Board está disponível separadamente em embalagens de 10, como uma
solução econômica para o uso em sala de aula, com um custo significativamente menor
do que o Board of Education + BASIC Stamp 2 módulo (#28158). Para preços em
compras maior quantidade, por favor, entre em contato com a Equipe de Vendas da BS
Educacional através do telefone +55 (11) 2533 9.
Página - 278

Apêndice B: Mais Informações Sobre Eletricidade


O que é um elétron? Um elétron é uma das três partes fundamentais de um átomo, os
outros dois são os prótons e neutrons. Um ou mais prótons e neutrons se unem no centro
da molécula numa área chamada núcleo. Os elétrons são muito pequenos em
comparação com os prótons e neutrons, e orbitam ao redor do núcleo. Os eletrons
repelem-se mutuamente, mas eletrons e protons atraem uns aos outros.

O que é uma carga? A tendência de um elétron se repelir a partir de um outro elétron


e atrair um próton próximo é chamada de carga negativa. A tendência de um próton
repelir outro próton e atrair um elétron é chamada de carga positiva. Quando uma
molécula possui mais elétrons do que prótons, ela será carregada negativamente. Se
uma molécula tem menos elétrons do que prótons, ela será carregada positivamente. Se
uma molécula tem o mesmo número de prótons e elétrons, é chamada de carga neutra.

O que é uma voltagem? A voltagem é como a pressão elétrica. Quando uma molécula
carregada negativamente está perto de uma molécula carregada positivamente, o eletron
extra na molécula carregada negativamente tenta obter a partir da molécula carregada
negativamente para a molécula carregada positivamente. As baterias mantém uma
composição com as moléculas carregadas negativamente, separadas a partir de uma
composição com as moléculas carregadas positivamente. Cada uma destas composições
encontra-se ligada a um dos terminais da bateria; a composição carregada positivamente
está ligada ao terminal positivo (+), e a composição negativa está ligado ao terminal
negativo (-) do terminal.

O volt é uma medida de pressão elétrica, e é abreviado com uma letra maiúscula V.
Você já deve estar familiarizado com a bateria de nove volts (9 V) usada para fornecer
energia para o Board of Education ou HomeWork Board. Outras baterias comuns
incluem as baterias de 12 V encontradas em carros e nas pilhas de 1,5 V AA usadas
em calculadoras, jogos portáteis e outros dispositivos.

O que é uma corrente? Corrente é a medida do número de elétrons por segundo que
passa através de um circuito. Algumas vezes, a ligação de moléculas de uma reação
química cria uma composição (que tem carga neutra). Outras vezes, o elétron deixa a
molécula carregada negativamente e se junta à molécula carregada positivamente,
passando pelo circuito como o que você acabou de construir e testar. A letra mais
comumente usada para se referir a corrente nos esquemas e livros é a letra maiúscula
"I."

O que é um amp? Um amp (abreviação de ampere) é a unidade básica da corrente, e a


abreviação para amp é a letra maiúscula "A." Em comparação com os circuitos que
você está usando com o BASIC Stamp, um amp é uma quantidade muito grande de
corrente. É um valor conveniente para descrever a quantidade de corrente que a bateria
de um carro fornece para os faróis, para o ventilador que resfria o motor de um carro , e
outros dispositivos de alta potência. Medições de miliampéres (mA) e microampéres
(uA) são mais convenientes para discutir a corrente de alimentação do módulo BASIC
Stamp, bem como as correntes entre os pinos e circuitos de I/O. 1 mA = 1/1, 000 A, e 1
mA = 1/1, 000,000 A.

O que é uma resistência? A resistência é a tendência de um elemento de um circuito


Página - 279

para resistir ao fluxo de elétrons ( corrente) de um terminal negativo da bateria para o


terminal positivo.
O ohm é a medida básica da resistência .Ele já foi introduzido e é abreviado com a letra
grega ômega ( Ω ).

O que é um condutor? É o fio de cobre que tem quase nenhuma resistência, e é.

ATIVIDADE BÕNUS: LEI DE OHM, VOLTAGEM E CORRENTE


Aplica-se a esta atividade algumas das definições que acabamos de discutir.

Peças - Lei de Ohm


(1) Resistor – 220 Ω (vermelho-vermelho-marrom)
(1) Resistor – 470 Ω (amarelo-violeta-marrom)
(1) Resistor – 1 kΩ (marrom-preto-vermelho)
(1) Resistor – 2 kΩ (vermelho-preto-vermelho)
(1) LED – qualquer cor

Circuito de Teste
O valor da resistência Ri na Figura B-1 pode ser alterado. Uma menor resistência
permite mais corrente através do LED, e ele vai brilhar com mais intensidade. Os
valores mais elevados de resistência farão com que o LED pareça escuro porque eles
não permitem a passagem de muita corrente através do circuito.

 Desligue a energia do seu Board of Education ou HomeWork Board sempre que


você modificar o circuito.
 Construa o circuito mostrado na figura B-1 começando com um resistor de 220
Ω.
 Modifique o circuito, substituindo o resistor de 220 Ω por um resistor de 470 Ω.
O LED ficou menos brilhante?
 Repita usando o resistor de 1 Ω., em seguida use um resitor de 2 Ω., verifique a
variação de brilho cada vez.

Vdd Vin Vss


X3
Vdd +
R1 R 2 R 3 R 4 P15
P14
P13
Ri
P12 Figura B-1
P11
P10
LED Monitor de
P9 Corrente
P8
R1 = 220 Ω P7
LED R2 = 470 Ω P6
P5
R3 = 1 k Ω P4
R4 = 2 k Ω P3
P2
Vss P1
P0
X2

Se você estiver usando uma bateria de 9 V, você também pode comparar o brilho de
uma fonte de voltagem diferente, Vin. Vin está conectado diretamente ao terminal + da
bateria de 9 V, e Vss está conectado diretamente ao terminal negativo da bateria. Em
Página - 280

nosso sistema, Vdd está regulado a 5 V. Isso é cerca de metade da voltagem da bateria
de 9 V.

 Se você não estiver usando uma bateria de 9 V, pare por aqui e pule para o
cálculo de corrente da seção abaixo. Caso contrário, continue.
 Comece com o circuito mostrado na figura B-1, mas use um resistor de 1 kΩ.
 Anote quão brilhante o LED está
 Desconecte a energia.
 Modifique o circuito, desligando o resistor principal de Vdd e coloque-o em
Vin..
 Quando você reconecta a energia o LED está mais brilhante? Quanto mais
brilhante?

Não tente fazer a experiência Vin com um resistor de 220 ou 470 Ω, pois ele irá
alimentar o LED como mais corrente do que ele está classificado.

Calculando a Corrente
O manual do BASIC Stamp tem algumas regras sobre a quantidade de corrente que os
pinos de I/O podem fornecer aos circuitos. Se você não seguir estas regras, você pode
acabar prejudicando o seu BASIC Stamp. As regras têm a ver com a quantidade de
corrente que um pino ou um grupo de pinos de I/O pode entregar.

Regras atuais para pinos de I/O do BASIC Stamp


• Um pino de I/O pode ter uma "fonte" de até 20 mA. Em outras
palavras, se você enviar um sinal de alta para um pino de I/O, ele não
deve alimentar o circuito de LED, com mais de 20 mA.
• Se você religar o circuito de LED para que o BASIC Stamp faça o LED
acender, quando você enviar o comando LOW, o pino de I/O pode
"afundar" até 25 mA.
• P0 até P7 só pode utilizar até 40 mA. Da mesma forma com P8 até P15.
40 mA também é a corrente fornecida ao pino de I/O estimada para o
regulador do módulo 25 V do BASIC Stamp , de modo que o consumo
total de corrente de todos os pinos de I/O não devem nunca exceder 40
mA. Se você tem muitos circuitos de LED, você precisará de resistores
maiores para que os circuitos não puxem muita corrente.
• Para mais informações, consulte a tabela de descrição dos pinos do
BASIC Stamp 2 no no Manual BASIC Stamp.

Se você sabe como calcular a quantidade de corrente que o seu circuito vai usar, então
você consegue decidir se tudo bem seu LED brilhar com essa intensidade específica.
Cada componente tem suas próprias regras no que diz respeito à voltagem, resistência e
corrente. Para o diodo emissor de luz, a regra é um valor chamado de voltagem direta do
diodo. Para o resistor, a regra é chamada Lei de Ohm. Há também regras para adicionar
voltagem e corrente nos circuitos. Estas são chamadas de Leis de Voltagem e Corrente
de Kirchhoff.
Página - 281

Vdd - Vss = 5 V A voltagem (tensão elétrica) de Vdd para Vss é de 5 V. Isto é


chamado de voltagem regulada, e ela funciona mais ou menos como uma bateria que
fornece exatamente 5 V. (As baterias não são tipicamente de 5 V, embora quatro baterias
de 1,2 V de níquel-cádmio recarregáveis em série podem adicionar até 4,8 V.) O Board of
Education e o BASIC Stamp HomeWork Board ambos têm reguladores de 5 V que
convertem a bateria de 6 a-9 V para fornecer voltagem ao regulador de 5 V para as
tomadas de Vdd acima da breadboard. O BASIC Stamp, também tem um regulador de
voltagem embutido que converte a entrada de 6 a 9 V para 5 V, para os seus
componentes.
Vin - Vss = 9 V Se você estiver usando bateria de 9 V, a voltagem de Vin para Vss é
de 9 V. Tenha cuidado. Se você estiver usando um regulador de voltagem que se conecta
à parede, mesmo que ele diga 9 V, poderia ir tão alto como 18 V.
Terra e / ou referência referem-se ao terminal negativo de um circuito. Quando se
trata do BASIC Stamp e do Board of Education, Vss é considerado a referência de terra. É
zero volts, e se você estiver usando uma bateria de 9 V, é o terminal negativo dessa
bateria. O terminal positivo da bateria é de 9 V. VDD é de 5 V (acima da referência Vss
de 0 V), e é uma voltagem especial feita por um chip regulador de voltagem que fornece
energia ao BASIC Stamp.
Lei de Ohm: V = I x R A voltagem medida entre os terminais de um resistor (V) é igual a
passagem de corrente através do resistor (I) multiplicada pela resistência (R).
Diode envia voltagem: A voltagem entre o ânodo de um diodo e o cátodo como corrente
passa através dele do ânodo para o cátodo. Para o circuito do LED verde na Figura 2- 6
na página 33, você pode assumir que a voltagem enviada através do LED é de
aproximadamente 2,1 V para o caso de fazer os cálculos do circuito. Se o LED estiver
amarelo assume 2,0 V, e se ele estiver vermelho, assume 1,7 V. Estas voltagens irão
variar um pouco com a quantidade de corrente que passa através do circuito. Menor
resistência em série e / ou maior voltagem aplicada ao circuito resulta num fluxo de
corrente mais elevado. Maior resistência em série e / ou menor voltagem aplicada resulta
em menores fluxos de corrente.
Lei de voltagem de Kirchhoff simplificada: voltagem utilizada é igual a voltagem
fornecida. Se você alimentar um circuito com 5 V, o número de volts para todas as peças
ficará melhor se adicionar até 5 V.
Lei de corrente de Kirchhoff simplificada: A corrente que entra é igual à corrente que
sai. A corrente que entra a partir de um circuito de LED Vdd é a mesma quantidade de
corrente que sai através Vss. Além disso, se você conectar três LEDs para o BASIC
Stamp, e cada circuito de LED atrair 5 mA, significa que o BASIC Stamp tem que
fornecer todos os circuitos com um total de 15 mA.

Exemplo de Cálculo: um Circuito, dois Circuitos.


Dois passos para calcular a quantidade de corrente que um circuito de LED vermelho
atrai:

1. Descobra a voltagem sobre o resistor


2. Use a Lei de Ohm para descobrir a corrente através do resistor.

A Figura B-2 mostra como calcular a voltagem através do resistor. A voltagem


fornecida que está do lado esquerdo é de 5V. As voltagens usadas por cada componente
estão à direita do circuito. A voltagem, nós não sabemos no início se é VR, a voltagem
Página - 282

através da resistência. Mas, sabemos que a voltagem sobre o LED vai ser de cerca de
1,7 V (voltagem direta do LED vermelho). Sabemos também que a voltagem entre as
partes tem que adicionar até 5 V por causa da lei de voltagem de Kirchhoff. A diferença
entre 5 V e 1,7 V é de 3,3 V, esta é a voltagem através da resistência de VR.

Figura B-2
VR + 1.7 V = 5 V Voltagem
VR = 5 V − 1.7 V através do
circuito, do
VR = 3.3 V resistor e do
LED

Quilo é métrica para 1000. A forma métrica de dizer 1000 é quilo, e é abreviada
com a minúscula k. Em vez de escrever 1000Ω, você pode escrever 1kΩ.De
qualquer maneira, é1kΩ. é pronunciado um kilo-ohm. . Da mesma forma, 2000Ω
é escrito 2kΩ.

Mili é métrica para 1/1000, e é abreviado com um m minúsculo. Se o BASIC


Stamp alimenta o circuito de LED com 3,3 milésimos de um ampere, são 3,3
miliamperes, ou 3,3 mA.

O que é um mA? Pronuncia-se miliamper, é a abreviatura de um-milésimo-de


um amper. O "m" 'em mA é a abreviação métrica para mili, que representa
1/1000. O "A" em mA significa amperes. Coloque os dois juntos, e você tem
miliamperes, e é muito útil para descrever a quantidade de corrente consumida
pelo BASIC Stamp e para os circuitos ligados a ele.

Agora que já calculamos a voltagem através do resistor, a Figura B-3 mostra um


exemplo de como utilizar esse valor para calcular a passagem de corrente através do
resistor. Comece com a Lei de Ohm: V = I × R. Você sabe as respostas para V (3,3 V) e
R (470 Ω). Agora, tudo que você tem a fazer é resolver para I (a corrente).

V = I×R
3.3 V = I × 470 Ω
3.3 V
I= Figura B-3
470 Ω
Calculando
I ≈ 0.00702 V corrente
Ω
através do
I = 0.00702 A
resistor
7.02
I= A
1000
I = 7.02 mA
Página - 283

Sim, é verdade! 1 A = 1 V /Ω (Um amp é um volt por ohm).


Quanta corrente tem 7,02 mA? É a quanitdade de corrente que o circuito de LED
na Figura B-2 conduz. Você pode substituir o resistor de 470Ω por um de 220
Ω e o circuito vai conduzir cerca de 15,0 mA, e o LED acenderá mais
intensamente. Se você usar um resistor de 1000 Ω , o circuito vai conduzir 3,3
mA, e o LED acenderá menos intensamente. Se você usar um resistor de 2000Ω
fará com que o LED brilhe menos intensamente ainda, e a corrente será 1,65 mA.

Vamos dizer que você quer fazer que um pino de I / O ligue dois LEDs ao mesmo
tempo. Isso significa que, no interior do BASIC Stamp, ele alimentaria os circuitos,
conforme mostrado na Figura B-4. Poderia o circuito de corrente estimado exceder o
limite de 20 mA do pino de I/O? Vamos descobrir. Lembre-se que a versão simplificada
da lei de corrente de Kirchhoff diz que a corrente total consumida da fonte é igual a
corrente fornecida a todos os circuitos. Isso significa que I na figura B-4 tem de ser
igual ao total das duas correntes estimadas. Basta somar as duas correntes estimadas, e
você vai ter uma resposta de 14,04 mA, que você pode arredondar para 14,0 mA. Uma
vez que este consumo de corrente ainda está abaixo do limite de 20mA do pino de I / O,
pode seguramente ser conectado a um pino de I / O e ligado / desligado com o BASIC
Stamp.

Figura
B-4
I = I 1 + I 2 + ... I i Corrente
I = 7.02 mA + 7.02 mA total
fornecida
I = 14.04 mA ≈ 14.0 mA a dois
circuitos
de LED

Sua Vez – Modificando o Circuito


 Repita o exercício na Figura B-2, mas use Vin - Vss = 9 V em vez de Vdd - Vss
= 5 V.

Assumindo que a voltagem enviada não se altera, a resposta é VR = 7,3 V. A medida da


voltagem do resistor será provavelmente um pouco menos pois quanto maior voltagem
do LED mais passagem de corrente através do circuito..

 Repita o exercício na Figura B-3, mas use um resistor de 1 kΩ.

Resposta: I = 3.3 mA.

 Use VR = 7,3 V para fazer o exercício na Figura B-3 com um resistor de 1 kΩ.

Resposta: I = 7.3 mA.


Página - 284

 Repita o exercício mostrado na Figura B-4 com um resistor de 470 Ω e o outro


de1 kΩ.

Resposta: I = 7.02 mA + 3.3 mA = 10.32 mA.


Página - 285

Apêndice C: Sumário do Formato RTTTL


Este é um resumo destinado a ajudar a entender o formato RTTTL. A especificação
RTTTL completa pode ser encontrada em vários sites. Com qualquer mecanismo de
busca, use a palavra-chave "especificação RTTTL" para rever as páginas da web que
incluem a especificação.

Aqui está um exemplo de um formato de toque em RTTTL:

Leve-me ao jogo de bola : :d=4,o=7,b=225:2c6,c,a6,g6,e6,


2g.6,2d6,p,2c6,c,a6,g6,e6,2g.6,g6,p,p,a6,g#6,a6,e6,f6,g6,a6,
p,f6,2d6,p,2a6,a6,a6,b6,c, d,b6,a6,g6

O texto antes do primeiro dos dois pontos é que o telefone celular mostra, como nome
da canção. Neste caso, o toque é chamado:

Leve-me ao jogo de bola:

Entre o primeiro e o segundo dois pontos, as configurações padrão para a música são
inseridas usando d, o, e b. Aqui está o que elas querem dizer:

d – duração
o – oitava
b – batimentos por minuto ou ritmo.

Em Leve-me ao jogo de bola, as configurações padrão são:

d=4,o=7,b=225:

As notas da melodia são inseridas após o segundo dois pontos, e elas são separadas por
vírgulas. Se for utilizada apenas a letra nota, essa nota será tocada para a duração padrão
na oitava padrão. Por exemplo, a segunda nota em Leve-me ao jogo de bola é:

,c,

Se não houver outras informações, ela será tocada com a duração padrão de uma
semínima (d = 4), na sétima oitava (o = 7).

A nota poderia ter até cinco caracteres entre as vírgulas, aqui está o que cada caractere
especifica:

,duração nota sustenido ponto oitava,

Por exemplo:

,2g#.6,

… Significa tocar a meia nota sustenido G- para a duração de 1 ½ de meia nota, e tocá-
la na sexta oitava.

Aqui estão alguns exemplos de Leve-me ao jogo de bola:


Página - 286

,2g.6, – meia nota, G, pontilhado, sexta oitava


,a6, – duração padrão da semínima. Nota tocada na sexta oitava
,g#6, – duração de um quarto, nota g, sustenido (indicado por #), sexta oitava

O caractere:

,p,

… significa pausa, é usada para descanso. Com nenhuma informação extra, o p toca por
padrão a duração de uma semínima. Você também pode tocar o valor de uma meia nota
de descanso usando:

,2p,

Aqui está um exemplo de um descanso pontilhada::

,2p.,

Neste caso, o resto iria durar meia nota mais a duração de uma semínima.
Página - 287

Peças e quantidades estão sujeitas a alterações sem aviso prévio. As peças podem diferir
do que é mostrado na foto. Se você tem alguma dúvida sobre o seu kit, por favor, envie
um e-mail para stampsinclass@parallax.com.