








































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
A programação do microcontrolador arduino utilizando a linguagem c++ e sua comunicação com outros dispositivos. Além disso, apresenta exemplos de projetos, como leitura de sensores, controle de atuadores e interface com outros dispositivos. Também é abordado o uso de bibliotecas e técnicas de resolução de problemas.
Tipologia: Resumos
1 / 80
Esta página não é visível na pré-visualização
Não perca as partes importantes!









































































O Arduino faz parte do conceito de hardware e software livre e est´a aberto para uso e contribui¸c˜ao de toda sociedade. O conceito Arduino surgiu na It´alia, em 2005, com o objetivo de criar um dispositivo que fosse utilizado em projetos/prot´otipos constru´ıdos de uma forma menos dispendiosa do que outros sistemas dispon´ıveis no mercado. Ele pode ser usado para desenvolver artefatos interativos stand-alone ou conectados ao computador, utilizando diversos aplicativos, tais como: Adobe Flash, Processing, Max/MSP, Pure Data ou SuperCollider. O Arduino foi projetado com a finalidade de ser de f´acil entendimento, de f´acil programa¸c˜ao e de f´acil aplica¸c˜ao, al´em de ser multiplataforma, podendo ser configurado em ambientes Linux, Mac OS e Windows. Al´em disso, um grande diferencial deste dispositivo ´e ser mantido por uma comunidade que trabalha na filosofia open-source, desenvolvendo e divulgando gratuitamente seus projetos. O equipamento ´e uma plataforma de computa¸c˜ao f´ısica: s˜ao sistemas digitais ligados a sen- sores e atuadores, que permitem construir sistemas que percebam a realidade e respondem com a¸c˜oes f´ısicas. Ele ´e baseado em uma placa microcontrolada, com acessos de Entrada/Sa´ıda (I/O), sobre a qual foram desenvolvidas bibliotecas com fun¸c˜oes que simplificam a sua progra- ma¸c˜ao, por meio de uma sintaxe similar `a das linguagens C e C++. O Arduino utiliza o microcontrolador Atmega. Um microcontrolador (tamb´em denominado MCU) ´e um computador em um chip, que cont´em um microprocessador, mem´oria e perif´ericos de entrada/sa´ıda. Ele pode ser embarcado no interior de algum outro dispositivo, que, neste caso, ´e o Arduino, para que possa controlar suas fun¸c˜oes ou a¸c˜oes. Em resumo, o Arduino ´e um kit de desenvolvimento, que pode ser visto como uma unidade de processamento capaz de mensurar vari´aveis do ambiente externo, transformadas em um sinal el´etrico correspondente, atrav´es de sensores ligados aos seus terminais de entrada. De posse da informa¸c˜ao, ele pode process´a-la computacionalmente. Por fim, ele pode ainda atuar no controle ou no acionamento de algum outro elemento eletro-eletrˆonico conectado ao terminal de sa´ıda. A Figura 1.1 apresenta um diagrama de blocos de uma cadeia de processamento utilizando o Arduino.
Figura 1.1: Diagrama de blocos de uma cadeia de processamento utilizando o Arduino.
Uma vez que o Arduino ´e baseado em um microcontrolador e, portanto, ´e program´avel, torna-se poss´ıvel criar diversas aplica¸c˜oes diferentes com uma certa facilidade. Al´em disso, o pr´oprio equipamento pode ser reutilizado, atrav´es de uma nova programa¸c˜ao. Por sua vez, a sua programa¸c˜ao ´e simplificada pela existˆencia de diversas fun¸c˜oes que controlam o dispositivo, com uma sintaxe similar `a de linguagens de programa¸c˜ao comumente utilizadas (C e C++). Assim sendo, em um ambiente profissional, as caracter´ısticas do Arduino fazem dele uma boa ferramenta de prototipa¸c˜ao r´apida e de projeto simplificado. Por outro lado, em um ambiente acadˆemico, ele pode ser perfeitamente utilizado como ferramenta educacional, uma vez que n˜ao requer do usu´ario conhecimentos profundos de eletrˆonica digital nem da programa¸c˜ao de dispositivos digitais espec´ıficos.
Cabos vindos de uma bateria podem ser inseridos nos pinos GN D (terra) e Vin (entrada de tens˜ao) do conector de alimenta¸c˜ao. A placa pode operar com uma alimenta¸c˜ao externa de 6 a 20 V. Entretanto, se a alimenta¸c˜ao for inferior a 7 V o pino 5 V pode fornecer menos de 5 V e a placa pode ficar inst´avel. Se a alimenta¸c˜ao for superior a 12 V o regulador de tens˜ao pode superaquecer e avariar a placa. A alimenta¸c˜ao recomendada ´e de 7 a 12 V. Os pinos de alimenta¸c˜ao s˜ao:
2.3 Mem´oria
O ATmega328 tem 32 KB de mem´oria flash (onde s˜ao armazenados os programas), al´em de 2 KB de SRAM (onde ficam as vari´aveis) e 1 KB of EEPROM (esta ´ultima pode ser lida e escrita atrav´es da biblioteca EEPROM e guarda os dados permanentemente, mesmo que desliguemos a placa). A mem´oria SRAM ´e apagada toda vez que desligamos o circuito.
2.4 Entrada e Sa´ıda
Cada um dos 14 pinos digitais do Duemilanove pode ser usado como entrada ou sa´ıda, usando as fun¸c˜oes de pinMode(), digitalWrite(), e digitalRead(). Eles operam com 5 V. Cada pino pode fornecer ou receber um m´aximo de 40 mA e tem um resistor pull-up interno (desconectado por padr˜ao) de 20-50 kΩ. Al´em disso, alguns pinos tˆem fun¸c˜oes especializadas:
O Duemilanove tem 6 entradas anal´ogicas, cada uma delas est´a ligada a um conversor anal´ogico-digital de 10 bits, ou seja, transformam a leitura anal´ogica em um valor dentre 1024 possibilidades (exemplo: de 0 a 1023). Por padr˜ao, elas medem de 0 a 5 V, embora seja poss´ıvel mudar o limite superior usando o pino AREF e um pouco de c´odigo de baixo n´ıvel. Adicionalmente alguns pinos tˆem funcionalidades especializadas:
2.5 Comunica¸c˜ao serial
A comunica¸c˜ao entre o Arduino Duemilanove com computador ou com outro Arduino ou com outros microcontroladores ´e muito simplificada. O ATmega328 permite comunica¸c˜ao serial no padr˜ao UART TTL (5 V), que est´a dispon´ıvel nos pinos digitais 0 (RX) e 1 (TX). Um chip FTDI FT232RL na placa encaminha esta comunica¸c˜ao serial atrav´es da USB e os drivers FTDI (inclu´ıdo no software do Arduino) fornecem uma porta virtual para o software no computador. O software Arduino inclui um monitor serial(Serial Monitor ) que permite que dados simples de texto sejam enviados e recebidos `a placa Arduino. Os LEDs RX e TX da placa piscam quando os dados est˜ao sendo transferidos ao computador pelo chip FTDI e h´a conex˜ao USB (mas n˜ao quando h´a comunica¸c˜ao serial pelos pinos 0 e 1). A biblioteca SoftwareSerial permite comunica¸c˜ao serial por quaisquer dos pinos digitais do Duemilanove. O ATmega328 tamb´em oferece suporte aos padr˜oes de comunica¸c˜ao I2C (TWI) e SPI. O software do Arduino inclui uma biblioteca Wire para simplificar o uso do barramento I2C. Para usar a comunica¸c˜ao SPI, veja o manual do ATmega328.
2.6 Programa¸c˜ao
O ambiente de programa¸c˜ao mais indicado ´e o do software Arduino, que pode ser baixado no seguinte site: http://www.arduino.cc/en/Main/Software. Mais detalhes sobre a programa¸c˜ao do Ardu´ıno ser˜ao apresentados no Cap´ıtulo 3.
2.7 Reset Autom´atico
Algumas vers˜oes anteriores do Arduino requerem um reset f´ısico (pressionando o bot˜ao de reset na placa) antes de carregar o programa a ser compilado, denominado de sketch. O Arduino Duemilanove ´e projetado de modo a permitir que isto seja feito atrav´es do software que esteja rodando no computador conectado. Uma das linhas de controle de hardware (DTR) do FT232RL est´a conectada ao reset do ATmega328 via um capacitor de 100 μF. Quando esta linha ´e colocada em n´ıvel l´ogico baixo, o sinal cai por tempo suficiente para reiniciar o chip. O software Arduino usa esta caracter´ıstica para permitir carregar o programa simplesmente pressionando o bot˜ao “upload ” no ambiente Arduino. Isto significa que o bootloader pode ter um timeout mais curto, j´a que a ativa¸c˜ao do DTR (sinal baixo) pode ser bem coordenada com o in´ıcio do upload. Estas configura¸c˜oes tˆem outras implica¸c˜oes. Quando o Duemilanove est´a conectado a um computador rodando Mac OS X ou GNU/Linux, ele reinicia toda vez que a conex˜ao ´e feita por software (via USB). No pr´oximo meio segundo aproximadamente, o bootloader estar´a rodando no Duemilanove. Considerando que ´e programado para ignorar qualquer coisa a n˜ao ser um upload de um novo c´odigo, ele interceptar´a os primeiros bytes de dados sendo enviados para a placa depois que a conex˜ao ´e aberta. Se um sketch rodando na placa recebe configura¸c˜oes de
Nesse cap´ıtulo iremos fazer uma pequena introdu¸c˜ao sobre como s˜ao estruturados os progra- mas para o Arduino, conhecendo a linguagem usada como referˆencia e suas principais fun¸c˜oes. E por fim veremos as funcionalidades extras que o uso de bibliotecas nos proporciona.
Os programas para o Arduino s˜ao implementados tendo como referˆencia a linguagem C++. Preservando sua sintaxe cl´assica na declara¸c˜ao de vari´aveis, nos operadores, nos ponteiros, nos vetores, nas estruturas e em muitas outras caracter´ısticas da linguagem. Com isso, temos as referˆencias da linguagem. Elas podem ser divididas em trˆes partes principais: As estruturas, os valores (vari´aveis e constantes) e as fun¸c˜oes. As estruturas de referˆencias s˜ao:
Os valores de referˆencias s˜ao:
E bom citar que o´ software que vem no Arduino j´a provˆe v´arias fun¸c˜oes e constantes para facilitar a programa¸c˜ao, tais como:
3.2 Fun¸c˜oes
As fun¸c˜oes s˜ao referˆencias essenciais para o desenvolvimento de um projeto usando o Ar- duino, principalmente para os iniciantes no assunto. Essas fun¸c˜oes j´a implementadas e dispon´ı- veis em bibliotecas direcionam e exemplificam as funcionalidades b´asicas do microcontrolador. Temos como fun¸c˜oes b´asicas e de referˆencias as seguintes fun¸c˜oes:
pinMode() digitalWrite() digitalRead()
analogReference() analogRead() analogWrite() - PWM
tone() noTone() shiftOut() pulseIn()
millis() micros() delay() delayMicroseconds()
min() max() abs() constrain() map() pow() sqrt()
Temos como referˆencia tamb´em, o uso de bibliotecas mais espec´ıficas. O que ´e de extrema importˆancia quando se faz o uso do arduino com um enfoque em uma determinada ´area. Como por exemplo:
Comunica¸c˜ao (redes e protocolos)
Sensoriamento
Gera¸c˜ao de Freq¨uˆencia e de ´Audio
Temporiza¸c˜ao
Utilidades
4.2 Arduino para GNU/Linux
Para a instala¸c˜ao da IDE e suas bibliotecas no sistema operacional Linux, assim como feito para o Windows, podemos baixar o arquivo compactado atrav´es do seguinte site: http://www.arduino.cc/en/Main/Software. Apenas vale resaltar que neste sistema operacional temos um tratamento diferente com rela¸c˜ao a manipula¸c˜ao de pastas e diret´orios, agora o arquivo baixado ´e “tar.gz”. Al´em desta forma de instala¸c˜ao, temos uma outra mais objetiva para executar o mesmo procedimento, esta ´ultima usando apenas o terminal. Veremos um passo a passo deste proce- dimento usando o Linux Ubuntu. Links usados:
Passo a Passo da instala¸c˜ao no Ubuntu
Para obter informa¸c˜oes para outras distribui¸c˜oes de Linux, pesquisar no seguinte website: http://www.arduino.cc/en/Main/Software. Para Mac OS, pesquisar em http://www.arduino.cc/en/Guide/MacOSX.
Neste cap´ıtulo iremos ver alguns exemplos de aplica¸c˜oes simples com o Arduino. Com uma pequena base sobre a linguagem de programa¸c˜ao C para Arduino, podemos come¸car a fazer e explicar exemplos, mesmo para quem n˜ao possua uma grande infraestrutura possa realiz´a-lo.
Come¸caremos com o exemplo Blink, que j´a vem 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˜ao ´e necess´ario de nenhuma outra infraestrutura que n˜ao o pr´oprio Arduino. Primeiramente, vamos criar uma vari´avel chamada ledPin que armazenar´a o n´umero da porta onde o LED est´a conectado (vari´avel do tipo inteiro):
int ledPin = 13;
Assim quando nos referirmos a vari´avel ledPin estaremos nos referindoa sa´ıda 13. O seguinte passo ´e classificar o ledPin como pino de Sa´ıda, isto ´e feito da seguinte maneira:
void setup() { pinMode(ledPin, OUTPUT); }
A fun¸c˜ao pinMode() tem como primeiro parˆametro o pino e como segundo parˆametro se ele ´e pino de entrada ou sa´ıda. Agora come¸caremos a escrever o processamento. O programa rodar´a em um loop, pois n˜ao h´a ocorrˆencias ou interferˆencias que mudem o estado. Dentro do loop ter´a uma fun¸c˜ao que far´a o LED ficar aceso por 1 segundo e depois ficar apagado por mais um segundo, ap´os isso volta ao loop. Escreva da seguinte maneira:
void loop() { digitalWrite(ledPin, HIGH); delay(1000); digitalWrite(ledPin, LOW); delay(1000); }
5.2 Exemplo 2 - Acionamento de LEDs externos
Neste exemplo, exploraremos melhor as sa´ıdas digitais. Neste exemplo ser˜ao necess´arios 10 LEDs para sua execu¸c˜ao. Os LEDs ascender˜ao em sequˆencia e ficar˜ao acesos por 1 segundo, at´e que o ´ultimo apagar´a e todos os outros em sequˆencia apagar˜ao. Para a confec¸c˜ao do projeto ligue o positivo dos LEDs nos pinos digitais de 2 ´e 11 e a outra ponta em um protoboard, no lado negativo dos LEDs ligue resistores de 150 Ω, em s´erie, e a outra ponta de todos os resistores no terra do Arduino, GND na placa. Assim como na Figura 5.2.
Figura 5.2: Circuito Exemplo 2.
As primeiras linhas de comando s˜ao para declara¸c˜ao de vari´aveis, iremos precisar de uma vari´avel constante e inteira de valor 10, em nosso caso chamamos de LEDCount. Outra vari´avel necess´aria ´e um vetor com 10 posi¸c˜oes, enumerados de 2 ´e 11, que s˜ao os n´umeros dos pinos de sa´ıda digital que ser˜ao utilizados que tamb´em possuem valores inteiros, chamamos o vetor de LEDPin. A seguir vem a declara¸c˜ao a ser feita:
const int LEDCount = 10;
int LEDPins[] = { 2, 3, 4, 5, 6, 7,8,9,10,11 };
Agora com as vari´aveis declaradas vamos definir o vetor LEDPins como pinos de sa´ıda , para isso utilizaremos um loop, da seguinte maneira:
void setup() { for (int thisLED = 0; thisLED < LEDCount; thisLED++) { pinMode(LEDPins[thisLED], OUTPUT); } }
Na primeira posi¸c˜ao do for declaramos uma vari´avel que inicia em 0. Na segunda posi¸c˜ao damos a condi¸c˜ao para o for, e na terceira a cada vez que ´e verificada a condi¸c˜ao do for, com execu¸c˜ao da primeira, ´e acrescido 1 ao valor de thisLED, que ´e a vari´avel que utilizaremos
para chamar as determinadas posi¸c˜oes do vetor LEDPins. A fun¸c˜ao pinMode(), como vista no exemplo anterior, est´a declarando que o vetor LEDPins ´e um vetor de sa´ıda de dados. Agora ser´a iniciado um loop, que far´a com que o programa sempre rode, dentro dele ter´a um for que acender´a todos os LEDs sequencialmente, com um intervalo de 1 segundo (1000 ms) entre cada LED. O corpo do programa fica da seguinte maneira:
void loop() { for (int thisLED = 0; thisLED < LEDCount; thisLED++) { digitalWrite(LEDPins[thisLED], HIGH); delay(1000); }
delay(1000);
Perceba que o for ´e da mesma maneira que o ´ultimo, pois a id´eia ´e sempre se referir `as posi¸c˜oes do vetor, a diferen¸ca aqui ´e que para cada posi¸c˜ao estamos acendendo um LED, usando a fun¸c˜ao digitalWrite(). A fun¸c˜ao delay() foi utilizada para que seja mais f´acil de visualizar que cada LED acende de cada vez, e que ap´os todos os LEDs acenderem, todos ficam acesos por mais um segundo. Agora ser´a feito o mesmo, mas para apagar os LEDs, como mostra a seguir:
for (int thisLED = 9; thisLED >= 0; thisLED--) { digitalWrite(LEDPins[thisLED], LOW); delay(1000); } delay(1000); }
A vari´avel thisLED, utilizada apenas no for, come¸ca com valor 9 e ´e decrescida de 1 at´e que chegue em 0, logo os LEDs apagar´a o do ´ultimo a acender para o primeiro, e permanecer´a apagado por 1 segundo. Este foi o segundo exemplo, perceba que ´e poss´ıvel modific´a-lo com o que j´a foi aprendido, fazendo com que ele apague na mesma ordem que acende, ou fazendo qualquer outra mudan¸ca desejada.