Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arduino Básico Prof. Dr. Robinson F. Camargo Acadêmico Douglas A. Pedroso 1/5 2 Arduino é uma plataforma de prototipagem eletrônica de hardware livre. Possui uma linguagem padrão de programação, a qual tem origem em Wiring, sendo essencialmente C/C++. Seu objetivo é proporcionar um ambiente de fácil acesso, baixo custo e que possibilite os mais diversos trabalhos através de suas vastas possibilidades de funções e bibliotecas. Possui uma interface serial e USB que possibilita a interação com demais dispositivos, bem como a programação de suas entradas e saídas digitais e analógicas para que executem as funções desejadas. Introdução 1/5 3 Bem como vários outros microcontroladores, o Arduino possui seu próprio Ambiente Integrado de Desenvolvimento (IDE), onde poderemos realizar a programação da plataforma, utilizar suas bibliotecas, compilar nosso código e gravá-lo no Arduino. Para fazermos uso desse software, é necessário fazer seu download (de forma gratuita) no site “arduino.cc” ou, mais precisamente, no link a seguir: http://arduino.cc/en/Main/Software Obs.: É essencial que o arquivo baixado no site esteja de acordo com as especificações de seu computador/notebook. Essas informações encontram-se na página disponibilizada acima. Integrated Development Environment (IDE) 1/5 4 Ao realizar o download, abra a pasta que contém os arquivos baixados e execute o instalador do programa. Durante a instalação do programa dificilmente ocorrerão problemas, porém, se estes existirem, verifique se a versão baixada da IDE é compatível com seu sistema operacional ou se não está faltando nenhum arquivo necessário para a instalação. Embora sua instalação seja simples, existe um problema ligeiramente comum aos primeiros usos da IDE. Em algumas casos, logo que instalado o software, o computador/notebook tem uma certa dificuldade em reconhecer a placa conectada. Este erro ocorre pela desatualização do driver e é de simples solução. Instalando a IDE 1/5 5 Normalmente a desatualização do driver se manifesta da seguinte forma: Nesse caso, mesmo estando com a placa do Arduino conectada ao computador, a Serial Port mostrava-se indisponível. Instalando a IDE 1/5 6 Para solucionar este problema, precisamos executar o driver que normalmente encontra-se na pasta onde o programa foi instalado ou então na própria pasta do download. Se caso persistir o problema ou então o driver não for localizado, recomenda-se o download do mesmo a partir deste link: http://arduino.cc/en/guide/windows#toc4 Obs.: A imagem acima é apenas uma exemplificação, podendo variar de acordo com cada sistema operacional. Instalando a IDE 1/5 7 A seguir, veremos passo a passo as configurações da IDE para que possamos compilar e gravar nosso código no Arduino: 1º - Escolhendo a Placa: Primeiramente é necessário escolher qual placa do Arduino está sendo utilizada para gravar este código. Para isto, basta seguir a imagem abaixo: Compilando e Gravando o Código 1/5 8 Obs.: Em todos os exemplos que serão demonstrados, nós utilizaremos códigos com portas compatíveis tanto para Arduino Uno R3 quanto para Arduino Mega 2560, não sendo necessária nenhuma alteração nos códigos antes destes serem compilados e gravados. Porém, esta compatibilidade nunca será consistente quando o assunto for a escolha da porta, como mostrado anteriormente. Desta forma, toda vez que inicializarmos a IDE, deveremos escolher a placa adequada para gravarmos nosso algoritmo. Outros casos de diferenciação entre Arduino Uno R3 e Arduino Mega 2560 serão avisados previamente. Compilando e Gravando o Código 1/5 9 2º - Selecionando a Porta: Em seguida, deveremos selecionar em qual porta USB o Arduino está conectado. A imagem a seguir demonstra como fazer isto: Compilando e Gravando o Código 1/5 10 Assim como o simbólico “Hello World!”, que é o primeiro programa realizado em “C” por quem está aprendendo a usar a linguagem, a seguir faremos o nosso equivalente para o Arduino: Este primeiro teste tem como intuito a familiarização com os comandos da IDE e teste da placa. Hello World! 1/5 11 3º - Compilar e Gravar: Por fim, devemos compilar o código para verificar se não existe nenhum erro no mesmo. Após verificado e corrigido, finalmente gravaremos o código no Arduino. Ambos os comandos serão mostrados na imagem a seguir: Compilando e Gravando o Código 1/5 12 Como dito anteriormente, trabalharemos com os modelos Mega 2560 e Uno R3 de Arduino. Sendo assim, vejamos algumas características de cada modelo: Características Mega x Uno 1/5 13 Funções: Para iniciarmos qualquer algoritmo destinado à plataforma Arduino precisaremos fazer uso de duas funções fundamentais: “void loop()” e “void setup()” • void setup () {}: Essa função é executada apenas uma vez durante o código, sendo feito logo ao inicializar o microcontrolador. Dentro de seu escopo, iremos inicializar pinos, bibliotecas e realizarmos demais atividades que não necessitem funcionar em loop infinito. • void loop () {}: Dentro do escopo dessa função é que será alocado a principal parte do código a ser executado pelo Arduino. Esta função tem como principal característica a sua “void loop()” e “void setup ()” 1/5 14 execução em loop infinito, permitindo executar rotinas repetitivas a uma velocidade estipulada pelo clock da plataforma. A única maneira de encerrar o funcionamento desta função é desligando o Arduino. Obs.: Vale lembrar que ambas as funções são do tipo “void” e não retornam nenhum valor. “void loop()” e “void setup ()” 1/5 15 Funções: • pinMode(Pino, Modo): Nesta função iremos estabelecer os pinos usados e de que maneira serão usados. Por exemplo, se quisermos fazer uma leitura do pino “12”, precisaremos chamar a função “pinMode” no void setup() e escrevermos o pino que desejamos fazer a leitura no primeiro parâmetro e qual o seu modo (entrada ou saída) no segundo parâmetro da função. Deste modo, nosso exemplo ficaria da seguinte forma: “pinMode(12, INPUT);”. Obs.: Tanto no Arduino Mega quanto no Uno, a vasta maioria dos pinos têm seus respectivos nomes correspondentes iguais aos números encontrados na placa. Digital I/O 1/5 16 • digitalWrite(Pino, Valor): Nesta função iremos setar o valor de um pino para HIGH (5V) ou LOW (0V). Os parâmetros desta função são o pino e o estado (HIGH ou LOW) desejado. Esta função não retorna nada. • digitalRead(Pino): Esta função retorna o estado lido no pino desejado. O único parâmetro da função é o pino e ela retorna se este está em HIGH ou em LOW. Digital I/O 1/5 17 Funções: • delay(tempo): Esta função trava totalmente o código durante o tempo desejado. Como parâmetro devemos passar o tempo em milissegundos (1s = 1000ms). Nada é retornado dessa função. • delayMicroseconds(tempo em µs): Da mesma forma que a função “delay()”, esta função também trava o código, porém o parâmetro deve ser passado em microssegundos (1ms = 1000µs). • millis(): Sem parâmetro nenhum a ser passado para esta função, apenas recebemos dela o retorno do tempo que se passou desde que o programa foi iniciado. Não existe maneira Tempo 1/5 18 de zerar ou resetar esta função. O tempo retornado será em milissegundos. • micros(): Da mesma forma que a “millis()”, esta função não recebe nenhum parâmetro. A única diferença entre a “micros()” e a “millis()” é que a primeira retorna o tempo em microssegundos, enquanto a segunda retorna em milissegundos. Dica.: Com funções como “millis()” e “micros()” sempre trabalharemos em cima das diferenças de tempo entre instantes. Por exemplo, se desejarmos saber quanto tempo se passou entre um instante e outro, é necessário salvar o tempo mostrado pelas funções em cadaum dos instantes e realizar a subtração entre esses valores. Tempo 1/5 19 Para realizarmos os exemplos e exercícios a seguir, vamos considerar a seguinte montagem: Exercícios R2 R4 Slide 19 R2 de quanto deve ser o resistor e que tipo de led pode ser usado ? Robinson; 06/10/2014 R4 trocar figuras para o arduino mega e deixar figuras mais visiveis Robinson; 06/10/2014 1/5 20 Exercício 01: Neste exemplo, o led ficará aceso por um segundo em função do delay dado. Logo após, o mesmo irá apagar e aguardar mais um segundo para que o código reinicie juntamente com o loop(). Exercícios 1/5 21 Exercício 02: Com base no exemplo anterior, faça com que o led pisque (de maneira visível) cada vez mais lentamente com o decorrer do tempo. Exercícios 1/5 22 Exercício 03: Refaça o “exemplo 01” usando a função “millis()” ao invés da função “delay()”. Faltou linha tempo=0; Exercícios 1/5 23 Para os próximos exemplos e exercícios, consideraremos a seguinte montagem: Exercícios R3 Slide 23 R3 trocar figuras para o arduino mega e deixar figuras mais visiveis Robinson; 06/10/2014 1/5 24 Exercício 04: Para este exemplo, vamos considerar que o botão seja do tipo “push button”. Durante o código há sempre uma variável salvando o estado do botão para poder comparar e decidir, a partir disto, se acende ou apaga o led. Exercícios 1/5 25 Exercício 05: Implemente novamente o exemplo anterior, porém desta vez considere o botão sendo do tipo “push-pull button”. Exercícios 1/5 26 Funções: • analogRead(Pino): Esta função lê o valor do pino analógico desejado. Ela converte automaticamente o valor de tensão lido para um número de 10 bits, ou seja, um número entre 0 e 1023 na base decimal. • analogWrite(Pino, Valor): Para escrever valores analógicos de tensão nos seus pinos, o Arduino envia valores de PWM variados de 0 a 255 (sendo 0 = 0V e 255 = 5V). Se quisermos setar o valor de 2,5V no pino 5, por exemplo, devemos enviar um valor de PWM de 127,5. Nesse caso a função ficaria assim: “analogWrite(5, 127.5);”. Analógico I/O 1/5 27 Obs.: O conceito de PWM (Pulse Width Modulation) é baseado no valor médio de tensão dentro de um espaço de tempo. Se em um determinado período eu tiver um determinado espaço de tempo em nível lógico alto (seja qual for essa tensão) e outro em nível lógico baixo (também independente de qual seja a tensão), a média de tensão desse período será o PWM do mesmo. Por exemplo, sabemos que a frequência padrão do PWM do Arduino é de 490Hz. Transformando isso para um período “p”, temos que p = 2ms, aproximadamente. Seguindo pela lógica do valor médio de tensão em um espaço de tempo, se dividirmos o nosso período “p” em duas partes iguais de 1ms cada, sendo uma delas em nível lógico alto, equivalente a 5V e outra de nível Analógico I/O 1/5 28 lógico baixo equivalente a 0V, teremos que a média da tensão nesse período será 2,5V. Em um segundo exemplo, se pegarmos o mesmo período “p” e dividirmos novamente em duas partes, sendo uma delas equivalente a 0,5ms em nível lógico alto (5V) e outra de 1,5ms em nível lógico baixo (0V), teremos um valor médio de tensão equivalente a 1,25V. É bastante comum escrevermos o valor de PWM entre 0 e 255, sendo uma espécie de “porcentagem” do valor de tensão, onde 0 equivaleria a 0% da tensão total e 255 seria 100% da tensão total. Para nossos estudos com o Arduino, o conceito de PWM será útil apenas para entendermos como funciona a Analógico I/O 1/5 29 função “analogWrite()”. Porém, existem várias bibliotecas mais aprofundadas no assunto, onde pode-se controlar diversos outros parâmetros (como a frequência, por exemplo) importantes para algumas aplicações. Analógico I/O 1/5 30 Funções: • map (Valor, Do Menor, Do Maior, Para o Menor, Para o Maior): A função “map()” funciona basicamente como uma operadora de regra de três. O primeiro parâmetro da função é o valor a ser convertido (geralmente é uma variável guardando o valor de alguma leitura). No segundo e terceiro parâmetro temos os valores de mínimo e máximo de origem do valor a ser convertido. Por exemplo, se estamos lendo um valor de tensão, sabemos da função “analogRead()” que esses valor estará entre 0 e 1023. Por tanto, o segundo parâmetro, nesse caso, será 0 e o terceiro 1023. Já no quarto e quinto parâmetro, devemos inserir o valor mínimo e máximo para o qual o valor deve ser convertido. Matemática 1/5 31 Seguindo o exemplo anterior, se quisermos converter o valor de tensão lido que encontra-se entre 0 e 1023 para seu valor original, que seria entre 0V e 5V, devemos inserir os valores originais como quarto e quinto parâmetro, respectivamente. Dessa forma, considerando que o valor a ser convertido seja uma variável chamada “y”, a função se estruturaria da seguinte forma: “map (y, 0, 1023, 0, 5);”. Esta função tem como retorno o valor convertido. Matemática 1/5 32 Para os exemplos e exercícios a seguir iremos considerar a seguinte montagem: Exercícios 1/5 33 Exercício 06: Nesse exemplo é feito uma leitura no pino central do potenciômetro, no qual foi ligado 5V e 0V nos outros dois pinos. O valor lido é convertido para um valor de 0 a 255, e conforme a sua variação, mudará o brilho do led. Exercícios 1/5 34 Exercício 07: Faça o led piscar e com o potenciômetro controle a velocidade com que ele pisca. Exercícios 1/5 35 A seguir, basearemos nossa montagem na imagem ao lado: Obs.: Para o Arduino Uno será necessário realizar algumas alterações na montagem. Porém, os códigos a seguir estão de acordo. Exercícios - a ligacao não é nos pinos analog e sim no dos pwm. 1/5 36 Exercício 08: Nesse exemplo os leds irão alternar entre qual deles ficará aceso em função do valor convertido na leitura do potenciômetro. Exercícios 1/5 37 Exercício 09: Faça com que a fileira de leds acenda ou apague sequencialmente de acordo com o lado de giro do potenciômetro. Exercícios 1/5 38 Funções: • Serial.begin(velocidade): Essa é a primeira função da serial que deve ser executada em um código. Esta função é chamada no “void setup ()” e tem como parâmetro a velocidade da transferência de dados entre a serial e o Arduino, a qual é extremamente comum usar “9600” bits por segundo. Não existe nenhum retorno associado a essa função. • Serial.available(): O objetivo desta função é retornar o número de bytes que está sendo lido na porta serial. Não é necessário nenhum parâmetro para executá-la. Dica.: Para o Arduino Mega, podemos colocar somente essa função sem nenhuma outra comparação em uma estrutura Serial 1/5 39 de seleção, que o Arduino entenderá que a condição para entrar na estrutura é somente se houver algum byte sendo lido na serial. Por exemplo, se usarmos da seguinte maneira “if(Serial.available()) {}” em uma estrutura de seleção, basta existir um byte qualquer na serial que o código entrará na estrutura. Para o Uno e os demais é necessário fazer uma comparação do tipo “Serial.available() > 0” para saber se há algo sendo escrito na serial. • Serial.print(“Frase” ou Variável): Nesta função podemos imprimir na serial qualquer valor de variável, frase ou palavra que desejarmos. • Serial.println(“Frase” ou Variável): Da mesma maneira que a função anterior, porém, com um espaço de enter entre cada print. Serial 1/5 40 • Serial.read(): Essa função não recebe nenhum parâmetro. Seu objetivo é retornar o primeiro byte que foi escrito na serial. Se não houver nada sendo escrito quando for solicitada a leitura, a função retornará o valor “-1”. Obs.: Para nossos estudos iremos utilizar a entrada serial disponívelna própria IDE do Arduino, porém existem várias outras formas de comunicação serial que utilizam as mesmas funções, mas são conectadas de formas diferentes. Na placa do Arduino existe uma parte dedicada somente à comunicação. Serial 1/5 41 Para realizarmos nossas tarefas ligadas à serial, precisaremos saber alguns detalhes sobre a IDE. A imagem a seguir mostra onde podemos abrir a serial da IDE: Serial na IDE 1/5 42 A seguir, vemos em vermelho o comando de envio do que está escrito no espaço em amarelo. Em verde está a velocidade da serial, a qual deve ser igual à declarada no código. Serial na IDE 1/5 43 Para os próximos exemplos e exercícios, consideremos novamente a seguinte montagem: Exercícios 1/5 44 Exercício 10: Nesse exemplo, quando qualquer botão é pressionado na serial, o led acende por um segundo e depois volta a se apagar. Ele só retornará a acender quando outro botão for pressionado na serial. Exercícios 10 – faltou uma linha ! 1/5 45 Exercício 11: Faça com que o led seja aceso quando a tecla “L” for pressionada e desligado quando a tecla “D” for pressionada na serial. Exercícios 1/5 46 Exemplo 12: Neste exemplo, o código permite escrever uma frase inteira na serial e ter ela salva em um vetor para posteriormente ser impressa na própria serial. Exercícios 1/5 47 Exercício 13: Com base na mesma montagem tomada como base no início, faça que o brilho do led aumente quando a letra “A” for pressionada e diminua quando a letra “D” for pressionada. Mostre na serial o valor atual do PWM. Exercícios 1/5 48 Exercício 14: Faça um cronômetro, o qual ao ser pressionada a letra “S” comece a contar e quando for pressionada a letra “P” mostre o tempo decorrido. Exercícios
Compartilhar