Você está na página 1de 26

10 PROJETOS

O que o Arduino?
O Arduino um projeto totalmente aberto suas placas no mercado, como o Freeduino,
de prottipos de eletrnica baseados numa Seeduino, Roboduino, Pinguino e os brasileiros
plataforma de hardware e software flexvel e de Severino e Brasuino.
fcil utilizao. destinado a artistas, designers,
hobbyistas e qualquer tipo de pessoa
interessada em criar objetos ou ambientes
interativos. um projeto que engloba software e Esta apostila foi baseada em diversos
hardware e tem como objetivo fornecer uma projetos disponveis na internet.
plataforma fcil para prototipao de projetos
interativos, utilizando um microcontrolador. Ele
faz parte do que chamamos de computao
fsica: rea da computao em que o software So referncias importantes:
interage diretamente com o hardware, tornando
possvel integrao com sensores, motores e
outros dispositivos eletrnicos. www.arduino.cc
O Arduino pode perceber o ambiente por
receber informao de uma grande variedade de Site do projeto Arduino. Permite o
sensores, e pode estimular o ambiente download do ambiente de programao e
controlando luzes, motores, e outros atuadores. contm referncias e tutoriais para iniciantes,
A parte de hardware do projeto, uma alm de manter um frum e um blog
placa que cabe na palma da mo, um
computador como qualquer outro: possui
microprocessador, memria RAM, memria flash www.viaspositronicas.blogspot.com
(para guardar o software), temporizadores,
contadores, dentre outras funcionalidades. Blog mantido por diversas pessoas
Atualmente, o projeto est na verso Uno, porm ligadas robtica educacional, de vrias
muitos Arduinos encontrados hoje so da verso localidades do pas. Contm informaes
Duemilanove (2009, em italiano), que possui um sobre diversas plataformas e campeonatos.
clock de 16 MHz, 2 Kb de memria RAM, 32 Kb
de memria flash, 14 portas digitais e 6 entradas
analgicas. www.earthshineEelectronics.com
O microcontrolador em que se baseia
(ATMEL) programvel usando a linguagem Disponibiliza para download o The
Arduino (baseada em C/C++), e tambm aceita complete beginners guide to the Arduino,
cdigo diretamente em C/C++, bem como o uma das principais referncias para iniciantes
ambiente do Arduino que baseado em (em ingls).
Processing.
Normalmente, necessrio construir os
circuitos para as entradas e sadas do Arduino, o
que permite flexibilidade e uma grande variedade
de solues para um mesmo problema. Muitos
projetos para Arduino esto disponveis na
internet (o prprio site do Arduino mantm um
frum e um blog para os usurios do sistema),
facilitando o aprendizado e a troca de
informaes entre os construtores.
Os projetos em Arduino podem ser nicos
ou podem comunicar com outros circuitos, ou at
mesmo com outros softwares em um
computador (por exemplo, Java,
Flash,Processing, MaxMSP).
As placas podem ser montadas mo ou
serem compradas montadas, e o software pode
ser obtido gratuitamente.
Como o Arduino um projeto aberto,
diversas empresas fabricam e disponibilizam

1
Arduino Mega

Viso geral Corrente DC para


40 mA
pinos E/S
O Arduino Mega uma placa Corrente DC para
microcontroladora baseada em ATmega1280 50 mA
pino 3.3V
(http://www.atmel.com/dyn/resources/prod_docu
ments/doc2549.pdf). Possui 54 pinos digitais de 128 KB dos quais 4 KB
entrada/sada (dos quais 14 podem ser Memria Flash so usados para
utilizados como sadas PWM), 16 entradas bootloader
analgicas, 4 UARTs (portas seriais de SRAM 8 KB
hardware), um cristal com oscilao de 16 MHz, EEPROM 4 KB
uma conexo USB, uma entrada para fonte
externa, um ICSP header, e um boto de Frequncia do relgio 16 MHz
reincio. Contm todos os elementos
necessrios para suportar o microcontrolador; Energia
bastando conectar a placa a um computador
atravs de um cabo USB ou a uma fonte O Arduino Mega pode receber energia via
externa com um adaptador AC/DC ou bateria conexo USB ou de uma fonte externa. A fonte
para iniciar. O Mega compatvel com muitos selecionada automaticamente.
shields desenvolvidos para Arduino
Duemilanove ou Diecimila. Energia de uma fonte externa (no-USB) pode
ser proveniente de um adaptador AC/DC ou
bateria. O adaptador deve ser conectado a um
plug de 2.1 mm, sendo carregado positivamente
Sumrio no centro. Cabos de uma bateria devem ser
inseridos nos pinos Gnd e Vin do conector de
Microcontrolador ATmega1280 energia.
Tenso de operao 5V
A placa pode operar com uma tenso de 6 a 20
Tenso de entrada Volts. Se receber menos que 7 V, entretanto, o
7-12V
(recomendada) pino de 5 V poder fornecer menos que cinco
Tenso de entrada Volts e a placa pode ficar instvel. Se utilizar
6-20V mais que 12 V, o regulador de tenso pode
(limites)
superaquecer e danificar a placa. A faixa
54 (dos quais 14
Pinos digitais (E/S) recomendada entre 7 e 12 volts.
suportam sada PWM)
Pinos de entradas
16
analgicas

2
Os pinos de energia so os seguintes: est includa na linguagem Arduino. Os
pinos SPI tambm so divididas sobre o
VIN. Equivale tenso de entrada da cabealho ICSP, que fisicamente
placa Arduino quando utiliza uma fonte compatvel com a Duemilanove e
externa (diferentemente dos 5 volts da Diecimila.
conexo USB ou outras fontes LED: 13. H um built-in LED conectado
reguladas). Voc pode fornecer energia ao pino digital 13. Quando o pino est
atravs deste pino, ou, se fornecer uma em HIGH o LED est ligado, quando o
tenso atravs do plug, obter a mesma pino LOW, ele est desligado.
tenso atravs deste pino. I2C: 20 (SDA) e 21 (SCL). Suporte de
5V. Fornece a tenso regulada para o comunicao (TWI) I2C usando a
microcontrolador e outros componentes biblioteca Wire (documentao no site
da placa. Fiao). Note que estes pinos no esto
3V3. Fornece uma tenso de 3.3 Volts no mesmo local que os pinos I2C no
gerada pelo chip FTDI (on-board). A Duemilanove ou Diecimila.
corrente mxima de 50 mA.
GND. Pinos-terra. A Mega tem 16 entradas analgicas, cada uma
das quais com 10 bits de resoluo (isto , 1024
Memria valores diferentes). Por padro, eles medem at
5 volts, embora seja possvel mudar o limite
O ATmega1280 possui 128 KB de superior de sua faixa usando o pino AREF e
memria flash para armazenar cdigos (dos funo analogReference ().
quais 4 KB so utilizados para bootloader), 8 KB
de SRAM e 4 KB of EEPROM (os quais podem H um par de pinos diferentes na placa:
ser acessados utilizando a EEPROM library).
AREF. Tenso de referncia para as
Entradas e Sadas entradas analgicas. Usado com
analogReference ().
Cada um dos 54 pinos digitais do Mega pode Reset. Trazer esta linha LOW para
ser usado como uma entrada ou sada, usando resetar o microcontrolador. Tipicamente
as funes pinMode (), digitalWrite (), e usado para adicionar um boto de reset
digitalRead (). Eles operam com 5 volts. Cada para escudos que bloqueiam a uma no
pino pode fornecer ou receber um mximo de tabuleiro.
40 mA e tem um resistor pull-up interno
(desconectado por padro) de 20-50 kOhms. Comunicao
Alm disso, alguns pinos tm funes
especializadas: O Arduino Mega tem uma srie de facilidades
para se comunicar com um computador, outro
Serial: 0 (RX) e 1 (TX); Serial 1: 19 Arduino ou outros microcontroladores. O
(RX) e 18 (TX); Serial 2: 17 (RX) e 16 ATmega1280 fornece quatro UARTs hardware
(TX); Serial 3: 15 (RX) e 14 (TX). Usado para comunicao serial TTL (5V). Um
para receber (RX) e transmitir dados FT232RL FTDI nos canais de bordo de uma
(TX) TTL serial. Pinos 0 e 1 so tambm dessas atravs de USB e os drivers FTDI
conectados aos pinos correspondentes (includo com o software Arduino) fornece uma
do chip FTDI USB-to-TTL Serial. porta COM virtual para software no computador.
Interrupes externas: 2 (interrupo O software Arduino inclui um monitor serial que
0), 3 (interrupo 1), 18 (interrupo permite que dados simples de texto a ser
5), 19 (interrupo 4), 20 (interromper enviados de e para a placa Arduino. O RX e TX
3), e 21 (interrupo 2). Estes pinos LEDs na placa pisca quando os dados esto
podem ser configurados para disparar sendo transmitidos pelo chip FTDI e conexo
uma interrupo por um valor baixo, uma USB para o computador (mas no para a
borda de subida ou queda, ou uma comunicao serial nos pinos 0 e 1).
alterao no valor.
PWM: 0 at 13.Fornecer de 8 bits de Uma biblioteca Software Serial permite
sada PWM com a funo analogWrite (). comunicao serial em qualquer um dos pinos
SPI: 50 (MISO), 51 (MOSI), 52 (SCK), digitais do Mega.
53 (SS). Estes pinos suportam
comunicao SPI, que, embora O ATmega1280 tambm suporta comunicao
fornecida pelo hardware subjacente, no I2C (TWI) e SPI. O software Arduino inclui uma

3
biblioteca Wire para simplificar o uso do um segundo depois de abrir a conexo e antes
barramento I2C. de enviar esses dados.

Programao A Mega tem uma trilha que pode ser cortada


para desabilitar o auto-reset. As almofadas de
O Arduino Mega pode ser programado com o cada lado do trao pode ser soldada em
software Arduino (download). conjunto para reativ-lo. Est identificada como
"RESET-PT". Voc tambm pode ser capaz de
O ATmega1280 sobre o Arduino Mega vem com desativar o auto-reset conectando um resistor
um bootloader que permite envio de novos 110 ohm de 5 V para a linha de reset, veja este
cdigos sem o uso de um programador de tpico do frum para mais detalhes.
hardware externo. Ele se comunica atravs do
protocolo STK500 original (de referncia, Proteo de sobrecorrente USB
arquivos de cabealho C).
O Arduino Mega tem um polifusvel reajustvel
Voc tambm pode ignorar o bootloader e que protege as portas USB do seu computador
programar o microcontrolador atravs do ICSP a partir de shorts e sobrecorrente. Embora a
(In-Circuit Serial Programming) cabealho. maioria dos computadores fornea sua prpria
proteo interna, o fusvel fornece uma camada
Reincio automtico (software) extra de proteo. Se mais de 500 mA
aplicada porta USB, o fusvel ir
O Arduino Mega projetado de uma maneira automaticamente quebrar a ligao at a curto
que permite que ele seja reiniciado pelo ou sobrecarga seja removida.
software rodando em um computador
conectado. Uma das linhas de hardware de Caractersticas Fsicas e de Compatibilidade
controle de fluxo (DTR) do FT232RL
conectado linha de reset do ATmega1280 O comprimento mximo e a largura do PCB
atravs de um capacitor de 100 nanofarad. Mega so 4 e 2.1 polegadas respectivamente,
Quando esta linha afirmada (rebaixada), a com o conector USB e conector de energia,
linha de reset cai o tempo suficiente para repor ultrapassam a dimenso anterior. Trs furos
o chip. O software Arduino usa esse recurso permitem que a placa seja ligada a uma
para permitir que voc envie o cdigo, superfcie ou case. Note que a distncia entre
simplesmente pressionando o boto de upload os pinos digitais 7 e 8 de 3 mm, e no um
no ambiente Arduino. Isto significa que o mltiplo do espaamento de 2 mm dos outros
bootloader pode ter um tempo mais curto, como pinos.
o rebaixamento do DTR pode ser bem
coordenado com o incio do upload. A Mega projetado para ser compatvel com a
maioria dos escudos projetado para o Diecimila
Essa configurao tem outras implicaes. ou Duemilanove. Pinos digitais 0-13 (e as
Quando a Mega conectado a um computador adjacentes AREF e pinos GND), entradas
rodando Mac OS X ou Linux, ele redefine a analgicas 0-5, o cabealho do poder, e
cada vez que uma conexo feita com o cabealho ICSP esto todos em locais
software (via USB). Para o seguinte meio equivalentes. Alm disso, o UART principal
segundo ou menos, o bootloader est sendo (porta serial) est localizado nos mesmos pinos
executado no Mega. Embora seja programado (0 e 1), assim como as interrupes externas 0
para ignorar dados mal formados (ou seja, nada e 1 (pinos 2 e 3, respectivamente). SPI est
alm de um upload de um novo cdigo), que ir disponvel atravs do cabealho ICSP em
interceptar os primeiros bytes de dados ambos os Mega e Duemilanove / Diecimila.
enviados para o conselho depois que uma Note-se que I2C no est localizado nos
conexo aberta. Se um programa rodando na mesmos pinos no Mega (20 e 21) como o
placa recebe um tempo de configurao ou Duemilanove / Diecimila (entradas analgicas 4
outros dados quando ele comea a, certifique- e 5)
se que o software com o qual comunica espera

4
Outros tipos de Arduino

Arduino UNO Arduino ADK

Arduino Mega 2560 Arduino BT400

Arduino Nano Arduino Pro Arduino Mini

Arduino Fio ArduinoLilyPad

5
01. LED Piscante
Neste projeto, voc aprender a criar um circuito simples usando um LED e um resistor e o far piscar.

O que voc vai precisar:


01 placa Arduino Mega
02 cabos jumpers
01 resistor 220
01 LED

Montagem sugerida

Programao sugerida

int ledPin = 10; // define a porta em que o LED est conectado

void setup()
{
pinMode (ledPin, OUTPUT); // define o LED como atuador
}

//essa parte da programao faz com que ela se repita


void loop()
{
digitalWrite (ledPin, HIGH); // liga o LED
delay (1000); // espera por 1000 milisegundos
digitalWrite (ledPin, LOW); // desliga o LED
delay (1000); // espera por 1000 milisegundos
}

6
Detalhando um pouco mais

Resistor
Um resistor um dispositivo eletrnico capaz de limitar a passagem de uma corrente eltrica por
um circuito eltrico. Os resistores so identificados atravs de um cdigo de linhas coloridas.

LED (Light Emitting Diode)


LEDs so dispositivos eletrnicos que emitem luz pela passagem
de uma pequena corrente eltrica. Por isso, necessrio conectar um
resistor ao LED para evitar sobrecorrente. Um LED s permite passagem
de luz em um sentido. Portanto, necessrio identificar os plos para
conectar o LED corretamente dentro do circuito eletrnico.

Alterando o cdigo
1 Altere o intervalo de ligar e desligar o LED para um valor definido por voc.
2 Altere o valor do delay para 50 milisegundos. O LED estar desligando e acendendo?

7
02. Sinalizador de Cdigo Morse
Neste projeto ns vamos fazer o mesmo circuito do projeto anterior, mas usaremos alguns
cdigos diferentes para fazer o LED transmitir uma mensagem em Cdigo Morse. Nesse caso, vamos
fazer o LED sinalizar as letras S.O.S., que o sinal mais conhecido deste cdigo (foi utilizado pelos
tripulantes do Titanic para transmitir seu pedido de socorro).

(SOS: A letra S consiste de trs sinais breves e letra O, de trs sinais longos)

O que voc vai precisar saber:


Sinais de comparao
== (semelhante a)
!= (diferente de)
< (menor que)
> (maior que)
<= (menor ou igual a)
>= (maior ou igual a)

Programao Sugerida

int ledPin = 10; // LED conectado ao pino 10

void setup()
{
pinMode (ledPin, OUTPUT); // define a porta digital como output
}

void loop()
{
for (int x=0; x<3; x++)
{
digitalWrite (ledPin, HIGH); // liga o LED
delay (150); // espera por 150 milisegundos
digitalWrite (ledPin, LOW); // desliga o LED
delay (100); // espera por 100 milisegundos
}

delay (200);// intervalo de 200 milisegundos para fazer a pausa entre as letras
for (int x=0; x<3; x++)
{
digitalWrite (ledPin, HIGH); // liga o LED
delay (400); // espera por 400 milisegundos
digitalWrite (ledPin, LOW); // desliga o LED
delay (100); // espera por 100 milisegundos
}
delay (200);// intervalo de 200 milisegundos para fazer a pausa entre as letras
for (int x=0; x<3; x++)
{
digitalWrite (ledPin, HIGH); // liga o LED
delay (150); // espera por 150 milisegundos
digitalWrite (ledPin, LOW); // desliga o LED
delay (100); // espera por 100 milisegundos
}
delay (5000); // espera por 5 segundos para repetir a programao
}

8
Detalhando um pouco mais

A funo for
A funo for estabelece um loop enquanto um teste de comparao for verdadeiro.
Observe a declarao da funo no programa trabalhado:

for (int x=0; x<3; x++)


{
comando 1;
comando 2;
}

A funo for segue o esquema geral:

for (declara varivel; condio de comparao; operao sobre a varivel)

No exemplo acima, uma varivel x declarada como um nmero inteiro e atribudo o valor 0,
inicialmente. Em seguida, testa-se se o valor de x menor que 3. Caso o teste resulte verdadeiro, so
executados os comandos 1 e 2 e, no final, acrescenta-se uma unidade varivel x (x++).

Alterando o cdigo

1 Escreva uma palavra em cdigo Morse, de acordo com os dados em tabela.

9
03. Leitura de um sinal digital no computador
Neste projeto, voc deve construir um circuito que possibilite a leitura do estado de um interruptor
(ligado ou desligado), enviando-o atravs de uma comunicao serial ao computador.
A comunicao serial no computador vista em uma tela parte, que pode ser acessada pelo
atalho Ctrl+Shift+M (Serial monitor).

O que voc vai precisar:


01 placa Arduino Mega
03 cabos jumpers
01 interruptor
01 resistor 220

Montagem sugerida

Programao sugerida

void setup()
{
Serial.begin (9600); // inicia a comunicao serial
pinMode (2, INPUT); // define o pino 2 como entrada de dados
}

void loop()
{
int sensorValue = digitalRead(2); // define varivel e armazena a leitura do sensor
Serial.println (sensorValue, DEC); // envia valor para o serial monitor
delay (1000);
}

10
Explorando a programao
A linha Serial.begin (9600); inicia a leitura serial, a 9600 bauds.
A linha Serial.println (sensorValue, DEC); envia o valor da leitura do sensor para o monitor serial e
salta linha ao final. Para que as entradas fossem publicadas em uma mesma linha, deve-se utilizar o
comando Serial.print em vez de Serial.println.

Neste projeto, o monitor serial dever exibir 0 quando o sensor estiver solto e 1, quando estiver
pressionado.

Baud deriva do sobrenome de J.M.E. Baudot, francs inventor do cdigo telegrfico Baudot. Um Baud
uma medida de velocidade de sinalizao e representa o nmero de mudanas na linha de transmisso
(seja em frequncia, amplitude, fase etc...) ou eventos por segundo. Para se determinar a taxa de
transmisso de um canal em bits por segundo - bps, deve ser levado em considerao o tipo de
codificao utilizada, alm da velocidade de sinalizao do canal de comunicao.
Fonte: http://pt.wikipedia.org/wiki/Baud

Alterando o cdigo

1 Adicione um LED porta 2 do Arduino Mega e altere o cdigo para que o LED acenda quando o
boto do interruptor for pressionado.

2 Observe o seguinte cdigo:

char nome[] = "ARDUINO";

void setup()
{
Serial.begin (9600);
}

void loop()
{
for (int x=0; x < 8; x++)
{
Serial.print (nome[x]);
delay (500);
}
}

observe a diferena entre os comandos Serial.print e Serial.println

11
04. Leitura de um sinal analgico no computador
Neste projeto, voc deve construir um circuito que possibilite a leitura de um valor analgico (0 a
1023) fornecido por um potencimetro, enviando-o atravs de uma comunicao serial ao computador.
A comunicao serial no computador vista em uma tela parte, que pode ser acessada pelo
atalho Ctrl+Shift+M (Serial monitor).

O que voc vai precisar:


01 placa Arduino Mega
03 cabos jumpers
01 potencimetro

Montagem sugerida

Programao sugerida

void setup()
{
Serial.begin (9600);
}
void loop()
{
int sensorValue = analogRead (A0);
Serial.println (sensorValue, DEC);
delay (1000);
}

12
Explorando a programao
A linha intsensorValue = analogRead(A0); define a varivel sensorValue e armazena o valor da
porta analgica 0 na varivel sensorValue
Ao girar o potencimetro, o novo valor do sinal analgico ser exibido em tela.

Alterando o cdigo
Altere o cdigo para que alm do valor analgico, seja exibido o valor da resistncia, em ohms. No
final, ajuste o potencimetro para que ele exera resistncia de 220 . (dica: determine a relao entre a
resistncia e uma unidade analgica lembre-se de que o Arduino utiliza 1024 unidades analgicas).

Alterando a montagem
Substitua o potencimetro por um LDR (Light Dependent Resistor) e efetue medidas da
luminosidade ambiente.

A montagem deve ficar com o seguinte aspecto:

Detalhando um pouco mais

LDR (Light Dependent Resistence)


Dispositivo eletrnico que apresenta como uma resistncia varivel, cujo valor depende da luz
incidente. necessrio conect-lo a um resistor para que possa atuar como sensor analgico.

13
05. Semforo
Agora ns iremos criar um circuito para simular um semforo de trnsito. O semforo ser
constitudo por trs LEDs: um vermelho, um amarelo e um verde.

O que voc vai precisar:


01 Placa Arduino Mega
01 Protoboard
01 LED Vermelho
01 LED Amarelo
01 LED Verde
03 Resistores 220

Montagem Sugerida

Programao Sugerida

int ledDelay = 10000; // espera entre as trocas de cores


int vermelho = 10;
int amarelo = 9;
int verde = 8;
void setup()
{
pinMode (vermelho, OUTPUT);
pinMode (amarelo, OUTPUT);
pinMode (verde, OUTPUT);
}

14
void loop()
{
digitalWrite (vermelho, HIGH); // liga o led vermelho
delay (ledDelay); // espera o tempo determinado na varivel ledDelay
digitalWrite (amarelo, HIGH); // liga o led amarelo
delay (2000); // espera 2 segundos
digitalWrite (verde, HIGH); // liga o led verde
digitalWrite (vermelho, LOW); // desliga o led vermelho
digitalWrite (amarelo, LOW); // desliga o led amarelo
delay (ledDelay); // espera o tempo determinado na varivel ledDelay
digitalWrite (amarelo, HIGH); // liga o led amarelo
digitalWrite (verde, LOW); // desliga o led verde
delay (2000); // espera 2 segundos
digitalWrite (amarelo, LOW); // desliga o led amarelo
}

Alterando o cdigo

1 Voc deve ter percebido que o cdigo do semforo ligeiramente diferente do cdigo utilizado nos
semforos brasileiros. Adapte o cdigo para torn-lo semelhante programao de nossos semforos.

15
06. Semforo Interativo
Este projeto uma extenso do projeto anterior, onde iremos incluir um semforo para pedestres
e um boto para solicitar a parada dos carros.

O que voc vai precisar:


02 LEDs vermelhos
01 LED amarelo
02 LEDs verdes
06 Resistores de 220
01 Interruptor

Montagem sugerida

Programao sugerida

int carroVermelho = 12;


int carroAmarelo = 11;
int carroVerde = 10;
int pedVermelho = 8;
int pedVerde = 9;
int botao = 2; // pino do interruptor
int tempoTravessia = 5000; // tempo para atravessar a rua

16
unsigned long changeTime;

void setup()
{
pinMode (carroVermelho, OUTPUT);
pinMode (carroAmarelo, OUTPUT);
pinMode (carroVerde, OUTPUT);
pinMode (pedVermelho, OUTPUT);
pinMode (pedVerde, OUTPUT);
pinMode (botao, INPUT);
// liga a luz verde dos carros e a vermelha para os pedestres
digitalWrite (carroVerde, HIGH);
digitalWrite (pedVermelho, HIGH);
}

void loop()
{
int state = digitalRead (botao);
if (state == HIGH && (millis() - changeTime) > 5000)
{
// Ativa a funo para mudar as luzes
changeLights(); // executa o bloco changeLights()
}
}

void changeLights()
{
digitalWrite (carroVerde, LOW); // desliga o verde
digitalWrite (carroAmarelo, HIGH); // liga o amarelo
delay (2000); // espera 2 segundos
digitalWrite (carroAmarelo, LOW); // desliga o amarelo
digitalWrite (carroVermelho, HIGH); // liga o vermelho
delay (1000); // espera 1 segundo
digitalWrite (pedVermelho, LOW); // desliga o vermelho do pedestre
digitalWrite (pedVerde, HIGH); // liga o verde do pedestre
delay (tempoTravessia);

for (int x=0; x<10; x++)


{
digitalWrite (pedVerde, HIGH); // liga o verde do pedestre
delay (250); // espera 250 milisegundos
digitalWrite (pedVerde, LOW); // desliga o verde do pedestre
delay (250); // espera 250 milisegundos
}
digitalWrite (pedVermelho, HIGH); // liga o sinal vermelho do pedestre
delay (500); // espera 500 milisegundos
digitalWrite (carroAmarelo, HIGH); // liga o vermelho
digitalWrite (carroVermelho, LOW); // desliga o vermelho
delay (1000); // espera 1 segundo
digitalWrite (carroVerde, HIGH); // liga o verde
digitalWrite (carroAmarelo, LOW); // desliga o amarelo
changeTime = millis(); // registra o tempo desde a ltima alterao de luzes
}

Detalhando um pouco mais

millis()
Funo que retorna o intervalo de tempo, em milisegundos, decorrido desde o incio do programa
em execuo.

17
07. Efeito Perseguio
Neste projeto, ns vamos usar uma srie de LEDs (10, no total) para criar um efeito de
perseguio introduzindo o conceito de matrizes.

O que voc vai precisar


01 Arduino Mega
01 placa protoboard
10 LEDs vermelhos
10 Resistores 220
21 cabos jumpers

Montagem Sugerida

Programao Sugerida

byte ledPin[] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; // define uma matriz
int ledDelay(65); // intervalo entre as trocas
int direction = 1;
int currentLED = 0;
unsigned long changeTime;

void setup()
{
// define todas as portas como sada
for (int x=0; x<10; x++)
{
pinMode (ledPin[x], OUTPUT);
}
changeTime = millis();
}

18
void loop()
{
if ((millis() - changeTime) > ledDelay)
{
changeLED();
changeTime = millis();
}
}

void changeLED()
{
// desliga todos os LEDs
for (int x=0; x<10; x++)
{
digitalWrite (ledPin[x], LOW);
}

digitalWrite (ledPin[currentLED], HIGH); // desliga o LED atual


currentLED += direction; // incremento pelo valor da durao
// muda a direo se chegar ao fim
if (currentLED == 9)
{
direction = -1;
}

if (currentLED == 0)
{
direction = 1;
}
}

Detalhando um pouco mais

O conceito de matriz

Uma matriz (array, em ingls) um conjunto de variveis que podem ser acessadas atravs de
um ndice. As matrizes podem ser declaradas de vrios modos:

int myInts[6];
int myPins[] = {2, 4, 8, 3, 6};
int mySensVals[6] = {2, 4, -8, 3, 2};
char message[6] = "hello";

O nmero entre colchetes indica o nmero de elementos da matriz. Lembre-se que o primeiro
elemento acessado pelo ndice 0.

Alterando o cdigo

1 Altere o cdigo para que os LEDs acendam alternadamente (nmeros pares e nmeros mpares).

19
08. Usando um termistor para calcular a temperatura
Algumas aplicaes industriais necessitam da leitura da temperatura para manterem seus
processos. O Arduino permite fazer a leitura da temperatura atravs de um termistor conectado a uma
porta analgica.

O que voc vai precisar

01 Arduino Mega
01 protoboard
01 termistor NTC 10 K
01 resistor 10 K
03 cabos jumpers

Montagem sugerida:

Programao sugerida

#include <math.h>

double Termistor (int RawADC)


{
double Temp;
Temp = log(((10240000/RawADC) - 10000)); // Considerando resistncia de 10K
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
// Equao de Steinhart-Hart para o termistor - temperatura em Kelvin

20
Temp = Temp - 273.15; // Converte Kelvin para Celsius
return Temp;
}

void setup()
{
Serial.begin (115200);
}

void loop ()
{
Serial.print(int (Termistor (analogRead (0)))); // Exibe temperatura em Celsius
Serial.println (" graus Celsius");
delay (1000);
}

Explorando o cdigo

Bibliotecas
Bibliotecas so conjuntos de dados pr-formatados que possibilitam funcionalidade extra a um
programa (por exemplo, funes matemticas mais complexas). Para incluir uma biblioteca, deve-se
utilizar a palavra-chave #include.
Exemplo:

#include <math.h>

As bibliotecas para o Arduino podem ser encontradas em http://arduino.cc/en/Reference/Libraries

Double
Funo que dobra a preciso do ponto decimal, quando se trabalha com outras plataformas. No
cdigo do Arduino, possui exatamente a mesma funo que float.

Return
Finaliza a funo, retornando o valor designado.

Detalhando um pouco mais

Termistor
Um termistor um controlador trmico, que consiste numa resistncia sensvel cuja funo
principal exibir uma mudana grande, previsvel e precisa em resistncia eltrica quando um
equipamento ou produto sofrer uma mudana na temperatura de corpo. Um termistor de Coeficiente de
Temperatura Negativo (NTC) (Negative Temperature Coefficient) exibe uma diminuio em resistncia
eltrica quando submetido a um aumento de temperatura do equipamento e um termistor de Coeficiente
de Temperatura Positivo (PTC) (Positive Temperature Coefficient) exibe um aumento em resistncia
eltrica existe um aumento da temperatura do equipamento.

Alterando o cdigo

1 Adicione um LED ao circuito e altere a programao para que o LED acenda quando a leitura da
temperatura indicar 30 C.

21
09. Um LED pulsante
Neste projeto, o brilho de um LED ir variar de acordo com uma onda senoidal, a partir do controle
de uma porta de sada de pulso modulado (PWM).

O que voc vai precisar


01 Arduino Mega
01 placa protoboard
01 LED
01 resistor de 220
02 cabos jumpers

Montagem sugerida

Programaosugerida
int ledPin = 11;
float sinVal;
int ledVal;

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

22
}

void loop()
{
for (int x=0; x<180; x++)
{
sinVal = (sin(x*(3.1415/180))); // convertegrausa radianos e obtm o valor do seno
ledVal = int(sinVal*255);
analogWrite (ledPin, ledVal); // define a sada PWM
delay(25);
}
}

Alterando o cdigo
1 Insira um potencimetro no circuito e o conecte a uma porta analgica. Em seguida, altere seu cdigo
para que, a partir da rotao do potencimetro, o brilho do LED seja alterado.

23
10. Tocando uma melodia
Brilha, brilha, estrelinha...

O que voc vai precisar


01 Arduino Mega
01 placa protoboard
01 piezo elemento

Montagem sugerida

Programao sugerida
int speakerPin = 9;
int length = 15; // define o nmero de notas
char notes[] = "ccggaagffeeddc "; // o espao representa uma pausa
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 }; // define o tempo das notas
int tempo = 300;

void playTone (int tone, int duration)


{
for (long i = 0; i < duration * 1000; i += tone * 2)
{
digitalWrite (speakerPin, HIGH);
delayMicroseconds (tone);
digitalWrite (speakerPin, LOW);
delayMicroseconds (tone);
}
}

void playNote (char note, int duration)


{

24
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };// toca o som correspondente nota
for (int i = 0; i < 8; i++)
{
if (names[i] == note)
{
playTone (tones[i], duration);
}
}
}

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

void loop()
{
for (int i = 0; i < length; i++)
{
if (notes[i] == ' ')
{
delay(beats[i] * tempo); // pausa
}
else
{
playNote (notes[i], beats[i] * tempo);
}
delay (tempo / 2); // pausa entre as notas

}
}

25

Você também pode gostar