Pular para o conteúdo principal

Aprenda diversos conceitos interagindo com o mascote do Android



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

Postagens mais visitadas deste blog

10 reasons why we love JSF

1. One-slide technology: it's so simple that I can explain basic JSF with one slide. 2. Easy to extend: components, listeners, render kit, Events, Controller, etc. 3. Real-world adoption: JBoss, Exadel, Oracle, IBM, ... 4. Architecture model: you can choose between more than 100 different architecture. 5. Open-mind community: using JSF you are going to meet very interesting people. 6. We are using JSF the last 5 years and we found very good market for JSF in Brazil 7. Progress: look to JSf 1.1 to JSF 1.2, JSF 1.2 to JSF 2.0. People are working really hard! 8. Many professionals now available 9. It's a standard. It's JCP. Before complain, report and help! 10. Ed Burns, spec leader, is an old Globalcode community friend! EXTRA: My wife is specialist in JSF. She's my F1 for JSF :) Nice job JSF community! -Vinicius Senger

Vem vindo novidade por ai... Minicurso de desenvolvimento iOS

Ola pessoal, Depois de uma conversa com a Yara, resolvemos colocar em prática uma idéia que já tinhamos a um tempo, que é aumentar as opções de mobilidade no portifólio da Globalcode e também da iniciativa Open4Education. E nesse caso estamos falando de um minicurso sobre desenvolvimento para iPhone e iPad. O objetivo desse minicurso vai ser mostrar que desenvolver para iOS não é tão complicado como se pode pensar e que não é preciso ter medo do Objective-C ! Serão algumas horas onde os alunos poderão entender os fundamentos da plataforma, como funciona o programa para desenvolvedores da Apple, preparação do ambiente e dos devices de teste e também um overview dos layers de desenvolvimento do iOS. Além disso, o objetivo também vai ser passar um pouco da minha experiência na "migração" que fiz de Java (seja SE, ME ou Android) para o novo mundo do Objective-C e Cocoa Touch. O material está no começo e ainda não temos uma data certa (só sabemos que a primeira edição desse minicu...

JavaMail: Enviando e-mail com Java

Introdução Além da necessidade de envio de e-mail ser comum a várias aplicações, foi a pergunta de um aluno da Academia Java ,  “Como enviar um e-mail com Java?”, que me motivou a escrever este post sobre JavaMail. JavaMail Para realizar o envio de e-mail por meio de uma aplicação Java, precisamos da biblioteca JavaMail, pois ela não é incluída no Java SE. A biblioteca está disponível em http://www.oracle.com/technetwork/java/index-138643.html . Neste download, além da biblioteca mail.jar que inclui a implementação completa da API e providers, também é disponibilizada a documentação da biblioteca ( javadoc ) na pasta docs , alguns exemplos na pasta demo e partes da implementação em lib . A forma mais simples de utilizar a JavaMail e incluir o mail.jar , porém para uma aplicação que só envia e-mail como o nosso exemplo, necessitamos apenas dos arquivos mailapi.jar e smtp.jar , economizando 177KB. Como a economia é pouca e as aplicações evoluem, vamos adicionar o mail.j...

Facelets uma forma mais ágil para construção de telas – Parte I

A construção de telas ou camada de apresentação em um sistema MVC seja web ou desktop é uma tarefa complexa e de extrema importância. Nesse post vou comentar e mostrar algum exemplo do Facelets como solução para os desafios existentes nessa etapa especificamente para web. Com a web cada vez mais presente em nosso dia-a-dia, um fato é que com isso nossos usuários tornam-se mais exigentes em relação a usabilidade, agilidade, performance ou de uma forma bem resumida “o usuário espera uma navegação simples e agradável aonde uma determinado tarefa possa ser concluída em poucos passos e em um curto espaço de tempo”. Atender as expectativas em relação ao que o usuário espera com o que realmente ele precisa, definir uma estrutura flexível a mudanças sem engessar o desenvolvimento, acessibilidade, portabilidade em múltiplos navegadores, tudo isso e muito mais, num prazo que quase sempre é apertado. Um outro ponto fundamental é manter o time motivado e produtivo em um ambiente que favoreça a...

JavaOne Brasil, dicas para submissão de palestras

Não quero parecer pretensiosa dando dicas para submissão de palestras para o JavaOne Brasil, mas sim repassar os tantos conselhos e sugestões recebidas pelos vetaranos do JavaOne: Bruno Souza e Leonardo Galvão que revisaram dezenas de submissões para o JavaOne e ajudaram a aprovar tantas palestras, e também misturar um pouco da minha experiência na seleção de palestras nos eventos realizados pela Globalcode e SouJava . 10 anos de JavaOne: http://www.globalcode.com.br/noticias/Globalcode10AnosNoJavaOne Os palestrantes ganham a entrada! A submissão pode ser feita em português! O passo mais importante para ser aprovado como palestrante no JavaOne é sem dúvida nenhuma submeter pelo menos uma palestra. Então, independente de qualquer coisa, participe, arrisque, divulgue.  Mas, se quiser aumentar as suas chances...   1) Leve a sério: peça para amigos fazerem uma leitura crítica do texto, e claro uma boa revisão ortográfica. 2) Submissão de várias palestras ou variações do ...

Facelets ainda mais divertido! Parte II

De volta ao Facelets , na primeira parte mantive o foco na utilização de templates e técnicas de reutilização visando maior agilidade para desenvolver telas com JSF , mas o Facelets vai bem além disso! Nesse post vou comentar e mostrar um pouco sobre a criação de componentes UI (User Interface) usando xht ml - na minha opinião esse é o grande diferencial da tecnologia. Com esse recurso é possível customizar / padronizar componentes usando xhtml + tags JSF + JavaScript + Css, sem código Java. A ideia é bem próxima ao Tag File em uma rápida comparação com JSP (JavaServer Pages), mas no caso do Facelets feito de uma forma ainda mais simples e com aderência a (infra)estrutura do JSF. Vou descrever o mesmo cenário da primeira parte, um sistema composto por vários cadastros ( C reate R ead U pdate D elete). Pensando especificamente em cada formulário, usando como exemplo um rascunho ou protótipo para o cadastro de Fornecedores, podemos assumir o seguinte formato: campos para preenchi...