curso arduino asp40.blogspot.com

Upload: jcdmed

Post on 14-Apr-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 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/Referencia
  • 7/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.