Materiais necessários

Report
CURSO DE ARDUINO
AUTOMAÇÃO & ROBÓTICA
CARACTERÍSTICAS E SIMPLICIDADE
 Utiliza microcontrolador AtMEGA 8,168, 328,1280, 2560.
 RISC - Reduced Instruction Set Computer ou Computador
com um Conjunto Reduzido de Instruções.
 20 MIPS (milhões de instruções por segundo).
 Memória flash: 8kb,16kb, 32kb, 128kb, 256kb.
 14 portas digitais
 6 portas analógicas
 Oferece um IDE e bibliotecas de alto nível
 Hardware e Software Open-Source
 Programado em C/C++
 Transferência de firmware via USB
TIPOS DE ARDUINO
Arduino 2009
Arduino Mega
Arduino UNO
Arduino ADK (Google ADK - Android)
Arduino BT
Arduino Nano
LilyPad
TIPOS DE ARDUINO
CARACTERÍSTICAS DO ARDUINO UNO
Microcontrolador
Atmega 328
Voltagem Operacional
5V
Voltagem de entrada (recomendada)
7-12V
Voltagem de entrada (limites)
6-20V
Pinos E/S digitais
14 (dos quais 6 podem ser saídas PWM)
Pinos de entrada analógica
6
Corrente CC por pino E/S
Corrente CC para o pino 3,3V
40 mA
50 mA
32 KB (ATmega328) dos quais 0,5KB
são utilizados pelo bootloader
2 KB (ATmega328)
1 KB (ATmega328)
16 MHz
Flash Memory
SRAM
EEPROM
Velocidade de Clock
ARDUINO UNO
INSTALANDO O ARDUINO E O SKETCH
CONFIGURANDO O MODELO DO ARDUINO
ESCOLHENDO A PORTA SERIAL
RODANDO O PROGRAMA BLINK
INTERFACE DA IDE
PROTOBOARD
Esquema
PORTAS DIGITAIS
Trabalha com 0 e 1 na lógica binária
- De 0 à 0,8 volts = 0
– De 2 à 5 volts = 1
PORTAS ANALÓGICAS
•
•
•
•
•
Valor lido é análogo à tensão
0 volts = 0
2,5 volts = 512
5 volts = 1023
Conversor A/D de 10 bits: 0 à 1023
Porta PWM
Na prática
• Ligamos componentes em portas digitais
comuns, pwm ou analógica.
• Fazemos leitura e escrita nestas portas a fim
de obter um dado ou um determinado
comportamento.
• Processamos os dados no microcontrolador.
Alguns exemplos de componentes
PROGRAMAÇÃO
Dois métodos são obrigatórios:
void setup(){
}
void loop(){
}
setup() : será executado uma única vez ao ligar a placa
loop() : será executado infinitamente
PROGRAMAÇÃO
• Comando pinMode()
• Comando digitalWrite()
• Comando digitalRead()
• Comando analogRead()
• Comando analogWrite()
LED
• O diodo emissor de luz conhecido pela sigla LED (Light Emitting Diode).
• Sua funcionalidade básica é a emissão de luz
RESISTOR
• Função: limitar a quantidade de corrente elétrica.
• Resistência elétrica é a oposição à passagem de uma corrente
elétrica, medida em ohms.
• O valor da resistência de um resistor pode ser identificado de
acordo com as cores apresentadas em sua cápsula.
RESISTOR
RESISTOR
EXPERIÊNCIA 1 PISCA LED
Que resistor devemos utilizar?
Arduino – saída: 5 volts
Led vermelho: 1,6 volts
Corrente do Led: aprox. 20 mA
Aplicando a lei de Ohm:
R – é a resistência elétrica medida em ohm (Ω)
U – é a tensão medida em volt (V)
i – é a corrente elétrica medida em ampère (A)
U=R.i
R=U/i
R = (5,0 – 1,6) / 0,020
R = 3,4 / 0,020
R = 170 omhs
Utilizar resistor 170 omhs
Materiais necessários:
•
•
•
•
•
Arduino
Protoboard
Fios de conexão
LED
Resistor de 220 ohms
Esquema
Exercícios
• Altere o programa anterior para 3 LEDs piscarem
sequencialmente.
CLASSE SERIAL
• Permite a comunicação do Arduino com o computador através da
porta serial (via USB).
• Instruções:
• Serial.begin(9600); // inicia a comunicação do Arduino com o
computador utilizando a velocidade 9600 bits por segundo
• Serial.println(x); //--- envia o valor de x como decimal para o
computador
LDR (Light Dependent Resistor)
• Um LDR é um transdutor de entrada (sensor) que converte
a luz em valores de resistência
• É feito de sulfeto de cádmio (CdS) ou seleneto de cádmio
(CdSe).
• Sua resistência diminui quando a luz é muito alta, e quando
a luz é baixa, a resistência no LDR aumenta.
EXPERIÊNCIA 2 – LUZ AMBIENTE
•
•
•
•
•
•
Materiais necessários:
Arduino
Protoboard
Fios de conexão
LDR
Resistor de 10k
Esquema
Exercícios
Acender o LED quando o ambiente estiver escuro e
apagar o LED quando o ambiente estiver claro.
CHAVE TÁCTIL
• Também conhecida como Push Button ou Chave de
Toque, fecha contato quando pressionada
EXPERIÊNCIA 3 ACENDER LED COM
CHAVE TÁCTIL
Materiais necessários:
Arduino
Protoboard
Fios de conexão
Botão táctil
Resistor de 10k
LED
Resistor de 220 ohm
Exercícios
O LED devera ficar apagado quando clicar na chave táctil
ele se acende após clicar novamente ele se apaga.
Os Símbolos
usados na construção de funções são os seguintes:
{ } Dentro das chaves vão os procedimentos (statements) que
a função deve executar;
; - O ponto-e-vírgula é usado para marcar o final de um
Procedimento;
// - comentário de uma linha: qualquer caracter depois das
duas barras é ignorado pelo programa;
/*...*/ - comentário em várias linhas: qualquer texto colocado
entre esses símbolos também é ignorado pelo programa
Exemplo:
/*
Nesse código a função setup( ) ativa a porta serial em 9600 bits/s e a
função loop( ) fica transmitindo a frase ‘Hello World!’ pela porta
serial a cada 2 segundos.
*/
void setup( ){
Serial.begin(9600);
// inicializa a porta serial
}
void loop( ){
Serial.println(“ Hello World! “);
// transmite frase
delay(2000);
}
CONSTANTES
São valores predefinidos que nunca podem
ser alterados. Na linguagem C do Arduino
são 3 os grupos de constantes; os dois
componentes de cada grupo sempre podem
ser representados pelos números binários 1
e 0.
TRUE/FALSE
são constantes booleanas que definem
estados lógicos.
Verdadeiro é qualquer valor que não seja
zero. Falso é sempre o valor zero.
HIGH/LOW
essas constantes definem as tensões nos
pinos digitais do Arduino. Alto é uma tensão
de 5 volts; baixo o terra (ou 0 volt).
INPUT/OUPUT
são constantes programadas pela função
pinMode( ) para os pinos do Arduino; eles
podem ser entradas (de sensores) ou podem
ser saídas (de controle)
VARIÁVEIS
São posições na memória de programa
do Arduino marcadas com um nome e o
tipo de informação que irão guardar.
Essas posições podem estar vazias ou
podem receber um valor inicial. Os
valores das variáveis podem ser
alterados pelo programa.
Escopo da Variável
Uma variável pode ser declarada em qualquer
parte do programa. Se for declarada logo no
início, antes da função setup( ), ela tem o escopo
de Variável Global, e por isso ela pode ser usada
por qualquer função no programa.
Se declarada dentro de uma função ela tem o
escopo de Variável Local, e só pode ser usada
pela própria função
Declaração da Variável
como as funções, toda variável deve ser
declarada antes de ser chamada. Essa declaração
consiste em atribuir
previamente um tipo e um nome à variável.
Tipos de variáveis:
byte - esse tipo armazena 8 bits (0-255);
int - armazena números inteiros de até 16 bits;
long - armazena números inteiros de até 32 bits;
float - variáveis deste tipo podem armazenar
números fracionários de até
32 bits
Exemplo:
/* Esse programa escrito em C do Arduino aumenta e diminui gradativamente o brilho de
um LED conectado no pino PWM 10 do Arduino. */
int i=0;
// declaração da variável global inteira i iniciada com 0
void ledOn( );
// declaração da função criada ledOn do tipo void
void setup( ) {
pinMode(10,OUTPUT);
// aqui 2 parâmetros são passados à função pinMode( )
}
void loop( ){
for (i=0; i <= 255; i++) ledOn( );
// aumenta o brilho do led
for (i=255; i >= 0; i--) ledOn( );
// diminui o brilho do led
}
void ledOn( ){
// função que acende o led
analogWrite (10, i);
// o nº do pino e o valor de i são passados à função analogWrite( )
delay (10);
}
MATRIZES
são coleções de variáveis do
mesmo tipo, portanto são
posições na memória de
programa, com endereços que
podem ser acessados por
meio de um identificador,
chamado de índice. A primeira
posição de uma matriz é
sempre a de índice 0.
Declaração de uma Matriz 1
As matrizes, como as variáveis e as funções, devem ser
declaradas com um tipo e um nome seguido de colchetes;
e podem também ser inicializadas com os valores entre as
chaves. Exemplo:
int nomeMatriz [ ] = { 16,32,64,128, ... };
Declaração de uma Matriz 2
Pode-se também declarar somente o tipo, o nome e o
tamanho da matriz, deixando para o programa o
armazenamento de variáveis nas posições, ou índices, da
matriz.
int nomeMatriz [ 10 ] ;
//nomeMatriz com dez 10
//posições para variáveis inteiras
Escrever/Ler uma Matriz
Para guardar o inteiro 16 na 4ª posição da matriz
nomeMatriz, usa-se:
nomeMatriz [3] = 16;
Para atribuir o valor armazenado na 5ª posição de
nomeMatriz à variável x:
int x = nomeMatriz[4];
Operações Aritméticas
e lógicas
as 4 operações
aritméticas, divisão,
multiplicação, adição e
subtração, são
representadas pelos
símbolos: /, *, + e -.
E são 3 os operadores
lógicos na linguagem
do Arduino que são
usados para comparar
duas expressões e
retornar a constante
TRUE/FALSE.
Símbolos compostos
são aqueles que combinam os símbolos aritméticos entre si e com o
sinal de atribuição:
x ++ // x=x+1
x -- // x=x-1
x += y // x=x+y
x -= y // x=x-y
x *= y // x=x*y
x /= y // x=x/y
Operadores de comparação
comparam uma variável com uma constante, ou variáveis entre si. São
usados para testar se uma condição é verdadeira.
x == y // x é igual a y
x != y // x não é igual a y
x < y // x é menor que y
x > y // x é maior que y
x <= y // x é menor ou igual a y
x >= y // x é maior ou igual a y
Operadores lógicos
são usados para comparar duas expressões, retornam 1 ou 0
(verdadeiro/falso).
&& AND porta lógica ‘E’
|| OR porta lógica ‘OU’
! NOT porta lógica NÃO
Função
Exemplo
Notas
delay(ms)
Essa função pausa o
programa por um período
em milissegundos indicado
pelo parâmetro entre
parênteses.
delay(1000);
Com esse parâmetro o
programa vai pausar durante
1 segundo (1000 ms).
Durante o período em que
essa função está ativa
qualquer outra função no
programa é suspensa.
Somente as interrupções de
hardware podem parar essa
função.
delayMicroseconds(us)
Essa função pausa o
programa por um período
em microssegundos indicado
pelo parâmetro entre
parênteses.
delayMicroseconds(1000);
Com esse parâmetro o
programa vai pausar durante
1 ms (1000 us).
As mesmas observações
acima para a função
delay(ms) são válidas aqui.
millis( )
Retorna o número de
milissegundos desde que o
Arduino começou a executar
o programa corrente.
long total = millis( );
Essa variável vai ser resetada
Aqui a variável inteira longa
depois de aproximadamente
(de 32 bits) ‘total’ vai guardar 9 horas.
o tempo em ms desde que o
Arduino foi inicializado.
random(min,max)
Gera números pseudoaleatórios
entre
os limites min e max
especificados como
parâmetros.
int valor =
random(100,400);
À variável ‘valor’ vai ser
atribuido um número
inteiro qualquer entre 100 e
400.
abs(x)
Retorna o módulo ou valor
absoluto do número real
passado como parâmetro.
float valor = abs(-3.14);
À variável ‘valor’ vai ser
atribuído o número em
ponto flutuante (e sem
sinal) 3.14.
map(valor,min1,max1,min2,max
2) A função map( ) converte uma
faixa de valores para outra faixa.
O primeiro parâmetro ‘valor’ é a
variável que será convertida; o
segundo e o terceiro parâmetros
são os valores mínimo e máximo
dessa variável; o quarto e o
quinto são os novos valores
mínimo e máximo da variável
‘valor’.
int valor = map(analog
Read(A0),0,1023,0,255));
A variável ‘valor’ vai guardar
a leitura do nível analógico
no pino A0 convertida da
faixa de 0-1023 para a faixa
0-255.
O parâmetro min é
opcional e se excluído o
limite mínimo é 0. No
exemplo variável ‘valor’
poderá ser qualquer
número inteiro entre 0 e
400.
Com essa função é
possível reverter uma
faixa de valores, exemplo:
int valor =
map(x,1,100,100,1);
if...else
Ao se acrescentar mais um bloco de instruções no loop do
comando if
pode-se criar o comando i f...else , para fazer um teste novo
quando o resultado da expressão for falsa.
if (expressão) {
bloco de instruções1;
// se ‘expressão’ for verdadeira, ‘bloco de instruções1’ é
executado
}
else {
bloco de instruções2;
// se ‘expressão’ for falsa, ‘bloco de instruções2’ é executado
}
if (expressão1) {
bloco de comandos1;
}
else if (expressão2) {
bloco de instruções2;
}
else {
bloco de comandos3;
}
switch (expressão) {
case 1:
bloco de instruções1;
break;
case 2:
bloco de instruções2;
break;
case 3:
bloco de instruções3;
break;
default:
bloco de instruções4;
}
while
Uma das operações mais frequentes que os programas
executam é repetir um grupo de instruções até que uma
condição inicialmente verdadeira se torne falsa. É para isso
que serve o comando while. A sua sintaxe é a seguinte:
while (expressão) {
bloco de instruções;
}
do...while
Para que o bloco de instruções seja executado ao
menos uma vez, ele é deslocado para a entrada da caixa
de decisões, antes do teste de validade:
do {
bloco de instruções;
}while (expressão)
for
Inserindo-se no loop do comando while um contador que
registre cada execução do bloco de instruções cria-se o comando
for
. Esse contador deve ter uma variável de controle que deve ser
previamente inicializada com um tipo e um valor. A sua sintaxe
é a seguinte:
for (variável; expressão;incremento) {
bloco de instruções;
}
O operador ternário ‘?’
É possível simplificar códigos com comandos if...else em C/
C++ com o operador condicional ‘?’, também chamado de operador
ternário. Esse operador avalia uma expressão e se esta for verdadeira
uma instrução é executada, se a expressão for falsa uma outra
expressão é executada. A sua sintaxe é a seguinte:
(expressão) ? instrução1 : instrução2;
Note o uso e a posição entre as duas instruções de dois pontos na
sintaxe desse operador.
Exemplo:
int x = 8;
y = (x > 10) ? 15 : 20;
BUZZER
É composta de 2 camadas de metal e uma camada interna de
cristal piezoelétrico (como um sanduíche). Ao ser
alimentado com uma fonte de sinal, vibra da mesma
frequência recebida, funcionando como uma sirene ou
alto-falante.
EXPERIÊNCIA 4 BUZINA
Materiais necessários:
Arduino
Protoboard
Fios de conexão
Botão táctil
Resistor de 10k
Buzzer
Esquema
Exercícios
Monte um circuito com 1 LDR e 1 Buzzer, quando estiver
escuro, tocar o Buzzer.
Tabela de Tons
Melodia com Buzzer
NOTE_C4 262
NOTE_G3 196
NOTE_G3 196
NOTE_A3 220
NOTE_G3 196
0
NOTE_B3 247
NOTE_C4 262
LM35 – SENSOR DE TEMPERATURA
• O LM35 é um sensor de temperatura linear, trabalha
com temperaturas entre -55ºC e 150ºC
EXPERIÊNCIA 5 TERMÔMETRO
Materiais necessários:
Arduino
Protoboard
Fios de conexão
LM35
Formula (5 * temperatura * 100.0 / 1024)
Esquema
Exercícios
Monte um circuito com sensor de temperatura e um
buzzer, quando a temperatura ultrapassar os 22 graus
celsius apitar um alarme.
ENVIANDO DADOS DO COMPUTADOR
PARA O ARDUINO
Em alguns exercícios anteriores, utilizamos a classe Serial para
enviar dados do Arduino para o computador através da porta
serial. A classe Serial também pode ser utilizada para receber
dados enviados pelo computador ao Arduino, para isso,
utilizaremos duas instruções: Serial.available() e Serial.read()
Serial.available() - indica a quantidade de dados disponíveis
para leitura
Serial.read() - lê o próximo valor do buffer enviado pela serial,
se retornar -1 não possui nenhum valor para ser lido no buffer.
EXPERIÊNCIA 6 CONTROLANDO LEDS
PELO COMPUTADOR
Materiais necessários:
Arduino
Protoboard
Fios de conexão
3 LEDs
Resistor de 220 ohms
Esquena
Comunicação serial por fio entre 2 Arduino
Dois Arduinos, interconectados pelos pinos 0 e 1,
respectivamente rx [pino de reçepção] e tx [pino
de transmissão]. O pino TX de um deve estar
ligado ao pino RX do outro - formando um X.
Aplicação: No caso um arduino envia um byte; o
outro arduino recebe este byte e testa; se for 1
liga o led do pino 13 se for 0 desliga. Nenhum
protocolo foi especificado.
LED RGB
• LED RGB pode emitir 3 cores: vermelho, verde e azul (RGB),
as cores podem ser emitidas isoladamente ou em conjunto.
• Utilizando a porta PWM, podemos controlar a intensidade de
cada cor, as cores podem ser combinadas.
• O LED RGB possui 3 terminais:
EXPERIÊNCIA 7 LED RGB
Materiais necessários:
– Arduino
– Protoboard
– Fios de conexão
– LED RGB
– Resistor de 220 ohms
Esquena
Exercícios
Altere o programa anterior para gerar outras cores RGB:
– Amarelo: Vermelho + Verde
– Magenta: Vermelho + Azul
– Ciano: Verde + Azul
POTENCIÔMETRO
É um dispositivo eletromecânico que possui um resistor de valor fixo
sobre o qual se move um contato deslizante, fazendo a resistência
variar. Normalmente possui 3 terminais: Vcc, Gnd e sinal
(analógico).
Função MAP
A função “map” do Arduino converte uma faixa de valores de
entrada em uma faixa de valores de saída.
Por exemplo: o potenciômetro gera valores de entrada entre 0
e 1023 (10bits) e desejamos converter em uma saída
analógica entre 0 e 255 (8 bits).
Sintaxe:
map(entrada, in_min, in_max, out_min, out_max)
Exemplo:
int val = map(x, 0, 1023, 0, 255);
EXPERIÊNCIA 8 LENDO POTENCIÔMETRO
Materiais necessários:
- Arduino
- Protoboard
- Fios de conexão
- Potenciômetro 10k
Esquena
Exercícios
Monte um circuito para regular a intensidade do Led com
o potenciômetro Obs:
Utilize uma porta PWM como entrada do Led
Utilize a função “map” para converter os valores de entrada do potenciômetro
nos valores de saída para o Led
DISPLAY DE 7 SEGMENTOS
Um display de sete segmentos é composto de oito LEDs (Diodos
emissores de luz), sete para formar o número que deverá ser
apresentado e um para gerar o ponto decimal.
Sua classificação pode ser ANODE (+) ou CATHODE (-).
Os Displays LED de 7 segmentos podem ser utilizados para
inúmeras tarefas em automação.
EXPERIÊNCIA 9 DISPLAY DE 7 SEGMENTOS
Materiais necessários:
• Arduino
• Protoboard
• Fios de conexão
• Display de 7 Segmentos
• Resistor 220 ohms
•
•
•
•
•
•
•
•
•
Conexões:
Pino 13 – Led A
Pino 12 – Led B
Pino 11 – Led C
Pino 10 – Led D
Pino 9 – Led E
Pino 8 – Led F
Pino 7 – Led G
Pino 6 – Led do Ponto Decimal
EXPERIÊNCIA 10 CONTAR DE 0 À 9
Número 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ponto, erro:
•
•
•
•
•
•
•
•
•
Relação Led – número (de 0 à 9 – “E”=Erro).
Led A – 0 – 3 –4 – 5 -- 6 – 7 - E
Led B – 0 – 1 – 2 – 3 – 4 – 7 – 8 – 9
Led C – 0 – 1 – 3 – 4 – 5 – 6 – 7 – 8- 9
Led D - 0 – 2 – 3 – 5 – 6 – 8 – 9 - E
Led E – 0 – 2 – 6 – 8 - E
Led F – 0 – 4 – 5 – 6 – 8 – 9 - E
Led G – 2 – 3 – 4 – 5 – 6 – 8 – 9 - E
Led do Ponto Decimal
CONTROLE DE LÂMPADAS E TOMADAS
Não é possível ligar um fio 110 volts no Arduino.
O Arduino trabalha com 5 volts – corrente contínua.
A energia elétrica das residências (tomadas e lâmpadas) trabalham com 127 ou 220 volts –
corrente alternada.
A transmissão de corrente contínua para longas distâncias é inviável.
Como fazer o Arduino controlar tomadas e lâmpadas.
USANDO UM RELÉ
Um relé é um interruptor eletromagnético que quando
conduzimos corrente o interruptor fecha um determinado
contato.
Esses contatos podem estar normalmente abertos
(desconectados) ou normalmente fechados (conectados)
Siglas NO e NC em inglês ou NA e NF em português.
RELÉ COM ARDUINO
• Como ligar um Relé no Arduino??
• O Arduino fornece no máximo 40mA em suas
portas
• Para acionar o Relé, é preciso
aproximadamente 70mA
• Por isso, devemos ligar um transistor entre o
Arduino e o Relé
Tensão reversa
• É um fenômeno físico que acontece em todo
mecanismo eletromagnético quando é
desenergizado. Assim que tiramos a energia de
um dispositivo eletromagnético recebemos de
volta um “choque”, isso poderia queimar o
transistor ou o Arduino.
• Para evitar esse fenômeno, usamos um diodo,
que só permite a corrente passar em um único
sentido. O diodo pode ser ligado em paralelo com
o mecanismo.
EXPERIÊNCIA 11 CONTROLANDO LÂMPADA
Materiais necessários:
• Arduino
• Protoboard
• Fios de conexão
• Módulo Relé
• Lâmpada de 127 volts
• Tomada de 127 volts
Exercícios:
Sensor de luminosidade - Monte um circuito para controlar a lâmpada quando escuro
a lâmpada se acende e quando claro a lâmpada se apaga.
CONTROLANDO ARDUINO COM PHP EXPERIÊNCIA 12
•
•
•
•
•
•
Materiais necessários:
Arduino
Protoboard
Fios de conexão
6 Leds
Resistor 220r
INTERRUPTOR MAGNÉTICO
Ler um Interruptor Magnético utilizando o
Arduino, e acionar um dispositivo a partir da
leitura do interruptor magnético.
São usados para acionar, magneticamente,
dispositivos eletro-eletrônicos como alarmes,
trancas elétricas, portas, circuitos eletrônicos
de partida, etc.
EXPERIÊNCIA 13 ALARME DE PORTAS E
JANELAS
Materiais necessários:
• Arduino
• Protoboard
• Fios de conexão
• 1 Interruptor magnético
• Resistor 1K
Exercícios:
Sensor de Janela e Portas - Monte um circuito para
verificar se o sensor está aberto ou fechado. Se
circuito estiver aberto o buzzer deverá tocar.
MOTORES COM ARDUINO
Funções:
• Movimentar peças (braços, superfícies, etc)
• Locomover (rodas, esteiras, pernas, etc)
Características:
• Velocidade de rotação / rpm
• Força
• Precisão
Redutor – transforma rotação em força
• Motor DC/CC (velocidade)
• Servo motor (precisão e/ou força)
• Motor de passo (precisão e/ou força)
MOTOR DC
•
•
•
•
Motor simples pode ter alta velocidade.
Não tem precisão angular.
Podemos controlar a potência com PWM
Assim como relé precisamos ligar em um
transistor com diodo de proteção, para
inverter a direção da rotação temos que
inverter a polaridade.
SERVO MOTOR
•
•
•
•
Motor com precisão angular, fácil comando.
Por padrão virar apenas de 0 a 180 graus.
Servos fullrotation giram em 360 graus.
Conexão super simples: GND, 5v e Sinal Digital
MOTORES DE PASSOS
• São dispositivos mecânicos eletro-magnético que
podem ser controlados digitalmente através de um
hardware específico ou através de softwares.
Motores de passos são encontrados em aparelhos
onde a precisão é um fator muito importante.
• São usados em larga escala em impressoras, plotters,
scanners, drivers de disquetes, discos rígidos e muitos
outros aparelhos.
TRANSISTOR
• O transistor funciona como um controlador
de fluxo de corrente, é como uma torneira,
possui 3 terminais chamados de “base”,
“emissor” e “coletor”.
• A “base” tem a função da manopla da
torneira ou seja, controlar o fluxo de corrente
que irá fluir entre o “coletor” e o emissor (o
que entra na torneira pela caixa d´água e o
que sai na boca da torneira).
Analogia com uma torneira
EXPERIÊNCIA 16 CONTROLANDO UM
MOTOR DC
•
•
•
•
•
•
•
•
Materiais necessários:
Arduino
Protoboard
Fios de conexão
Transistor Tip 122 (Pode ser TIP 120) NPN.
Diodo IN4007 (Ou IN4004).
Motor DC
Resistor 1K
• Exercícios:
• Controlando um Motor DC com Potenciômetro
•Arduino
•Protoboard
•Fios de conexão
•Potenciômetro 10k
•Transistor Tip 122 (Pode ser TIP 120) NPN.
•Diodo IN4007 (Ou IN4004).
•Motor DC
•Resistor 1K
CLASSE SERVO MOTOR
Utilizada para controlar Servos Motores. Presente
na biblioteca: Servo.h
Métodos:
• Servo.attach(porta) – conecta servo à uma porta
digital
• Servo.write(val) – define ângulo do braço do
servo (0 – 180º)
• Servo.detach() – desconecta servo de uma porta
digital
EXPERIÊNCIA 17 SERVO MOTOR COM
PONTECIÔMETRO
•
•
•
•
•
•
Materiais necessários:
Arduino
Protoboard
Fios de conexão
Potenciômetro 10k
Servo motor
PONTE H EXPERIÊNCIA 18 MOTOR DC
DUPLO SENTIDO
•
•
•
•
•
•
Materiais necessários:
Arduino Uno
Ci L293B (podem procurar similares L293 D)
Protoboard
Motor DC
Fios de conexão
Exercícios:
• Controlar dois motores DC pelo PHP - Monte um
circuito para controlar 2 motores DC para frente e
para traz.
• Monte também um pagina php para controlar os
motores DC, como na imagem abaixo.
MOTOR DE PASSO
Um motor de passo é um tipo especial de
motor que pode se mover em uma série de
passo discretos. Eles são uma boa escolha
para projetos que requerem movimento
controlado e preciso. Projetos típicos incluem
impressoras 3D, sistemas de posicionamento
de telescópios e controle numérico
computadorizado (CNC) de tornos e
máquinas.
EXPERIÊNCIA 19 CONTROLANDO
MOTOR DE PASSO
•
•
•
•
•
•
•
Materiais necessários:
Arduino Uno
Ci L293B (podem procurar similares L293 D)
Protoboard
Motor de Passo
Fios de conexão
Bateria de 6 ou 9 V
#include <Stepper.h>
const int numeroDeVoltas = 60;
Stepper configurar(numeroDeVoltas, 8,9,10,11);
void setup() {
configurar.setSpeed(60);
Serial.begin(9600);
}
void loop() {
Serial.println("Sentido Horario");
configurar.step(60);
delay(500);
}
SENSOR DE MOVIMENTO PIR
Como funciona?
• Detecta infravermelho emitido por objetos e pessoas
• Todas as pessoas e objetos emitem energia em forma
de infravermelho
• PIR Sensor significa Sensor Infravermelho Passivo, pois
sensor não emite campo de detecção, apenas faz a
leitura dos campos emitidos pelos objetos/pessoas
• Cada detecção gera um pulso positivo no Pino OUT
Características
• Filtro especial chamado lente Fresnel, que foca os
sinais infravermelhos no objeto
• Detecta movimentos a uma distância de 6 metros
• Saída de bit simples
• Alimentação de 3,3V até 5V
EXPERIÊNCIA 14 SENSOR DE MOVIMENTO
•
•
•
•
•
Materiais necessários:
Arduino
Protoboard
Fios de conexão
1 sensor de Movimento PIR
RECEPTOR INFRAVERMELHO
‘O TSOP382 é um receptor miniaturizado para
sistemas de controle remoto por
infravermelhos. Um diodo PIN e um pré
amplificador são montados sobre um conector
e o encapsulamento de epoxy funciona como
um filtro de IR. O sinal de saída demodulado
pode ser diretamente decodificado por um
microprocessador. O TSOP382 é compatível
com todos os formatos de dados do controles
remostos mais comuns.
EXPERIÊNCIA 15 RECEPTOR INFRAVERMELHO
•
•
•
•
Arduino
Protoboard
Fios de conexão
1 Receptor infra-vermelho
#include <IRremote.h>
int recep = 2;
IRrecv irrecv(recep);
decode_results resultado;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop(){
if(irrecv.decode(&resultado)){
Serial.println(resultado.value,HEX);
irrecv.resume();
}
}
SENSOR DE DISTÂNCIA
Sensor Ultrasônico HC-SR04
• Emite um sinal ultrasônico para detectar obstáculos
• Faixa de medição: 2 cms à 4 mts
• Possui um emissor e um receptor ultrasônico
• Possui 4 conexões:
• 5V Supply (VCC)
• Tigger Pulse Input (Trig)
• Echo Pulse Output (Echo)
• 0V Ground (GND)
CLASSE ULTRASONIC
Classe utilizada com o Sensor Ultrasônico padrão SR04
Método construtor:
•Ultrasonic(trigger_pin, echo_pin)
Sistemas de medição:
•CM – medição em centímetros
•INC – medição em polegadas
Método para efetuar a medição:
•Ultrasonic.Ranging(sist_med)
EXPERIÊNCIA 21 DETECTANDO OBSTÁCULO
Materiais necessários:
•Arduino
•Protoboard
•Fios de conexão
•Sensor HC-SR-04
•Buzzer
#include <Ultrasonic.h>
Ultrasonic ultrasonic(8,9);
void setup(){
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop(){
int distancia = ultrasonic.Ranging(CM);
Serial.println(distancia);
delay(200);
}
Acelerômetro
const int groundpin = 18;
const int powerpin = 19;
const int xpin = A3;
const int ypin = A2;
const int zpin = A1;
void setup(){
Serial.begin(9600);
pinMode(groundpin, OUTPUT);
pinMode(powerpin, OUTPUT);
digitalWrite(groundpin, LOW);
digitalWrite(powerpin, HIGH);
}
void loop(){
Serial.print(analogRead(xpin));
Serial.print("\t");
Serial.print(analogRead(ypin));
Serial.print("\t");
Serial.print(analogRead(zpin));
Serial.println();
delay(500);
}
Módulo de Reconhecimento de Voz
Módulo de Reconhecimento de Voz
Características:
– Se comunica através da porta serial (configurações e
reconhecimento)
– Pode ser utilizado para controlar Leds, Lâmpadas, Robos, etc
– Armazena até 15 instruções de voz – divididas em 3 grupos
de 5 instruções
– Independente do locutor, mas precisa de um bom microfone
– Voltagem: de 4.5 à 5.5 volts
– Corrente: menos que 40 mA
– Interface: Serial 5v TTL lever UART interface
– Entrada para microfone de 3,5mm + pino
Módulo de Reconhecimento de Voz
• Adaptador USB / TTL
• Deve ser utilizado para acoplar o Módulo de Rec.
De Voz ao computador
Módulo de Reconhecimento de Voz
Configurações e Gravação das
Instruções de Voz
• Efetuar o download do driver do Adaptador
USB/TTL
• Descompactar e Instalar – sem conectar o
• Adaptador ao computador
• Após a instalação, conectar a placa ao
computador
• Verificar se a placa foi detectada
Configurações e Gravação das
Instruções de Voz
Configurações e Gravação das
Instruções de Voz
• O AccessPort é um software de comunicação
com a porta serial
• Poderia ser utilizado outro software
• Não é necessário a instalação
• Para executar, execute o arquivo:
AccessPort.exe
Configurações e Gravação das
Instruções de Voz
Configurações e Gravação das
Instruções de Voz
Configurações:
– Clique no botão Configuration
– Configurações:
• Port: COM3 (verificar sua porta)
• Baud rate: 9600
• Parity bit:None
• Data bit: 8
• Stop bit: 1
• Buffer size: 8192
• Send display: Hex Format
• Receive display: Char Format
Comandos do módulo de rec. De voz:
Comandos do módulo de rec. De voz:
Comandos do módulo de rec. De voz:
• Para iniciar a gravação das instruções do
• grupo 1:
– AA 11
• Para iniciar a gravação das instruções do
• grupo 2:
– AA 12
• E assim por diante
Comandos do módulo de rec. De voz:
• Conecte o Adaptador USB/TTL com o Módulo
de Reconhecimento de Voz
• Conecte o Adaptador ao computador
Comandos do módulo de rec. De voz:
• É obrigatório a gravação de 5 instruções dentro
de um grupo
• Não é necessário gravar instruções em todos os
grupos
Vamos gravar:
• Instrução 1: LIGA
• Instrução 2: DESLIGA
• Instrução 3: MAIS
• Instrução 4: MENOS
• Instrução 5: FIM
Comandos do módulo de rec. De voz:
• Para testar o reconhecimento das instruções do
• Grupo 1:
– AA 21
• Do grupo 2, 3, 4:
– AA 22, AA 23, AA 24
Ao reconhecer as instruções do Grupo 1 retorna:
• Result: 11
• Result: 12
• Result: 13
• Result: 14
• Result: 15
Do Grupo 2: 21, 22, 23, 24, 25
Controlando o Arduino por
comandos de voz
Controlando o Arduino por
comandos de voz
Programação
– Comunicação pela porta Serial
– É sugerido que as mensagens fiquem no modo reduzido (AA 37)
– Para retornar ao modo normal (mensagens de texto), utilizar a
instrução AA 36
– Quando a Instrução 1 do Grupo 1 é reconhecida – o valor
11 é recebido pela porta Serial
– Instrução 2 do Grupo 1 – é recebido 12
– Instrução 3 do Grupo 1 – é recebido 13
– Instrução 4 do Grupo 1 – é recebido 14
– Instrução 5 do Grupo 1 – é recebido 15
– Do Grupo 2 – 21, 22, 23, 24, 25
– Do Grupo 3 – 31, 32, 33, 34, 35
Controlando o Arduino por
comandos de voz
Programação
– Para carregar instruções do Grupo 1: AA 21
– Para carregar instruções do Grupo 2: AA 22
– Para carregar instruções do Grupo 3: AA 23
– Para enviar instruções para o módulo usar:
• Serial.write – envia dados no formato
binário/hexa
– Exemplo – carregando instruções do Grupo 1
• Serial.write(0xAA);
• Serial.write(0x21);
Controlando o Arduino por
comandos de voz
int funcao = 0;
int tempo = 1000;
void setup(){
pinMode(13,OUTPUT);
Serial.begin(9600);
delay(2000);
Serial.write(0xAA);
Serial.write(0x37);
delay(2000);
Serial.write(0xAA);
Serial.write(0x21);
delay(2000);
}
Controlando o Arduino por
comandos de voz
void loop(){
if(Serial.available()){
char c = Serial.read();
if(c == 0x11){
funcao = 1;
}
if(c == 0x12){
funcao = 0;
}
if(c == 0x13){
funcao = 2;
tempo = tempo - 100;
if(tempo <= 0){
tempo = 10;
}
}
Controlando o Arduino por
comandos de voz
if(c == 0x14){
funcao = 2;
tempo = tempo + 100;
}
}
if(funcao == 1){
digitalWrite(13,HIGH);
}
if(funcao == 0){
digitalWrite(13,LOW);
}
if(funcao == 2){
digitalWrite(13,HIGH);
delay(tempo);
digitalWrite(13,LOW);
delay(tempo);
}
}

similar documents