Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Aprendendo a Programar em Arduino, Notas de estudo de Tecnologia Industrial

Aprendendo sobre hardware e software da plataforma Arduino

Tipologia: Notas de estudo

2012

Compartilhado em 20/03/2012

micael-gaier-6
micael-gaier-6 🇧🇷

4.6

(5)

7 documentos

1 / 49

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
w w w . a u t o n e t . c b a . i f m t . e d u . b r
2011
Aprendendo a
Programar em
Arduino
Realização: PET Auto Net
Autor: Micael Bronzatti Gaier
Instituto Federal de Educação Ciência e Tecnologia de Mato Grosso - Campus Cuiabá
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31

Pré-visualização parcial do texto

Baixe Aprendendo a Programar em Arduino e outras Notas de estudo em PDF para Tecnologia Industrial, somente na Docsity!

w w w. a u t o n e t. c b a. i f m t. e d u. b r

Aprendendo a

Programar em

Arduino

Realização: PET Auto Net

Autor: Micael Bronzatti Gaier

Aprendendo a Programar em Arduino 1

A obra Aprendendo a Programar em Arduino de Micael Gaier - PET AutoNet IFMT foi licenciada com uma Licença Creative Commons - Atribuição - Uso Não Comercial - Partilha nos Mesmos Termos 3.0 Não Adaptada.

IFMT

Campus Cuiabá

 - Aprendendo a Programar em Arduino 
  • Introdução
  • Conhecendo A Plataforma Arduino
  • Base Da Programação Em Arduino
    • Comentários
    • Funções - Base
    • Pinmode(Pino, Modo)
    • Entrada E Saída De Dados I
      • Portas Digitais
      • Portas Analógicas
    • Tempo
    • Bibliotecas
    • #INCLUDE e #DEFINE
    • Variáveis E Modificadores
      • Variáveis
      • Classe De Variáveis
      • Tipos De Dados E Modificadores
    • Funções I
  • Como Programar Em Arduino
    • Operadores Booleanos, De Comparação E Incremento E Decremento
      • Operadores De Comparação
      • Operadores Booleanos
      • Operadores De Incremento E Decremento
    • Estruturas De Controle De Fluxo
      • If
      • If... Else
      • For
      • Switch Case
      • While
        • Aprendendo a Programar em Arduino
      • Do – While
    • Comunicação Serial
    • Operadores Matemáticos e Trigonometria
      • Operadores Matemáticos
      • Trigonometria
    • Entrada E Saida De Dados II
      • Sinais PWM
      • pulseIn (Pino, Valor, Tempo De Resposta )
  • Usando O Arduino Com Dispositivos
    • O Uso De Arduino em Projetos
    • Shields Para Arduino
    • Fazendo Um Motor DC Funcionar
      • Programação Ponte H
    • Conectando Um Display De Cristal Liquido (LCD)
      • Programando Um LCD Em Arduino
    • Uso De Sensores
  • Anexos
  • Bibliografia

Aprendendo a Programar em Arduino 4

Introdução

A cada dia que passa a plataforma Arduino vem conquistando novos usuários. Tal sucesso é devido a sua simplicidade e ao fato de não necessitar conhecer profundamente a eletrônica e as estruturas de linguagens para criar gadgets, robôs ou pequenos sistemas inteligentes.

Devido ao aumento de procura dos estudantes do IFMT para realizar seus projetos com a plataforma Arduino, o Grupo PET AutoNet juntamente com o Departamento da Área de Eletro-Eletrônica (DAE-E), o Departamento da Área de Informática (DAI) e o Departamento de Pesquisa e Pós-Graduação (DPPG) desta instituição resolveram ministrar sob orientação do Prof. Dr. Ronan Marcelo Martins um minicurso sobre a plataforma Arduino aos estudantes interessados, de onde surgiu esta apostila.

Esta apostila foi desenvolvida para complementar o aprendizado sobre Arduino, que possui tanto a parte do hardware como do software do Arduino proporcionando aos estudantes um melhor entendimento sobre o assunto. Esta apostila serve como apoio tanto para a comunidade interna ou externa ao IFMT devido às ações sociais realizadas pelo grupo PET AutoNet.

Aprendendo a Programar em Arduino 6

Microcontrolador ATmega Tensão de Funcionamento 5 V Tensão de Entrada (recomendado) 7 - 12 V Tensão de Entrada (limites) 6 - 20 V Pinos E/S digitais 14 (dos quais 6 são saídas PWM) Pinos de Entrada Analógicos 6 Corrente DC por pino E/S 40 mA Corrente DC por pino 3.3V 50 mA Memória Flash 32 KB, sendo 2KB utilizado pelo bootloader SRAM 2 KB EEPROM 1 KB

Alimentação

O Arduino pode ser alimentado pela ligação USB ou por qualquer fonte de alimentação externa. A fonte de alimentação é selecionada automaticamente. Alimentação externa (não USB) pode ser tanto de uma fonte como de uma bateria. A fonte pode ser ligada com um plugue de 2,1 mm (centro positivo) no conector de alimentação. Cabos vindos de uma bateria podem ser inseridos nos pinos GND (massa) e Vin (entrada de tensão) do conector de alimentação.

A placa pode funcionar com uma alimentação externa de 6 a 20 volts. Entretanto, se a alimentação for inferior a 7 volts, o pino 5 V pode fornecer menos de 5 volts e a placa poderá ficar instável. Se a alimentação for superior a 12 volts, o regulador de tensão poderá sobreaquecer e avariar a placa. A alimentação recomendada é de 7 a 12 volts.

Os pinos de alimentação são:

VIN - Entrada de alimentação para a placa Arduino quando uma fonte externa for utilizada. Poder- se-á fornecer alimentação por este pino ou, se for usar o conector de alimentação, empregar a alimentação por este pino.

5V - A fonte de alimentação utilizada para o microcontrolador e para outros componentes da placa pode ser proveniente do pino Vin através de um regulador on-board, ou ser fornecida pelo USB ou outra fonte de 5 volts.

3V3 - Alimentação de 3,3 volts fornecida pelo chip FTDI. A corrente máxima é de 50 mA.

GND - Pino terra ou massa.

Aprendendo a Programar em Arduino 7

Memória

O ATmega328 tem 32 KB de memória flash para armazenar código (dos quais 2 KB são utilizados pelo bootloader), além de 2 KB de SRAM e 1 KB de EEPROM (Electrically-Erasable Programmable Read-Only Memory), que pode ser lida e escrita através da biblioteca EEPROM.

Entrada e Saída

Cada um dos 14 pinos digitais do Arduino pode ser utilizado como entrada ou saída, usando as funções de pinMode(), digitalWrite(), e digitalRead(). Eles trabalham com 5 volts. Cada pino pode fornecer ou receber um máximo de 40 mA e tem uma resistência de pull-up interna (vem desligada de fábrica) de 20-50 kΩ. Além disso, alguns pinos têm funções específicas, a saber:

Serial: 0 (RX) e 1 (TX): são usados para receber (RX) e transmitir (TX) dados série, TTL. Estes pinos são ligados aos pinos correspondentes do chip serial FTDI USB-to-TTL

External Interrupts: 2 and 3 - Estes pinos podem ser configurados para ativar uma interrupção por um baixo valor, uma elevação ou falling edge ou uma mudança de valor. Veja a função attachInterrupt() para mais pormenores.

PWM: 3, 5, 6, 9, 10, e 11 - Fornecem uma saída analógica PWM de 8-bit com a função analogWrite().

SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) - Estes pinos suportam comunicação SPI, que embora compatível com o hardware, não está incluída na linguagem do Arduino.

LED: 13 - Há um LED já montado e ligado de origem ao pino digital 13. Quando o pino está no valor HIGH, o LED acende; quando o valor está em LOW, ele apaga. O Arduino tem 6 entradas analógicas e cada uma delas tem uma resolução de 10 bits (i.e. 1024 valores diferentes). Por padrão, elas medem de 0 a 5 volts, embora seja possível mudar o limite superior usando o pino AREF e um pouco de código de baixo nível. Adicionalmente alguns pinos têm funcionalidades específicas, a saber:

I^2 C: 4 (SDA) and 5 (SCL) - Suportam comunicação I^2 C (TWI) usando a biblioteca.

Há ainda mais alguns pinos na placa:

AREF - Referência de tensão para entradas analógicas. São usados com o analogReference().

Reset - Envia o valor LOW para efetuar o RESET ao microcontrolador. É tipicamente utilizado para adicionar um botão de reset aos shields que bloqueiam o que há na placa.

Aprendendo a Programar em Arduino 9

Reset automático (Software)

Algumas versões anteriores do Arduino requerem um reset físico (pressionando o botão de reset na placa) antes de carregar um sketch. Este Arduino é projetado de modo a permitir que isto seja feito através do software que esteja correndo no computador a que está ligado. Uma das linhas de controle de hardware (DTR) do FT232RL está ligada ao reset do ATmega328 por via de um condensador de 100 nF.

Quando é feito reset a esta linha (ativo baixo), o sinal cai por tempo suficiente para efetuar o reset ao chip. O software Arduino usa esta característica para permitir carregar o programa simplesmente pressionando-se o botão “upload” no ambiente Arduino. Isto significa que o “bootloader” pode ter um “timeout” mais curto, já que a ativação do DTR (sinal baixo) pode ser bem coordenada com o início do “upload”.

Considerando que é programado para ignorar dados espúrios (i.e. qualquer coisa a não ser um “upload” de um novo código), ele interceptará os primeiros bytes dos dados que são enviados para a placa depois que a ligação for aberta. Se um “sketch” rodando na placa receber uma configuração de uma vez, ou outros dados ao inicializar, dever-se-á assegurar que o software está em comunicação e espere um segundo depois de aberta a ligação, antes de enviar estes dados.

Proteção contra sobrecorrente USB

O Arduino tem um fusível que protege a porta USB do seu computador contra curto-circuito. Apesar da maioria dos computadores possuírem proteção interna própria, o fusível proporciona uma proteção extra. Se mais de 500 mA foram aplicados na porta USB, o fusível irá automaticamente interromper a ligação até que o curto ou a sobrecarga seja eliminada.

Características físicas

O comprimento e largura máximos do são 2,7″ (68,50 mm) e 2,1″ (53,34 mm) respectivamente, com o conector USB e o jack de alimentação indo um pouco além destas dimensões. Três furos de fixação permitem a montagem da placa numa superfície ou caixa. Note que a distância entre os pinos de entrada e saídas digitais nº 7 e nº 8 é de 160 mil (milésimos de polegada), não é sequer múltiplo do espaçamento de 100 mil dos outros pinos.

Aprendendo a Programar em Arduino 10

Software: como Software, no Arduino é feita toda a parte de programação que será usada para controlar o hardware. A programação é baseada em linguagem C, porém, de forma mais simples. O software está disponível para Windows, Linux e Mac OS no site www.arduino.cc.

IDENTIFICAÇÃO DO HARDWARE EM WINDOWS 7.

Quando você for compilar algum programa e for passar para o hardware será necessário plugar o Arduino na entrada USB do seu computador, porém isso não se procede de forma automática e é necessário realizar o seguinte procedimento.

  1. Conecte o cabo USB do Arduino no seu computador e aguarde o aviso de “Novo Hardware Encontrado”;
  2. Abra o Gerenciador de Dispositivos, em “Outros Dispositivos”, aparecerá o hardware, então clique com o botão direito do mouse sobre o dispositivo e clique em “Atualizar/Instalar Hardware”.
  3. Na janela que aparecerá, clique em “Procurar Software do Driver no Computador”;
  4. Em seguida, você deverá identificar a pasta exata onde está localizado o drive do Arduino, ou seja, dentro da pasta do programa que você baixou do site haverá uma pasta chamada “Drivers”, você deverá direcionar para esta pasta. Clique em avançar e espere a identificação do Arduino.

Software IDE do Arduino.

Aprendendo a Programar em Arduino 12

FUNÇÕES - BASE

Um programa possui um corpo, uma função principal, onde o programa será rodado. Em Arduino, é obrigatório que o programa tenha a função void setup () e a função void loop (). Caso seu programa não tenha estas funções, ele não será capaz de identificar a linguagem e não realizará a compilação. A função void setup () funciona como uma “ função de inicialização ”, o que estará contido nela rodará apenas uma vez no programa. Nela, deve conter as informações principais para iniciar o seu programa, que estará contido dentro da função void loop (). Em void loop () deverá conter tudo o que você quiser que o programa faça.

pinMode(pino, MODO) No Arduino, como lidamos com entrada e saída de dados, o pinMode configura um pino específico da placa como entrada ou saída. O pino é um número inteiro e ele é identificado na própria placa. O MODO ele pode ser de entrada ( INPUT ) ou saída ( OUTPUT ) de dados.

OBSERVAÇÃO: Quando se tratar de uma leitura de dados analógicos, no caso os pinos A0 ao A5 , não é necessário realizar a declaração destes pinos em void setup (), porém, os pinos analógicos, também podem ser usados como pinos digitais, assim, quando estiver se referindo ao uso destes pinos como digitais, você deverá identificar no programa na função de inicialização como pino 14 (no caso do A0 ) até o 19 (no caso do A5 ).

ENTRADA E SAÍDA DE DADOS I

Quando desejarmos introduzir dados ou ler dados recebidos de uma porta, devemos usar alguns comandos específicos.

PORTAS DIGITAIS digitalRead( pino ) Este comando é responsável pela leitura de dados nas portas digitais disponíveis. Como falamos de leitura de dados digitais, ela será feita como HIGH ou LOW.

digitalWrite( pino , VALOR ) Se você configurar em void setup () um pino como OUTPUT (saída de dados), você poderá definir se ela será alta ( HIGH ) ou baixa ( LOW ), assim, você poderá comandar qualquer aplicação que se encontrará conectado em tal pino.

PORTAS ANALÓGICAS

Se você for ler dados em uma entrada analógica, você obterá como retorno um valor entre 0 e 1023, pois, o Arduino estudado possui um conversor analógico digital de 10 bits, então, 210 = 1024. 1023 é o valor máximo, assim, será colocado na entrada

Aprendendo a Programar em Arduino 13

do pino o valor de tensão máximo de sua tensão de referência ( AREFAnalog Reference ). Mudar a tensão de referência pode ser uma boa ideia, porém, alterando-a em hardware, deve-se também alterar em software. A tensão de referência padrão do Arduino é de 5 V, mas, também há uma tensão de referência interna no valor de 1,1V (no ATMega168), e uma de 2,56V (disponível em apenas algumas plataformas). Pode- se também ser usada uma tensão de referência externa, definida pelo técnico. Se por exemplo, for usada a tensão padrão (5V), dizemos que: 5V ÷ 1024 = 0,0048V ≈ 5mV Isso significa que a cada bit será adicionado 5mV à entrada e que o Arduino apenas conseguirá detectar tensões superiores à 5mV. Alterando o valor de referência é possível obter uma maior sensibilidade, no caso de sensores que não necessitam uma tensão muito alta e uma grande precisão.

OBSERVAÇÃO!

O recomendado é caso for usada uma tensão de referência externa, que seja colocado um resistor de 5kOms, assim, caso possua alguma configuração errada no software e o microcontrolador não conseguir entender, isso previne que ocorra algum dano no equipamento, porém, internamente, há uma resistência no valor de 32kOms, isso significa que você terá um divisor de tensão na entrada do equipamento, ou seja, a tensão de referência será diferente da tensão aplicada antes do resistor de 5kOms.

Exemplo : Se for aplicada uma tensão de 4.2V na entrada do equipamento, a tensão de referência será:

Se for definido o uso de uma tensão de referência externa, as portas disponíveis com valores de 5V e 3,3V serão fechadas e passarão a não funcionais mais.

analogReference( TIPO ) Em software, este comando é usado para definir qual é a tensão de referência que será usado em hardware. Ou seja, se o TIPO será padrão ( DEFAULT ), interna ( INTERNAL ) ou externa ( EXTERNAL ).

analogRead (pino) Este comando é usado para realizar a leitura de alguma entrada analógica. Uma entrada analógica não precisa ser definida na função de inicialização como de entrada ou saída. O uso desta função retorna um valor inteiro, que como já foi informado, será de 0 a 1023 unidades, sendo equivalente um valor aproximado de 5mV por unidade. Para realizar a leitura de uma entrada digital é necessário um tempo aproximado de 100us.

𝟑𝟐𝒌𝑶𝒎𝒔 + 𝟓𝒌𝑶𝒎𝒔 =^ 𝟑,^ 𝟔𝟑𝑽

Aprendendo a Programar em Arduino 15

BIBLIOTECAS

Você, como programador, deve saber que devemos simplificar ao máximo nossos códigos visando economizar espaço na memória do programa. Para isso quando você obtém um equipamento, sensor, etc., o fabricante muitas vezes fornece uma biblioteca para facilitar a programação, ou seja, invés de você realizar uma longa e extensa programação, você utiliza a biblioteca e simplifica o código.

Quando você obtém uma biblioteca e a armazena na pasta de bibliotecas do Arduino, ao abrir um programa e clicar no menu em Sketch > Import Library , você poderá escolher a biblioteca que desejar. Quando escolher, aparecerá no seu programa algo como no exemplo acima, porém, sem ser comentado. #include <NomeDaBiblioteca.h> Quando adicionar uma biblioteca ao seu programa, é necessário verificar as instruções corretas para realizar a programação.

#include e #define

Quando você usa #include , você está dizendo ao programa que ele deve incluir o arquivo-cabeçalho ao programa.

O uso da ferramenta #define é interessante para ser usado com o Arduino. Observando o exemplo 2 , você percebe que logo após a declaração da ferramenta, é colocado um nome em geral. Após ele foi usado o local onde está o sensor no Arduino, o pino A0. Com isso, você percebe que em todo o programa quando quiser se referir ao pino A0, se usa a palavra sensor. Assim, podemos definir:

#define nomeVariavel dados (OBS: não é usado ‘ ; ’ no final)

void loop () { valSensor = analogRead(sensor); // lê sensor e define // valor como variável global Serial .println(valSensor); // envia valor do sensor // para porta serial piscarLED(); // função secundária } void piscarLED(){ digitalWrite(led, HIGH); // ligar o LED delay(valSensor); //pausa de acordo com o valor da //variável digitalWrite(led, LOW); // apagar o LED delay(valSensor); }

Aprendendo a Programar em Arduino 16

Com isso dizemos que podemos usar um nome qualquer, invés de colocar os dados diretamente no programa. Isso facilita a programação, pois ela ficará mais legível e caso seja necessário alterar o valor dos dados, será necessário modificar apenas uma vez. A ferramenta #define , é uma ferramenta local , ou seja, você a usa apenas para programar, quando você for compilar o programa, o nome da variável será substituído automaticamente pelo dado contido, assim, você acaba economizando espaço na memória do microcontrolador.

VARIÁVEIS E MODIFICADORES
VARIÁVEIS

Os nomes das variáveis apenas devem obedecer algumas regras: elas podem começar com letras ou sublinhado ( _ ) e não podem ter nome idêntico a alguma das palavras reservadas pelo programa ou de alguma biblioteca. As variáveis devem ser declaradas antes de serem usadas. Observe: tipo_de_variável lista_de_variáveis Ex: int ledPin, potenciômetro

CLASSE DE VARIÁVEIS

Um código que se encontra dentro de outra função, entre { e }, se encontra isolado de todo o resto do código e os dados contidos lá apenas podem ser armazenados através de variáveis. Existem três classes de variáveis: locais, globais e estáticas.

VARIÁVEIS LOCAIS

Quando uma variável é declarada dentro de uma função específica, ela é denominada variável local. Estas variáveis apenas existem enquanto o bloco onde está armazenada estiver sendo executado. A partir do momento em que o programa voltar à função principal, esta variável deixará de existir.

VARIÁVEIS GLOBAIS

Uma variável global é aquela variável que é conhecida por todo o programa, ou seja, independente da função que estiver sendo executada ela será reconhecida e rodará normalmente. Uma variável global ela é declarada antes mesmo da função void setup ().

VARIÁVEIS ESTÁTICAS

Funcionam de forma parecida com as variáveis globais conservando o valor durante a execução de outras funções, porém, só são reconhecidas dentro da função onde é declarada. Como exemplo, podemos dizer que uma variável estática é uma variável declarada dentro da lista de parâmetros de uma função.

Aprendendo a Programar em Arduino 18

shorts e ints devem ocupar pelo menos 16 bits, longs pelo menos 32 bits, e que short não pode ser maior que int , que não pode ser maior que long.

Observe a tabela.

TIPO NUMERO DE BITS

INTERVALO
INICIO FIM

char 8 -128 127 unsigned char 8 0 255 signed char 8 -128 127 int 16 - 32.768 32. unsigned int 16 0 65. signed int 16 - 32.768 32. short int (^) 16 -32.768 32. unsigned short int 16 0 65. signed short int 16 -32.768 32. long int (^) 32 - 2.147.483.648 2.147.483. signed long int 32 -2.147.483.648 2.147.483. unsigned long int 32 0 4.294.967. float 32 3,4E-38 3.4E+ double 64 1,7E- 308 1,7E+ long double 80 3,4E-4932 3,4E+

FUNÇÕES I

Anteriormente, já foi explicado um pouco a respeito sobre o void setup () e o void loop (), que mesmo não utilizando-os, eles precisam ser declarados.

Uma função é uma unidade autônoma do código, que foi feita para cumprir uma atividade em particular. Um programa consiste em várias funções. Uma função se resume em:

tipo nome ( declaração de parâmetros ){ comando1; comando2; ... }

Existem dois tipos de funções: as que retornam algum valor para a função onde está inserida e as funções que não retornam nenhum valor.

Tipo int Uma função int retorna um valor para a função que a chamou. Há duas formas de retornar de uma função, uma delas é quando o finalizador de função ( } ) é encontrado, ou quando for feito o uso da declaração return. A declaração return retorna um valor especificado para a função que a chamou.

Aprendendo a Programar em Arduino 19

Exemplo: int checkSensor(){ if (analogRead(A0) > 400) { // se a leitura do pino A0 for maior que 400 return 1; // retorna 1 (verdadeiro) else{ return 0; } // se não for, retorne 0 (falso) }

Tipo void uma função tipo void não retorna nenhum valor para a função que a chamou, ou seja, as ações executadas nesta função não resultaram em números binários, variáveis booleanas ou caracteres para a função principal. Com o uso de void não é permitido usar a declaração return.

Usar funções pode simplificar o código e o deixar mais organizado. No exemplo 2 percebemos que foi criada uma função apenas para o LED piscar e que foi inserida na função void loop () , com isso, se o código fosse extenso e seria necessário o LED piscar várias vezes durante o programa, aquela parte do código não precisaria ficar sendo repetida, assim, apenas chamaria a função piscarLED(), então quando ela terminasse de ser executada voltaria ao mesmo ponto em que parou.