placas de prototipação para iot joão bosco teixeira júnior · motores (servo, cc, passo) ......
TRANSCRIPT
Placas de Prototipação para IoTJoão Bosco Teixeira Júnior
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
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)
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)
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
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
O que as pessoas tem feito com ...Robots
VANTS
Satélites
Roupas
Modelos (Atuais 2012/2013)http://arduino.cc/en/Main/Products
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
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
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;
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
A plataforma Arduíno
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
Hardware: Anatomia de uma placa
R3 R2
Fonte: http://robotmill.com
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.
IDEMenu
Barra de Botões
Editor deTextos
Área deMensagens
Novo
SalvarCarregar
Gravar noArduíno
Compilar
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.
Software: O Programa (Sketch)
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
Exemplo 1.1: Hello World“Jogo dos 3 Erros”
OBS: A IDE reconhece palavras reservadas: tipos, funções, comandos, etc
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
Exemplo 1.2: Hello World
Parte II – ProgramaçãoJogo Genius
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.
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
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.
Programação – O CircuitoJogo Genius: No Protoboard
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.
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(){}
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.
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 };
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
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
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); }}
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
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
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);}
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
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!
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.
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 } }}
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
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
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
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
Parte III – Hora do Show(A eletrônica das coisas)
O Protoboard é seu amigo!
● Permite que se teste circuitos sem precisar soldar os componentes. Circuitos grandes podem ser difíceis de implementar.
Tensão e Tensão de ReferenciaTudo depende do referencial
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
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
Led: Aviso!
● Observar● Voltagem e Polaridade
● Tensões● 1,8 a 2,7
● Leds especiais● RGB● IR
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
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
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.
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 -
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
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.
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
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.
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.
Exemplo: Acionando um ventilador quando alguém aparece.
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
Tipos de Motores
● 1 – Motor de Rotação Continua● 2 - Motor de Passo● 3 - Servo
● 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
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
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
Servo motor
● Controle Angular preciso● Alto torque● Resiste ao movimento contrário
● Tenta Fixar o Angulo● Controlado por largura de Pulso
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
Conclusão
No trabalho com arduino duas coisas te limitam:Seu conhecimento técnico e Criatividade