Escolar Documentos
Profissional Documentos
Cultura Documentos
Aprendendo A Programar em Arduino - IFMT - Apostila PDF
Aprendendo A Programar em Arduino - IFMT - Apostila PDF
Aprendendo a
Programar em
Arduino
Realizao: PET Auto Net
Autor: Micael Bronzatti Gaier
2011
www.autonet.cba.ifmt.edu.br
Instituto Federal de Educao Cincia e Tecnologia de Mato Grosso - Campus Cuiab
Aprendendo a Programar em Arduino 1
IFMT
Campus Cuiab
A obra Aprendendo a Programar em Arduino de Micael Gaier - PET AutoNet IFMT foi
licenciada com uma Licena Creative Commons - Atribuio - Uso No Comercial - Partilha nos
Mesmos Termos 3.0 No Adaptada.
Sumrio
Introduo 4
Conhecendo A Plataforma Arduino 5
Base Da Programao Em Arduino 11
Comentrios 11
Funes - Base 12
Pinmode(Pino, Modo) 12
Entrada E Sada De Dados I 12
Portas Digitais 12
Portas Analgicas 12
Tempo 14
Bibliotecas 15
#INCLUDE e #DEFINE 15
Variveis E Modificadores 16
Variveis 16
Classe De Variveis 16
Tipos De Dados E Modificadores 17
Funes I 18
Como Programar Em Arduino 20
Operadores Booleanos, De Comparao E Incremento E Decremento 20
Operadores De Comparao 20
Operadores Booleanos 20
Operadores De Incremento E Decremento 21
Estruturas De Controle De Fluxo 21
If 21
If... Else 22
For 22
Switch Case 23
While 25
Do While 26
Comunicao Serial 26
Operadores Matemticos e Trigonometria 28
Operadores Matemticos 28
Trigonometria 30
Entrada E Saida De Dados II 30
Sinais PWM 30
pulseIn(Pino, Valor, Tempo De Resposta) 32
Usando O Arduino Com Dispositivos 33
O Uso De Arduino em Projetos 33
Shields Para Arduino 33
Fazendo Um Motor DC Funcionar 35
Programao Ponte H 40
Conectando Um Display De Cristal Liquido (LCD) 42
Programando Um LCD Em Arduino 43
Uso De Sensores 45
Anexos 47
Bibliografia 48
Introduo
A cada dia que passa a plataforma Arduino vem conquistando novos usurios.
Tal sucesso devido a sua simplicidade e ao fato de no necessitar conhecer
profundamente a eletrnica e as estruturas de linguagens para criar gadgets, robs ou
pequenos sistemas inteligentes.
O Arduino uma ferramenta open source que vem sendo muito utilizado no
meio acadmico para a realizao e desenvolvimento de diferentes projetos.
Texto extrado da Revista Saber Eletrnica; Ano 47; N 454 2011; Editora Saber LTDA
Pginas 12 a 15. Autor Filipe Pereira
Microcontrolador ATmega328
Tenso de Funcionamento 5V
Tenso de Entrada (recomendado) 7-12 V
Tenso de Entrada (limites) 6-20 V
Pinos E/S digitais 14 (dos quais 6 so sadas PWM)
Pinos de Entrada Analgicos 6
Corrente DC por pino E/S 40 mA
Corrente DC por pino 3.3V 50 mA
Memria Flash 32 KB, sendo 2KB utilizado pelo bootloader
SRAM 2 KB
EEPROM 1 KB
Alimentao
O Arduino pode ser alimentado pela ligao USB ou por qualquer fonte de alimentao externa. A
fonte de alimentao selecionada automaticamente. Alimentao externa (no 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 alimentao. Cabos vindos de uma bateria podem ser inseridos nos pinos GND (massa) e Vin
(entrada de tenso) do conector de alimentao.
A placa pode funcionar com uma alimentao externa de 6 a 20 volts. Entretanto, se a alimentao
for inferior a 7 volts, o pino 5 V pode fornecer menos de 5 volts e a placa poder ficar instvel. Se a
alimentao for superior a 12 volts, o regulador de tenso poder sobreaquecer e avariar a placa. A
alimentao recomendada de 7 a 12 volts.
VIN - Entrada de alimentao para a placa Arduino quando uma fonte externa for utilizada. Poder-
se- fornecer alimentao por este pino ou, se for usar o conector de alimentao, empregar a alimentao
por este pino.
3V3 - Alimentao de 3,3 volts fornecida pelo chip FTDI. A corrente mxima de 50 mA.
Memria
O ATmega328 tem 32 KB de memria flash para armazenar cdigo (dos quais 2 KB so utilizados
pelo bootloader), alm de 2 KB de SRAM e 1 KB de EEPROM (Electrically-Erasable Programmable Read-Only
Memory), que pode ser lida e escrita atravs da biblioteca EEPROM.
Entrada e Sada
Cada um dos 14 pinos digitais do Arduino pode ser utilizado como entrada ou sada, usando as
funes de pinMode(), digitalWrite(), e digitalRead(). Eles trabalham com 5 volts. Cada pino pode fornecer
ou receber um mximo de 40 mA e tem uma resistncia de pull-up interna (vem desligada de fbrica) de
20-50 k. Alm disso, alguns pinos tm funes especficas, a saber:
Serial: 0 (RX) e 1 (TX): so usados para receber (RX) e transmitir (TX) dados srie, TTL. Estes pinos
so ligados aos pinos correspondentes do chip serial FTDI USB-to-TTL
External Interrupts: 2 and 3 - Estes pinos podem ser configurados para ativar uma interrupo por
um baixo valor, uma elevao ou falling edge ou uma mudana de valor. Veja a funo attachInterrupt()
para mais pormenores.
PWM: 3, 5, 6, 9, 10, e 11 - Fornecem uma sada analgica PWM de 8-bit com a funo
analogWrite().
SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) - Estes pinos suportam comunicao SPI, que embora
compatvel com o hardware, no est includa 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 analgicas e cada
uma delas tem uma resoluo de 10 bits (i.e. 1024 valores diferentes). Por padro, elas medem de 0 a 5
volts, embora seja possvel mudar o limite superior usando o pino AREF e um pouco de cdigo de baixo
nvel. Adicionalmente alguns pinos tm funcionalidades especficas, a saber:
I2C: 4 (SDA) and 5 (SCL) - Suportam comunicao I2C (TWI) usando a biblioteca.
Reset - Envia o valor LOW para efetuar o RESET ao microcontrolador. tipicamente utilizado para
adicionar um boto de reset aos shields que bloqueiam o que h na placa.
ainda importante referir que a corrente mxima por cada pino analgico e digital de 40 mA,
com exceo da sada que providencia 3,3 V, que permite correntes mximas de 50 mA.
De acordo com Sousa and Lavinia, 2006, a capacidade de utilizar Pulse Width Modulation (PWM)
muito importante, pois permite obter uma tenso analgica a partir de um sinal digital, ou seja, de um sinal
que apenas pode assumir o estado lgico 0 (0 V) ou 1 (5 V). O conceito de PWM usado para referir sinal
que possua uma frequncia constante e um duty-cicle varivel.
Comunicao
Com o Arduino, a comunicao com um computador, com outro Arduino ou com outros
microcontroladores muito simplificada. O ATmega328 permite comunicao srie no padro UART TTL
(5V), que est disponvel nos pinos digitais 0 (RX) e 1 (TX), vide figura 2. Um chip FTDI FT232RL na placa
encaminha esta comunicao srie atravs do USB e os drives FTDI (includo no software do Arduino)
fornecem uma porta COM virtual para o software no computador. O software Arduino inclui um monitor
srie que permite que dados simples de texto sejam enviados placa Arduino.
Os LEDs RX e TX da placa piscam quando os dados esto para ser transferidos para o computador
pelo chip FTDI. Pela ligao USB no d quando h comunicao srie pelos pinos 0 e 1.
A biblioteca SoftwareSerial permite a comunicao srie por quaisquer dos pinos digitais do
Duemilanove.
O ATmega328 tambm oferece suporte aos padres de comunicao I2C (TWI) e SPI. O software do
Arduino inclui uma biblioteca Wire para simplificar o uso do bus I2C; para usar a comunicao SPI, veja a
folha de informaes do ATmega328.
Programao
O ATmega328 no Arduino vem pr-gravado com um bootloader que permite enviar novos
programas sem o uso de um programador de hardware externo. Ele se comunica utilizando o protocolo
original STK500 (referncia, C header files). Tambm poder-se- programar o ATmega328 atravs do ICSP
(In-Circuit Serial Programming) header;
Algumas verses anteriores do Arduino requerem um reset fsico (pressionando o boto de reset
na placa) antes de carregar um sketch. Este Arduino projetado de modo a permitir que isto seja feito
atravs 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 caracterstica para permitir carregar o programa simplesmente
pressionando-se o boto upload no ambiente Arduino. Isto significa que o bootloader pode ter um
timeout mais curto, j que a ativao do DTR (sinal baixo) pode ser bem coordenada com o incio do
upload.
Considerando que programado para ignorar dados esprios (i.e. qualquer coisa a no ser um
upload de um novo cdigo), ele interceptar os primeiros bytes dos dados que so enviados para a placa
depois que a ligao for aberta. Se um sketch rodando na placa receber uma configurao de uma vez,
ou outros dados ao inicializar, dever-se- assegurar que o software est em comunicao e espere um
segundo depois de aberta a ligao, antes de enviar estes dados.
O Arduino tem um fusvel que protege a porta USB do seu computador contra curto-circuito.
Apesar da maioria dos computadores possurem proteo interna prpria, o fusvel proporciona uma
proteo extra. Se mais de 500 mA foram aplicados na porta USB, o fusvel ir automaticamente
interromper a ligao at que o curto ou a sobrecarga seja eliminada.
Caractersticas fsicas
O comprimento e largura mximos do so 2,7 (68,50 mm) e 2,1 (53,34 mm) respectivamente,
com o conector USB e o jack de alimentao indo um pouco alm destas dimenses. Trs furos de fixao
permitem a montagem da placa numa superfcie ou caixa. Note que a distncia entre os pinos de entrada e
sadas digitais n 7 e n 8 de 160 mil (milsimos de polegada), no sequer mltiplo do espaamento de
100 mil dos outros pinos.
OBSERVAO!
Na Linguagem C, letras maisculas, minsculas e conjuntos de palavras
fazem a diferena. Ou seja, se voc for escrever algo como, por
exemplo, ledPin, no ser a mesma coisa que LedPin.
Para demonstrar essa base, vamos pegar um simples programa, que se encontra
como exemplo dentro do prprio software, sendo ele para ligar um pequeno LED que
se encontra na placa do circuito, identificado como pino 13. EXEMPLO 1:
/*
Liga o LED por um segundo e ento o apaga por um
segundo, repentidamente.
Este exemplo de cdigo livre, de domnio publico.
Traduzido por Micael Bronzatti Gaier
*/
void setup() {
// inicializa o pino digital como sada de dados.
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // liga o LED
delay(1000); // espera por um segundo
digitalWrite(13, LOW); // apaga o LED
delay(1000); // espera por um segundo
}
COMENTRIOS
Quando desejamos realizar alguma instruo ou comentrio com mais de uma
linha sobre o programa, usamos como smbolo /* ao incio de um comentrio e */ ao
trmino do mesmo.
Quando se deseja dar uma instruo breve, pode se usar //, assim, quando
voc iniciar uma nova linha, voltar a editar o programa novamente.
FUNES - BASE
Um programa possui um corpo, uma funo principal, onde o programa ser
rodado.
Em Arduino, obrigatrio que o programa tenha a funo void setup() e a
funo void loop(). Caso seu programa no tenha estas funes, ele no ser capaz
de identificar a linguagem e no realizar a compilao.
A funo void setup() funciona como uma funo de inicializao, o que
estar contido nela rodar apenas uma vez no programa. Nela, deve conter as
informaes principais para iniciar o seu programa, que estar contido dentro da
funo void loop() . Em void loop() dever conter tudo o que voc quiser que o
programa faa.
pinMode(pino, MODO)
No Arduino, como lidamos com entrada e sada de dados, o pinMode configura
um pino especfico da placa como entrada ou sada. O pino um nmero inteiro e ele
identificado na prpria placa. O MODO ele pode ser de entrada (INPUT) ou sada
(OUTPUT) de dados.
OBSERVAO:
Quando se tratar de uma leitura de dados analgicos, no caso os pinos
A0 ao A5, no necessrio realizar a declarao destes pinos em void
setup(), porm, os pinos analgicos, tambm podem ser usados como
pinos digitais, assim, quando estiver se referindo ao uso destes pinos
como digitais, voc dever identificar no programa na funo de
inicializao como pino 14 (no caso do A0) at o 19 (no caso do A5).
PORTAS DIGITAIS
digitalRead(pino) Este comando responsvel pela leitura de dados nas
portas digitais disponveis. Como falamos de leitura de dados digitais, ela ser feita
como HIGH ou LOW.
PORTAS ANALGICAS
Se voc for ler dados em uma entrada analgica, voc obter como retorno um
valor entre 0 e 1023, pois, o Arduino estudado possui um conversor analgico digital
de 10 bits, ento, 210 = 1024. 1023 o valor mximo, assim, ser colocado na entrada
OBSERVAO!
O recomendado caso for usada uma tenso de referncia
externa, que seja colocado um resistor de 5kOms, assim, caso
possua alguma configurao errada no software e o
microcontrolador no conseguir entender, isso previne que
ocorra algum dano no equipamento, porm, internamente, h
uma resistncia no valor de 32kOms, isso significa que voc ter
um divisor de tenso na entrada do equipamento, ou seja, a
tenso de referncia ser diferente da tenso aplicada antes do
resistor de 5kOms.
TEMPO
/*
Entrada Analgica
Demonstra a leitura de um sensor analgico (A0) e a
emisso de luz de um LED (13).
O tempo que o LED permanecer acesso depender do valor
obtido do sensor.
Este exemplo de cdigo de domnio pblico.
Modificado por Micael Bronzatti Gaier
*/
// #include <SoftwareSerial.h>
#define sensor A0 // seleciona o pino de entrada do
//potencimetro e o identifica como sensor
int led = 13; // seleciona o pino para o LED
int valSensor; // varivel que armazena o valor do sensor
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
valSensor = analogRead(sensor); // l sensor e define
// valor como varivel global
Serial.println(valSensor); // envia valor do sensor //
para porta serial
piscarLED(); // funo secundria
}
void piscarLED(){
digitalWrite(led, HIGH); // ligar o LED
delay(valSensor); //pausa de acordo com o valor da
//varivel
digitalWrite(led, LOW); // apagar o LED
delay(valSensor);
}
BIBLIOTECAS
#include e #define
Quando voc usa #include, voc est dizendo ao programa que ele deve
incluir o arquivo-cabealho ao programa.
VARIVEIS E MODIFICADORES
VARIVEIS
Os nomes das variveis apenas devem obedecer algumas regras: elas podem
comear com letras ou sublinhado (_) e no podem ter nome idntico a alguma das
palavras reservadas pelo programa ou de alguma biblioteca.
As variveis devem ser declaradas antes de serem usadas. Observe:
tipo_de_varivel lista_de_variveis
Ex: int ledPin, potencimetro
CLASSE DE VARIVEIS
VARIVEIS LOCAIS
VARIVEIS GLOBAIS
Uma varivel global aquela varivel que conhecida por todo o programa, ou
seja, independente da funo que estiver sendo executada ela ser reconhecida e
rodar normalmente. Uma varivel global ela declarada antes mesmo da funo void
setup().
VARIVEIS ESTTICAS
MODIFICADORES
Observe a tabela.
FUNES I
Anteriormente, j foi explicado um pouco a respeito sobre o void setup() e o
void loop(), que mesmo no utilizando-os, eles precisam ser declarados.
Uma funo uma unidade autnoma do cdigo, que foi feita para cumprir
uma atividade em particular. Um programa consiste em vrias funes. Uma funo se
resume em:
Existem dois tipos de funes: as que retornam algum valor para a funo onde
est inserida e as funes que no retornam nenhum valor.
Tipo int Uma funo int retorna um valor para a funo que a chamou.
H duas formas de retornar de uma funo, uma delas quando o finalizador de
funo ( } ) encontrado, ou quando for feito o uso da declarao return.
A declarao return retorna um valor especificado para a funo que a
chamou.
Tipo void uma funo tipo void no retorna nenhum valor para a funo
que a chamou, ou seja, as aes executadas nesta funo no resultaram em
nmeros binrios, variveis booleanas ou caracteres para a funo principal. Com o
uso de void no permitido usar a declarao return.
OPERADORES DE COMPARAO
x igual a y: x == y
x diferente de y: x != y
x menor que y: x< y
x maior que y: x> y
x menor ou igual a y: x <= y
x maior ou igual a y: x >= y
OPERADORES BOOLEANOS
OPERADOR E (&&)
A condio apenas ser verdadeira se todos os itens foram verdadeiros.
Exemplo: if (digitalRead(2) == 1 && digitalRead(3) == 1){
... }
Se a leitura digital dos pinos 2 e 3 forem 1 (HIGH), a condio verdadeira.
OPERADOR OU ( || )
A condio ser verdadeira se algum dos itens for verdadeiro.
Exemplo: if (x>0 || y>0){
... }
Se x ou y for maior que 0, a condio ser verdadeira.
OPERADOR NO ( ! )
A condio ser verdadeira se o operador for falso.
Exemplo: if (!x){
... }
Se x for falso, a condio verdadeira.
Pr-fixado Ps-fixado
Se: x=48 Se: x=48
y=++x y=x++
Ento: Ento:
x=49 x=49
y=49 y=48
OUTROS USOS
x += y > x=x+y
x=y > x=xy
x *= y > x=x*y
x /= y > x=x/y
IF
IF testa se certa condio foi alcanada, como por exemplo, se uma entrada
analgica obteve um nmero especfico. Se o resultado da condio for 0 (falsa), ela
no ser executada, caso o resultado seja 1 (verdadeira), a funo ser executada. O
formato desta estrutura de controle de fluxo :
IF... ELSE
Usar if/else permite um controle maior sobre a estrutura, sendo que poder ser
realizado vrios testes sem sair de uma nica funo. Podemos pensar no else como
sendo um complemento ao comando if.
if (certaCondicao) {
// comando A }
else {
// comando B... }
OBSERVAO!
Quando voc estiver trabalhando com vrias condies, onde no se
restringe a apenas duas hipteses, dentro da estrutura de controle else,
voc pode colocar mais funes if/else e assim por diante. Veja:
if (Condicao1) {
// comando A }
else if (Condicao2) {
// comando B... }
else {
// comando C }
FOR
O estrutura for uma das estruturas que se trabalha com loops de repetio.
Esta estrutura normalmente usada para repetir um bloco de informaes definidas
na funo. Enquanto a condio for verdadeira, as informaes contidas na funo
sero executadas. Sua forma geral :
EXEMPLO 3:
SWITCH CASE
case 2:
//fazer algo quando valor igual a 2
break;
default:
// se nenhum caso se encaixa, fazer algo como padro
}
void setup(){
for (int pino = 8; pino < 12; pino++) {
pinMode(pino, OUTPUT); // inicializao dos LEDs
}
}
void loop(){
// leitura do sensor analgico
int valor = analogRead(sensor);
switch(valor) {
case 205 : // condio 1
digitalWrite(8,HIGH);
break;
#define analogPin A0
#define digPin01 4
#define digPin02 5
#define digPin03 6
void setup(){
// inicializao dos pinos digitais
for (int i = 4; i<7; i++){
pinMode(i, OUTPUT);
}
}
void loop(){
int valor = analogRead(analogPin); // leitura pino analgico
void setup(){
pinMode(digitalPin, INPUT);
}
void loop(){
int val;
do {
analogWrite(analogPin, 255);
val = digitalRead(digitalPin);
} while (val == valIdeal);
}
COMUNICAO SERIAL
Serial.available();
Obtm o nmero de bytes disponveis para a porta serial. Este comando
retorna o nmero de bytes disponvel para leitura.
Serial.read();
Obtm os dados da porta serial para leitura.
Serial.print();
Envia dados para a porta serial como texto legvel ASII. Este comando pode
possuir diferentes formas. Por exemplo:
Serial.print(78) resulta em "78"
Serial.print(1.23456) resulta em "1.23"
Serial.print(byte(78)) resulta em "N" (em ASCII seu valor 78)
Serial.print('N') resulta em "N"
Serial.print("Ola Mundo.") resulta em "Ola Mundo."
OBSERVAO!
Para nos facilitar a tarefa de programar, existem vrias constantes. So
caracteres que podem ser usados como qualquer outro. Observe:
Caractere Significado
\n Nova Linha
\t Tabulao Horizontal (tab)
\a Tabulao Vertical
BIN Binrio ou Base 2
OCT Base 8
HEX Hexadecimal ou Base 16
DEC Decimal, ou Base 10
BYTE Resulta em Byte
Serial.println();
Envia dados para a porta serial, porm, com um caractere de retorno. Este
comando funciona da mesma forma que Serial.print().
Exemplo 7:
void setup(){
// iniciarndo porta serial
Serial.begin(9600);
}
void loop(){
// obtendo valor do potencimetro
var = analogRead(pot);
delay(500);
// lendo valores obtidos da porta serial
int valSerial = Serial.read();
// imprimindo texto na porta serial
Serial.print("Foi obtido da porta serial o seguinte valor: ")
// imprimindo valores obtidos da porta
Serial.println(valSerial, DEC);
}
OPERADORES MATEMTICOS
void loop() {
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
PARA ENTENDER!
Dizemos que voc possui um sensor analgico (0 a 1023) que est
controlando a velocidade de giro de um motor conectado numa entrada PWM (0 a
255). Quando o sensor analgico emitir o valor de 0, o resultado na sada PWM ser
0, enquanto se o sensor analgico emitir 1023, o resultado em PWM ser 255. Caso
seja obtido um valor intermedirio do sensor, a sada PWM tambm obter um valor
intermedirio equivalente, mas em sua faixa de valores.
TRIGONOMETRIA
SINAIS PWM
EXEMPLO 8
void setup() {
// no necessrio realizar declaraes
}
void loop() {
// aumenta o brilho do LED de 0 a 255, num incremento de valor +5
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
analogWrite(ledPin, fadeValue);
// aguarda 30 milissegundos para o efeito de fading
delay(30);
}
// diminui o brilho do LED de 0 a 255, num incremento de valor -5
for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
analogWrite(ledPin, fadeValue);
delay(30);
}}
L o pulso de um pino.
Por exemplo, se valor HIGH, a funo aguardar um tempo especfico em
microssegundos de acordo com o valor do tempo de resposta, e quando obtiver o
valor especfico no pino ele comear uma contagem de tempo e apenas interromper
quando o valor ser LOW. A funo retornar o comprimento do pulso em
microssegundos.
PARMETROS:
pino = nmero do pino no qual voc deseja ler o pulso (int);
valor = HIGH ou LOW (int);
tempo de resposta (opcional) = o nmero de microssegundos a esperar aps
o pulso iniciar (por padro um segundo).
RETORNO DA FUNO:
O comprimento do pulso em microssegundos ou 0 se o pulso comeou sem um
tempo de resposta.
EXEMPLO 9
Este exemplo consiste no uso do sensor ultrassnico LV-Max Sonar EZ0 que
capaz de informar se h obstculos a sua frente at 6,45 metros. Para o sistema
funcionar corretamente necessrio um resistor de 100 ohms entre o pino de 5V do
Arduino e a Entrada Vin do sensor, e um capacitor eletroltico de 100F entre as
alimentaes (Vin e Gnd).
void loop() {
pwmOnda = pulseIn(sensorUltra, HIGH);
pol = pwmOnda / 147;
cm = pol * 2.54;
Serial.print(pol);
Serial.print(" polegadas ");
Serial.print(cm);
Serial.println(" cm");
}
Exemplos de Shields:
Encontramos hoje no mercado uma vasta lista de shields para Arduino, alm
destes, podemos encontrar shields que permitem realizar diversas funes como: MP3
Player, conexo com redes wi-fi, shields que simulam funes de celulares, etc.
Para um motor ter a habilidade de movimentao nos dois sentidos do seu eixo
e tambm para obter um controle sobre sua velocidade, torque e outros dados
tcnicos, devemos montar um circuito que seja inteligente para poder realizar estes
fundamentos bsicos apresentados atravs de sinais enviados do Arduino. Se
observarmos atentamente o esquema de chaves, veremos que ele se torna similar
com um H, assim, dando a estes estudos o nome de Ponte H (H-Bridge, em ingls).
H vrias maneiras de se montar uma Ponte H. Ela pode ser feita tanto com
rels, como com transistores e at com CIs (circuitos inteligentes) j criados
especialmente para isso. No h como apresentar um modelo de Ponte H e dizer que
ela funcionar adequadamente com qualquer circuito que for, pois, ao montar o
circuito, devemos levar em considerao os dados tcnicos do motor que est sendo
usado, as especificaes do Arduino, dos dispositivos que sero utilizados e do
ambiente em que o sistema atuar.
PROGRAMAO PONTE H
parar();
delay(1000);
paratras();
delay(1000);
}
void frente(){
//enviando sinal alto de cada componente de forma individual
digitalWrite(transa, HIGH);
digitalWrite(transb, HIGH);
}
void paratras(){
// enviando sinal alto de TODOS componentes atravs da funo for
for(int i=2, i<6, i++){
digitalWrite(i, HIGH);
}
}
void parar(){
digitalWrite(relea, LOW);
digitalWrite(trana, LOW);
digitalWrite(releb, LOW);
digitalWrite(transb, LOW);
}
OBSERVAO!
Caso voc queira controlar a velocidade do eixo de um motor DC, voc
deve programar da mesma maneira que o exemplo 8, porm, invs de
aplicar o sinal a um LED, voc ir aplicar ao componente usado no seu
sistema de controle.
O LCD possui uma srie de pinos que devem, ou no, ser conectados no
Arduino, para isso, devemos entend-los. Observe o desenho e as explicaes abaixo
para melhor compreender.
Os displays LCD compatveis com o chipset Hitachi podem atuar nos modos de
4-bits ou 8-bits, porm, no modo de 4-bits necessrio apenas 7 pinos I/O do
Arduino, enquanto no modo 8-bits necessrio 11 pinos I/O. Se voc for trabalhar
apenas com textos o modo de 4-bits suficiente.
Por estes motivos no se pode ensinar uma forma de programao vlida para
funcionar com qualquer sensor, necessrio colocar em prtica todos os
ensinamentos que foram passados at aqui como a leitura e escrita de dados
analgicos e digitais, o uso de variveis para armazenar as informaes, o uso de
ondas PWM, funes, estruturas de controle de fluxo, etc., enfim, o que vai fazer o
sensor funcionar corretamente o conhecimento que voc adquiriu ao longo das suas
experincias.
Nesta apostila onde falamos sobre ondas PWM (pgina 30), possumos dois
exemplos que poderiam ser usados com sensores, sendo um dos exemplos de um
sensor ultrassnico, onde ele capta a distncia de objetos em sua frente num raio de
distncia especfico.
Sensores digitais funcionam apenas com sinal alto (HIGH) ou sinal baixo
(LOW). Uma chave de fim de curso, por exemplo, pode ser considerado um sensor
digital. Dizemos que a chave considerada como NF (normalmente fechada), assim,
se for feita uma leitura atravs de digitalRead() quando a chave no estiver
pressionada obteremos o valor 1 (HIGH, sinal alto), caso a chave seja pressionada,
obteremos o valor 0 (LOW, sinal baixo), assim, cabe ao programador decidir qual ser
a utilidade do uso deste sensor.
Porm, h sensores de uso mais complexo, onde voc pode obter dados mais
especficos ou variados tipos de dados, para isso, o fornecedor sempre oferece um
manual de como realizar a programao e de como usar as bibliotecas dos sensores,
mas para isso, voc sempre dever estar procurando por estas informaes em fruns
especficos e no site dos fabricantes.