MCO018703 2018 1 AULA07

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Plataforma Arduíno

(Extraído da apostila Curso de Arduíno, de Álvaro Justen e do curso http://www.oficinaderobotica.ufsc.br Programação Básica em Arduíno], UFSC)

  • Arduino 1 é um projeto que engloba software e hardware e tem como objetivo fornecer uma plataforma fácil para prototipação de projetos interativos, utilizando um microcontrolador.
  • O projeto do Arduino teve início em 2005 na cidade de Ivrea, Itália.
  • O Arduino é composto por uma placa com microcontrolador Atmel AVR e um ambiente de programação baseado em Wiring e C++.
  • Tanto o hardware como o ambiente de programação do Arduino são livres, ou seja, qualquer pessoa pode modificá-los e reproduzi-los.


O Arduino também é conhecido como plataforma de computação física.

PLATAFORMAS DE COMPUTAÇÃO FÍSICA: são sistemas digitais ligados a sensores e atuadores, que permitem construir sistemas que percebam a realidade e respondem com ações físicas. O Arduíno é baseado em uma placa microcontrolada, com acessos de Entrada/Saída (I/O), que permite a criação de sistemas embarcados para aplicações industriais, comerciais, amadoras, profissionais, dos mais variados tipos.


Existem inúmeros modelos de Arduínos, como veremos na sequência, mas existem alguns mais populares, como o antigo Duemilanove (2009, em italiano) e o Uno, muito utilizado atualmente.


Fig001 MCO018703.jpg

Figura 1 - Arduíno Duemilanove.


A principal diferença entre um Arduino e um computador convencional é que, além ter menor porte (tanto no tamanho quanto no poder de processamento), o Arduino utiliza dispositivos diferentes para entrada e saída em geral.

Por exemplo: em um PC utilizamos teclado e mouse como dispositivos de entrada e monitores e impressoras como dispositivos de saída; já em projetos com o Arduino os dispositivos de entrada e saída são circuitos elétricos/eletrônicos.


Como a interface do Arduino com outros dispositivos está mais perto do meio físico que a de um PC, podemos ler dados de sensores (temperatura, luz, pressão etc.) e controlar outros circuitos (lâmpadas, motores, eletrodomésticos etc.), dentre outras coisas que não conseguiríamos diretamente com um PC.

A grande diferença com relação ao uso desses dispositivos, no caso do Arduino, é que, na maior parte das vezes, nós mesmos construímos os circuitos que são utilizados, ou seja, não estamos limitados apenas a produtos existentes no mercado: o limite é dado por nosso conhecimento e criatividade! O melhor de tudo nesse projeto é que seu software, hardware e documentação so abertos. O software é livre (GNU GPL2), o hardware é totalmente aberto, especificado (basta entrar no site e baixar os esquemas) e a documentação está disponível em Creative Commons3, os usuários podem colaborar (seja escrevendo documentação, seja traduzindo) através da wiki!


Modelos de Arduíno

  • Arduino UNO
  • Arduino Leonardo
  • Arduino Due
  • Arduino Esplora
  • Arduino Mega
  • Arduino Mega ADK
  • Arduino Ethernet
  • Arduino Mini
  • Arduino LilyPad
  • Arduino Micro
  • Arduino Nano
  • Arduino ProMini
  • Arduino Pro
  • Arduino Fio
Fig002 MCO018703.jpg

Figura 2 - Modelos de Arduíno.

Quadro Comparativo

Modelo Vin Vpin Clock Digitais Analógicas PWM UART Flash Bootloader Interface de Programação
Arduino Uno - R3 7-12V 5V 16MHz 14 6 6 1 32Kb Optiboot USB via ATMega16U2
BlackBoard UNO R3 7-12V 5V 16MHz 14 6 6 1 32Kb Optiboot USB via FTDI / FTDI
Arduino Leonardo 7-12V 5V 16MHz 20* 12 7 1 32Kb Leonardo USB nativo
Romeo V2.0 7-12V 5V 16MHz 20* 12 7 1 32Kb Leonardo USB nativo
Julieta 7-12V 5V 16MHz 14 8** 6 1 32Kb Optiboot USB via FTDI / FTDI
Arduino Mega 2560 R3 7-12V 5V 16MHz 54 16 15 4 256Kb STK500v2 USB via ATMega16U2
BlackBoard Mega 2560 R3 7-12V 5V 16MHz 54 16 15 4 256Kb STK500v2 USB via FTDI / FTDI
Arduino Mega ADK 7-12V 5V 16MHz 54 16 15 4 256Kb STK500v2 USB via ATMega16U2
Arduino Due 7-12V 3.3V 84MHz 54 12 12 4 512kb Due USB nativo
Arduino Esplora 5V 5V 16MHz - - - - 32kb Esplora USB nativo
Arduino Ethernet 7-12V 5V 16MHz 14 6 4 1 32Kb Optiboot USB via ATMega16U2
Arduino Fio 3,3-12V 3,3V 8MHz 14 8 6 1 32Kb AtmegaBOOT FTDI / Xbee
Arduino Micro 7-12V 5V 16MHz 20 12 7 1 32Kb Micro USB nativo
Arduino Pro Micro 5-12V 5V 16MHz 12 4 5 1 32Kb DiskLoader USB nativo
Arduino Pro Mini 3,3V 3,3-12V 3,3V 8MHz 14 6 6 1 32Kb AtmegaBOOT FTDI
Arduino Pro Mini 5V 5-12V 5V 16MHz 14 8 6 1 32Kb AtmegaBOOT FTDI
BlackBoard Pro Mini 5V 5-12V 5V 16MHz 14 8 6 1 32Kb AtmegaBOOT FTDI

[*A quantidade de portas no Arduino Leonardo é a mesma que a do Arduino UNO ou da BlackBoard, mas alguns pinos possuem dupla funcionalidade fazendo que a quantidade de pinos seja um pouco maior.]

[**A Julieta possui 2 entradas analogicas extras no barramento de sensores (A6 e A7)][4]

Arduino UNO

Talvez o modelo mais popular atualmente seja o Uno:

Fig003 MCO018703.jpg

Figura 3 - Arduíno UNO frente e verso.

  • Microcontrolador: ATmega328
  • Tensão de operação: 5V
  • Tensão recomendada (entrada): 7-12V
  • Limite da tensão de entrada: 6-20V
  • Pinos digitais: 14 (seis pinos com saída PWM)
  • Entrada analógica: 6 pinos
  • Corrente contínua por pino de entrada e saída: 40 mA
  • Corrente para o pino de 3.3 V: 50 mA
  • Quantidade de memória FLASH: 32 KB (ATmega328) onde 0.5 KB usado para o bootloader
  • Quantidade de memória SRAM: 2 KB (ATmega328)
  • Quantidade de memória EEPROM: 1 KB (ATmega328)
  • Velocidade de clock: 16 MHz
Alimentação
  • O Arduino UNO pode ser alimentado pela porta USB ou por uma fonte externa DC.
  • A recomendação é que a fonte externa seja de 7 V a 12 V e pode ser ligada diretamente no conector de fonte ou nos pinos Vin e Gnd.

Arduino DUE

A placa Arduino DUE possui um microcontrolador com core ARM Cortex-M3 como cérebro da placa. O microcontrolador escolhido para fazer parte de mais essa placa de sucesso da plataforma Arduino foi o ATMEL SAM3X8E, com encapsulamento de 144 pinos LQFP.

Comparada a placa Arduino UNO, a Arduino DUE tem maior poder de processamento. O microcontrolador SAM3X8E da DUE possui arquitetura Cortex-M3 que é concebida para que seus registradores sejam de 32 bits e que operações de 4 bytes sejam feitas em um ciclo de clock. Os microcontroladores ATMEGA, no entanto, possui arquitetura interna de 8 bits. Além disso, a nova placa, lançada para comercialização no ano passado, pode operar em até 84 MHz, contra os 16 MHz de velocidade máxima de processamento do Arduino UNO.

O microcontrolador ATMEL SAM3X8E possui 512 KB de Memória Flash e 96 KB de SRAM, ou seja, muito mais recursos para programas maiores e mais complexos. A Figura 3b mostra a placa do DUE frente e verso.


Fig036 MCO018703.jpg

Figura 3b - Arduíno DUE frente e verso.


A Arduino DUE possui 54 pinos digitais de entrada ou saída, onde 12 desses podem ser utilizados para controle PWM aumentando a capacidade de controle PWM se comparada a Arduino UNO que possui apenas 6 saídas PWM.

Os conversores analógicos-digital (ADC) dessa placa, são incrivelmente mais rápidos e podem operar em até 1 MHz de Frequência de amostragem. Essa nova placa possui 12 entradas de ADC, com 12 bits de resolução. Os responsáveis pelo software para prototipagem estão adaptando as bibliotecas do Arduino para aproveitar ao máximo a velocidade de processamento e dos periféricos. Além disso, possui dois 2 conversores digital-analógicos(DAC) de 12 bits, o que permite muito mais versatilidade a diferentes aplicações. É possível então, ter uma saída com um valor de tensão entre 0 e 3,3V, com 4096 diferentes valores, nesse intervalo.

Ao se trabalhar com essa placa alguns cuidados devem ser tomados. O microcontrolador opera com 3,3 V., isso implica em não existir compatibilidade entre vários shields disponíveis no mercado. Não é recomendável que se insira nos pinos de entrada digitais tensões acima de 3,6 V (o valor máximo absoluto suportado é 4,0 V., mas é bom sempre evitar estar próximo a esse limite máximo de tensão). No entanto, é possível encontrar alguns shields já compatíveis com a DUE, como o Arduino Wifi e o shield Ethernet REV 3. É importante verificar se o shield é compatível com o layout Arduino R3.

Instalação do software

Para criar um projeto com o Arduino, basta comprar uma placa Arduino (utilizaremos o Arduino Uno, como exemplo) (que custa em torno de US$30 no exterior e por volta de R$100 no Brasil), fazer download da interface integrada de desenvolvimento (IDE) e ligar a placa à porta USB do PC.

Como qualquer computador/microcontrolador, o Arduino precisa de um software para executar comandos. Esse software será desenvolvido na Arduino IDE em nosso PC, utilizando a linguagem C/C++.

Após escrever o código, o compilaremos e então faremos o envio da versão compilada para a memória ‘’flash’’ do Arduino, através da porta USB.

A partir do momento que o software é gravado no Arduino não precisamos mais do PC: o Arduino conseguirá executar o software independentemente, modo ‘’standalone’’, desde que seja ligado a uma fonte de energia. Antes de iniciar nosso projeto precisamos então instalar a IDE.

O ambiente de desenvolvimento do Arduino (IDE) é gratuito e pode ser baixado no seguinte endereço: [Arduino.org/software#ide]

Vamos lá:

  • Ubuntu GNU/Linux 10.10: Basta executar em um terminal:
sudo aptitude install arduino

ou procurar pelo pacote \arduino no Synaptic (menu Sistema!Administração!Gerenciador de pacotes Synaptic).

  • Ubuntu GNU/Linux (anterior a 10.10): Consulte a página de instalação do Arduino em Ubuntu.
  • Outras distribuições GNU/Linux: Consulte a página de instalação em outras distribuições GNU/Linux.
  • Microsoft Windows: Basta baixar o arquivo de instalação e clicar duas vezes no mesmo. Consulte a página de instalação para as variadas versões do Microsoft Windows.
  • Apple Mac OS X: Consulte a página de instalação para o Mac OS X.

Após a instalação, abra a IDE. A seguinte tela será mostrada:

Fig004 MCO018703.jpg

Figura 4 - IDE do Arduíno. Destaque para o botão de upload.

As seguintes configurações são necessárias:

Fig005 MCO018703.jpg

Figura 5 - 1. Instalar o drivers. 2. Selecionar o modelo do Arduíno. 3. Definir a porta COM.

Chamamos um código feito para Arduino de sketch e o salvamos em um arquivo com a extensão .pde.

Com nosso sketch pronto, bastará conectar o Arduino na porta USB e clicar no botão upload (segundo, da direita para a esquerda { destacado na figura acima).

Após o processo, será vista a mensagem Done uploading na IDE e então o sketch estará rodando no Arduino, ou seja, o LED acenderá e apagará, de 1 em 1 segundo. Vamos agora à explicação do processo:

IDE Arduino

Fig006 MCO018703.jpg

Figura 6 - Visão geral da IDE do Arduíno.

Utiliza uma biblioteca de funções que simplifica a sua programação, por meio de uma sintaxe similar a das linguagens C e C++ (Wiring).


As principais funcionalidades do IDE do Arduino são:

  • Escrever o código do programa
  • Salvar o código do programa
  • Compilar um programa
  • Transportar o código compilado para a placa do Arduino (menu Upload)
  • Permitir comunicação serial com o PC
Funções

As duas principais funções de um código Arduíno, isto é, de um programa desenvolvido para o Arduino são:

  • setup(): onde devem ser definidas algumas configurações iniciais do programa. Executa uma única vez, no início.
  • loop(): função principal do programa. Fica executando indefinidamente.

Todo programa para o Arduino deve ter estas duas funções!

void setup()
{


}

void loop()
{


}
Exemplo 1
acionando o led da placa (pino digital 13)

Começaremos com o exemplo clássico Blink, que já vem como exemplo, no aplicativo.

Para encontrar o exemplo clique em File ! Examples ! Digital ! Blink.

O programa tem como objetivo acender e apagar o LED de um em um segundo. Para compilar este exemplo não é necessário de nenhuma outra infraestrutura, ou hardware, que não o próprio Arduino.

Primeiramente, vamos criar uma variável chamada ledPin para endereçar o pino de saída, onde o LED da placa já está conectado (variável do tipo inteiro):

 int ledPin = 13;

Assim quando nos referirmos à variável ledPin, estaremos nos referindo ao pino 13.

Este tipo de instrução não é obrigatória, mas é uma das boas práticas de programação e organização de código!


O seguinte passo é classificar o ledPin como pino de SAÍDA, porque os pinos são bidirecionais.

Isto é feito da seguinte maneira:

 void setup() {
   pinMode(ledPin, OUTPUT);
  }


A função pinMode() tem como primeiro parâmetro o número do pino e como segundo parâmetro, se ele é pino de entrada ou saída.

Agora começaremos a escrever o processamento.

O programa rodará em um loop eterno, pois não deverá haver interrupções (ocorrências ou interferências que mudem o estado).

Dentro do loop terá uma função que fará o LED ficar aceso por 1 segundo e depois apagado, por mais um segundo, e assim, sucessivamente.

Escreva da seguinte maneira:

 void loop() {
     digitalWrite(ledPin, HIGH);
     delay(1000);
     digitalWrite(ledPin, LOW);
     delay(1000);
  }

A função delay(x) pára a execução do código durante x milissegundos (ms). Por isto temos que utilizar o argumento 1000, para setar os atrasos em 1 segundo (=1000 ms).

O código completo poderia ser:

void setup() {
   pinMode(13, OUTPUT); 
}
void loop() {
     digitalWrite(ledPin, HIGH);
     delay(1000);
     digitalWrite(ledPin, LOW);
     delay(1000);
}

A função digitalWrite() escreve uma informação digital (nível lógico), ou seja, 0 (LOW) ou 1 (HIGH) em uma das saídas digitais. Seu primeiro parâmetro é o pino de saída, que no caso é o ledPin (pino 13). O segundo parâmetro é o estado a ser atribuído ao pino, HIGH ou LOW.

Quando uma porta digital está em estado baixo (LOW), ela estará em 0V; já quando está em estado alto (HIGH), estará com 5 V.


Antes de fazer o upload do programa (carregar o código pra memória FLASH do Arduíno), primeiro deve-se escolher a porta USB em que o Arduino se encontra (conectado ao PC).

Para isso vá em Tools ! Serial Port ! porta, para setar onde porta é o nome da porta onde estão ligados o Arduino (/dev/ttyUSB*, no caso de GNU/Linux, COM* em Windows).

Para saber em qual porta o Arduino se encontra, faça por tentativa e erro, logo escolha um e tente rodar, caso não rode, é o outro.

Outro passo que deve-se fazer é escolher o modelo da placa, para isso vá em: Tools ! Board e o modelo da sua placa.

Agora sim para fazer o upload, clique em Upload, mostrado em destaque na Figura 4.

Deve-se ressaltar que a IDE Arduino inclui automaticamente todas as bibliotecas que utilizamos.

Se você está acostumado com C/C++, note que não precisamos digitar as diretivas include para arquivos como o stdlib.h, por exemplo.

Tudo é feito de forma automática para facilitar o desenvolvimento do projeto!


Como o Arduino já vem com um LED internamente conectado á porta 13, não precisaremos de circuitos externos para que esse projeto funcione, ou seja, bastará fazer upload daquele código e já teremos o resultado esperado:

Fig007 MCO018703.jpg

Figura 7 - LED interno (pino 13).

Outras funções

Digital I/O

pinMode() 
digitalWrite() 
digitalRead()

Analógico I/O

analogReference() 
analogRead() 
analogWrite() - PWM

Avançado I/O

tone() 
noTone() 
shiftOut() 
pulseIn()

Tempo

millis() 
micros() 
delay() delayMicroseconds()

Matemática

min() 
max() 
abs() 
constrain() 
map() 
pow() ***só do C/C++ 
sqrt() ***só do C/C++

Trigonométrica

sin() ***só do C/C++ 
cos() ***só do C/C++ 
tan() ***só do C/C++

Números aleatórios

randomSeed() 
random()

bits e Bytes

lowByte() 
highByte() 
bitRead() 
bitWrite() 
bitSet() 
bitClear() 
bit()

http://www.bosontreinamentos.com.br/eletronica/arduino/funcoes-de-manipulacao-de-bits-com-o-arduino/

Interrupções externas

attachInterrupt() 
detachInterrupt()

Interrupções

interrupts() 
noInterrupts()

Comunicação Serial

begin()  
read()  
write()  
print()  
println() 
available()

Exercícios

  1. Altere o código para que o led da placa fique 2 segundos apagado e 3 segundos aceso.
  2. Altere o código para que o led da placa fique 1 segundo aceso, 2 segundos apagado, mais meio segundo aceso e 300 ms apagado.
  3. Porque a função delay() é necessária?
  4. Porque foi necessário utilizar-se o pino digital 13?


Referências

[1] Site oficial Projeto Arduino

[2] Baixar apostila de Álvaro Justen

[3] Curso de programação básica para Arduíno

[4] https://www.robocore.net/tutoriais/comparativo-arduino.html

[5] https://www.embarcados.com.br/arduino-due/



Icone voltar.png Icone menu.png Icone prox.png