TDC2014 - Internet das Coisas - Arduino & OpenDevice

Post on 18-Jul-2015

248 views 7 download

Transcript of TDC2014 - Internet das Coisas - Arduino & OpenDevice

Trilha: Internet das CoisasComputação Física, Plataformas, Comunicação, APIs

Comunicação entre Arduino, Raspberry, Android com OpenDevice.

Ricardo JL Rufinorjlr@cin.ufpe.br

ricardo@criativasoft.com.br

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

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.

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 o mundo completamente.”F

UTURO 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• SeeDuino

• Freeduino

• Severino• Brasuíno

Similares

LaunchPad (32bits - ARM Cortex M4)chipKIT Uno32 - 32 bits, 80MHz, 128kB Flash, 16kB SRAM

Similares

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

DigisparkDigispark

Adafruit Trinket (ATtiny85)

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

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

No LED a maior perna é o positivo

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 !!!)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

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3Prática ?!

Dúvidas ?

Antes do Arduino

http://www.avr-tutorials.com/

Antes do ArduinoDigital 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-DownPouca Luz → Valor Baixo

Modo Pull-UpPouca 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/

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3Exemplos

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

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3Sensores

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

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3Robôs

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

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3Projetos

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 ?

Linha 1 Linha 2 Linha 3 Linha 40

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

1

Linha 1 Linha 2 Linha 3 Linha 40

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 ??

1

Linha 1 Linha 2 Linha 3 Linha 40

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

1

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

Alternativas com JAVA ?

Esse não podemos reclamar !

Rede / TCP / IP ?

Linha 1 Linha 2 Linha 3 Linha 40

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çãoLidar com detalhes de baixo nível

Correção de ErrosPrecisa ter uma boa experiência

Etc.. etc...

Linha 1 Linha 2 Linha 3 Linha 40

2

4

6

8

10

12

Coluna 1

Coluna 2

Coluna 3

Solução ?Quem pode nos ajudar ?

OpenDeviceOpen IoT (Internet Of Things) Platform and Framework.

“Conjunto de ferramentas e APIs para construção de soluções de Internet das Coisas”

OpenDeviceOpen 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 !

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

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

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/)