placas de prototipação para iot joão bosco teixeira júnior · motores (servo, cc, passo) ......

70
Placas de Prototipação para IoT João Bosco Teixeira Júnior

Upload: vanhuong

Post on 15-Nov-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Placas de Prototipação para IoTJoão Bosco Teixeira Júnior

Page 2: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Conteúdo: Parte I - Conceitos

● Cuidados com a placa Arduíno (http://ruggedcircuits.com/html/ancp01.html)

● O que é o Arduino?● O que as pessoas estão fazendo com Arduino?● Placas arduino (Modelos, Clones)● Acessórios (Shields e Placas);● A Plataforma Arduíno

● O Hardware, A linguagem , O Software● Exemplo 1: Hello World

Page 3: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Conteúdo (Parte II - Programação)

● Declaração de Variáveis e Tipos● Bibliotecas e funções● Tomada de Decisão● Loops (for e while)

Page 4: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Conteúdo (Parte III - Eletrônica)

● Resistores de Pull-Up e Pull-Down● Sensores e Atuadores;● Atuando em cargas diversas (drivers):

● Transistores, Relé, Isolamento ótico● Motores (Servo, CC, Passo)● Sensores (IR, Distancia, Presença)

Page 5: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

O que é o Arduino?

● Plataforma Aberta de prototipação eletrônica;● Firmware + Hardware + Software

● Projetada com o microcontrolador AVR Atmel;● Linguagem de programação baseada em C/C++;● Suporte embutido a Entrada e Saida (I/O);● “O objetivo do projeto é criar ferramentas que

são acessíveis, com baixo custo, flexíveis e fáceis de se usar por artistas e amadores. Principalmente para aqueles que não teriam alcance aos controladores mais sofisticados e de ferramentas mais complicadas.”

Fonte: Wikipedia

Page 6: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Cuidados com sua placa ArduínoNunca... Jamais... De jeito algum...

● Ligue os pinos Digitais ou Analógicos diretamente ao Terra ou ao Positivo (Vin ou 5v). Isso pode provocar um curto e queimar a placa. Veremos como garantir uma referencia para um pino de entrada;

● Ligue um pino de I/O a outro, a mesma razão acima;

● aplique uma voltagem maior que 5v a uma entrada isso vai danificar a porta e talvez todo o circuito;

● Ultrapasse a corrente total que o Arduino pode fornecer, cerca de 200mA.

● Maiores detalhes em: ● http://ruggedcircuits.com/html/ancp01.html

Page 7: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

O que as pessoas tem feito com ...Robots

VANTS

Satélites

Roupas

Page 8: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Modelos (Atuais 2012/2013)http://arduino.cc/en/Main/Products

Page 9: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Clones

● O desejo dos fundadores é que o nome seja utilizado nos produtos oficiais (o que nem sempre ocorre) mas o hardware e software são livres, sendo assim vários clones são produzidos. Algum exemplos:● Freeduino● Seeduino● Brasuíno

Page 10: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

AcessóriosShields e Módulos

● Diz-se Shield (Escudo) uma placa específica se encaixa na placa Arduíno através dos seus conectores padrão. Alguns exemplos:● ProtoShield● SensorShield● Ethernet Shield● Usb Shield (ADK)● LCD Shield

Page 11: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

AcessóriosMódulos

● Módulos são placas com algum elemento que o Arduíno poderá usar como sensor, atuador ou Driver (Veremos isso mais adiante), Exemplos:● Relé (X1, x2, X4, X8, X16, ...);● Sensor de Presença e distancia;● Sensor de Temperatura;● Ponte H;● Etc;

Page 12: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Breakout Boards

● A maioria dos componentes e sensores disponíveis no mercado usam algum tipo de encapsulamento SMD. Isso impossibilita o uso do componente por hobistas em geral, pois seria necessário estação de solda smd (retrabalho). Para esse público são disponibilizadas as breakout boards.

● Onde Encontrar:● Internacional: www.sparkfun.com, www.adafruit.com● Brasil: www.labadegaragem.com/loja

Page 13: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

A plataforma Arduíno

Page 14: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Hardware: Anatomia de uma placa

●14 Pinos/Portas para I/O digitais● 2 para comunicação serial RX e TX (0 e 1)● 6 podem ser usados com saída PWM (~)

●06 Pinos/Portas para I/O analógico

●Baseado no Controlador ATMEGA328● RISC● 32K de para programa● 16 Mhz

R3 R2

Page 15: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Hardware: Anatomia de uma placa

R3 R2

Fonte: http://robotmill.com

Page 16: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Software: IDE (Integrated Development Environment)

● O IDE é composto de:● Editor de textos;● Uma área de mensagens;● Um console texto para se comunicar com a placa;● A barra com botões e● Menus;● Usada para fazer uploads dos programas

● Sketches (esboços) é um software escrito usando o IDE. São escritos no editor de texto e salvos em arquivos com a extensão .ino.

Page 17: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

IDEMenu

Barra de Botões

Editor deTextos

Área deMensagens

Novo

SalvarCarregar

Gravar noArduíno

Compilar

Page 18: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Software: O Programa (Sketch)

● O programa é escrito na linguagem process uma mistura entre C e java.

● Um sketch deve ter pelo menos duas funções: setup e loop.

● Setup: Executada apenas 1 vez, usada para fazer as configurações no controlador.

● Loop: Executa infinitamente, é onde deve ser escritos os comandos que vão compor o programa que o Arduíno deve executar.

Page 19: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Software: O Programa (Sketch)

Page 20: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Exemplo 1.1: Hello World

● Led Ligado a pino 13 do arduino● Passos:

● 1: Configurar o pino 13 como saída● 2: Colocar o pino 13 em nível alto● 3: Aguardar 1 segundo● 4: Colocar o pino 13 em modo baixo● 5: Aguardar 1 Segundo● 6: Ir para o passo 2

13

Page 21: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Exemplo 1.1: Hello World“Jogo dos 3 Erros”

OBS: A IDE reconhece palavras reservadas: tipos, funções, comandos, etc

Page 22: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Exemplo 1.2: Hello World

● Led Ligado a pino 13 do arduino● Passos:

● 1: Configurar o pino 13 como saída● 2: Colocar o pino 13 em nível alto● 3: Aguardar 1 segundo● 4: Colocar o pino 13 em modo baixo● 5: Aguardar 1 Segundo● 6: Incrementar o contador● 7: Se contador igual a 5, Zera contador e espera 5s● 8: Ir para o passo 2

13

Page 23: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Exemplo 1.2: Hello World

Page 24: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Parte II – ProgramaçãoJogo Genius

Page 25: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A especificaçãoJogo Genius

● Um Jogo que acende luzes e toca tons em uma sequencia, o desafio do jogador é tocar a mesma sequencia emitida pelo jogo. A cada rodada o jogo toca mais um elemento da sequencia, obrigando o jogador a cada rodada memorizar um novo elemento da sequencia.

Page 26: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – O AlgoritmoJogo Genius

● 1: Gerar Sequencia e Iniciar: contadorSeq (1) e ContadorDig(0)● 2: Para cada elemento da sequencia de zero a contadorSeq

● 2.1 Acender o led● 2.2 Tocar o tom correspondente e apagar o led

● 3: Esperar a digitação de uma tecla● 3.1: ? Se a tecla digitada corresponde a sequencia:

– 3.1.1 Acende o led, Toca o tom correspondente e Incrementa contadorDig– 3.1.2 ? Se contadorDig é igual a contadorSeq:

● 3.1.2.1 ? Se contadorDig igual ao Tamanho Sequencia: GANHOU!– 3.1.2.1.1 acende todos os leds e toca tema da vitória. – 3.1.2.1.2 Volta ao passo 1

● 3.1.2.2 Incrementa contadorSeq● 3.1.2.3 Zera contadorDig● 3.1.2.4 Volta para o passo 2

– 3.1.3 ? Senão volta ao passo 3● 3.2 ? Senão pisca todos os leds e toca um tom fúnebre: PERDEU!

● 4 volta para o passo 1

Page 27: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – O CircuitoJogo Genius: Esquema

● Essa figura representa um esquema eletrônico, com a ligação dos componentes. Todo “Arduinista” deve saber como colocar esse tipo de circuito em um Protoboard. Não se preocupe! Falaremos nisso depois.

Page 28: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – O CircuitoJogo Genius: No Protoboard

Page 29: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – ConfiguraçãoJogo Genius

● Como podemos observar no circuito usaremos as portas 2, 3 ,4 e 5 para os leds 1, 2, 3 e 4 respectivamente. Sendo assim essas portas serão configuradas como saída.

● Para o buzzer usaremos o pino 9 e desta forma ele também será saída.

● Para os botões 1, 2, 3 e 4, usaremos os pinos 6, 7, 8 e 10. Sendo assim esses pinos serão configurados como entrada.

● Para configurar os pinos como entrada ou saída usa-se a função pinMode, normalmente dentro da função setup.

● Existe uma boa prática adotada pelos programadores de arduíno: sempre criar uma variável para cada pino que será usado isso tem duas vantagens principais:

● 1: O programa fica mais legível se você usar bons nomes.● 2: Se você alterar a função de algum pino não precisará

percorrer todo o programa.

Page 30: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – ConfiguraçãoJogo Genius:Sketch V0.1

int but1 = 2;int but2 = 3;int but3 = 4;int but4 = 5;int led1 = 6;int led2 = 7;int led3 = 8;int led4 = 10;int buzz = 9;

void setup(){ pinMode(but1, INPUT); pinMode(but2, INPUT); pinMode(but3, INPUT); pinMode(but4, INPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(buzz, OUTPUT);}void loop(){}

Page 31: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoJogo Genius: Variáveis e Array

● 1: Gerar Sequencia e Iniciar: contadorSeq (1) e ContadorDig(0)

● ContadorSeq é uma variável que informa o número de elementos da sequencia devem ser tocados na presente rodada. Para essa função será usada uma variável do tipo inteiro. Inicia em 1.

● ContadorDig é a variavel que informa quantos botões já foram pressionados na presente rodada. Também será usado uma variável do tipo inteiro.

● A sequencia é um conjunto (8 elementos aqui) finito de números onde cada elemento está entre 1 e 4. Um conjunto de dados de mesmo tipo é melhor armazenado em uma estrutura de dados conhecida como Array.

● Enquanto uma variável representa uma posição de memória o Array representa um conjunto de posições. Cada elemento do conjunto é acessado através de índice.

● O índice do primeiro elemento do Array é Zero.

Page 32: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoJogo Genius:Sketch V0.2

● 1: Gerar Sequencia e Iniciar: contadorSeq (1) e ContadorDig(0)

int but1 = 2;int but2 = 3;int but3 = 4;int but4 = 5;int led1 = 6;int led2 = 7;int led3 = 8;int led4 = 10;int buzz = 9;int contadorSeq = 1;int contadorDig = 0;int sequencia[] = { 1, 2, 3, 3, 1, 4, 4, 2 };

Page 33: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – O AlgoritmoJogo Genius

● 1: Gerar Sequencia e Iniciar: contadorSeq (1) e ContadorDig(0)● 2: Para cada elemento da sequencia de zero a contadorSeq

● 2.1 Acender o led● 2.2 Tocar o tom correspondente e apagar o led

● 3: Esperar a digitação de uma tecla● 3.1: ? Se a tecla digitada corresponde a sequencia:

– 3.1.1 Acende o led, Toca o tom correspondente e Incrementa contadorDig– 3.1.2 ? Se contadorDig é igual a contadorSeq:

● 3.1.2.1 ? Se contadorDig igual ao Tamanho Sequencia: GANHOU!– 3.1.2.1.1 acende todos os leds e toca tema da vitória. – 3.1.2.1.2 Volta ao passo 1

● 3.1.2.2 Incrementa contadorSeq● 3.1.2.3 Zera contadorDig● 3.1.2.4 Volta para o passo 2

– 3.1.3 ? Senão volta ao passo 3● 3.2 ? Senão pisca todos os leds e toca um tom fúnebre: PERDEU!

● 4 volta para o passo 1

Page 34: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoJogo Genius: Loop For

● 2: Para cada elemento da sequencia de zero a contador● 2.1 Acender o led● 2.2 Tocar o tom correspondente e apagar o led

● Essa é clássica situação onde é preciso percorrer todo um conjunto de elementos para tomar alguma ação. Neste tipo de caso usa-se o comando for.

● O acesso aos elementos do array se dará através de um índice que poderá ser implementando usando-se uma variável local.

● Acender o led e Tocar o tom serão feitos pela função que será criada chama tocaElemento (int elemento).

for(int indice = 0; indice<valor ; indice++){ bloco_de_comandos;}

Comando de inicialização

Condição deParada

ComandoExecutadoA cada passo

Page 35: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoJogo Genius:Sketch V0.3

● 2: Para cada elemento da sequencia de zero a contador● 2.1 Acender o led● 2.2 Tocar o tom correspondente e apagar o led

void tocaElemento (int elemento){ //função que acenderá o led e tocará o tom.}void setup(){ pinMode(but1, OUTPUT); pinMode(but2, OUTPUT); pinMode(but3, OUTPUT); pinMode(but4, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(buzz, OUTPUT);}void loop(){ for(int indice=0; indice<contadorSeq; indice++){ tocaElemento(sequencia[indice]); delay(400); }}

Page 36: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoJogo Genius: Switch-Case

● 2.1 Acender o led● 2.2 Tocar o tom correspondente e apagar o led

● As atividades de acender o led e tocar o tom adequado foram tercerizadas para a função tocaElemento. O objetivo agora é preencher a função. Para tanto precisamos escolher que Led será aceso e que toque será emitido com base no parâmetro elemento passado para a função.

● Neste caso o parâmetro pode estar entre os valores 1 e 4. Para cada valor específico uma ação será tomada.

● Situações como essa em que uma única variável pode assumir diversos valores e uma decisão precisa ser tomada com base neste valor podem ser facilmente implementadas usando o comando SWITCH.

● Para acender e apagar o led usa-se a função digitalWrite.● O tom será tocado pela função tocaTom() implementada

posteriormente

Page 37: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

ProgramaçãoSwitch-Case

switch (var){ case valor1: bloco_de_comandos; break; ... case valorN: bloco_de_comandos; break; Default: bloco_de_comandos;}

Se var igual a valor1 esse blocoserá executado

Chaves delimitam o escopo do Switch

Se var igual a valorN esse blocoserá executado

O bloco default será executado se var não for igual a nenhum dos valores especificados no case

Page 38: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoJogo Genius:Sketch V0.3.1

● 2.1 Acender o led● 2.2 Tocar o tom correspondente e apagar o led

void tocaTom(int elemento){ //função que tocará o tom delay(800) //como se tivesse tocando o tom}void tocaElemento (int elemento){ //função que acenderá o led e tocará o tom. int led; //variavel local. Ela vai poupar código switch(elemento) { case 1: led=2; break; case 2: led=3; break; case 3: led=4; break; case 4: led=5; break; } digitalWrite(led, HIGH); tocaTom(elemento); digitalWrite(led, LOW);}

Page 39: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – O AlgoritmoJogo Genius

● 1: Gerar Sequencia e Iniciar: contadorSeq (1) e ContadorDig(0)● 2: Para cada elemento da sequencia de zero a contadorSeq

● 2.1 Acender o led● 2.2 Tocar o tom correspondente e apagar o led

● 3: Esperar a digitação de uma tecla● 3.1: ? Se a tecla digitada corresponde a sequencia:

– 3.1.1 Acende o led, Toca o tom correspondente e Incrementa contadorDig– 3.1.2 ? Se contadorDig é igual a contadorSeq:

● 3.1.2.1 ? Se contadorDig igual ao Tamanho Sequencia: GANHOU!– 3.1.2.1.1 acende todos os leds e toca tema da vitória. – 3.1.2.1.2 Volta ao passo 1

● 3.1.2.2 Incrementa contadorSeq● 3.1.2.3 Zera contadorDig● 3.1.2.4 Volta para o passo 2

– 3.1.3 ? Senão volta ao passo 3● 3.2 ? Senão pisca todos os leds e toca um tom fúnebre: PERDEU!

● 4 volta para o passo 1

Page 40: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoJogo Genius: Loop while

● Existem várias formas de implementar a espera pela digitação de uma tecla. As mais eficientes usam interrupção de hardware. Mas para o nosso caso vamos usar mais uma estratégia mais trivial.

● No nosso caso usaremos um loop While e a função digitalRead que lê o estado de uma entrada e retorna 0 caso ela esteja em nível lógico 0 e 1 caso contrário.

● Já para fazer a comparação e executar uma sequencia de comandos se a comparação for verdadeira e outra sequencia de comandos se for falsa, podemos usar a formação conhecida por if-then*-else *(if-else no nosso caso).

● Para acender o led e tocar o tom podemos usar a função já implementada tocaElemento. Para fazer o procedimentos em caso de erro vamos criar a função perdeu.

● 3: Esperar a digitação de uma tecla● 3.1 ? Se a tecla digitada corresponde a sequencia:

– 3.1.1 Acende o led, Toca o tom correspondente e Incrementa contadorDig● 3.2 ? Senão pisca todos os leds e toca um tom fúnebre: PERDEU!

Page 41: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

ProgramaçãoDois Coelhos: If-else e While

if (condição) { bloco_de_comandos1;}else { bloco_de_comandos2;}

A cláusula else não é obrigatória

Chaves delimitam os blocos de comandos é necessário seu uso quando o bloco tem mais de um comando

while (condição) { bloco_de_comandos;}

Chaves delimitam os blocos de comandos é necessário seu uso quando o bloco tem mais de um comando

Chaves delimitam os blocos de comandos é necessário seu uso quando o bloco tem mais de um comando

Se a condição for verdadeira será Executado bloco_de_comandos1 senão executa-se o bloco_de_comandos2

Enquanto a condição for verdadeira será Executado bloco_de_comandos1.

Page 42: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoJogo Genius:Sketch V0.4

void perdeu(){}void setup(){ pinMode(but1, OUTPUT); pinMode(but2, OUTPUT); pinMode(but3, OUTPUT); pinMode(but4, OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(buzz, OUTPUT);}void loop(){ int tecla=0; //guarda o número da tecla pressionada for(int indice=0; indice<contadorSeq; indice++){ tocaElemento(sequencia[indice]); delay(400); }

● 3: Esperar a digitação de uma tecla● 3.1 ? Se a tecla digitada corresponde a sequencia:

– 3.1.1 Acende o led, Toca o tom correspondente e Incrementa contadorDig● 3.2 ? Senão pisca todos os leds e toca um tom fúnebre: PERDEU!

while(1){ //laço de verificação das teclas while(tecla==0){ //sai do laço se tecla pressionada if(digitalRead(but1)) tecla=1; if(digitalRead(but2)) tecla=2; if(digitalRead(but3)) tecla=3; if(digitalRead(but4)) tecla=4; } if (sequencia[contadorDig]==tecla){ tocaElemento(tecla); contadorDig=contadorDig+1; } else{ perdeu(); contadorDig=0; // inicia novamente contadorSeq=1; // inicia novamente break; //sai do laço de verificação } }}

Page 43: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – O AlgoritmoJogo Genius

● 1: Gerar Sequencia e Iniciar: contadorSeq (1) e ContadorDig(0)● 2: Para cada elemento da sequencia de zero a contadorSeq

● 2.1 Acender o led● 2.2 Tocar o tom correspondente e apagar o led

● 3: Esperar a digitação de uma tecla● 3.1: ? Se a tecla digitada corresponde a sequencia:

– 3.1.1 Acende o led, toca o tom correspondente e Incrementa contadorDig– 3.1.2 ? Se contadorDig é igual a contadorSeq:

● 3.1.2.1 ? Se contadorDig igual ao Tamanho Sequencia: GANHOU!– 3.1.2.1.1 acende todos os leds e toca tema da vitória. – 3.1.2.1.2 Volta ao passo 1

● 3.1.2.2 Incrementa contadorSeq● 3.1.2.3 Zera contadorDig● 3.1.2.4 Volta para o passo 2

– 3.1.3 ? Senão volta ao passo 3● 3.2 ? Senão pisca todos os leds e toca um tom fúnebre: PERDEU!

● 4 volta para o passo 1

Page 44: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – A implementaçãoFechando a conta!

● Neste ponto já temos todos os comandos necessários. Vamos terminar!● O passo 3.1.2 ocorre quando a rodada acabou ou seja o jogador

acertou corretamente todos os elementos da sequencia mostrados até agora.

● O passo 3.1.2.1 ocorre quando todos elementos da sequencia foram digitados. Para isso é preciso comparar o numero de teclas digitadas guardada em contadorDig. Para obter o tamanho da sequencia será usado a função sizeof.

● O item 3.1.2.1.1 será implementado em função chamada ganhou().● O item 3.1.2.1.2 é a interrupção do laço. Usaremos a instrução break.

– 3.1.2 ? Se contadorDig é igual a contadorSeq:● 3.1.2.1 ? Se contadorDig igual ao Tamanho Sequencia: GANHOU!

– 3.1.2.1.1 acende todos os leds e toca tema da vitória. – 3.1.2.1.2 Volta ao passo 1

● 3.1.2.2 Incrementa contadorSeq● 3.1.2.3 Zera contadorDig● 3.1.2.4 Volta para o passo 3

Page 45: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

void ganhou(){}void perdeu(){}void setup(){ …}void loop(){ … while(1){ //laço de verificação das teclas while(tecla!=0){ //sai do laço se tecla pressionada if(digitalRead(but1)) tecla=1; if(digitalRead(but2)) tecla=2; if(digitalRead(but3)) tecla=3; if(digitalRead(but4)) tecla=4; }

if (sequencia[contadorDig]==tecla){ tocaElemento(tecla); contadorDig=contadorDig+1; if(contadorDig==contadorSeq){ if(contadorDig==sizeof(sequencia)){ ganhou(); contadorDig=0; // inicia novamente contadorSeq=1; // inicia novamente break; } contadorSeq=contadorSeq+1; contadorDig=0; break; } } else{ ... } }}

Programação – A implementaçãoFechando a conta!

– 3.1.2 ? Se contadorDig é igual a contadorSeq:● 3.1.2.1 ? Se contadorDig igual ao Tamanho Sequencia: GANHOU!

– 3.1.2.1.1 acende todos os leds e toca tema da vitória. – 3.1.2.1.2 Volta ao passo 1

● 3.1.2.2 Incrementa contadorSeq● 3.1.2.3 Zera contadorDig● 3.1.2.4 Volta para o passo 3

Page 46: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Programação – ExercícioPassando a Régua!

● Nesse momento temos um programa funcional entretanto deixamos de implementar algumas funcionalidades que estão implementadas na forma de função, são elas:

● Função tocaTom()● Função ganhou()● Função perdeu()

Sua missão

“Povoar” as funções acima de acordo com a especificação inicial.

Tempo: 20 min

Dica para os tons:http://playground.arduino.cc/Portugues/LearningMelody

Page 47: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Parte III – Hora do Show(A eletrônica das coisas)

Page 48: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

O Protoboard é seu amigo!

● Permite que se teste circuitos sem precisar soldar os componentes. Circuitos grandes podem ser difíceis de implementar.

Page 49: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Tensão e Tensão de ReferenciaTudo depende do referencial

Page 50: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Resistor: Queimando energia

Marron – Preto – Verde - Ouro

OBS: A grande maioria das vezes você usará resistores quando tiver preocupado em limitar a corrente para algum componente. http://www.py2bbs.qsl.br/led.php

Page 51: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Resistores: Pull-up e Pull-down● Imagine que o pino 6 seja um pino que esteja configurado

como entrada de um circuito que você está projetando. ● Qual o valor lógico do pino 6 na situação A?● E em B?● O que aconteceria se a saída S em C estivesse em estado 1?● E na situação D?

6 6 6 6

Situação A Situação B Situação C

+

Situação D

+

S=X S=Falso Curto S=Verdadeiro

Page 52: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Led: Aviso!

● Observar● Voltagem e Polaridade

● Tensões● 1,8 a 2,7

● Leds especiais● RGB● IR

Page 53: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Sensores e Atuadores

Sensores

Atuador (Mecânico, Visual, Térmico, etc)

Driver

Fenômeno Físico:Temperatura, pHUmidade, Luz, Gravidade, etc.

V,A,Ω

Bitsou

Pulsos

Ambiente

Analógicos

Digitais

Circuito de Controle

Page 54: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Sensores● Transformam grandezas físicas em grandezas

elétricas proporcionais essas podem ser interpretadas pelo circuito de controle se este tiver um conversor A/D (analógico/Digital).● Sensores Analógicos: Entregam grandezas

elétricas tais como Voltagem, corrente ou resistência. Ex.: LDR (Luz em resistência)

● Sensores Digitais: Já entregam a gradeza em formato que pode ser lido pelo circuito de controle sem necessidade de conversão A/D. Os formatos normalmente encontrados são Bits, Trem de Pulsos ou Tempo de Pulso. Ex. Sensor de Distância

Page 55: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Atuadores

● Permitem que o circuito de controle execute alguma ação que vai modificar o ambiente;

● Podem ser mecânicos como por exemplo motores ou servos;

● Podem ser luminosos como lampadas ou leds;

● Podem ser indicadores como os Displays;● Podem ser sonoros como alto falantes e

buzzers.

Page 56: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Atuando em Cargas Diversas

● Uma carga é Qualquer dispositivo que precisa de alimentação.

● Atenção: Observe a tensão requerida pela carga pois uma porta do Arduíno fornece 5v.

Carga -

Page 57: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Atuando em Cargas Diversas● As saídas do Arduíno possuem baixa potencia

de forma que é possível alimentar pequenas cargas usando a energia proveniente de uma porta do Arduíno.

● Segundo a documentação do site 40mA por porta e 200mA no total.

● Isso é suficiente para alimentar Leds e pequenos motores.

● Cuidado: Se precisar de uma corrente maior use um Driver, sob pena de queimar a saída.

● Fonte:http://playground.arduino.cc/Main/ArduinoPinCurrentLimitations

Page 58: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Atuando em Cargas DiversasDrivers

● Um Driver é um circuito que permite a atuação em uma carga com corrente ou tensão incompatíveis com a saída do módulo de controle.

● Os componentes mais comuns utilizados nesses circuitos são os transistores e os relés.

Page 59: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Atuando em Cargas DiversasDrivers com Relés (Relays)

● Funcionamento: Uma bobina enrolado em um material ferroso, quando energizada, gera um campo magnético que atrai os contatos e fecha o circuito.

● Possuem 2 ou 3 contatos.– 1 – Comum,– 2 – NA (Normalmente Aberto)– 3 – NF (Normalmente Fechado)

● Deve-se observar a tensão da bobina como também a corrente e tensão que os contatos são capazes de suportar

Page 60: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Atuando em Cargas DiversasRelés (Relays)

● A figura mostra ligação do Relé com Arduíno O componente D1 é um diodo e impede que a corrente reversa gerada na descarga da bobina passe para o circuito e queime o transistor.

Page 61: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Acionando Cargas DiversasTransistores X Relés

● Transistores devem ser usados em chaveamentos de alta velocidade. Um relé mecânico pode chavear no máximo 20 vezes por segundo, o que é pouco para algumas aplicações. Existem relés de estado sólido que são bem mais rápidos porém mais caros.

● Recomenda-se relés para aplicações de alta tensão e corrente e de baixa velocidade.

● Existe outra categoria de semicondutores chamada Tiristores (SCR e TRIAC), que podem ajudar em aplicações chaveamentos rápidos em alta tensão.

Page 62: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Exemplo: Acionando um ventilador quando alguém aparece.

Page 63: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Atuando mecanicamente

● Existem muitos tipos de atuadores mecânicos que podem ajudar você no design do seu projeto, e a escolha do atuador correto pode determinar o sucesso;

● Exemplos de atuadores elétricos:● Para hidráulica: Bombas e Válvulas solenoide;● Deslocamento de objetos: Motores DC e de

passo, servo motores e atuadores lineares;● Temperatura*: Hoje temos resistências e as

chamadas placas de peltier

Page 64: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Tipos de Motores

● 1 – Motor de Rotação Continua● 2 - Motor de Passo● 3 - Servo

Page 65: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

● Quanto a Corrente: ● DC – Corrente Constante ● AC – Corrente Alternada

Quanto ao uso de escovas● Com escovas (Brushed)● Sem escovas (Brushless)● Precisa de Controlador

(ESC)

Motor de Rotação Continua

● Quanto o tipo de elemento de rotação

● Rotor (Inrunner)● Armadura (armadura)

http://www.thinkrc.com/faq/brushless-motors.php

Page 66: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Brushless x Brushed

● Brushless● Pros

– Eficiência energética– Pouca manutenção– Pouco ruido “elétrico”

● Contras– Caro– Controle complexo– Precisa de ESC que

pode ser mais caro que o motor

● Brushed● Pros

– Controle simples– Baixo custo– Resistência em

ambientes extremos● Contras

– Manutenção– Esquenta– Menor rotação

Page 67: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Motor de Passo

● Não possui escovas● O rotor se move na direção da bobina

energizada● Permite controlar o ângulo e a velocidade de

rotação

Page 68: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Servo motor

● Controle Angular preciso● Alto torque● Resiste ao movimento contrário

● Tenta Fixar o Angulo● Controlado por largura de Pulso

Page 69: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Recomendações

● Existem vários componentes com uma mesma finalidade. Mas para cada projeto existe o melhor componente. E escolher o componente certo vai determinar o sucesso do projeto;

● Conheça o funcionamento do Sensor e do atuador que você vai trabalhar, ou seja conheça a teoria em que o dispositivo se apoia;

● Ao trabalhar com tensões diferentes opte por componentes com isolamento óptico;

● Procure conhecer a potencia

Page 70: Placas de Prototipação para IoT João Bosco Teixeira Júnior · Motores (Servo, CC, Passo) ... (I/O); “O objetivo do projeto é criar ferramentas que são acessíveis, com baixo

Conclusão

No trabalho com arduino duas coisas te limitam:Seu conhecimento técnico e Criatividade