Post on 14-Apr-2018
7/30/2019 Curso Arduino Asp40.Blogspot.com
1/12
7/30/2019 Curso Arduino Asp40.Blogspot.com
2/12
Curso de Arduino
O que ?Arduino um microcontrolador (computador pequeno) utilizado para prototipagem eletrnica. Foidesenvolvido especialmente para designers e artistas plsticos, ou seja, deve ser fcil de utilizar.
Quais seus principais componentes?
Portas digitais I/O; Portas digitais com PWM (Controle de largura de pulso); Portas analgicas; Processador (tipicamente 16 Mhz); Memria Flash (onde fica salva o programa); Memria Rom (onde ficam salvas as variveis).
Dados importantes: Alimentao externa: de 6 20V (Ideal : 7 12 V) Tenso de trabalho nas portas: 5V Corrente nas portas: 50mA
O que so portas digitais I/O, PWM e analgicas?
Portas digitais so portas que s possuem dois estados possveis: LOW 0V aplicados a porta HIGH 5V aplicados a porta
Estes estados podem ser tanto de leitura (INPUT) da tenso aplicada na porta como de escrita
(OUTPUT). OBS. Como as portas digitais s admitem esses dois valores, quando a porta est noMODO INPUT e aplicamos uma tenso menor que 5V o arduino faz o arredondamento. Se > 2,5Vento o estado LOW, seno HIGH.
Algumas portas digitais possuem a funo PWM. Issosignifica que a tenso aplicada em pulsos como nafigura ao lado. Este tipo de sinal pode ser usado paracontrolar a potncia (energia por tempo) enviada para a
porta e assim podemos controlar a velocidade de rotaode um motor, a intensidade de um LED etc. Este controlede potncia simula uma porta analgica, ou seja, quando
usamos a porta PWM para enviar um sinal com 50% dotempo HIGH e 50% LOW, isso equivale a aplicar umatenso igual a 50% do valor da tenso daquela porta, ouseja, 50% 5V = 2,5V.
Como o nmero de portas PWM limitado, uma boa
prtica de desenvolvimento, s utiliz-las com
componentes que possam exigir o seu uso.
As portas analgicas so aquelas que permitem a LEITURA (INPUT) de qualquer valor de tenso
entre 0 e 5V. Cuidado para no ultrapassar o limite de 5V, isso pode danificar a porta ou at mesmoo arduino.
Fig 1. Tenso aplicada nas portas PWM em
funo do tempo.
7/30/2019 Curso Arduino Asp40.Blogspot.com
3/12
7/30/2019 Curso Arduino Asp40.Blogspot.com
4/12
Como eu fao para ler as portas digitais?
Objetivo: Utilizar um boto para acender ou apagar um LED.
Monte o seguinte circuito:
Use um resistor de 1 KOhms
Ateno: Em eletrnica h uma conveno de cores. Osfios vermelhos so sempre os fios ligados ao positivo(5V) e os fios pretos (em alguns casos marrom) so osfios ligados ao negativo (Ground - GND).
E escreva o seguinte cdigo:
#define BOTAO 2#define LED 13voidsetup() {
pinMode(LED, OUTPUT);pinMode(BOTAO, INPUT);
}voidloop() {
int estado;estado = digitalRead(BOTAO);
if ( estado == HIGH) {digitalWrite(LED, LOW);}else {
digitalWrite(LED, HIGH);}
}
Entenda o que voc fez:Por motivos bvios no vou falar sobre as funes j comentadas, apenas sobre as novas funes.
#define BOTAO 2 esta definio para nos poupar de ter que lembrar em que porta digital est
ligada o BOTAO. Toda vez que eu escrever BOTAO em uma funo, o arduino vai substituir apalavra pelo 2. Na outra definio #define LED 13 estamos fazendo a mesma coisa, apenasatribuindo a palavra LED para porta 13.
pinMode(BOTAO, INPUT); agora estamos definindo que a porta onde est ligada o BOTAO uma porta de leitura (INPUT). Isso equivalente a escrever: pinMode(2, INPUT);
int estado;este comando cria uma varivel (que ser armazenada na memria RAM do arduino)com o nome estado. O termo int informa ao arduino que essa varivel um nmero inteiro, ou seja,sem vrgula. Esse inteiro pode ser positivo ou negativo e varia entre -32.768 to 32.767. Existemoutros tipos de variveis como: float (nmeros fracionados), double (nmeros fracionados com
maior preciso), string (textos curtos), char (letras e nmeros).
estado = digitalRead(BOTAO);estamos dizendo que o valor da varivel estado o mesmo do
7/30/2019 Curso Arduino Asp40.Blogspot.com
5/12
resultado da funo digitalRead(BOTAO) . A funo digitalRead(BOTAO) l o estado da portaBOTAO (no caso 2) e retorna HIGH se a tenso na porta for igual a 5V e LOW se for igual a 0V.Dentro do prprio compilador do arduino existem as seguintes definies: #define HIGH 1 e#define LOW 0. Ou seja, quando eu atribuo o estado HIGH em alguma funo, na verdade euestou atribuindo o valor 1 (na lgica de programao o valor 1 atribudo aoSIM/VERDADEIRO e o 0 ao No/FALSO).
if (estado == HIGH){ a funo if(se) o que chamamos de operador condicional. Ele executaas instrues que estiverem entre { } se a condio que estiver entre parnteses for verdadeira. Nocaso, a nossa condio estado == HIGH, esta condio quer dizer 'o valor da varivel estado exatamente igual a HIGH'. Na tabela abaixo esto todos os operadores condicionais que existem noarduino.
Condio Significado
a == b a exatamente igual a b
a > b a maior que b
a < b a menor que b
a >= b a maior ou igual a b
a
7/30/2019 Curso Arduino Asp40.Blogspot.com
6/12
Para fazer o programa vamos utilizar:
Um BOTAOUm LED
Vamos iniciar o programa:O LED s ir enviar informao (Aceso ou apagado)
O BOTAO ser s para receber informaes (Apertado ou no)
Enquanto o programa estiver rodando (ou enquanto o arduino estiverligado):
SE o BOTAO estiver APERTADO:O LED fica apagado
SENO:O LED fica aceso
Este o nosso algoritmo, o que eu fiz foi escrever em portugus o que o programa deve fazer a cadainstante. SEMPRE que voc for fazer um programa faa o algoritmo em portugus, isso vai fazervoc programar melhor e mais rpido. Agora que temos que o algoritmo em portugus, precisamos
traduzi-lo para a linguagem do arduino.
Dizer que eu vou usar um BOTAO e um LED na verdade definir em que porta estes dois carasesto ligados, portanto:
#define BOTAO 2#define LED 13
Agora vamos iniciar o nosso programa, no caso do arduino, precisamos da funo setup() parainiciar o hardware:
voidsetup() {
Lembrando que precisamos depois fechar a {. Aps isso, vamos informar ao arduino que aquelesdois dispositivos (LED e BOTAO) so de ENVIO (OUTPUT) e RECEBIMENTO (INPUT) deinformao:
pinMode(LED, OUTPUT);pinMode(BOTAO, INPUT);
Depois, quando dizemos enquanto o programa estiver rodando estamos no referindo a umprograma que roda em looping, que no arduino definimos da seguinte forma:
voidloop() {
Em seguida, SE o BOTAO estiver apertado, aqui ns dividimos o cdigo em algumas estapas.Primeiro, criamos uma varivel que vai armazenar o ESTADO do boto:
int estado;
Depois, armazenamos na varivel estado, o valor do boto:
estado = digitalRead(BOTAO);
E agora sim, SE o BOTAO estiver APERTADO:
if ( estado == HIGH) {
O LED fica apagado:
7/30/2019 Curso Arduino Asp40.Blogspot.com
7/12
7/30/2019 Curso Arduino Asp40.Blogspot.com
8/12
delay(30);
}
}
As duas novidades neste exemplo so as funes for() e analogWrite().
for (int i=0; i= 0; i--){ fazemos o caminhoinverso, comeamos com i=255 e as instrues sero executadas enquanto i >= 0 e a cada passa ovalor de i diminudo de 1 (i--).
analogWrite(LED, i); este o comando de escrita na porta PWM. O primeiro parmetro aporta utilizada, no caso a porta LED, e o segundo o valor da largura do pulso, com o seguintedetalhe: 0 corresponde a 0% e 255 corresponde a 100% da largura. Se o segundo valor for maiorque 255 o arduino vai interpretar como 255.
Lendo um valor da porta analgica
Agora vamos utilizar um potencimetro para controlar o brilho do LED. Adicione ao projeto
anterior um potencimetro, como mostrado na figura abaixo. Lembre que o fio vermelho e o fiopreto podem ligados diretamente naprotoboard.
#define LED 11# define POT 0voidsetup(){pinMode(LED, OUTPUT);}voidloop(){int lido;lido = analogRead(POT);int ajustado;ajustado =map(lido, 0, 1023, 0, 255);
analogWrite(LED, ajustado);}
analogRead(POT); essa funo s l o valor da tenso naporta analgica e retorna um valor inteiro: 0 se a tenso for 0V e 1023 se a tenso for 5V. Ento, sea tenso for, por exemplo, 2,5V ela vai retornar 512.
map(lido, 0, 1023, 0, 255); essa funo muito til na hora de fazer ajustes em valores. Ela utilizada da seguinte forma: mapa(valor, MinValor, MaxValor, MinConv, MaxConv), ondeMinValor(MaxValor) o menor(maior) valor que a varivel valor pode assumir e
MinConv(MaxConv) o menor(maior) valor que o resultado pode ter. No cdigo acima, o menor emaior valor lidos na porta analgica so 0 e 1023, respectivamente, e o menor e maior valor quequeremos passar para a porta PWM so 0 e 255.
7/30/2019 Curso Arduino Asp40.Blogspot.com
9/12
Enviando dados para o computador
Uma das habilidades mais importante do arduino poder se comunicar com o computador atravsda comunicao serial. atravs da comunicao serial que iremos enviar e receber dados do
computador.Nosso prximo exemplo ensina a enviar o valor lido numa porta analgica para o computador.Mantendo o potencimetro ligado ao arduino como no exemplo anterior, implementamos o cdigo:
#define POT 0voidsetup(){
Serial.begin(9600);}voidloop(){
Serial.print(Valor do pot. = );Serial.println( analogRead(POT));delay(300);
}
Aps fazer o upload para o arduino clique no boto decomunicao serial como mostrado na figura ao lado.Ele vai abrir uma segunda janela onde ser mostrado asinformaes recebidas do arduino.
Serial.begin(9600); a funo que inicia a comunicao entre o arduino e o computador. Ovalor 9600 informa a velocidade de transmisso dos dados, portanto, 9600 bits/s (~1Kb/s). Essevalor chamado de baud rate.
Serial.print('Valor do pot. = '); envia o texto que est entre () para o computador. Note que as '' no aparecem, as aspas servem para informar que o que est entre parnteses um texto.
Serial.println( analogRead(POT)); envia para o computador o valor lido na porta analgica eadiciona uma nova linha.
ATENO: A comunicao serial ocorre atravs de conexes feitas nas portas digitais 0 e 1.Portanto, se estivermos usando a comunicao serial, no podemos conectar nada a esta
porta.
Recebendo dados do computador
Agora vamos usar o monitor serial para mandar o arduino ligar ou desligar o LED. Para isso vamosligar utilizar o LED do prprio arduino.
#definde LED 13voidsetup(){
Serial.begin(9600);pinMode(LED, OUTPUT);
}voidloop(){
char C ;
7/30/2019 Curso Arduino Asp40.Blogspot.com
10/12
if (Serial.available() > 0){C = Serial.read();if (C == 'H'){
digitalWrite(LED, HIGH);}elseif (C == 'L'){
digitalWrite(LED, LOW);}
}}
Ao abrir o monitor serial, quando digitarmos H e enviarmos para o arduino, o LED ir acender, sedigitarmos L o LED ir apagar. Qualquer outro valor o arduino no far nada.
char C; criamos uma varivel que do tipo carcter. Nessa varivel s podemos escrevercaracteres.
Serial.avaiable() essa funo informa quantos bits foram recebidos pela comunicao serial.
C = Serial.Read(); Pega o valor que foi recebido pela comunicao serial e armazena navarivel C.
else if (C == 'L'){ outra estrutura de controle o else if() que similar ao else . Contudo, asinstrues dentro de {} s sero executadas se a condio do primeiro iffor falsa e a do segundo forverdadeira.
A lista completa de funes, estruturas de controles etc podem ser obtidas em:http://arduino.cc/playground/Portugues/Referencia
Componentes Bsicos:
LDR
BuzzernoTone(porta);
tone(porta, nota, duracao);
http://arduino.cc/playground/Portugues/Referenciahttp://arduino.cc/playground/Portugues/Referencia7/30/2019 Curso Arduino Asp40.Blogspot.com
11/12
Transistores NPN e PNPPonte H
SERVOS
#include
Servo MeuServo;
MeuServo.attach(porta);
MeuServo.write(angulo);
CUIDADO COM A
ALIMENTAO!
SHIELDS E PERIFRICOS!
7/30/2019 Curso Arduino Asp40.Blogspot.com
12/12
EXECUTANDO PROJETOS!
Nosso ltimo projeto ser criar um semforo onde o tempo entre os sinais ser determinado pelo
potencimetro.
1. Fazer o primeiro LED acender;2. Fazer o primeiro LED apagar aps um dado intervalo de
tempo (dt) e acender o segundo LED;3. Fazer o segundo LED apagar aps um dado intervalo de
tempo (dt) e acender o terceiro LED;4. Verificar o valor do potencimetro (via comunicao
serial);5. Usar o valor lido do potencimetro para controlar o tempo
que o primeiro LED fica aceso;
6. Repetir o passo 5 para os outros 2 LEDs.