Você está na página 1de 135

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
Agenda
Agenda
● 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
Agenda
Apresentaçã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.
Internet
das
Coisas
Internet das Coisas

Que coisas são essas ?
– Computadores
– Smart Phones
– Tablets
– Sensores
– Roupas
– Pessoas
– Pode ser o que você quiser ! Até cidades !
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
Momento Atual
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 ;)
“A Internet das Coisas vai mudar
F o mundo completamente.”
U
T
U
R
O Hu – Yoshida ( CTO Hitachi )
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 !!!! = )
Como vim para aqui ?

Depois a meta era uma Guitarra !

● Resumindo:
2 anos juntando mesada !

E o amplificador ?
E o amplificador ?

Descobri que é possível criar coisas !!!


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.. !
O que temos em mãos ?
Arduino
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...


Hardware (modelos)
Hardware (modelos)
Software (Arduino IDE)
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
Clones
• Freeduino
• SeeDuino

• Severino
• Brasuíno
Similares

chipKIT Uno32 - 32 bits,


LaunchPad (32bits - ARM Cortex M4) 80MHz, 128kB Flash, 16kB SRAM
Similares Adafruit Trinket (ATtiny85)

Digispark ( 6 I/O Pins,USB, I2C, SPI )

Digispark Digispark
Similares

O que não temos, podemos criar !

O que não temos, podemos criar !
Dúvidas ?
Características de Hardware
Arduino Uno
Arduino Uno
● Microcontrolador: ATmega328p (8-bit AVR RISC);
● Tensão de operação: 5V;
● Tensão de entrada (recomendada): 7-12V;
● Pinos digitais de E/S:14 (6 podem ter sinal PWM);
● Pinos com entrada analógica: 6;
● Corrente máxima por pino de E/S: 40 mA;
● Hardware para comunicação: 1 porta serial (UART TTL), I2C (TWI), SPI;
● Memória Flash (de programa): 32 kB (0,5 kB são usados pelo bootloader);
● Memória SRAM: 2 kB; EEPROM: 1 kB;
● Frequência de clock: 16 MHz.

http://arduino.cc/en/Main/arduinoBoardUno
Arduino UNO
Arduino Leonardo
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
Arduino Mega 2560
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.
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;
Microcontrolador
Microcontrolador

Diagrama do PIC16F887
Microcontrolador
Comparativo Arduinos
Software e Programação
Programação (Blink)

Define o modo de operação do PINO 13 como Saída

Liga a Tensão (5V) no PINO 13

Desliga
Esquema / Ligações
Esquema / Ligações
No LED a maior perna é o positivo

È recomendável usar um Resistor (de 220ohm a 1k)


Esquema / Protoboard
Esquema / Sem nada !

Pra quem tem preguiça:


O Arduino já vem com um LED embutido (Pino 13)
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
Gravando o Programa

1 - Selecione o Modelo da Placa

2 - Selecione a Porta Serial *


* Se não aparecer, pode ser problema
no Driver (Ruindows !!!)
3 – Clique em upload para No Arduino Leonardo a porta fica
mudando e algumas vesses você precisa
compilar e enviar para o Arduino selecionar várias vesses !
12

10

Prática ?!
8

Coluna 1
6 Coluna 2
Coluna 3

0
Linha 1 Linha 2 Linha 3 Linha 4
Dúvidas ?
Antes do Arduino

http://www.avr-tutorials.com/
Antes do Arduino
Digital I/O Assembly

http://www.avr-tutorials.com/
Antes do Arduino
● Processo Lento
● Mais caro
● Mais Complexo
OK !!! Voltando....
Exemplo 2 : Botão (Leitura Digital)
Exemplo 2 : Botão (Leitura Digital)
Exemplo 2 : Botão (Leitura Digital)

http://arduino.cc/en/Tutorial/DigitalReadSerial
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 )
Potenciômetro : Leitura Analógica

http://www.arduino.cc/en/tutorial/potentiometer
Potenciômetro : Leitura Analógica
Potenciômetro : Código
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)
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 !
Sensor de Luz : LDR
Modo Pull-Down
Pouca Luz → Valor Baixo

Modo Pull-Up
Pouca Luz → Valor Alto
Sensor de Luz : Código
Shields Arduino
● Sistema modular para expandir as
funcionalidades do arduino.
● A parte mais genial !!!
● Uma lista enorme pode
ser encontrada em:
http://shieldlist.org/
12

10

Exemplos
8

Coluna 1
6 Coluna 2
Coluna 3

0
Linha 1 Linha 2 Linha 3 Linha 4
Shield : Ethernet
Shield : WiFly Shield

https://www.sparkfun.com/products/9954
Shield : Cellular with SM5100B

https://www.sparkfun.com/products/9607
Shield : GPS

https://www.sparkfun.com/products/10710
Shield : XBee
Shield : Color LCD Shield

https://www.sparkfun.com/products/retired/9363
Shield : Relay Shield

http://www.seeedstudio.com/depot/relay-shield-v20-p-1376.html?cPath=132_134
Shield : MP3 Player Shield
12

10

Sensores
8

Coluna 1
6 Coluna 2
Coluna 3

0
Linha 1 Linha 2 Linha 3 Linha 4

http://www.trossenrobotics.com/
Sensores

http://www.trossenrobotics.com/c/arduino-sensors.aspx?sort=SalesRank
Sensores

http://www.trossenrobotics.com/c/arduino-sensors.aspx?sort=SalesRank
Sensores

http://www.trossenrobotics.com/c/arduino-sensors.aspx?sort=SalesRank
12

10

Robôs
8

Coluna 1
6 Coluna 2
Coluna 3

0
Linha 1 Linha 2 Linha 3 Linha 4
Robôs
Robôs
Robôs
Robôs
Automação Residencial
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 !!!! )
Automação Residencial
12

10

Projetos
8

Coluna 1
6 Coluna 2
Coluna 3

0
Linha 1 Linha 2 Linha 3 Linha 4
Twitter Enabled Coffee Pot

http://www.instructables.com/id/Tweet-a-Pot-Twitter-Enabled-Coffee-Pot/
Inebriator

http://www.theinebriator.com/
Flamethrowing Jack-O'-Lantern

http://www.instructables.com/id/Flamethrowing-Jack-O-Lantern/
Tree Climbing Robot

http://www.instructables.com/id/Tree-Climbing-Robot/
Arduino R/C Lawnmower

http://www.instructables.com/id/Arduino-RC-Lawnmower/
http://www.wired.com/2013/01/wearable-arduinos/#slideid-351561
Drones
ArduIMU Quascopter

http://thecoolgadgets.com/arduimu-quascopter-diy-arduino-helicopter-4-infrared-and-1-ultra-sonic-sensors/
Dúvidas ?
12

10

8
Problema !!
Como fazer a comunicação com esses equipamentos / dispositivos
Coluna 1 ?
6 Coluna 2
Coluna 3

Os
4 padrões ainda estão sendo criados.... (verdadeira gerra !)

2
É preciso ser fácil
0
Linha 1 Linha 2 Linha 3 Linha 4
1 Alternativas com JAVA ?
12 USB ??
A Sun nos abandonou ! (JavaComm/JSR80 ?!?)
●10

● RXTX tem muitos problemas e tem ajustes manuais


8

- Consegue fazer via JNI (Java Native Interface) Coluna 1


6
- Pra quem quer começar é um problema ! Coluna 2
Coluna 3

● Usb4java – Nova, mas parece promissora !


4

0
Linha 1 Linha 2 Linha 3 Linha 4

...A IDE do Arduino usa RXTX por baixo dos panos


1 Alternativas com JAVA ?
12 Bluetooth ??
Aqui só no J2ME (JSR-82) e Android.
10


Desktop nem pensar !! e Raspberry ?? rsrsr
8

Saída : Bluecove (usando JNI)


Coluna 1
● 6 Coluna 2
Coluna 3


4 Problema : Ultimo release é de 2008
Snapshot em 2010
2

0
Linha 1 Linha 2 Linha 3 Linha 4

* JNI faz chamadas a bibliotecas em C, produzidas para esse fim


1 Alternativas com JAVA ?
12 Rede / TCP / IP ?
10

Esse não podemos reclamar !


Coluna 1
6 Coluna 2
Coluna 3

0
Linha 1 Linha 2 Linha 3 Linha 4
Tudo junto ?
12

10

8
Dá um trabalhinho !
Coluna 1
6 Coluna 2

E você precisa criar sua própria forma de comunicação


Coluna 3

Lidar com detalhes de baixo nível


4

2 Correção de Erros
0
Precisa ter uma boa experiência
Linha 1
Etc.. etc...
Linha 2 Linha 3 Linha 4
12

Solução ?
10

Coluna 1

Quem pode nos ajudar ?


6 Coluna 2
Coluna 3

0
Linha 1 Linha 2 Linha 3 Linha 4
OpenDevice
Open IoT (Internet Of Things) Platform and Framework.

“Conjunto de ferramentas e APIs para construção de


soluções de Internet das Coisas”
OpenDevice
Open IoT (Internet Of Things) Platform and Framework.

“Conjunto de ferramentas e APIs para construção de


soluções de Internet das Coisas”
OpenDevice
● Apis e Ferramentas que permitem construir
sistemas de:
– Automação Residencial
– Monitoramento de Sensores
– Monitoramento de Energia
– Controle de Robôs
– Smart City
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.
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.
Tecnologias Envolvidas
Funcionalidades
● Open API (for: REST, JavaScript, Java, Android, Arduino,
EnergiaIDE)
● Real-time (WebSockets)
● Event-Based
● Async & non-blocking
● Multi-protocolo (Usb, Bluetooth, TCP)
● Independente de Linguagem
● Independente de Plataforma (Windows, Linux, Mac, MIPs on
OpenWRT)
● Lightweight/Built-in Servers (não precisa do tomcat ou glassfish)
Visão Geral
Event-driven and Real-Time

Você não precisa consultar a informação,


ela vem até você quando os dados
estiverem disponíveis
Hands-On/Of

Uma pitada de java...


Blink - Arduino

* C / Arduino
Blink - Java
Blink Java (mais livre)
Blink Java (Comandos)
Incrementando no Arduino

* C / Arduino
Incrementando no JAVA
Definição de Dispositivos

Definição das Conexões

* JAVA
Adicionando Rest !
Adicione essa linha e seja feliz !!!

Você pode acessar pelo navegador

… ou com JavaScript !
Agora ficou sério ! WebSockets !
Adicione essas linhas e fique Real-Time e de quebra servidor http !

Ao adicionar o servidor de W.S automaticamente já é adicionado o servidor de REST

Biblioteca de Rest e WebSocket ! (adicione no pom.xml)


Api JavaScript para WebSocket
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
Instalação
● Adicionar o repositório da Sonatype
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


HORÁRIO RESERVADO
À PROGRAMAÇÃO E MÃO NA MASSA
Postura !
Nós somos desenvolvedores, não somos “normais”
ACEITE ISSO.. !!!
Devemos ser agentes de Transformação e Criação.
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
Dúvidas ?
Contatos

E-mail:
– ricardo@criativasof.com.br
– rjlr@cin.ufpe.br

Facebook
– /ricardojlrufino
Link's

OpenDevice:
– http://opendevice.io
– https://github.com/OpenDevice
– https://opendevice.atlassian.net/wiki
– http://opendevice.criativasof.com.br

Facebook
– /opendevice
Link's

Onde Comprar ? (Gringos):
– www.adafruit.com
– www.sparkfun.com
– www.seeedstudio.com
– imall.iteadstudio.com
– www.dx.com (mercado livre – demora....)

Brasil
– Lab de Garagem (http://www.labdegaragem.org
– Multilógica Shop (http://multilogica-shop.com/);
– Rlrobotics (http://www.rlrobotics.ind.br/arduino);
– Webtronico (http://www.webtronico.com/)
Obrigado pela sua atenção.

Você também pode gostar