No mundo da programação,
geralmente nos deparamos com diversos conceitos, siglas e plataformas que ainda
não faziam parte do nosso vocabulário. Mesmos os desenvolvedores mais
experientes passam por esta etapa. Ainda mais quando uma nova onda invade
o ambiente de estudo: a internet das coisas. Junto com ela, o conceito de make
yourself, placas de prototipação como arduino e diversos mini-pcs, o mais
famosos deles o Raspberry Pi.
Neste pequeno artigo pretendo
mostrar de forma prática o que são e para que servem estas 4 palavras: arduino,
adk, protoboard e sensores. Para tornar o aprendizado mais animador proponho um
código que irá ligar os olhos do robozinho verde símbolo da plataforma Android.
Começaremos pelo arduino. Esta placa, usada
principalmente para prototipação de projetos eletrônicos , teve um enorme
sucesso. Prova disso é o recente interesse da gigante Intel, e a criação do Intel
Galileo, baseado justamente neste produto italiano criado por Mássimo Banzi.
O arduino é um projeto open-source
e open-hardware, resultante da
união entre uma placa antecessora chamada Wiring e uma linguagem de programação
chamada de Processing. Na figura abaixo temos o Arduino Uno na parte inferior e o
Iteaduino ADK na parte superior.
O Arduino Uno é baseado no microcontrolador ATMega 328, um dos mais
comuns no mercado. Perceba que na parte superior encontram-se 14 portas
digitais mais um terra (gnd) e um aref. Na parte inferior a esquerda temos
portas de entrada de energia, mais dois terras e reset. Na parte inferior a
direita temos 6 portas analógicas.
Porém, perceba que uma placa
arduino sem nenhum componente adicional não tem nenhuma utilidade. É neste
momento que entram os sensores. Estes,
captam dados e informações do mundo externo, propiciando que programadores
desenvolvam uma lógica computacional encima dos mesmos. Por exemplo, com um
sensor de luz e um sensor de presença podemos criar um sistema de alarme
residencial extremamente confiável.
Dependendo do sensor a ser
utilizado saberemos quais portas devemos utilizar. Por exemplo, um simples LED
usa uma porta digital e uma porta terra. Já um sensor de luz, por exemplo, é um
sensor analógico e deve ser ligado nos pinos mencionados na parte inferior
direita do Arduino Uno.
Voltando a imagem anterior, na
parte superior temos um Arduino Mega. Visualmente já percebemos uma quantidade
muito maior de portas analógicas e digitais. Além disso, ele também tem um
microcontrolador ATMega 2560, e também podemos encontra-lo usando o ATMega
1258. A mudança é na memória ROM Flash. O 328 tem 32Kb, o 2560 tem 256Kb.
O Arduino Mega também é a base
para o Adk (Accessory Development Kit), uma placa criada pelo Google para
que desenvolvedores criassem hardware para smartphones Android. O ADK possui um
protocolo específico (AOA Protocol) que pode ser usado para troca de dados via
serial ou bluetooth entre um aplicativo Android e a placa Arduino.
Para unir todos estes conceitos
vamos à codificação da placa. Será usado um sensor de presença ultrassônico,
semelhante ao mostrado abaixo. A idéia é que ao aproximarmos algum objeto do sensor os olhos do mascote do Android, desenhado no ADK, se acendam.
Perceba que ele tem quatro “perninhas”,
nomeadas com VCC, Trig, Echo e GND. O VCC é o sinal de 5V, o Echo e o Trig devem ser colocados em portas digitais. E o GND é o ground, ou terra. O problema é que no
arduino estas portas não estão localizadas lado a lado, para que possamos simplesmente
acoplar o sensor na placa. É neste momento que entra em ação a protoboard.
A protoboard é mostrada na figura
abaixo. Ela apresenta diversos tamanhos e formatos. Neste projeto utilizei a
versão mini. Mas independente da versão, todas apresentam furos conectados
verticalmente, como mostra a Figura.
Agora veja como conectamos o
sensor de proximidade a protoboard e esta, por sua vez, ao arduino adk.
O fio preto está ligando o terra
do sensor a porta terra do adk. Os dois fios azuis estão ligando o echo e o
trigger as portas digitais 11 e 12. O fio laranja liga o VCC do sensor ao pino
5 volts do ADK.
Depois disso veja o código
Arduino (para baixar a ide acesse www.arduino.cc).
#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
unsigned int distancias[5];
int qtdLeu = 0;
void setup() {
pinMode(18, OUTPUT);
pinMode(19, OUTPUT);
}
void loop() {
unsigned int uS = sonar.ping();
unsigned int cm = (uS / US_ROUNDTRIP_CM);
if (qtdLeu < 3){
distancias[qtdLeu] = cm;
qtdLeu++;
} else {
distancias[0] = distancias[1];
distancias[1] = distancias[2];
distancias[2] = distancias[3];
distancias[3] = distancias[4];
distancias[4] = cm;
int media = (distancias[0] + distancias[1]
+ distancias[2] + distancias[3] + distancias[4]) / 5;
if (media < 15){
digitalWrite(18, HIGH);
digitalWrite(19, HIGH);
} else {
digitalWrite(18, LOW);
digitalWrite(19, LOW);
}
}
}
O experimento em funcionamento
pode ser visto neste link.
Espero ter demonstrado de forma
prática o que significa cada palavra mencionada no início deste pequeno artigo.
Qualquer dúvida ou sugestão comente o post que respondo assim que possível.
Obrigado
Att - Ricardo
Comentários