O documento discute a Internet das Coisas e apresenta a plataforma Arduino. Apresenta exemplos de uso de sensores e shields com Arduino, além de projetos como automação residencial. Por fim, discute alternativas de comunicação entre dispositivos como Arduino, Raspberry Pi e Android utilizando a plataforma OpenDevice.
TDC2014 - Internet das Coisas - Arduino & OpenDevice
1. Trilha: Internet das Coisas
Computação Física, Plataformas, Comunicação, APIs
Comunicação entre Arduino, Raspberry, Android com OpenDevice.
Ricardo JL Rufino
rjlr@cin.ufpe.br
ricardo@criativasoft.com.br
2. AgendaAgenda
● Introdução a Internet das Coisas (fast !!)
● Arduino
● Exemplos
● Shields
● Sensores
● Projetos
● Automação Residencial..
● OpenDevice (Hands-On)
● Arduino / Raspberry e Similares
● Protocolos de Comunicação
● Brincando via JavaScript
● Comunicação em real-time utilizando WebSockets
● Utilizando o Android
3. AgendaApresentação
Ricardo JL Rufino
➔ Esp. em Engenharia de Software
➔ Mestrando em Gestão de TI (UFPE)
➔ Sócio fundador da CriativaSoft.
➔ Atuo no desenvolvimento de Software desde 2007, focado em
soluções empresariais sobre plataforma JavaEE.
Desenvolvedor de softwares open-source como Framework
Web MVC Mentawai, ProjectNCode e instrutor de cursos de
Java.
5. Internet das Coisas
●
Que coisas são essas ?
– Computadores
– Smart Phones
– Tablets
– Sensores
– Roupas
– Pessoas
– Pode ser o que você quiser ! Até cidades !
6. Conceito
●
O Conceito de “Internet das Coisas” começou a
ser desenvolvido em 1999 nos laboratórios do
MIT. A proposta é ligar todas as coisas à
Internet, de sofisticados equipamentos até
lâmpadas, para que esses objetos passam se
comunicar entre si e com os usuários, a fim
de gerar informações com diversos potenciais e
finalidades
8. Envolvidos ?
●
Grandes empresas estão aderindo...
– Google
●
Compra da Nest ($3.2 ~ R$ 7.5 bilhões )
●
Compra da Boston Dynamics (robôs)
●
Sistema Operacional para carros. (Android Auto)
– Apple (HomeKit, healthkit, )
– Microsof
●
Lançando plataformas de IoT
– Dell, Intel e Samsung
– Muitas outras e em breve ….. a ;)
9. “A Internet das Coisas vai mudar
o mundo completamente.”F
U
T
U
R
O Hu – Yoshida ( CTO Hitachi )
10. Como vim para aqui ?
●
Tudo começa com um violão...
.. e a primeira gambiarra:
● Um captador feito a partir de um
relógio de pulso
GENIAL !!!! = )
11. Como vim para aqui ?
●
Depois a meta era uma Guitarra !
● Resumindo:
2 anos juntando mesada !
E o amplificador ?
13. O vamos fazer agora ?
●
Nós somos desenvolvedores, não somos
pessoas normais .. ACEITE !!!
●
Vamos HACKEAR as coisas
●
Vamos CRIAR novas coisas
– É preciso estudar bastante
– Não ter medo de errar.. !
16. O que é Arduino
● Arduino é uma plataforma de prototipagem eletrônica open-
source, baseada nos princípios de flexibilidade e facilidade de
uso para hardware e software.
● Consiste de uma placa com microcontrolador programável
preparada para receber sinais de sensores e acionar
atuadores.
● Sua linguagem de programação é baseada em Wiring
(baseado em C/C++).
● A placa pode funcionar em conjunto ou de forma independente
do computador
● É uma comunidade !
Se você já conhece pode pular muitas páginas...
20. Arduino é Open Source
● Todo o hardware é aberto e os projetos estão
disponíveis
● Quem quiser, pode comprar os componentes e
montar a sua placa
● O software de programação também é livre e
está disponível para download gratuitamente
33. Arduino Leonardo
● Microcontrolador: ATmega32u4 (Atmel 8-bit AVR RISC);
● Tensão de operação: 5V;
● Tensão de entrada (recomendada): 7-12V;
● Pinos digitais de E/S: 20 (7 podem ter sinal PWM);
● Pinos com entrada analógica: 12;
● Corrente máxima por pino de E/S: 40 mA;
● Hardware para comunicação: 1 porta serial (UART), I2C (TWI), SPI, USB 2.0
(emula teclado ou mouse);
● Memória Flash (de programa): 32 kB (4 kB usado pelo bootloader)
● Memória SRAM: 2,5 kB; EEPROM: 1 kB;
● Frequência de clock: 16 MHz.
● Suporte a comunicação USB no próprio ATmega32u4;
http://arduino.cc/en/Main/arduinoBoardLeonardo
35. Arduino Mega 2560
● Microcontrolador: ATmega2560;
● Tensão de operação: 5V;
● Tensão de entrada (recomendada): 7-12V;
● Pinos digitais de E/S: 54 (15 podem ter sinal PWM);
● Pinos com entrada analógica: 16;
● Corrente máxima por pino de E/S: 40 mA;
● Hardware para comunicação: 4 portas seriais (UART), I2C (TWI), SPI, USB 2.0
(emula teclado ou mouse);
● Memória Flash (de programa): 256 kB (8 kB são usados pelo bootloader)
● Memória SRAM: 8 kB; EEPROM: 4 kB;
● Frequência de clock: 16 MHz.
36. O que é um Microcontrolador?
● CPU de pequeno porte, capaz de executar um
conjunto de instruções;
● Ou seja, possui um microprocessador!
● – Instruções simples e rápidas;
● – Possui memória(s);
● – Possui periféricos;
● – Pode se comunicar com outros periféricos;
46. Esquema / Sem nada !
Pra quem tem preguiça:
O Arduino já vem com um LED embutido (Pino 13)
47. Instalação
IDE é compatível: Windows, Mac OS X e Linux
– Link: http://arduino.cc/en/main/software
● Driver
– Windows: precisa do driver FTDI
– Linux: não precisa de NADA... ;)
● Software
– Basta descompactar e rodar (se quiser tem um instalador)
– Se tiver algum problema instale a versão antiga: Arduino 1.0.X
– Dúvidas, siga:
● https://www.circuitar.com.br/tutoriais/configurando-o-arduino-no-windows/
● Win 8: http://futebol-uff.blogspot.com.br/2012/12/instalando-drivers-do-arduino-no.html
48. Gravando o Programa
1 - Selecione o Modelo da Placa
2 - Selecione a Porta Serial *
* Se não aparecer, pode ser problema
no Driver (Ruindows !!!)
No Arduino Leonardo a porta fica
mudando e algumas vesses você precisa
selecionar várias vesses !
3 – Clique em upload para
compilar e enviar para o Arduino
49. Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3Prática ?!
60. Exemplo 2 : Botão (explicação)
O digitalRead() lê as tensões de entrada: (5v ou 0v)
e converte em valores: 0 (LOW) e 1 (HIGH)
O pino em modo de leitura (INPUT), sem nenhuma
conexão, irá flutuar gerando valores aleatórios, por
isso precisamos puxar ele pra 0v (pull-down) ou
para 5v (pull-up)
… Então quando a chave estiver aberta, precisamos
levar o pino para um estado confiável, no caso
ligamos ao negativo (GND) usando um resistor (ou
seja um pull-down )
64. Potenciômetro : Leitura Analógica
● analogRead() - Lê valores dos pinos analógicos
● O conversor A/D do microcontrolador ATmega328 possui 10
bits de resolução, gerando valores na faixa 0 a 1023
conforme a tensão no pino, que varia de 0v a 5v.
● A quantidade de pinos analógicos varia em cada modelo.
● Demora 100 microsegundos (0.0001 s) para ler (10,000
leituras / seg)
65. Sensor de Luz : LDR
● LDR (do inglês Light Dependent Resistor) ou Photo-resistor
● Componente eletrônico passivo do tipo resistor variável
● A medida que a intensidade da luz aumenta, a sua resistência
diminui.
● Não é muito preciso !
66. Sensor de Luz : LDR
Modo Pull-Down
Pouca Luz → Valor Baixo
Modo Pull-Up
Pouca Luz → Valor Alto
68. Shields Arduino
● Sistema modular para expandir as
funcionalidades do arduino.
● A parte mais genial !!!
● Uma lista enorme pode
ser encontrada em:
http://shieldlist.org/
69. Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3Exemplos
88. Automação Residencial
● Ligar/Desligar qualquer eletrodoméstico
● Controlar iluminação, temperatura
● Sensores de Presença (segurança)
● Controle de portas e portões automáticos
● Controle Centralizado
● Controle Remoto (pela internet)
● Economia de Energia e Monitoramento de Consumo
● Hardware barato ( Redução de Custos !!!! )
100. Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3
Problema !!
Como fazer a comunicação com esses equipamentos / dispositivos ?
Os padrões ainda estão sendo criados.... (verdadeira gerra !)
É preciso ser fácil
101. 1
Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3
Alternativas com JAVA ?
● A Sun nos abandonou ! (JavaComm/JSR80 ?!?)
● RXTX tem muitos problemas e tem ajustes manuais
- Consegue fazer via JNI (Java Native Interface)
- Pra quem quer começar é um problema !
● Usb4java – Nova, mas parece promissora !
...A IDE do Arduino usa RXTX por baixo dos panos
USB ??
102. 1
Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3
Alternativas com JAVA ?
●
Aqui só no J2ME (JSR-82) e Android.
●
Desktop nem pensar !! e Raspberry ?? rsrsr
●
Saída : Bluecove (usando JNI)
●
Problema : Ultimo release é de 2008
Snapshot em 2010
Bluetooth ??
* JNI faz chamadas a bibliotecas em C, produzidas para esse fim
103. 1
Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3
Alternativas com JAVA ?
Esse não podemos reclamar !
Rede / TCP / IP ?
104. Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3
Tudo junto ?
Dá um trabalhinho !
E você precisa criar sua própria forma de comunicação
Lidar com detalhes de baixo nível
Correção de Erros
Precisa ter uma boa experiência
Etc.. etc...
105. Linha 1 Linha 2 Linha 3 Linha 4
0
2
4
6
8
10
12
Coluna 1
Coluna 2
Coluna 3
Solução ?
Quem pode nos ajudar ?
106. OpenDevice
Open IoT (Internet Of Things) Platform and Framework.
“Conjunto de ferramentas e APIs para construção de
soluções de Internet das Coisas”
107. OpenDevice
Open IoT (Internet Of Things) Platform and Framework.
“Conjunto de ferramentas e APIs para construção de
soluções de Internet das Coisas”
108. OpenDevice
● Apis e Ferramentas que permitem construir
sistemas de:
– Automação Residencial
– Monitoramento de Sensores
– Monitoramento de Energia
– Controle de Robôs
– Smart City
109. OpenDevice
● Objetivo:
O principal objetivo é monitorar e controlar
hardwares baratos como Arduino, RaspberryPI e
plataformas semelhantes, local (offline) ou sobre
a nuvem usando linguagens de programação de
alto nível e com a abstração de protocolos e
detalhes de baixo nível.
110. Foco no que é importante !
Isso permite que você se concentre em seu
projeto e na inovação, deixar os detalhes
obscuros de protocolos de comunicação e
especificações com OpenDevice, você vai dar um
passo importante para o sucesso de seu
projeto.
122. Adicionando Rest !
Adicione essa linha e seja feliz !!!
Você pode acessar pelo navegador
… ou com JavaScript !
123. Agora ficou sério ! WebSockets !
Adicione essas linhas e fique Real-Time e de quebra servidor http !
Biblioteca de Rest e WebSocket ! (adicione no pom.xml)
Ao adicionar o servidor de W.S automaticamente já é adicionado o servidor de REST
125. Instalação
● Usamos o Maven (arquivo pom.xml)
Substitua: ${opendevice-version} pela ultima versão, atualmente: 0.1.2-SNAPSHOT.
Qualquer dúvida consulte:
https://opendevice.atlassian.net/wiki/display/DOC/A.+First+Steps+with+OpenDevice
127. Instalação (lib arduino/similar)
● Baixar ou Clonar o repositório do GIT
– opendevice-hardware-libraries
● Copiar a pasta: arduino/OpenDevice
– Para pasta /libraries da IDE do Arduino
● Reinicie a IDE do Arduino
Github / Sources: https://github.com/OpenDevice
129. Postura !
Nós somos desenvolvedores, não somos “normais”
ACEITE ISSO.. !!!
Devemos ser agentes de Transformação e Criação.
130. Atitude !
Não espere a ideia brilhante !
Execute a ideia que você gosta.
Descubra o que você gosta
Não escute os outros
●
Muita gente vai dizer que você não consegue
●
Muita gente vai dizer que já existe