domingo, 8 de dezembro de 2013

Arduino Esplora, Por Onde Começar?

O Arduino Esplora é um dispositivo que possui um pequeno computador de bordo, chamado microcontrolador, que por sua vez, possui uma série de portas de entrada e saída. Como entrada, temos dispositivos tipo joystick, quatro “buttons”, um sensor de luminosidade (LDR), um “slider”, um microfone, um sensor de temperatura, e um acelerômetro. Como saídas, temos um buzzer e um LED de três cores (RGB). A primeira vista, parece um controle de video-game.

Com o Esplora, você pode escrever programas que tiram proveito das informações que chegam às portas de entrada (input) e as usam para controlar as saídas (ouput), da placa. Ou ainda, controlar seu computador como um mouse ou um teclado.

O Esplora é diferente de todas as placas anteriores do Arduino. Isso quer dizer que ele tem entradas e saídas já conectadas na placa, sendo que você não precisa saber como ligar os sensores eletrônicos ou atuadores, para usá-los. Como resultado, a programação para ele é um pouco diferente do que outras versões do Arduino. Ele tem sua própria biblioteca, que facilita leitura de sensores e acionamento de atuadores. Você verá como utilizar a biblioteca do Esplora neste guia e também pode acessar as páginas de referência (link).

Este guia o ajudará durante o processo de conexão do Esplora no seu computador, e do carregamento de um programa do Arduino, que é chamado de sketch.

·      1 | Adquirindo um  Arduino Esplora e cabo USB

·      2 | Faça Download do Arduino IDE

·      3 | Conecte a placa

·      4 | Instalando os drivers

      • Instruções para Mac OS X
      • Instruções para Windows
      • Instruções para Linux

·      5 | Programando a placa

      • Abrindo o exemplo Esplora blink
      • Configure o Arduino para Esplora
      • Selecione a porta USB
      • Carregando o programa

·      6 | Mudando o RGB LED

·      7 | Entradas atuando sobre Saídas

·      8 | Próximos passos

1 | Adquirindo um  Arduino Esplora e cabo USB

Este tutorial é para o Arduino Esplora. Se você possui outra placa leia o guia certo para a sua versão (link).

Você também vai precisar de um cabo Micro-USB (tipo "A" para "Micro-B"). Alguns telefones celulares ou MP3 usam este tipo de cabo para transferir dados de/para o computador, talvez você já tenha um cabo desses. Este conector é diferente do USB Mini, pois ele é mais fino. Você pode ver as diferenças clicando neste link (o conector que você vai precisar é o da esquerda na foto).

2 | Faça Download do Arduino IDE

Faça o download da versão mais atual do IDE do Arduino através da página de download. Você vai precisar da versão 1.0.3 ou posterior.

Quando o download acabar, descompacte o arquivo baixado em qualquer diretório. Não altere a estrutura de pastas do arquivo compactado, apenas clique duas vezes na pasta para abri-la. Devem existir alguns arquivos e sub-pastas dentro. Se você estiver no Mac, a pasta zip conterá apenas a aplicação.

3 | Conecte a placa

Conecte a placa do Arduino no seu computador, usando o cabo USB. O LED indicativo de energia, verde (escrito ON), deve ligar e o LED amarelo, marcado “L”, deve começar a brilhar. Depois de 8 segundos este LED amarelo começará a piscar.

4 | Instalando os drivers

Instruções para Mac OS X

·      A primeira vez que você conecta um Esplora em um Mac, o "Keyboard Setup Assistant" será lançado. Não existe nada para ser configurado com o Esplora, então você pode fechar a caixa de diálogo clicando no botão vermelho, no canto superior esquerdo da janela.

http://arduino.cc/en/uploads/Guide/OSXKeyboardNotification.png

Instruções para Windows

As instruções a seguir são para o Windows 7. Elas são válidas também para o Windows XP, considerando algumas pequenas diferenças entre as janelas de diálogo.

·      Conecte a sua placa e espere pelo Windows começar o processo de instalação dos drivers. Caso o instalador não inicie automaticamente, navegue até o Windows Device Manager (Start>Control Panel>Hardware) e encontre o Arduino Esplora na listagem de dispositivos. Clique com o botão direito e escolha Update driver.

http://arduino.cc/en/uploads/Guide/EsploraWindowsDrivers0.png

·      Na próxima tela, escolha "Browse my computer for driver software", e clique em Next.

http://arduino.cc/en/uploads/Guide/EsploraWindowsDrivers1.png

·      Clique no botão Browse... . Outra caixa de diálogo aparece: navegue até a pasta do Arduino que você acabou de fazer o download. Selecione a pasta drivers e clique OK, então clique em Next.

http://arduino.cc/en/uploads/Guide/EsploraWindowsDrivers2.png

·      Você receberá uma notificação de que a placa não passou no teste Windows Logo. Clique no botão Continue Anyway.

http://arduino.cc/en/uploads/Guide/EsploraWindowsDrivers3.png

·      Depois de alguns momentos, uma janela irá te informar que o wizard terminou a instalação do Arduino Esplora. Pressione o botão Close.

Instruções para Linux

Não existe a necessidade de instalar drivers para Ubuntu 12.04.

5 | Programando a placa

Duplo clique no ícone do Arduino. (Nota: se o Arduino carregar na linguagem errada, você pode mudar isso no menu File > Preferences).

Abrindo o exemplo Esplora blink

Abra o exemplo LED Blink sketch: File > Examples > Esplora > Beginners > EsploraBlink.

Nota: Se Você não ver o exemplo Esplora Blink, você precisará atualizar a biblioteca Esplora. Para fazer isso, saia do Arduino IDE e faça o download deste arquivo zip. Quando você descompactá-lo, você terá uma pasta chamada Esplora. Procure na sua pasta Documents (no OSX ou Ubuntu) ou My Documents (no Windows), pela pasta de sketchs do Arduino. Ela é chamada “Arduino” e deverá ser uma pasta dentro de outra chamada “Libraries”. Caso contrário, crie a pasta Libraries dento da sua pasta de sketch. Mova a pasta Esplora para dentro da pasta Libraries. Então inicie novamente o Arduino IDE. Agora você deve ser capaz de abrir o exemplo EsploraBlink, conforme descrito acima.

Configure o Arduino para Esplora

Precisamos configurar ao Arduino IDE para trabalhar com o Esplora. Abra o menu Tools > Board e escolha o menu Arduino Esplora.

Selecione a porta USB

O Arduino IDE precisa saber qual porta USB o Esplora foi conectado. O menu Tools > Serial lista as portas disponíveis:

·      se apenas um item é apresentado, clique nele;

·      se dois ou mais itens são apresentados, você pode desconectar o Esplora e reabrir o menu; o item que desaparecer do menu deve ser a porta USB do Esplora. Reconecte a placa e selecione aquela porta serial.

Carregando o programa

Agora, simplesmente clique no botão "Upload". Espere alguns segundos - você deve ver os LEDS RX e TX piscando. Se o upload der certo a mensagem do "Done uploading." aparecerá na barra de status da IDE.

Poucos segundos depois do upload terminar, você deverá ver o LED RGB amarelo da placa começar a piscar, mudando a cor de vermelho para verde passando por azul, amarelo, ciano, magenta, até branco. Se ele o assim fizer, parabéns! O seu Esplora está funcionando.

6 | Mudando o RGB LED

Agora que você verificou que o Esplora está conectado ao computador e o processo de upload funciona, é tempo de experimentar algumas de suas funcionalidades. O Esplora possui sensores de entrada, dos quais você pode obter informações deles utilizando o comando de leitura (read). E você também pode acionar atuadores, que são controlados usando comando de escrita (write). O LED RGB e o buzzer são dois dos principais atuadores. O joystick, potenciômetro linear (slider), microfone, acelerômetro, sensor de temperatura e pushbuttons são os sensores de entrada. Você pode também adicionar os seus próprios dispositivos de entrada/saída, usando os conectores TinkerKit.

Neste exemplo, veremos como piscar o LED RGB cada uma de suas cores separadamente, então veremos como acender as três cores ao mesmo tempo. A biblioteca Esplora, incluída no início do sketch, possui um número de métodos que facilitará o código a ser escrito.

O sketch abaixo é similar ao exemplo EsploraBlink, mas controla o LED de uma maneira um pouco diferente. Você pode também usar o comando Esplora.writeRGB() e configurá-lo vermelho, verde, e azul da seguinte forma:

Esplora.writeRGB(255, 255, 255);  // configura vermelho, verde, e azul com total intensidade

Ou então você pode acender as cores individualmente através dos comandos Esplora.writeRed(), Esplora.writeGreen(), e Esplora.writeBlue(), como veremos abaixo.

Copie o código abaixo e cole-o no Arduino IDE. Tenha certeza que você configurou corretamente a porta serial, e a placa Esplora, conforme vimos anteriormente. Conecte sua placa então carregue o código. Uma vez que o código estiver carregado, você deve ver o LED RGB piscando.

// include the Esplora library
#include <Esplora.h>

void setup() {
 
 // nada no setup 
}

void loop() {

 
 // escreve nivel de luminosidade para o LED vermelho
 
 // 0 siginifica que o LED está desligado, 255 para brilho total
  Esplora.
writeRed(255);

 
 // adiciona um atraso para manter o LED aceso por um tempo
 
 // 1000 milissegundos (1 segundo)
 
 delay(1000);

 
 // desliga o LED vermelho e liga o verde
  Esplora.
writeRed(0);
  Esplora.
writeGreen(255);

 
 // atraso de 1 seg.
 
 delay(1000);

 
 // desliga o LED verde e liga o azul
  Esplora.
writeGreen(0);
  Esplora.
writeBlue(255);

 
 // atraso de 1 seg.  
 
 delay(1000);

 
 // liga todos os LEDs
  Esplora.
writeRGB(255, 255, 255);

 
 // atraso de 1 seg. 
 
 delay(1000);

 
 // desliga todos os LEDs
  Esplora.
writeRGB(0, 0, 0);

 
 // atraso de 1 seg. 
 
 delay(1000);
}

7 | Entradas atuando sobre Saídas

O Esplora tem alguns sensores na sua superfície. Neste exemplo veremos como usar o potenciômetro (o slider na parte debaixo da placa) para mudar o brilho do LED RGB.

As entradas do Esplora geraram valores entre 0 e 1023, exceto os pushbuttons, que geraram valores 0 ou 1. Saídas não possuem a mesma faixa de valores. A saída do LED varia entre 0 e 255. Para obter valores de entrada escalares aos valores de saída você divide o valor de entrada por 4. Este novo número gerado será o resultado do nível de brilho do LED.

Copie o código abaixo e faça o upload como fizemos no exemplo anterior. Uma vez feito o upload, movimente o slider para um lado e para o outro. Você verá a luz vermelha do LED RGB mudar o seu brilho.

// include the Esplora library
#include <Esplora.h>

void setup() {
// nada no setup
}

void loop() {
 
 // leitura do sensor em uma variavel
 
 int slider = Esplora.readSlider()/4;

 
 // converte a leitura do sensor em niveis de luminosidade do LED
 
 byte bright  slider/4;

 
 // escreve o nivel de brilho no LED vermelho
  Esplora.
writeRed(bright);

 
 // adicionando atraso para o LED não ficar tremeluzindo:
 
 delay(10);
}

8 | Próximos passos

Existem alguns exemplos no menu File -> Examples -> Esplora que demonstram o que mais pode ser feito com o seu Esplora. Eles são divididos entre exemplos para programadores iniciantes e avançados. Se você está apenas começando, ou deseja conhecer as funcionalidades básicas, comece com os exemplos Beginners. Se Você é um programador experiente então os exemplos Advanced lhe ajudarão com algumas ideias.

Se você nunca programou na vida, existem alguns exemplos incluídos na IDE para lhe apresentar alguns conceitos de programação básica. Note que esses exemplos precisarão ser modificados um pouco para funcionarem com o Esplora. Você precisará incluir a biblioteca Esplora escolhendo o menu Tools> Import library... , e você precisará mudar o mapeamento de portas do Arduino para o Esplora. Para saber mais veja o Guide to using Esplora with the Arduino Examples

 

Você deve pesquisar as páginas de referência da biblioteca Esplora (link), para conhecer os diversos tipos de sensores e atuadores da biblioteca Esplora. Você pode ver mais exemplos na página de exemplos (link).

Se você tiver problemas, acesse o link troubleshooting suggestions.

Traduzido por Renato Aloi do original “Getting started with Arduino Esplora” (link).

quarta-feira, 4 de dezembro de 2013

Função map() do Arduino

map(value, fromLow, fromHigh, toLow, toHigh)
Descrição
Remapeia um número a partir de uma faixa, para outra. Ou seja, acompanhando a assinatura da função acima, temos:


Um value de fromLow mapeado para toLow, um valor de fromHigh para toHigh, e valores intermediários.
Não restringe valores a uma única faixa, pois valores fora da faixa são normais e às vezes até úteis. A função constrain() deve ser usada antes e depois dessa função, se limites de faixa são desejados.
Repare que o “valor mínimo” da faixa de números deve ser maior ou menor que o “valor máximo”, para que a função map() possa ser usada de forma direta ou reversa, por exemplo:
y = map(x, 1, 50, 50, 1);
A função também lida com números negativos, veja um exemplo:
y = map(x, 1, 50, 50, -100);
que também é válido e funciona.
A função map() usa matemática de inteiros para não gerar frações, quando a matemática pede por frações, nesse caso. Mas restos de frações são truncados e não arredondados ou amortizados.
Parâmetros
value: o valor a ser mapeado
fromLow: o menor valor da faixa corrente
fromHigh: o maior valor da faixa corrente
toLow: o menor valor da faixa de destino
toHigh: o maior valor da faixa de destino
Retorna
O valor mapeado.
Exemplo
/* Mapeia um valor analogico para 8 bits (0 to 255) */
void setup() {}

void loop()
{
 
 int val = analogRead(0);
  val
 = map(val, 0, 1023, 0, 255);
 
 analogWrite(9, val);
}
Apêndice
Para quem gosta de matemática, segue o código-fonte da função:
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

sábado, 30 de novembro de 2013

Novidades sobre o ENC28J60!

Pessoal,

Estou a ponto de lançar a terceira aula do Curso Arduino Automation. Mas a cada aula faço estudos e revisões na biblioteca do ENC28J60. Até mesmo porque está ruim de utilizar e até de gravar a aula. A instabilidade do funcionamento da biblioteca Enc28CoreLib.h compromete todo o projeto!

Off-Topic: Consegui alguns avanços também na utilização do Ethernet Shield W5100 com a plataforma Supervisório. O problema é que o Shield Supervisório (link) não é compatível com o W5100, mas estou a ponto de conseguir contornar esse problema também.

Bom, mas o assunto continua o problemático ENC28J60! De tempos em tempos acompanho o trabalho de outros desenvolvedores, pelo mundo, que também contribuem com bibliotecas para essa plataforma.

Existem projetos como o do Turicas, chamado Ethernet_ENC28J60 (link) que foram abandonados e não são atualizados há mais de 2 anos, mas existem projetos como o EtherCard (link) que estão em pleno desenvolvimento! Além, lógico do meu próprio projeto chamado Enc28CoreLib (link), que também está em pleno desenvolvimento!

Foi então que achei uma ponta solta de um novelo e agora estou desenrolando ele. Vamos aos fatos.

  1. Sem querer, descobri que há quatro meses houve uma atualização grande e importante na biblioteca EtherCard
  2. Percebi que a plataforma estava bem madura
  3. Mas não, infelizmente eles ainda não resolveram o problema da segmentação de TCP
  4. Descobri também que eles ainda não sabem usar o DMA Copy do ENC28J60 (link), que já descobri ser uma mão na roda.
  5. Entretanto descobri onde fica a documentação (link)
  6. E também descobri onde fica a lista de BUGs conhecidos (link)
  7. Foi então que vasculhando as "issues", que são as "coisas" ou "acontecimentos" relatados pelos usuários, descobri a Issue #71 (link), que trata exatamente do ENC28J60 agindo como um Web Server e citando a limitação da segmentação TCP.
  8. Muito bem, existe um desenvolvedor apelido "fredycpu" que na Issue #68 (link) conseguiu em 15 de Julho de 2013 uma versão funcional do que ele chama de "Páginas Http Multi-Pacotes para/com Arduino" (original: Multi packets http pages with the arduino)
Concluindo, fredycpu finalmente implementou a funcionalidade de fragmentação TCP em cima da biblioteca EtherCard. Tudo o que eu precisava para finalmente consolidar a base da biblioteca EthernetSup (link).

Mas como nem tudo são rosas, existem problemas. Na verdade, estou em um empasse. O que acontece é que a EtherCard, como 99,99% das bibliotecas Ethernet para o ENC28J60, foi desenvolvido em cima do código do Guido Socher e Pascal Stang.

Já a minha biblioteca Enc28CoreLib é uma implementação do TCP/IP Stack da própria Microchip, desenvolvida originalmente por Howard Schlunder. Além disso, ainda adaptei o código para rodar em baixo da biblioteca Ethernet.h (original do Arduino), como podemos ver na segunda aula do Curso Arduino Automation (link).

Resumindo, tenho duas opções agora:
  1. Abandonar meu trabalho e ajustar a implementação da EtherCard com as modificações da Issue #68
  2. Fazer uma engenharia reversa na opção 1 e ajustar minha biblioteca.
A opção 1 acho que é a melhor, mas só tem um problema. Vamos perder a funcionalidade da biblioteca Enc28CoreLib de funcionar sob a Ethernet.h (original do Arduino).

E o problema com a opção 2 é que é mais demorado de implementar e o Curso Arduino Automation já está muito atrasado! 

Acredito que vou fazer uma implementação parcial para meu funcionamento e no lançamento da quarta aula, lanço uma versão nova oficial da Enc28CoreLib.

É isso aí pessoal, a batalha continua!

P.S.: Quase esqueci! Aprendi um termo novo hoje: "Zero-Copy" (wiki). Eu vi esse termo em uma discussão sobre uma memória DMA para o ENC28J60. O estranho é que o ENC28J60 tem isso através do DMA Copy. Como eles não viram isso?

Abraços,
Renato

sábado, 9 de novembro de 2013

Plataforma Wireless do Curso Arduino Automation

Pessoal,
 
  Estou fechando aqui a plataforma Wireless (sem fio) que será utilizada no Curso Arduino Automation. Muita gente me questionou sobre a utilização de Xbee e Relês para ativação a distância, sem fios...
 
  Na verdade esse tópico nem fazia parte do contexto original do Curso Arduino Automation, mas devida a necessidade de implementação em uma casa completa e não apenas em um "Quartinho", não dá pra ficar passando fio pela casa toda. E a plataforma Xbee é muito cara!
 
  Há muito tempo venho estudando uma plataforma mais barata. Infelizmente sempre trombamos no problema do alcance. Essas plataformas mais baratas de rádio são AM e utilizam um protocolo baseado na portadora, que pode ser confundido com qualquer outro sinal na mesma frequência.
 
  Por esse motivo ainda não lancei o Raduino, que é essa plataforma de Rádio para o Arduino (daí o nome). Existe até um manifesto sobre o assunto, que não pode ser divulgado, por problemas jurídicos, mas eu não me preocupo, pois ninguém ainda resolveu essa questão. Dá muito trabalho!
 
  O mesmo acontece com o ENC28J60, que vocês acompanharam o dilema em meus posts (e que ainda nem está perto de terminar)...
 
  Felizmente, o Raduino já está bem avançado e tem na bagagem quase 4 anos de estudos em todos os tipos de front-ends de rádio, bem como todos os tipos de encoders, antenas e amplificadores de sinal.
 
  Portanto vou lançar em breve os kits do Raduino, com código-fonte e hardware abertos, claro; e estou trabalhando em versões com Atmega8 SMD, sem cristal. O circuito é tão simples que qualquer um poderá fazer utilizando um ATMega8 e um kit Wiress 433Mhz. Não precisa de nenhum componente externo!
 
  Versões futuras do Raduino trabalharão com rádios de 2.4Ghz e também estou trabalhando em um front-end de rádio, do tipo "faça você mesmo" de 27Mhz que vai resolver o problema de 80% dos casos sem utilizar nenhum chip! Redução de custo ao máximo!
 
  Vou ver se consigo montar uma library no Eagle para implementação dessa plataforma em placas de plataformas de terceiros. Hummm! Ideias!
 
  Abraços, Pessoal!
 
  Ah! Semana que vem será cheia! Não deixem de verificar a última aula sobre Atmel Studio! Tem tudo a ver com o Raduino, pois eu preciso enfiar um elefante pela fechadura de um Atmega8!
 
  Parte 1 de 2 http://www.youtube.com/watch?v=ECkvuiXLxrM
 
  Parte 2 de 2 http://www.youtube.com/watch?v=kJ8F74CJiRc
 
  PS: Vou lançar um boletim em breve!
 
  Abraços, Renato Aloi