Construindo um Jogo de Laser Baseado no Arduino, Parte 1: Princípios Básicos do Arduino

Inicie seus projetos de eletroeletrônico com a plataforma de hardware e software livre Arduino

Arduino é uma plataforma de eletroeletrônicos barata e fácil de usar. A plataforma inteira, tanto o hardware quanto o software, é um software livre e a linguagem é baseada em C/C++. O Arduino foi construído para fabricantes, funileiros e artistas que querem mergulhar na criação de objetos físicos interativos. Esta série de três partes começa com o hardware Arduino básico e o utiliza para criar um jogo de laser interativo chamado "'Duino tag," no qual os jogadores podem reproduzir tags utilizando dispositivos construídos quase do zero. Aqui na Parte 1 desta série " Construindo um Jogo de Laser Baseado no Arduino", nós promovemos experimentos básicos que nos preparam para o, e que fazem parte do, 'Duino tag.

Duane O'Brien, PHP developer, 自由职业者

Duane O'Brien é um canivete suíço tecnológico desde quando The Oregon Trail era somente texto. Sua comida favorita é sushi. Ele nunca esteve na lua.



22/Dez/2008

Antes de Iniciar

Independentemente de você ser novo no Arduino ou um construtor ocasional, este projeto tem algo para você. Não há nada mais satisfatório do que criar um objeto físico interativo sabendo que se ele quebrar ou precisar de modificação, você vai saber onde estão todas as peças e como tudo funciona. A arma do 'Duino tag é um grande projeto para se trabalhar sozinho ou com amigos. Para concluir este projeto, você deve ter pelo menos um entendimento básico de eletrônicos (você deve saber o que é um resistor, mas não precisa conhecer a ciência por trás disso) e ter um entendimento sobre programação (você deve saber o que são loops e variáveis, mas não precisa estar preparado para analisar uma Notação do Grande O). Não tenha medo de começar.

Sobre Esta Série

Nesta série, nós utilizamos a tecnologia Arduino para criar jogos de laser interativos básicos chamados 'Duino tag:

  • Parte 1: Aprender os princípios básicos do Arduino, esboçar o projeto e fazer uma experiência que ajudará você a entender como funciona o Infravermelho.
  • Parte 2: Construir e testar a parte receptora da arma do 'Duino Tag, incluindo o teste.
  • Parte 3: Construir o transmissor e concluir a arma do 'Duino Tag.

Sobre este Tutorial

Para prosseguir, você não precisa ter nenhuma experiência com eletroeletrônicos, embora a experiência com o trabalho com componentes eletroeletrônicos certamente possa ajudar muito. O mesmo pode ser dito sobre o trabalho com um microcontrolador. Se tiver trabalhado com microcontroladores, você já estará em vantagem, mas lembre-se de que a plataforma Arduino é totalmente adequada para pessoas sem essa experiência. Acima de tudo, você deve estar disposto a ampliar suas habilidades. O trabalho com eletroeletrônicos e microcontroladores pode ser uma experiência compensadora. Muitos engenheiros de software não têm a chance de gravar código para dispositivos que criam uma interface com o mundo físico, e o Arduino fornece um ponto de entrada de baixo custo para o trabalho com dispositivos interativos.

Este tutorial, Parte 1, em uma série de três partes, "Construindo um Jogo de Laser Baseado no Arduino", se concentra nos princípios básicos do Arduino. Vamos fazer uma introdução ao uso do Arduino e examinar os princípios básicos de linguagem e API. Vamos preparar o projeto 'Duino tag, incluindo princípios básicos de design e a criação de uma lista de peças. Vamos aprender sobre como solicitar peças on-line, onde procurar e quais peças são necessárias. Por fim, utilizando alguns componentes em estoque e alguns códigos de teste básicos, demonstraremos os princípios básicos que controlam como funciona a arma.

Requisitos do Sistema

Para este tutorial, precisamos de algumas ferramentas e suprimentos:

Computador com porta USB
Embora tecnicamente não seja verdade (muitos tipos de hardware Arduino criam interfaces através de portas seriais de estilo antigo), esta série é gravada supondo que você esteja utilizando um modelo que se comunica através de USB. Existe um software Arduino disponível para Microsoft® Windows®, Mac OS X e Linux® (32 bits e AMD 64 bits).
Arduino Diecimila
Este é o modelo específico do hardware Arduino utilizado neste tutorial. Você pode substituir um Arduino Duemilanove. Solicite o seu de um revendedor on-line respeitado. Consulte Recursos para conhecer os links.
Cabo A-B USB
É igual aquele que, provavelmente, você conectou à sua impressora.
Light-Emitting Diode (LED) vermelho de 5 mm básico
Talvez você já tenha um ou pode encontrar um na Radio Shack ou com um revendedor on-line.
Lanterna elétrica
Quanto mais clara, melhor.
Software Arduino
Consulte Recursos para fazer o download do software Arduino.
Guias de instalação e configuração para Arduino
Consulte Recursos para fazer o download do guia de instalação do Arduino.

Introdução ao Arduino

Nesta seção, apresentamos os princípios básicos do Arduino, como configurá-lo e como programar o software com um pequeno manual de linguagem.

O que É Arduino?

Para simplificar, uma placa Arduino é um microcontrolador — um computador minúsculo com vários pinos de entrada e de saída. Utilizando estes pinos, você pode criar inúmeros dispositivos interativos, que vão desde uma simples luz piscando até dispositivos complexos que utilizam uma grande variedade de entrada para criar comportamentos complexos utilizando servos e motores. O primeiro Arduino foi produzido em janeiro de 2005 por dois professores, — David Cuartielles e Massimo Banzi — no Interaction Design Institute em Milão. Consulte Recursos para ler um artigo da revista Wired que traça o perfil dos desenvolvedores do Arduino.

A plataforma Arduino é composta por duas partes: o hardware (incluindo o microcontrolador, uma placa de circuito, etc.) e o software (a linguagem e a interface de programação). Ambas as partes da plataforma são software livre. Se você quiser, é possível fazer o download de esquemáticos para o Arduino, comprar todas as peças individuais necessárias, cortar a placa de circuito e começar do zero. Existem inúmeros projetos diferentes, como Freeduino, que fizeram isso. Os esquemáticos e os arquivos CAD foram liberados sob a licença Creative Commons Share-Alike. O software utilizado para programar o Arduino também é um software livre. Ele foi escrito em linguagem de programação Java™ e liberado sob GPL (existem algumas bibliotecas de microcontrolador C/C++ que foram liberadas sob LGPL).

Existem várias plataformas de microcontroladores disponíveis, e muitas delas estão concentradas no mesmo objetivo: facilitar a programação e a criação de interface com o microcontrolador, colocar tudo dentro de um pacote, etc. Da mesma forma, o Arduino busca uma interface simples e um pacote integrado, enquanto tenta oferecer benefícios adicionais:

Baixo custo
Uma pessoa pode construir uma placa Arduino do zero com pouco dinheiro, e as unidades pré-montadas são baratas. Um Arduino Diecimila custa em torno de $35.
Software para várias plataformas
Obtenha o software Arduino para Microsoft Windows, Mac OS X e Linux.
Linguagem simples
Os desenvolvedores do Arduino tentam manter sua linguagem fácil de usar para iniciantes, mas flexível o bastante para usuários avançados.
Software livre
O Arduino é completamente um software livre. Se quiser construir seu próprio software ou modificar um, você é livre para isso. Além disso, o Web site oficial do Arduino contém um wiki extensivo no qual amostras de código e exemplos são compartilhados livremente.

Existe uma grande quantidade de informações disponíveis sobre o Arduino. O melhor lugar para se começar é no Web site oficial (consulte Recursos). Leia uma excelente introdução nesse site.

Introdução

Para se criar uma interface com o hardware Arduino, você precisa instalar o software. Faça o download para o seu sistema operacional e siga o guia de instalação e configuração passo a passo apropriado (consulte Requisitos do sistema). Eles seguem as mesmas etapas:

  1. Descompacte o software
  2. Instale o driver USB para o Arduino
  3. Conecte a placa
  4. Ative o software
  5. Faça o upload de um exemplo

Nós não cobriremos cada etapa detalhadamente, já que elas são diferentes de um ambiente para outro. Vamos discutir o software e o exemplo Blink.

Nota: Na linguagem Arduino, programas e scripts individuais são referidos como "esboços."

Após ativarmos o software e carregarmos o exemplo Blink (de acordo com as instruções no Guia de Introdução), você verá algo semelhante à Figura 1.

Figura 1. A Interface do Software Arduino
A Interface do Software Arduino

Resumindo a interface, a linha superior de botões controla tarefas básicas como compilar, criar e salvar arquivos, fazer o upload de código para a placa Arduino e ativar ou desativar o Serial Monitor (falaremos sobre isso mais tarde). A área de janela do meio contém todo o código para o exemplo Blink e a área de janela inferior exibe a saída do console, erros de compilação e mensagens seriais (quando Serial Monitor estiver ativado). Por enquanto, vamos nos concentrar na área de janela do meio e discutir a linguagem Arduino.

Princípios Básicos da Linguagem Arduino

A linguagem Arduino é baseada em C/C++, e se você tiver utilizado esta linguagem antes, os construtores e recursos lhe serão familiares. Embora uma revisão integral da linguagem esteja fora do escopo deste tutorial, vamos deixar o exemplo Blink um pouco de lado para saber um pouco mais sobre a linguagem. Isso pode parecer muito básico se você já estiver acostumado a trabalhar com código, portanto, se você preferir, pegue um manual e entre de cabeça; sinta-se livre para se aprofundar na referência de linguagem estendida (consulte Recursos para conhecer a referência de linguagem estendida).

Primeiro, consulte o grande bloco de comentários. Os comentários sobre a linguagem Arduino são escritos em dois estilos.

Listagem 1. Estilo de Bloco
 */
 * Estilo de bloco como este
 */

Ou podem ser escritos no estilo sequencial.

Listagem 2. Estilo Sequencial
// sequencial como este

Em seguida, observe que declaramos uma variável: int ledPin = 13;.

Esta linha diz a você imediatamente quais linhas na linguagem Arduino terminam com ponto e vírgula. Além disso, ela diz quase tudo que precisamos saber sobre a declaração de variáveis na linguagem Arduino. A sintaxe: Declarar o tipo de variável, declarar o nome da variável, configurar o valor inicial da variável. Além do tipo int, a linguagem Arduino suporta int sem sinal, Boolean, char, char sem sinal, byte, long, long sem sinal, float, double, string e array. Encontre detalhes sobre cada tipo de dado em Referência de Linguagem Arduino, mas observe também o tipo array. Cada método mostrado na Listagem 3 é aceitável quando se declara uma array.

Listagem 3. Métodos para se Declarar uma Array
int fourlong[4];  // creates an empty array, 4 elements long
int nolength[] = {8,18,32,64};  // the compiler will figure out how long this array is
int setboth[4] = {8,18,32,64};  // This creates a 4 element array 
                                // and sets the initial value
char someword[7] = "fizbin";  // You need to add one extra element for a null character

Se você tiver um desenvolvimento da Web em segundo plano, essas arrays podem parecer um pouco estranhas. Não se preocupe. Elas farão mais sentido quando começarmos a utilizá-las.

Nota: Arrays têm índice de zero.

A Listagem 4 mostra a função setup.

Listagem 4. Função setup
void setup()
{
  pinMode(ledPin, OUTPUT);
}

Esta função será executada uma vez quando a placa Arduino for reconfigurada. Cada esboço deve ter uma função setup, mesmo se a função estiver vazia. Nesse caso, a função setup será utilizada para configurar o modo para um dos pinos do hardware Arduino. Ignore a instrução pinMode por enquanto e observe a estrutura da função. Funções são declaradas através de seu tipo de retorno (nesse caso, void indica que a função não retornará nenhum valor) e do nome da função. Seguindo o nome da função, quaisquer parâmetros necessários são declarados dentro de parênteses. A função setup não aceita parâmetros, mas se quisermos criar uma função que aceite um ou mais parâmetros, declararemos os parâmetros como se estivéssemos declarando uma variável.

Listagem 5. Declarando Parâmetros
void someFunction(int a, int b=2)

Finalmente, podemos ver que o código de função está entre chaves.

A seguinte função setup é outra função chamada loop.

Listagem 6. Função loop
void loop()
{
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

Após a função setup ser executada, a função loop é chamada, indefinidamente, até a placa Arduino ser desligada ou algum evento cataclísmico criar uma lacuna no espaço e no tempo. É na função loop que, normalmente, fazemos a maior parte do nosso trabalho, atendendo à entrada do sensor e acionando alguma forma de saída. Assim como com a função setup, cada esboço deve ter uma função loop, mesmo que a função esteja vazia.

Além do que aprendemos do exemplo Blink, existem outras coisas que devemos mencionar resumidamente sobre a linguagem Arduino:

  • Estruturas de controle mais familiares são suportadas (if, while, for, switch, etc.).
  • Operadores aritméticos, de comparação, booleanos, bit a bit e compostos são todos padrão.
  • A linguagem suporta nativamente certas funcionalidades matemáticas, trigonométricas, de número aleatório e de comunicação serial.
  • Podemos incluir bibliotecas externas utilizando instruções #include na parte superior do esboço.

Além de toda essa funcionalidade padrão, existem inúmeros elementos de linguagem exclusivos do Arduino. Esses construtores (como as funções pinMode e digitalWrite que você viu acima) referem-se principalmente ao trabalho com vários pinos de entrada e de saída no Arduino. Existe um guia de linguagem extensivo no site do Arduino (consulte Recursos).

OK — Temos materiais introdutórios suficientes sobre o Arduino. Vamos dar uma olhada neste projeto, o que você vai aprender com ele e quais desafios você vai enfrentar.


Preparando-se para Criar a Arma do 'Duino tag

Se você nunca trabalhou com o Arduino ou qualquer outro microcontrolador, ele pode parecer um grande projeto para se utilizar como ponto de início. E é. Este projeto apresenta vários desafios interessantes para se superar. Mas este projeto será igualmente recompensador — tanto pessoalmente quanto socialmente. Vamos dar uma olha nesses desafios e recompensas. Nesta seção, começaremos criando a arma do 'Duino tag.

Por que Construir uma Arma do 'Duino tag?

A página oficial do Arduino é carregada com projetos de amostra, sendo que a maioria deles é mais fácil do que se aprofundar em algo como uma arma de tag a laser. A construção de uma arma do 'Duino tag apresentará alguns desafios únicos, além de oferecer alguns benefícios adicionais impressionantes.

Para darmos um exemplo específico, o trabalho com o infravermelho é complicado. (Lamentamos muito, mas não utilizaremos lasers reais durante o curso deste tutorial.) O infravermelho é mais complicado do que se imagina (certamente, mais complicado do que pensei quando trabalhei com este projeto pela primeira vez). Por exemplo, a luz infravermelha está em todo lugar e afeta tudo ao seu redor (se você já emitiu o sinal de um controle remoto para uma parede ou quadro, você já sabe disso). Uma coisa é lidar com um algoritmo de dados complexos ou trabalhar em um código que precisa lidar com milhões de pedidos por segundo. Outra coisa completamente diferente é tentar lidar com uma fonte de interferência do mundo real como o sol. As mesmas abordagens de solução de problemas utilizadas durante a composição do código podem ser úteis em uma tentativa de se trabalhar com os problemas do mundo real.

Além disso, quando estiver preparado para começar a trabalhar com o infravermelho, você abre um amplo leque de possíveis projetos que talvez nunca tenha considerado — desde algo tão simples quanto interagir com sua TV até criar dispositivos interativos e baratos que se comuniquem uns com os outros através de IR para controlar diferentes partes de seu computador utilizando um controle remoto projetado por você.

Além de lidar com as complexidades do infravermelho, você verá que existe um problema de tempo em jogo. O objetivo é construir um dispositivo que aja como uma arma que emita infravermelho e como um detector que registre acertos de outra fonte legítima de infravermelho. Haverá um pequeno desafio quando você for lidar com este problema em particular, e você verá alguns benefícios (e, ainda bem, um certo prazer) em trabalhar com os vários elementos deste desafio específico.

Socialmente falando, este é um grande projeto para se trabalhar com amigos. Adoro criar dispositivos em minha oficina, mas às vezes é divertido sentar ao redor de uma mesa com alguns amigos para trabalharmos juntos. Como esses dispositivos destinam-se a interagir uns com os outros, é quase impossível construir apenas um. Ao envolver amigos, você facilita seu próprio trabalho. Você tem mais sensores para atirar e mais armas para testar seu próprio sensor. Isso leva à inevitável conclusão: é divertido. Quando o 'Duino tags estiver ativo e em execução, você será obrigado a disparar contra seus amigos imediatamente.

E, por fim, em vez de comprar um dispositivo inexplorável e pronto para uso de uma loja, você terá feito coletivamente sua própria criação. Se não gostar da forma como ele funciona, você altera o dispositivo ou altera suas regras. Você pode terminar gastando um pouco mais do que gastaria comprando uma unidade de prateleira barata, mas, no final, você terá algo que pode desmontar, reprogramar e que realizará a todas as suas vontades. Não é simplesmente algo você pode comprar de sua cadeia de lojas de brinquedos nacional favorita.

Agora que você já confia no projeto, vamos falar sobre a arma do 'Duino tag. O que ela fará? Como ela funcionará? De quais componentes você vai precisar? Como você encaixotará o eletroeletrônico?

Projetando a Arma do 'Duino Tag

Antes de podermos começar a projetar a arma, precisamos falar sobre como queremos que a coisa funcione. Fiz algumas instruções e suposições ao longo do trajeto, agora vamos esclarecer as coisas. Vamos falar sobre como esta arma funciona:

  1. Quando o jogador puxa um gatilho, um único tiro é disparado.
  2. Quando a arma é disparada, ela deve emitir um som moderado como "PEW PEW."
  3. A arma também será utilizada para detectar acertos.
  4. Quando um acerto for detectado, a arma deverá emitir um som moderado diferente, como "KZZKH KZZKH."
  5. Cada arma possui uma certa quantidade de tiros que pode ser disparada.
  6. Quando a arma estiver sem munição e o jogador puxar o gatilho, a arma deve emitir um terceiro som, como "EEERK EEERK."
  7. Quando o jogador for eliminado, a arma deve reproduzir um som final, como "BOOM KAPOW" (OK — são dois sons).

Existem mais variações de regras que poderiam ser incluídas aqui, mas aqui é o lugar ideal para começarmos. No código, nós escreveremos e estabeleceremos o seguinte conjunto de regras:

  • Cada arma possui seis tiros seguros. Não há recarga. Esses tiros podem ser disparados sem perigo.
  • Cada jogador pode fazer seis acertos. Após fazer seis acertos, o jogador será eliminado.
  • Cada tiro que um jogador disparar após o sexto aumentará a possibilidade de uma falha catastrófica da arma. No caso dessa falha catastrófica da arma, o jogador será eliminado.

Falando português claro, você pode sofrer seis disparos e pode disparar seis vezes. Após ter utilizado seus seis disparos seguros, cada vez que você disparar um tiro, as chances de sua arma falhar aumentam. Se sua arma falhar, você será eliminado.

Com base nessas regras simples e em algumas instruções dadas antes neste tutorial, podemos estabelecer alguns princípios básicos sobre o hardware:

  1. 'Duino tag é baseada em infravermelho.
  2. A arma age como um emissor e um sensor.
  3. A arma precisa de algum tipo de acionador.
  4. A arma emite sons.
  5. A arma deve ser durável.

Este tutorial não gastará muito tempo falando sobre como encaixotar sua arma do 'Duino tag. Após os eletroeletrônicos funcionarem, falaremos sobre as opções para se criar ou adequar diferentes caixas para o projeto. Agora que o comportamento já foi traçado, é hora de especificar o hardware. Mas não podemos ir muito longe sem falar um pouco sobre como os sensores infravermelhos funcionam.

Trabalhando com Infravermelhos

Conforme mencionado, a radiação infravermelha está ao nosso redor. O sol a emite, assim como as lâmpadas, as TVs e os animais (o termo "pit" em pit viper [víbora em inglês] refere-se à forma do sensor que esta família de cobras possui e utiliza para encontrar suas presas). Se nós configurássemos um sensor para ser acionado sempre que algum infravermelho fosse detectado, ele seria acionado constantemente e, assim, seria virtualmente inútil.

Portanto, se esse for o caso, como funcionam os controles remotos infravermelhos? O controle remoto para sua TV contém um sensor projetado especificamente que foi construído para detectar o infravermelho sendo emitido a uma certa frequência. A Sony, por exemplo, padroniza suas interfaces de infravermelho a 40 KHz. Em outras palavras, o LED infravermelho é ativado e desativa 40.000 vezes por segundo. Sentindo apenas a entrada em uma determinada frequência, a TV pode ignorar o infravermelho que não está vindo do controle remoto. O controle remoto transmite códigos diferentes para a TV pulsando o sinal de IR.

É assim que a arma do 'Duino tag funciona em sua essência. Esse meio requer um determinado tipo de sensor de IR. Nós discutiremos isso agora, conforme falamos sobre as peças que são necessárias e onde elas podem ser obtidas.

Peças

Conforme mencionado, precisamos de uma placa Arduino. Vejamos o que mais será necessário.

LED infravermelho
Não há nada de especial no LED. Usei um LED de IR de três-quartos T1 da All Electronics.
Sensor infravermelho
Esta série foi escrita utilizando um Sensor Infravermelho TSOP2138YA (também da All Electronics).
Comutador transitório de um pólo
É o acionador, portanto, queremos algo que não seja muito pequeno e nem muito grande.
Elemento Piezo
Utilizamos para emitir sons. Sugiro o uso de um pequeno e revestido.
fiação solid ou stranded com 22 calibradores
Precisamos de duas cores. Não precisamos de muito — um metro no máximo.
Resistores
Precisamos de dois resistores diferentes. Um resistor de 100Ω (100 ohm ou marrom-preto-marrom), um resistor de 10kΩ (10000 ohm ou marrom-preto-laranja) e um resistor de 82Ω (82 ohm ou cinza-vermelho-preto).
Capacitores
Precisamos de um capacitor de 0.1uF.
Lente
Uma pequena lente de aumento (de três quartos a uma polegada de diâmetro) — na primeira vez, você pode utilizar aquela lente de plástico barata que ganhou como lembrancinha em uma festa.
Tubo
Um pequeno cano de PVC ou outro tubo rígido.

Essas peças custam $5 ou menos, dependendo de onde você comprar.

Onde Encontrar as Peças

Você deve estar preparado para andar na Radio Shack e encontrar tudo que precisa para concluir esta série. Se você preferir comprar de um revendedor on-line, veja aqui três recomendações:

Digi-Key
Oferece uma variedade de componentes eletrônicos com preços razoáveis
Mouser
Outra excelente fonte de componentes eletrônicos on-line
All Electronics Corp.
A seleção é um pouco mais limitada do que das outras duas, mas fiquei satisfeito como cliente

Consulte Recursos para conhecer esses varejistas on-line. Como alternativa, uma simples procura na Web também apresentará várias opções. Se você decidir comprar em outro lugar, lembre-se destas quatro questões:

  1. Consulte o tempo de entrega, principalmente quando comprar de um vendedor da eBay. Você pode encontrar vários componentes eletrônicos de vendedores da eBay, mas muitas vezes os itens são enviados diretamente da China, o que pode levar uma ou duas semanas.
  2. Não compre nada que não tenha uma folha de especificações. Todos os componentes eletrônicos possuem o que é conhecido como folha de especificações que lista diversas informações vitais sobre voltagem, fiação, etc. Se você não tiver estas informações em mãos, o trabalho com seus componentes pode se transformar em um desafio.
  3. Pechinche. Os preços dos componentes variam muito. Não tenha medo de fazer uma referência cruzada dos preços oferecidos em sites diferentes. A menos que esteja fazendo um pedido muito grande, não fará muito sentido comprar sensores em um site e LEDs em outro. Mas ainda assim você deve verificar se está comprando por um preço competitivo.
  4. Seja preciso com números de modelos, principalmente com o sensor de IR. Isso pode parecer óbvio se você já tiver trabalhado com eletroeletrônicos antes, mas pode parecer pouco óbvio se você for novo nesta área. Os sensores de IR têm vários fabricantes e modelos, além de terem aparência semelhante, mas suas frequências são diferentes. A frequência é importante.

Enquanto espera as peças chegarem, vamos fazer algo interessante com o Arduino. Isso ajudará a aguçar sua vontade de começar o projeto, bem como a introduzir uma capacidade pouco conhecida do LED. Esta experiência não terminará como parte do projeto concluído, mas vai ajudar você a ter um melhor entendimento de como funciona a frequência. Além disso, ela permitirá que você se envolva completamente com o software e o hardware Arduino.


Fazendo uma Experiência com o Arduino

Vamos fazer uma pequena experiência que nos ensine algo novo sobre o LED e que nos ajude a entender tudo sobre frequência.

Um Truque Interessante para Aguçar sua Vontade

Anteriormente, dissemos que precisamos de um LED e de uma lanterna elétrica para concluir este tutorial. Já utilizamos o LED durante o exemplo Blink. Vamos utilizar o mesmo LED para detectar a luz. Sim, para detectar luz. Além de piscar, brilhar e apagar, o LED pode ser utilizado para detectar a presença de luz. Para obter os melhores resultados, utilize um LED colorido (como vermelho) e uma lanterna elétrica de luz branca normal (quanto mais clara, melhor).

Comece pegando o LED e conectando o anodo (o lado positivo — normalmente, a extremidade mais longa) no pino 0 Analog In na parte inferior da placa. Conecte o cátodo (o lado negativo — normalmente, a extremidade mais curta) em um dos dois pinos Terra (marcados como "GND") na parte inferior da placa.

Em seguida, vamos gravar um pequeno código para escutar o pino 0 Analog e fazer a leitura para o monitor serial (eu avisei que voltaríamos nisso).

Listagem 7. Escutando o Pino 0 Analog e Fazendo a Leitura para Monitores Seriais
/* Sensor de Luz do LED
 * por Duane O'Brien
 * para IBM Developer Works
 */
  int recvPin = 0;
  int wait = 1000;
  int val = 0;

  void setup()
  {
    // Inicialize a Interface Serial
    Serial.begin(9600);
  }

  void loop()
  {
    // Faça uma leitura no Pino Analog
    val = analogRead(recvPin);
    // Emita o valor detectado
    Serial.print("DETECT : ");
    Serial.println(val);
    // Aguarde para fazer a próxima leitura.
    delay(wait);
  }

Você pode ver que não há muita coisa neste código. Nós configuramos algumas variáveis, inicializamos a interface serial e fizemos leituras a partir da entrada analógica uma vez por segundo. É um script simples, mas com efeito super interessante. Salve o script e faça seu upload para o hardware Arduino. Após o upload ser concluído, clique no botão Serial Monitor na parte superior da janela do Arduino. Isso vai reconfigurar a placa Arduino e, a partir daí, você começará a ver algumas leituras aparecendo na área de janela na parte inferior. Diminua as fontes de luz e observe as leituras. Elas devem ser semelhantes à Figura 2.

Figura 2. Leituras do Sensor de Luz no Escuro
Leituras do Sensor de Luz no Escuro

O número real relatado pode variar muito, dependendo da quantidade de luz ambiente que existe, do tipo de LED que você está utilizando, etc. Em seguida, ligue uma lanterna elétrica e ilumine o LED. Você deve observar um aumento marcado no valor detectado. Na primeira captura de tela, as leituras vieram em cerca de 167-168. Mas veja as leituras na Figura 3.

Figura 3. Leituras do Sensor de Luz no Escuro com Luz Direto da Lanterna Elétrica
Leituras do Sensor de Luz no Escuro com Luz Direto da Lanterna Elétrica

Você pode ver que a entrada analógica, que percorre uma escala de 0-1,023, pulou para quase 90 quando a lanterna elétrica iluminou o LED. Mais uma vez, os números podem variar muito, dependendo da luz ambiente, da escolha do LED e da força da lanterna elétrica. Mas basicamente, isso se refere a sensores de luz.

Agora, para fazer uma comparação, acenda várias luzes em torno do hardware Arduino, de modo que haja bastante luz ambiente, e observe como as linhas de base aumentam.

Figura 4. Leituras do Sensor de Luz com as Luzes Acesas
Leituras do Sensor de Luz com as Luzes Acesas

Você pode ver que os números de linha de base aumentaram cerca 40, ocasionando um salto menos distinto quando o LED entra em contato com outras fontes de luz. Nesse exemplo, ainda podemos dizer quando a lanterna elétrica está iluminando diretamente o LED.

Figura 5. Leituras do Sensor de Luz com a Luz Acesa e com a Luz Direta da Lanterna Elétrica
Leituras do Sensor de Luz com a Luz Acesa e com a Luz Direta da Lanterna Elétrica

Mas se você tivesse que trabalhar com muito mais luz ambiente, ou se precisasse lidar com algo que dispersasse a fonte de luz (como uma luz muito distante do LED), as diferenças numéricas ficariam muito mais sutis. Para ilustrar isso, configure o Arduino de uma maneira que você possa direcionar a luz da lanterna elétrica para o LED do outro lado da sala e examine os resultados.

Além de mostrar uma nova forma interessante de se usar o LED básico, este exemplo ajuda a ilustrar a dificuldade inerente ao trabalho com luz ambiente visível e detecção de luz. Você pode imaginar quão complicado este problema pode se tornar quando o trabalho envolve algo como infravermelho, que é quase onipresente e invisível a olho nu.


Uma Simples Demonstração de Frequência

Agora que o sensor de luz está funcionando, modifique o código e utilize-o como uma oportunidade para aprender um pouco sobre frequência. Conforme aprendemos anteriormente, o infravermelho está em todo lugar, portanto, os sensores precisam filtrar tudo que não está sendo transmitido a uma frequência específica. Vamos demonstrar nesta seção, de maneira rudimentar, como funciona a transmissão de frequência. Isto aqui não deve ser uma experiência científica abrangente, mas pode ajudar a ilustrar o conceito.

Modificando o Código

Nós alteraremos o código para que, quando a leitura de luz aumentar mais de 5 por cento da linha de base, seja iniciado um ciclo que examine as próximas duas leituras, emitindo um código específico baseado nos códigos detectados. Primeiro, declararemos algumas variáveis adicionais. Precisamos de uma variável para determinar quantas leituras devem ser feitas para se estabelecer o número da linha de base da luz ambiente, uma variável para conter o saldo de leitura mínimo esperado, um agente iterativo, uma array para conter os códigos diferentes e um rastreio int para nos informar onde estamos no ciclo.

Listagem 8. Declarando Variáveis
  int recvPin = 0;
  int wait = 1000;
  int val = 0;
  int readings = 5;
  int jump = 0;
  int i = 0;
  int code[2];
  int incycle = 0;

Em seguida, precisamos fazer algumas leituras durante a configuração, fazer uma média e determinar o que significa 5 por cento. Com base em minha experiência, a primeira leitura é sempre anormalmente alta, por isso a descartamos.

Listagem 9. Fazendo uma Série de Leituras
  void setup()
  {
    // Inicialize a Interface Serial
    Serial.begin(9600);
    Serial.print("establishing baseline... ");
    val = analogRead(recvPin); // descarte a primeira, pois geralmente ela é muito alta.
    delay(wait);
    for (i = 0; i < readings;i++)
    {
      jump += analogRead(recvPin);
      delay(wait);
    }
    jump = (jump / readings)*1.05;
    Serial.println(jump);
    // Emita o valor detectado
    delay(wait);
  }

Por fim, durante o loop, você lê o pino. Se você estiver em um ciclo, será necessário salvar o código, e se você tiver recebido todo o código, emita um resultado. Se não estiver em um ciclo, e a leitura estiver 5 por cento acima da linha de base, você inicia um ciclo. A Listagem 10 poderia ser mais compacta, mas ela é descrita de uma forma mais detalhada para que você veja o que está acontecendo.

Listagem 10. Lendo o Pino
  void loop()
  {
    // Faça uma leitura do Pino Analog
    val = analogRead(recvPin);
    switch (incycle)
    {
      case 0:
        if (val > jump)
        {
          Serial.println("In Cycle");
          incycle = 1;
        } else {
          Serial.println("Out Of Cycle");
        }
        break;
      case 1:
         if (val > jump)
         {
           code[0] = 1;
         } else {
           code[0] = 0;
         }
         incycle = 2;
         Serial.println("Read One");
         break;
      case 2:
        if (val > jump)
        {
          code[1] = 1;
        } else {
          code[1] = 0;
        }
        incycle = 3;
        Serial.println("Read Two");
        break;
      case 3:
        if (code[0] == 0 && code[1] == 0)
        {
          Serial.println("Reset");
        } else if (code[0] == 1 && code[1] == 0)
        {
          Serial.println("Turn On");
        } else if (code[0] == 0 && code[1] == 1)
        {
          Serial.println("Turn Off");
        } else if (code[0] == 1 && code[1] == 1)
        {
          Serial.println("Explode");
        }
        code[0] = 0;
        code[1] = 0;
        incycle = 0;
        break;
    }
    delay(wait);
  }

Se você salvou e fez upload deste código (é necessário ativar o monitor serial após cada upload), você deverá ver quando as leituras estão sendo feitas. Ao acender uma lanterna elétrica sobre o LED, você pode acionar um ciclo. As duas próximas leituras (uma segunda separada) determinam qual código final é emitido. Você pode acionar as diferentes saídas ligando e desligando a lanterna elétrica alternadamente a uma frequência de uma vez por segundo. Por exemplo, se você acender a lanterna elétrica sobre o LED por apenas três segundos, será necessário emitir a mensagem "Explodir". Se você ligar a lanterna elétrica por um segundo, desligar por um segundo e ligar por um segundo, você deverá acionar o código "Desligar". Aqui está uma amostra da saída.

Figura 6. Exemplo de Frequência Básica
Exemplo de Frequência Básica

O que você está fazendo aqui é sinalizando uma mensagem binária a uma frequência muito baixa. Isso se assemelha ao que faz a arma do 'Duino tag, embora ela o faça a uma frequência muito mais alta.

Agora você deve estar preparado para mergulhar na criação e no teste da arma do 'Duino tag, que serão descritos no restante das séries.


Resumo

Antes de ir para a Parte 2, você deve reunir alguns suprimentos:

  • Um ferro de solda e um pouco de solda. Você não precisa ter nenhuma idéia, já que não fará nenhuma soldagem simples ou complexa.
  • Um par de cortadores/desencapadores de fios. Aviso: Não use seus dentes para desencapar os fios.
  • Os componentes eletrônicos descritos anteriormente.

Explore o site do Arduino e trabalhe em alguns destes tutoriais. Examine o código do sensor de luz do LED e veja o que mais você pode fazer com ele. E talvez o mais importante, recrute alguns amigos para concluir este projeto com você. Será mais recompensador (e mais fácil para você) se houver outras pessoas envolvidas.


Download

DescriçãoNomeTamanho
Part 1 source codeos-arduino1DuinoTag.zip2KB

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=385172
ArticleTitle=Construindo um Jogo de Laser Baseado no Arduino, Parte 1: Princípios Básicos do Arduino
publish-date=12222008