Internet das Coisas Arduino + ADK + Android Ricardo da Silva Ogliari Instrutor Academia Android – Globalcode @mobilidadetudo rogliariping@gmail.com
Globalcode – Open4education
Agenda Introdução a Arduino Programando para Arduino Conhecendo o ADK Integrando o ADK com uma aplicação Android Sensores em Android Internet das Coisas
Globalcode – Open4education
Eu + de 160 publicações – Revistas – ITWeb – Globalcoders
Globalcode – Open4education
Introdução a arduino
Globalcode – Open4education
Introdução ao Arduino • Plataforma baseada em Atmel da AVR (ATMega168); • Oferece um IDE e bibliotecas de programação de alto nível; • Open-source hardware e software • Ampla comunidade • Programado em C/C++ • Transferência de firmware via USB MCU com bootloader Globalcode – Open4education
Histórico do Arduino Projeto criado na Itália pelo Mássimo Banzi no Interaction Design Institute Ivrea; Nasceu para complementar o aprendizado de programação, computação física e gráfica; Nasceu do Processing e Wiring; Processing é um ambiente e linguagem de programação para criar imagens, animação e interação;
Globalcode – Open4education
Simplicidade no circuito:
Globalcode – Open4education
Muitas aplicações práticas Robôs Roupas eletrônicas Máquinas de corte e modelagem 3D de baixo custo; Segway open-source Desenvolvimento de celulares customizados Instrumentos musicais Paredes interativas Instrumentação humana Circuit bending Globalcode – Open4education
Vários tipos, vários fabricantes... Mega Lilypad Nano Uno Pro Arduino BT Freeduino Severino Program-ME Globalcode – Open4education
Atmega168 / Atmega328: coração Características do ATmega 328: RISC 20 MIPS (20 Milhões de instruções por segundo) 32Kb Flash / 1Kb EEPROM / 2Kb RAM Estática 10.000 ciclos na Flash e 100.000 na EEPROM 2 contadores / temporizadores de 8bits 1 contador / temporizador de 16bits 1 temporizador de tempo real com clock a parte 14 portas digitais 6 portas analógicas Globalcode – Open4education
Características técnicas 6 canais PWM 6 conversores analógico/digital de 10 bits 1 serial programável (USART) 1 interface SPI (Serial Peripheral Interface) 1 interface serial a 2 fios (I2C) 1 watch dog timer programável 1 comparador analógico no chip Interrupção ou wake-up na alteração de estado dos pinos Globalcode – Open4education
Resumo das conexões da placa
Globalcode – Open4education
FT232RL Conversor USB-Serial
Conector USB
Regular 7805: Recebe até 12 volts e regula para 5 volts
Alimentação externa: Até 12 volts
Globalcode – Open4education
BotĂŁo de reset
ICSP Para gravar bootloader ou programas/firmware AtMega328 /168/8
Globalcode – Open4education
AREF Referência analógica Padrão 5 volts
GND Portas digitais 0 a 13 0 RX 1 TX = usada durante transferência de sketch e comunicação serial com placa 2,4,7,8,12,13 = portas digitais convêncionais 3,5,6,9,10,11 = portas PWM
Globalcode – Open4education
Shields: arquitetura modular inteligente Arduino estabeleceu um padrão de pinagem que é respeitado por diversas placas shield:
Globalcode – Open4education
Programando para arduino
Globalcode – Open4education
Programando para Arduino IDE pode ser baixada de www.arduino.cc A IDE foi desenvolvida com Java, portanto precisaremos de um máquina virtual 1.5 ou 1.6 instalada Funciona em Windows. Mac OS X e Linux (em alguns windows e mac pode ser necessário colocar driver) A transferência para a placa é feita via USB pelo IDE;
Globalcode – Open4education
Partes básicas do programa Arduino Temos que obrigatoriamente programar dois métodos: void setup() { } void loop() { } O setup é executado úma só vez assim que a placa for ligada e o loop executa infinitamente Globalcode – Open4education
Portas digitais e analógicas Na prática ligamos componentes em portas digitais e analógicas e através do código Arduino, manipulamos as portas: pinMode(<porta>, <modo>): configura uma porta digital para ser lida ou para enviarmos dados; digitalWrite(<porta>, 0 ou 1): envia 0 ou 1 para porta digital digitalRead(<porta>): retorna um 0 ou 1 lido da porta analogRead(<porta>): retorna de 0 a 1023 com o valor da porta analógica analogWrite(<porta>, <valor>): escreve em uma porta PWM um valor de 0 a 255 Globalcode – Open4education
Exemplo “pisca led” com Arduino Esta conexão é bem simples somente para efeito de teste para piscar o led. O correto é ligar um resistor usando uma protoboard.
Globalcode – Open4education
Exemplo “pisca led” void setup() { pinMode(13, OUTPUT); //porta 13 em output } void loop() { digitalWrite(13, HIGH); //HIGH = 1 = TRUE delay(500); digitalWrite(13, LOW); //LOW = 0 = FALSE delay(500); } Globalcode – Open4education
LDR no Arduino sem protoboard
Globalcode â&#x20AC;&#x201C; Open4education
Exemplo “luz ambiente” void setup() { //Inicializando conexão com PC via FT232 cabo Serial.begin(9600); } void loop() { int luz = analogRead(5); //LDR ligado na 5 //envia informações para o PC Serial.println(luz); delay(500); } Globalcode – Open4education
Conhecendo o adk
Globalcode â&#x20AC;&#x201C; Open4education
Accessory Development Kit É a implementação de referência para fabricantes e hobistas usarem como ponto de partida na construção de acessórios para a plataforma Android. Exemplos de acessórios: Docks de áudio. Máquinas de exercícios. Equipamentos pessoais para testes clínicos. Estações climáticas. Ou qualquer hardware externo que adicione funcionalidade ao seu Android. Globalcode – Open4education
Accessory Development Kit • Comunicação é feita utilizando o protocolo AOA (Android Open Accessory) e pode ser feita por cabo USB ou por Bluetooth. • Página com guia e detalhes de cada versão da implementação: http://developer.android.com/tools/adk/index.html
Globalcode – Open4education
Demo Board
Globalcode â&#x20AC;&#x201C; Open4education
ADK Shield
Globalcode â&#x20AC;&#x201C; Open4education
Integrando o ADK com uma aplicação Android Globalcode – Open4education
Declarar biblioteca • Dentro da tag application, declarar o uso da biblioteca de USB:
<uses-library android:name="com.android.future.usb.accessory” />
Globalcode – Open4education
Intent Filter • Também é preciso configurar a Activity que vai ser chamada quando o acessório for plugado no telefone. Para isso, declarar a action abaixo: <action android:name="android.hardware.usb.action. USB_ACCESSORY_ATTACHED" />
Globalcode – Open4education
Meta data • Declarar onde as informações sobre o acessório serão declaradas. Também deve ser colocado na tag da Activity: <meta-data android:name="android.hardware.usb.action. USB_ACCESSORY_ATTACHED” android:resource="@xml/accessory_filter" />
Globalcode – Open4education
accessory_filter.xml <?xml version="1.0" encoding="utf-8"?> <resources> <usb-accessory manufacturer="Globalcode" model="DroidShootherADK" version="1.0" /> </resources>
Globalcode â&#x20AC;&#x201C; Open4education
Código ADK AndroidAccessory acc("Globalcode", "DroidShootherADK", "DroidShooter ADK", "1.0", "http://www.globalcode.com.br", "0000000012345678");
Globalcode – Open4education
Android e Sensores
Globalcode â&#x20AC;&#x201C; Open4education
Android e Sensores Funcionamento básico igual para qualquer sensor; Interface SensorEventListener – Definição dos métodos: • OnAccuracyChanged • OnSensorChanged Criar o Listener e definir qual sensor eu vou ouvir
Globalcode – Open4education
Android e Sensores class MyActivity extends Activity implements SensorEventListener{ protected void onCreate(Bundle savedInstanceState) { ... SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
sm.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT), SensorManager.SENSOR_DELAY_NORMAL);
public void onAccuracyChanged(Sensor s, int accuracy) {} }
public void onSensorChanged(SensorEvent event) {} Globalcode â&#x20AC;&#x201C; Open4education
Internet das Coisas
Globalcode â&#x20AC;&#x201C; Open4education
IoT Até 2020 serão 50 bilhões de objetos conectados
Globalcode – Open4education
IoT N Pessoas para 1 Computador = Mainframes
Globalcode â&#x20AC;&#x201C; Open4education
IoT 1 Pessoa para 1 Computador = PC´s
Globalcode – Open4education
IoT 1 Pessoa para N Computadores 2 BilhĂľes de pessoas conectadas
Globalcode â&#x20AC;&#x201C; Open4education
IoT Geladeiras Lava-louças
Globalcode – Open4education
IoT
Globalcode â&#x20AC;&#x201C; Open4education
IoT
VÍDEO DEMONSTRAÇÃO
Globalcode – Open4education
IoT
MÃO NA MASSA
Globalcode – Open4education
Things API Evolução do jHome Automation, projeto premiado Oracle Innovation Awards 1º API para IoT Abstração para hardware, meios de comunicação e protocolos! Concebida em Java com interfaces para outras linguagens
Globalcode – Open4education