Sunteți pe pagina 1din 24

Curso bslco de Ardulno

Segurana em Primeiro Lugar


WRI TTEN BY: KEMPER

Este texto tem o objetivo de alertar aos pais e alunos sobre os riscos de se trabalhar com
eletricidade sem o conhecimento de como trabalhar com segurana e desmistificar
alguns conceitos antes de pensarmos em fazer qualquer coisa envolvendo eletricidade.
Introduo:
Este Blog tem o intuito de compartilhar com alunos, educadores, tcnicos e engenheiros
o meu hobby, a robtica, alm de compartilhar o conhecimento da forma mais didtica
possvel com o uso de kits vendidos no mercado, sempre que possvel. Porm, a
programao de kits eletrnicos que so ligados diretamente a computadores costumam
ter partes de circuitos energizados e totalmente expostos, o que pode por em risco a
sade, ou at mesmo, a vida do aluno ou educador.
Por isto, este ser o primeiro mdulo de todos e deve ser lido por todos que pretendem
copiar ou utilizar qualquer contedo escrito ou publicado por mim.
Recomendaes:
A primeira coisa que o leitor deve ter em mente que todo material pode ser condutor
ou isolante, dependendo apenas da tenso eltrica aplicada sobre o mesmo, por isto,
muito bom ter cuidado ao trabalhar com eletricidade.
Eu recomendo que o leitor sempre use calado com solado de borracha, que no seja
uma sandlia com dedos aparecendo, esteja mido ou molhado.
O leve detalhe dos dedos aparecendo a posio dos ps, pois os dedos vo tocar o cho
e vai fazer o mesmo efeito de estar descalo.
Quanto a gua, ela contem sais minerais que a tornam um condutor eltrico,
potencializando o efeito do choque. A curiosidade o fato da gua pura ser isolante.
Mas, quando eu digo gua pura, eu me refiro a uma gua que s pode ser encontrada em
laboratrios qumicos contendo apenas molculas de gua, sem mais nenhum tipo de
material diludo. No me refiro a gua pura de beber.
Cadeiras com ps de metal que possam entrar em contato com o corpo tambm no so
recomendadas e o mesmo se aplica aos ps da mesa se forem metlicos ou de algum
outro material no isolante.
Animais de estimao como ces e gatos tambm so excelentes para estragar um bom
isolamento quando tocam no dono, principalmente com o focinho molhado.
Choques Eltricos:
Ao contrrio do que muita gente pensa, o que mata no a tenso eltrica, a corrente
que passa pelo corpo, onde o risco pode variar de acordo com o caminho percorrido.
Imagine que um choque gerado por uma corrente que passa do p direito para o p
esquerdo menos perigoso do que um choque onde a corrente passa da mo esquerda
para os ps, pois o corao vai ser afetado. O mesmo se aplica a choques onde a
corrente passa pela cabea.
Mas, de qualquer forma, sempre h o risco causado pela eletrlise do sangue ou tecidos
durante um choque.
Tenses Eltricas:
A Maioria dos circuitos apresentados funcionaro com tenses entre 3.3V a 24V e no
tero perigo ao serem tocados. A maior ressalva que eu fao para quando o circuito
estiver ligado ao computador e o mesmo estiver ligado a tomada eltrica, pois, devido a
uma questo de custo e tamanho, muitas fontes de computador, principalmente desktop,
os no note books, tm um transformador do tipo auto-transformador, que no um
transformador isolante. Por isto, muitos computadores do choque na lateral.
As fontes de note book tambm no so seguras, pois so do tipo chaveada e tm
ligaes diretas com a tomada eltrica.
Eu recomendo que o leitor esteja devidamente isolado na hora de ligar o circuito no
computador, caso este contenha partes eletrizadas expostas, e se possvel, com o note
book ligado apenas na bateria, reduzindo drasticamente o risco de acidentes.
Mas ateno, no adianta desligar o note book da tomada e deixar o mesmo ligado a
outros circuitos ligados a tomada, como monitores, televisores, impressora ou antenas
de TV compartilhadas com mais de um aparelho. Para desligar o computador da tomada
e reduzir o risco de choques se deve desligar toda e qualquer conexo fsica com outros
aparelhos.
Pequenos Choques e Eletricidade Esttica:
comum alguns computadores darem pequenos choques que costumam ser ignorados
por montadores mais experientes, mas, este um grande erro, pois, mesmo o choque
no sendo perigoso, a tenso mais elevada do que os circuitos so feitos para
suportar o que faz o circuito queimar durante o choque, alm de poder queimar a porta
USB ou a placa me inteira.
O mesmo se aplica a choques de eletricidade esttica, muito comuns em regies com
baixa umidade do ar, fazendo necessrio o uso da pulseira de descarga esttica e mais
algumas medidas para equilibrar a diferena de potencial eltrico na bancada. Apenas
lembre-se que pulseiras de descarga esttica costumam ser uma ligao direta ao
aterramento do laboratrio potencializando o risco de choques eltricos.
Uma curiosidade tomar cuidado com a espuma que vem as vezes com os circuitos
integrados ou placas eletrnicas. As espumas so condutoras e tm a finalidade de
igualar a diferena de potencial eltrico protegendo o equipamento de descarga
eletrosttica. Mas, como estas espumas so condutoras, NUNCA use elas de apoio para
circuitos ligados, pois elas conduzem e podem queimar o circuito.
Partes Mveis:
Muitos dos dispositivos apresentados neste Blog contero partes mveis que podero
ser acionadas assim que energizadas, por isto sempre bom tomar cuidado para no se
machucar, principalmente com dedos e olhos muito prximos.
Concluso:
Embora o texto torne a eletricidade meio assustadora, ela no apresenta riscos a sade
quando mesma tratada com o devido respeito as normas de segurana, sendo o maior
risco de todos causado pela cultura do risco, onde pessoas costumam dizer no vai
acontecer nada no! e coisas do tipo.
Tambm lembro a pais e educadores que no se deve deixar crianas mexerem em
circuitos mecnicos, eltricos ou eletrnicos sem a devida superviso.








Ardulno - lnLroduo
WRI TT E N BY : KEMP E R - AUG- 2 5- 1 1


Mdulo: Arduino
Aula: Arduino Bsico I
Ttulo: Introduo
A forma mais fcil e barata de adicionar capacidade de processamento a nossos robs
utilizar uma placa Arduino baseada nos C AVR da Atmel.
Introduo:
O Arduino um projeto italiano feito para facilitar o acesso a um hardware de baixo
custo, totalmente aberto e documentado, permitindo a hobbistas, tcnicos, e at mesmo,
artistas criarem hardware para as suas necessidades.
A sua programao baseada em Wiring, um framework feito em C, porm, com
algumas caractersticas prprias que sero descritas aqui, juntamente com todo o
conhecimento de hardware necessrio.
Conceitos Bsicos:
Porm, antes de usar a placa Arduino, temos que aprender alguns conceitos bsicos de
eletrnica digital, tais como:
Microcontrolador ( C ) e Microprocessador ( P ):
O P a unidade principal de todos os computadores modernos, e ele quem o
responsvel por realizar clculos, operaes lgicas e executar os comandos do cdigo
fonte para uma tomada de deciso correta.
O primeiro P da histria foi o Intel 4040, um P de 4 bits extremamente
revolucionrio para a poca. Ele foi o precursor da revoluo digital e gerou muitos dos
padres que usamos hoje em dia. O mais interessante foi o fato dele permitir a reduo
e flexibilizao das placas de circuito, pois, antes do primeiro P, os circuitos eram
feitos de forma especfica para atender uma necessidade, no permitindo alteraes caso
houvesse alguma necessidade nova.
Porm, o Intel 4040 e todos os P consecutivos necessitavam de componentes externos
para poder funcionar, tais como memria para o cdigo fonte, memria para arquivar os
dados temporrios, expanso de barrabento para aumentar a quantidade de pinos
disponveis e controle de barramento, responsvel por gernciar o fluxo de dados entre o
P e os perifricos necessrios para o seu funcionamento.
A vantagem do P era o fato dele ser muito flexvel e poder ser expandido de acordo
com a necessidade do circuito, porm, o excesso de perifricos externos necessrios
para o seu funcionamento tornavam o circuito caro e complexo. Por isto, logo em
seguida surgiu os primeiros C, um circuito similar ao P, porm, com todos os
perifricos necessrios para o funcionamento contidos no prprio circuito integrado.
A grande vantagem do C foi o fato dele encapsular todos os perifricos necessrios
para o funcionamento de P em um nico circuito integrado. A desvantagem, foi o fato
de no valer a pena gastar dinheiro para expandir suas capacidades, sendo melhor
escolher um modelo de C mais complexo, que no necessite expanso para a aplicao
em questo.
Byte e bit:
Os primeiros computadores eltricos da histria eram analgicos e se baseavam em
valores de tenso para representar dados. Porm, esta no uma abordagem segura e os
circuitos ficam muito complexos e caros, por isto, em seguida foram criados os
computadores digitais, com a capacidade de processar apenas dois valores de tenso,
representando uma parte do circuito ligada ou desligada, ou 1 e 0 respectivamente.
Com esta abordagem, os circuitos passaram a ser capazes de processar apenas nmeros
em binrio, base 2, onde os nmeros s podem ser representados por 0 e 1.
Porm, esta uma base numrica na qual no somos acostumados a trabalhar, e nos
fora a agrupar os dgitos em grupos de 8, onde a menor unidade de todas um bit e o
agrupamento dos bits em grupos de 8 chamado de byte.
Embora parea estranha, a base 2 no funciona de forma diferente da base 10, e no final,
tudo se baseia na teoria bsica dos nmeros.
Exemplo:
Na base 10, os nmeros vo de 0 a 9, e aps o ltimo dgito necessitamos adicionar um
dgito mais significativo e comear a contagem do dgito menos significativo
novamente, ou seja, 10, 11, 12 e assim por diante. Na base 2, o que muda o fato de
haverem apenas dois dgitos, 0 e 1, ou seja, aps o 1, temos que adicionar mais um
dgito significativo, assim a contagem fica, 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001,
1010, 1011, 1100, 1101, 1110, 1111 e assim por diante.
Memria RAM:
Os P e C necessitam de memria para arquivar dados temporrios, e a memria deve
permitir o acesso de qualquer dado a qualquer momento, por isto, em ingls ela
chamada de Random Access Memory, ou memria de acesso aleatrio.
Esta um tipo de memria feita para receber os dados do programa em tempo de
execuo e no tem a capacidade de manter os dados quando a alimentao do circuito
desligada.
O interessante neste tipo de memria so as variaes de capacidade. Enquanto nos P
feitos para executar programas muito complexos, elas so medidas em GB, nos C,
feitos para processar cdigos muito especficos, elas tem a capacidade medida em bytes
ou kilobytes, mas, no se espante, para programas que no tm interface grfica, esta
capacidade extremamente eficiente.
Memria ROM:
Os primeiros computadores tinham uma memria fixa para arquivar o programa e a
tecnologia usada na poca s permitir a gravao uma nica vez, tornando
os computadores muito pouco flexveis, pois, para se rodar um programa novo era
necessrio remover a memria fisicamente e colocar outra no lugar.
Esta era uma memria usada apenas para arquivar o programa, por isto, ela era apenas
para leitura e era chamada de Read Only Memory em ingls. Com o passar do tempo,
este tipo de memria ganhou novas capacidades e passaram a permitir a escrita dos
dados mais de uma vez e de forma muito simples, por isto, os C modernos como o
AVR permite que a memria de cdigo seja apagada e escrita novamente durante a
execuo do cdigo.
Vetores de Interrupes:
Vetor de Interrupo uma caracterstica comum a todos os C e P, onde o cdigo em
execuo pode ser interrompido a qualquer momento para executar uma outra parte
especfica, sub-rotina, em decorrncia de um evento interno ou externo.
Imagine a sub-rotina como sendo a capacidade do C de reagir a um evento qualquer,
como a ativao de um sensor, onde o cdigo em execuo interrompido, a sub-rotina
executada, e em seguida o cdigo original continua como se nada tivesse acontecido.
Timers / Contadores:
Os timers so circuitos derivados da eletrnica digital e tem a capacidade de
interromper o programa a intervalos regulares ou sempre que a contagem de um evento
chegar a um determinado valor. Na prtica, eles so usados para controlar a velocidade
das portas seriais ou monitorar eventos a intervalos regulares.
Sadas PWM:
O funcionamento e a utilidade do PWM foi descrito em uma aula de robtica bsica e o
C tem a capacidade de gerar o PWM de forma automtica, necessitando apenas que se
passe os valores.
Porta de comunicao serial:
Uma porta serial tem a vantagem de comunicar dados com o uso mnimo de pinos do
circuito e vo ser muito utilizadas durante todas as montagens. O que muda, de acordo
com o tipo de porta escolhida, o protocolo usado, porm, isto ser visto em detalhes
mais adiante.
O que todas elas tm em comum o fato do dado fluir bit a bit, o que requer um tempo
maior de comunicao para os bytes passarem, porm, elas facilitam a criao da placa
de circuito impresso.
Portas de comunicao paralela:
A vantagem da aporta de comunicao paralela o fato dos bytes flurem de uma nica
vez, o que possibilita o ganho de tempo, mas, ela complica muito a construo da placa
de circuito impresso devido ao acesso de trilhas necessrias.
ALU:
A Unidade Lgica e Aritmtica tem a capacidade de processar nmeros e operaes
lgicas simples.No caso dos C de 8bits, para se somar um nmero tipo 2011 + 1, so
necessrias vrias operaes, pois, 8bits permitem gerar nmeros entre 0 e 255, ou 2.
O Arduino:
Na verdade, o Arduino nada mais do que uma placa de circuito impresso feita com um
C AVR e todos os circuitos necessrios para fazer o C funcionar da forma mais
prtica e eficiente possvel sem elevar o custo final do circuito alm do necessrio.
Uma grande vantagem do uso do Arduino o fato do site oficial conter uma srie de
cdigos prontos e testados, facilitando muito a criao do circuito final.
Outra grande vantagem o fato do circuito ser testado e estvel, coisa que nem sempre
acontece com circuitos caseiros.
A programao tambm bastante simples, baseada em C / C++, porm, de uma forma
to simples, devido a grande quantidade de cdigo existente, que para se gerar um
medidor de distncia com ultra som, eu necessitei apenas de 3 linhas de cdigo.
Concluso:
O Arduino uma ferramenta bastante simples e eficiente de se trabalhar, porm,
sempre bom ter uma boa base em eletrnica e eletrnica digital para se poder trabalhar
de forma mais eficiente e econmica possvel.

Arduino Instalao
WRI TTEN BY: KEMPER - SEP 02 11

Mdulo: Arduino
Aula: Arduino Bsico I
Ttulo: Instalao
Continuando a aula anterior, vamos aprender a instalar o ambiente de desenvolvimento
Arduino e fazer o nosso primeiro programa.
Download:
Como o Arduino uma plataforma aberta, a primeira coisa a se fazer entrar no site do
Arduino e baixar a ltima verso do compilador, de forma totalmente gratuita.
No Windows:
Para os usurios Windows, h um arquivo tipo ZIP que deve ser baixado e
descompactado. Aps isto, deve ser criada uma pasta de nome arduino-0022, onde
0022 a verso do compilador.
Guarde esta pasta em algum local de sua escolha e pronto, tudo o que voc necessita
para programar o Arduino est dentro dessa pasta.
Nela voc encontrar algumas pastas e arquivos tais como:
arduino.exe Executvel do compilador;
examples Uma srie de exemplos de cdigo;
hardware Documentao e cdigo fonte dos bootloades;
libraries Biblioteca contendo todas as classes prontas para uso, tais como sensores e
shields;
reference Documentao de referncia do Arduino em ingls.
No Mac Os:
Basta baixar o arquivo tipo DMG e em seguida, arrastar o executvel do compilador
para a pasta de Aplicativos e depois instalar o driver da porta USB que vem dentro do
mesmo pacote.
A grande dica a seguinte, como o Mac Os mais organizado do que o windows, abra a
pasta de Aplicativos e procure pelo executvel do compilador. Em seguida, clique com
o boto secundrio do mouse e v at Mostrar Contedo do Pacote. Ele deve abrir
uma nova janela e dentro dela deve haver uma pasta de nome Contents, abra a pasta e
v para Resources e em seguida Java.
Dentro dela esto contidas as mesmas pastas do Windows com a mesma funcionalidade.
Instalado novas classes na Biblioteca:
A funcionalidade da biblioteca arquivar cdigos prontos de forma a no se necessitar
rescrever o cdigo sempre que necessrio, alm de ser ela quem contem os cdigos
responsveis por fazer funcionar os sensores e shields, por exemplo.
Agora imagine que voc quer usar o sensor HC-SR04 descrito no artigo HC-SR04
Um sensor de Ultra Som barato. A primeira coisa a se fazer adicionar todas as classes
necessrias na biblioteca.
Para isto, baixe o arquivo contendo todas as classes e extraia o contedo em uma pasta
qualquer. Dentro dela deve haver uma pasta com o nome da classe. No nosso caso
Ultrasonic. Agora s mover a pasta Ultrasonic com todo o seu contedo para
dentro da pasta libraries.
Com isto, s reiniciar o compilador e pronto. A nova classe est pronta para uso.
Usando o compilador:
Compilador o programa responsvel por pegar um cdigo escrito em uma determinada
linguagem e rescrever o mesmo cdigo em outra linguagem, com a mesma funo. No
caso do Arduino, a funo do compilador rescrever um cdigo escrito em C / C++ e
rescrever o cdigo em binrio Atmel AVR.
As principais funes do compilador so:
Play Faz o compilador analisar o cdigo e gerar o pacote binrio reconhecido
pelo C;
Stop Para o processo de analise e compilao do cdigo;
New Cria um novo documento, em branco;
Open Abre um documento contendo cdigo previamente escrito;
Save Salva o documento aberto no computador;
Upload Transfere para o C um pacote binrio previamente analisado com a
funo Play;
Serial Monitor Abre um terminal de comunicao serial fazendo a porta USB se
comportar como uma porta serial ligada ao Arduino.
No menu textual do compilador, tambm h as funes Tools -> Board, usada para
escolher o modelo do Arduino em uso, e Tools -> Serial Port, usada para selecionar a
porta serial usada na comunicao entre o Arduino e o computador.

Arduino Programao
WRI TTEN BY: KEMPER - SEP 14 11

Mdulo: Arduino
Aula: Arduino Bsico I
Ttulo: Programao
Esta aula tem o objetivo de introduzir os primeiros conceitos de programao para C
usando C++ para Arduino e Wiring.
Introduo:
Com o advento da internet, o acesso a informao foi facilitado, porm, isto gerou uma
srie de profissionais seguidores de receita de bolo, onde a falta de teoria tem se tornado
um grande problema, pois, muitosprofissionais no tiveram que fazer fora para adquirir
conhecimento e s fazem melar o mercado com mo de obra barata e sem qualidade,
tirando o po de muitos profissionais srios que no tm conseguido pagar suas contas.
Pensando nisso, estas aulas vo segui um carter mais terico e menos prtico, com
todo o conhecimento necessrio para se formar um bom programador Arduino.
Antes de tudo, perceba que programao de qualidade uma arte matemtica e vai
muito alm de simplesmente fazer um cdigo funcionar. Cada plataforma tem suas
caractersticas e necessidades, cabendo ao desenvolvedor a obrigao de conhecer a sua
plataforma a fundo.
No caso dos C, onde o tempo de execuo e utilizao de memria so essenciais, a
arte da programao levada ao seu extremo, e em muitos casos, um bom programador
pode reduzir os custos do equipamento final reduzindo a necessidade de perifricos e
expanses externas.
Para quem no tem prtica, a regra prtica da indstria diz que todo produto produzido
em lotes de mil unidades cada, e por consequncia, cada dlar economizado geram mil
dlares de lucro a mais por lote produzido.
Bits e Bytes:
Como falado anteriormente, todo C tem uma capacidade limitada de memria, tanto
para dados, memria tipo RAM, quanto para cdigo, memria tipo ROM. Por isto,
extremamente importante entender como os dados so arquivados na memria para se
poder otimizar o espao de memria o mximo possvel.
Mas, antes de falarmos de dados, temos que entender o conceito de nmero binrio, bit
e byte, pois eles so uma consequncia natural de todo circuito digital, sendo o nmero
binrio, base 2, a forma matemtica mais direta de se representar um dado digital, e a
base 16, hexadecimal, a forma mais fcil para seres humanos compreenderem o dado
representado.
Como falado em aulas anteriores, todo circuito digital s capaz de processar dois
valores, 0 e 1, ou circuito desligado e ligado, o que nos d um bit e sua consequncia
direta, nmeros binrios, base 2, uma base onde o nmero decimal 5 ser representado
por 101 e o nmero decimal 10 ser representado por 1010. Por sua vez, circuitos
podem ter suas sadas agrupadas de acordo com a necessidade, por isto, foi
convencionado que o agrupamento de 8 bits seria chamado de byte.
Ou seja, bit a menor unidade capaz de representar uma informao digital, e byte o
agrupamento dos bits em grupos de oito, no importando se a arquitetura feita para
trabalhar com 8 bits, 16 bits, 32 bits ou mais, o byte sempre ter 8 bits.
Bases Numricas:
Lembrando a teoria bsica dos nmeros, a base 10 chamada assim por conter 10
algarismos, 0 a 9. Sendo 9 o maior valor representado nessa base, e como no h a
possibilidade de se representar o prximo valor, o dgito menos significativo
reiniciado ao seu menor valor e mais um dgito adicionado, permitindo-se assim
representar nmeros maiores do que a base, como seria o caso de 10, 11, 12 e assim por
diante.
Agora imagine um nmero de trs dgitos, 512 por exemplo. Trs dgitos podem conter
quaisquer valores entre 0 e 999, ou mil combinaes, no nosso caso temos:
5*10
2
+ 1*10
1
+ 2*10
0 =

= 5*100 + 1*10+2*1
= 500+10+2
= 512
Como d para perceber, a teoria bsica dos nmeros diz que um nmero formado da
seguinte forma:
valor * base
dgito n-1
+valor * base
dgito 2
+valor * base
dgito 1
+valor * base
dgito 0

Aplicando-se a mesma teoria a base 2, temos:
101b = 1*2
2
+ 0*2
1
+ 1*2
0

101b = 4 + 0 + 1
101b = 5 decimal.
Porm, representar nmeros apenas com 0 e 1 no uma forma muito prtica para o
crebro humano, por isto, muitas vezes ser usada a representao hexadecimal, base
16.
A nica coisa que muda na base 16 o fato de haverem 16 algarismos para representar
um nmero, onde so usados os nmeros 0 a 9 e as letras A a F. E como na base 10, os
valores de 0 a 9, na base 16 os valores vo de 0 a 15, sendo o 10, 11, 12, 13, 14 e 15
representados pelas letras A, B, C, D, E e F respectivamente.
Veja a tabela abaixo para entender:
Decimal Binrio Hexadecimal
0 0000b 0h
1 0001b 1h
2 0010b 2h
3 0011b 3h
4 0100b 4h
5 0101b 5h
6 0110b 6h
7 0111b 7h
8 1000b 8h
9 1001b 9h
10 1010b Ah
11 1011b Bh
12 1100b Ch
13 1101b Dh
14 1110b Eh
15 1111b Fh

Como voc deve ter percebido, os nmeros so representados por sequncias de bits, e
extremamente importante entender esta representao para se entender o espao
ocupado na memria por um dado qualquer, pois, muitos dos C AVR usados no
Arduino tm apenas 128 bytes de dados para a memria RAM, por isto, no prossiga se
no entender esta parte do assunto.
Entendendo a Memria e os Tipos:
Antes de falarmos mais a fundo sobre os tipos, vamos entender melhor o conceito de
dados digitais e ver como isto influencia a organizao da memria interna de um C.
Imagine a seguinte linha de cdigo, no incio do programa:
unsigned int contador = 255;
Ela tem duas finalidades, a primeira dizer ao C para reservar dois bytes e escrever o
valor 255, a segunda informar ao compilador para reconhecer o rtulo contador
como sendo o endereo reservado ao grupo de bytes.
Partindo do princpio que a memria interna estava totalmente vazia, o compilador deve
reservar os dois primeiros endereos para a varivel do tipo unsigned int, como na
representao da memria abaixo:
bi
t
7
bi
t
6
bi
t
5
bi
t 4
bi
t 3
bi
t 2
bi
t 1
bi
t 0
Val
.
Dec
.
Val.
Hex
.
Endere
o
Rtulo
1 1 1 1 1 1 1 1 255 FF 0
Contado
r ( baixo
)
0 0 0 0 0 0 0 0 0 0 1
Contado
r ( alto )
x x x x x x x x x x 2 [livre]
x x x x x x x x x x 3 [livre]

Uma varivel do tipo unsigned int pode arquivar nmeros entre 0 e 65,535, ou, 0 e 2
16
-
1, e como 2
16
ocupam dois bytes, o compilador vai reservar este espao e o manter
reservado durante toda a execuo do programa.
Agora imagine o valor mximo da varivel contador como nunca ultrapassando o valor
decimal 20, no nosso programa imaginrio.
Como o menor espao de memria existente no Arduino um byte, 8 bits, e um byte
pode arquivar valores entre 0 e 255, ou 0 e 2
8
-1, fica claro o fato de no necessitarmos
escolher uma varivel do tipo unsigned int, por desperdiar um byte a mais, que nunca
vai ser usado, alm da execuo do programa necessitar tratar dois bytes a cada
interao da varivel contador, em vez de tratar um nico byte e ganhar tempo na
execuo do programa.
Variveis e Tipos Bsicos de Dados:
Todo programa tem a necessidade de arquivar e alterar dados temporrios, chamados de
variveis, durante a execuo do programa, cabendo ao programador informar ao
compilador que necessita arquivar dados e qual o tipo de informao a ser arquivada em
cada dado. Para isto, ele deve seguir a seguinte sintaxe:
tipo_do_dado rtudo_do_dado;
sendo opcional inicializar o valor desejado da seguinte forma:
tipo_do_dado rtudo_do_dado = valor_do_dado;
Exemplo:
int contador;
long tempo;
unsigned int contador_ascendente = 0;

No exemplo acima, int representa uma varivel do tipo nmero inteiro
contador representa o rtulo pelo qual o programador vai reconhecer a varivel.
Na prtica, quando o programador declara uma varivel, ele est dizendo ao compilador
para arquivar um espao em memria e aplicando um nome a este espao.
As regras so:
Os tipos possveis so predeterminados pelo framework Wiring e pela linguagem C;
Aps a declarao de tipo deve haver um ou mais espaos separando o rtulo da
varivel de seu tipo;
O rtulo poder conter letras sem acento, nmeros e underline ( _ );
O rtulo deve comear obrigatoriamente por letra, no sendo aceito nmeros no
primeiro caractere;
Underline no primeiro caractere no acarretar erro de compilao, mas, variveis
inicializadas com um ou dois undeline so reservados pelo compilador e podem dar erro
no programa depois de compilado;
Alguns compiladores aceitam at 64 caracteres e ignoram os caracteres excedentes;
O compilador diferencia letras maisculas e minsculas, sendo contador diferente de
Contador;
Os principais tipos so:
void:
Este no necessariamente um tipo, mas, serve para indicar que uma funo no
retornar nenhum valor;
int:
Ocupa dois bytes e aceita receber nmeros inteiros entre -32,768 e 32,767, ou -2
15
e 2
15
-
1. Sendo os bits 14 a 0 usados para arquivar o nmero. O bit 15, o mais significativo,
usado para arquivar o sinal, 0 para positivo e 1 para negativo.
Exemplo:
int pino_do_led = 13;
Sintaxe:
int rtulo = valor [ opcional ];
Neste ponto, vale salientar a consequncia de se usar o bit mais significativo como
sinal. Imagine uma varivel com o valor 32,767 decimal, ou 0111 1111 1111 1111b
como no exemplo abaixo.
int contador = 32767;
contador = contador + 1;

Contador tem o binrio 0111 1111 1111 1111b ocupando dois bytes, porm, ao se
somar 1, teremos o binrio 1000 0000 0000 0000b, ou -32,768 decimal. O mesmo
ocorre para -32,768. Veja o exemplo:
int contador = -32768;
contador = variavel - 1;

Contador tem o valor -32,786, ou 1000 0000 0000 0000b e ao se subtrair 1, contador
passa a ter o valor 0111 1111 1111 1111b ou +32,767.
unsigned int:
Ocupa dois bytes e pode receber valores entre 0 e 65,535, ou seja, valores entre 0 e 2
16
-
1. Porm, ao contrrio de int, no h a necessidade de se ocupar um bit para sinal, e
todos os bits so usado para o nmero. Mas, vale salientar um efeito parecido com o
ocorrido em int. Veja o exemplo:
unsigned int contador = 0;
contador = contador - 1;

No exemplo acima, contador contm o binrio 0000 0000 0000 0000b e ao se subtrair 1,
passa a ter o valor 1111 1111 1111 1111b, ou 65,535.
O mesmo vale se o valor de contador for 65,535 e for adicionado 1. O valor contido vai
rodar e passar a ser 0. Neste caso, perceba que existe um espao de memria
determinado para cada tipo de dado e sempre que o dado arquivado neste espao for
maior do que o espao reservado, a parte mais significativa vai ser perdida ficando
apenas a parte menos significativa de mesmo tamanho do espao determinado para o
tipo.
long:
Ocupa quatro bytes e pode conter valores entre -2,147,483,648 e 2,147,483,647, ou, -
2
31
e 2
31
-1. E assim como ocorre com int, o bit mais significativo usado para sinal.
unsigned long:
Ocupa quatro bytes e pode contar valores entre 0 e 4,294,967,295, ou 0 e 2
32
-1.
O que vale salientar o fato de ocorrerem os mesmo problemas de int e unsignet
int quando trabalhamos com os valores da borda mxima e mnima.
boolean:
O tipo boolean deveria representar valores binrios, podendo receber true ou false,
porm, a linguagem C diz que o tipo booleano ocupa um byte inteiro para representar
um nico bit, e portanto no deve ser usado, uma vez que o uso de operaes lgicas
podem fazer um byte representar 8 bits distintos de forma muito mais eficiente, do
ponto de vista do consumo de memria.
byte:
O tipo byte, como o nome diz, ocupa um nico byte e serve para arquivar nmeros
inteiros sem sinal com valores entre 0 e 255, ou 0 e 2
8
-1.
char:
Ocupa um nico byte e serve para arquivar letras. A grande caracterstica de char o
fato dele arquivar letras na forma de nmeros, conforme a tabela ASCII, e deve ser
usado com aspas simples. Apenas perceba o fato de char ser um tipo com sinal, onde o
bit mais significativo usado como sinal de positivo, 0, e negativo, 1. Por isto, os
valores armazenados vo de -128 a +127, ou -2
7
e 2
7
-1.
Exemplo:
char letra = A; // valor 65 decimal.
unsigned char:
unsigned char um tipo equivalente ao tipo byte e pode arquivar valores entre 0 e 255,
ou 0 e 2
8
. A dica o fato do grupo Arduino recomendar o uso de byte em vez
de unsigned char.
word:
word um tipo meio fora de padro, pois, ele no leva o modificador unsigned mesmo
sendo um tipo sem sinal. Na prtica, como ele ocupa dois bytes, ele uma cpia
de unsigned int.
long:
Ocupa quatro bytes e pode arquivar nmeros entre -2,147,483,648 a 2,147,483,647, ou
-2
31
e 2
31
-1.
Exemplo:
long velocidadeDaLuz = 186000L; L representa um nmero longo e ser visto mais
adiante.
unsigned long:
Ocupa quatro bytes e pode ocupar meros entre 0 e 4,294,967,295, ou 0 e 2
32
-1.
float e double:
float e double so nmeros de ponto flutuante, os no inteiros, porm, na linguagem C /
C++ comum, o double mais preciso do que o float, mas, como o Arduino uma
plataforma de 8 bits com pouca memria, ambos os tipos ocupam 4 bytes e tm preciso
de 6 a 7 dgitos decimais. Os valores vo de -3.4028235E+38 a 3.4028235E+38, onde
E+n representa 10
n.

Na prtica, eles so usados para ler os dados das entradas analgicas e devem ser usados
com muita cautela apenas quando necessrio, pois, ocupam muita memria RAM e
exigem um algoritmo muito mais complexo para serem calculados, o que leva muito
mais tempo e ocupa muito mais memria de cdigo.
Uma outra caracterstica desse tipo de nmero o fato deles no serem precisos e em
clculos simples tipo 2.0 + 3.0 a resposta nem sempre vai ser 5.0. Na prtica, pode dar
4.9999 ou 5.0001.
Exemplo:
float fracao = 1.2345; // float deve obrigatoriamente conter ponto, onde, 3 do tipo int e
3.0 do tipo float ou double.
Comentrios sobre tipos:
Uma caracterstica das linguagens C / C++ fato do comportamento dos tipos mudarem
de acordo com a capacidade da plataforma, ou seja, no Arduino, o tipo int tem 2 bytes,
mas, em uma plataforma maior, o tipo int pode ter 4 ou 8 bytes aceitando nmeros
muito maiores. Esta uma caracterstica da linguagem para poupar recursos do
equipamento e devido a pouca memria interna do Arduino existe uma distoro entre
os tipos unsigned int e word, onde os dois tipos so iguais.

Arduino Funes Predefinidas
WRI TTEN BY: KEMPER - SEP 15 11


Mdulo: Arduino
Aula: Arduino Bsico I
Ttulo: Funes Predefinidas
Esta aula tem o objetivo de introduzir e explicar o conceito de funes.
Introduo:
Nesta aula, vamos ter o nosso primeiro exemplo prtico de funo e acender o LED
contido da prpria placa Arduino, sem a necedidade de eletrnica externa.
Funes:
A funo tem a finalidade de organizar o cdigo, permitindo que o mesmo seja dividido
em blocos distintos com finalidades e necessidades distintas, alm de permitir o
reaproveitamento de cdigo, uma vez que funes para necessidades especficas podem
ser divididas em arquivos especficos facilitando o reaproveitamento em vrios projetos.
Imagine um pequeno rob se comunicando com um rastreador GPS. O rastreado GPS
emite dados com a localizao do equipamento uma vez por segundo e estes dados
necessitam ser tratados para serem usados.
Com o uso de funes fica fcil criar um arquivo especfico com todas as funes
necessrias para o tratamento da informao de modo a se poder usar o mesmo arquivo
em vrios projetos de robs.
O esboo da funo sempre o seguinte:
tipo_retornado nome_da_funo ( lista_de_parmetros )
{
Cdigo
. . .
Cdigo
}

Como exemplo prtico do uso de funes, o programa abaixo usa as funes
predefinidas do Wiring para piscar o LED presente na prpria placa Arduino.
byte const pinoDoLed = 13;

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

void loop ()
{
digitalWrite ( pinoDoLed, HIGH );
delay ( 500 );
digitalWrite ( pinoDoLed, LOW );
delay ( 500 );
}

Explicao Passo a Passo:
Na primeira linha do cdigo, trazemos como novidade o uso de constantes atravs da
palavra reservada const. Como voc deve est lembrado, a varivel um espao
reservado na memria de dados para arquivar dados temporrios e podem ser alterados
a qualquer momento pelo programa em execuo. Porm, no nosso caso, a primeira
linha de cdigo informa ao compilador para reconhecer o pino do LED como sendo o
pino digital 13, e este valor no vai mudar durante a execuo do programa, por isto, o
uso de constantes se encaixa de uma forma melhor, reservando um byte na memria de
cdigo, e no na memria de dados, para arquivar um valor que nunca ir mudar.
Dica Importante: A memria de dados tem muito pouco espao, por isto, sempre que
possvel, prefira reservar espao na memria de cdigo atravs da palavra reservada
const e sempre use o tipo que ocupar o menor espao possvel para arquivar a
informao de forma correta.
Em seguida, temos a funo reservada setup (), uma funo que no faz parte da
linguagem C/C++, mas, usada pelo framework wiring para inicializar tudo o que for
necessrio antes da execuo do programa. Na prtica, ela equivale a funo main () do
C/C++ e ser a primeira funo executada pelo cdigo do usurio, no importando se a
mesma foi definida no incio, meio ou final do cdigo. Ela sempre ser a primeira a ser
executada e mesmo que no seja necessria, deve ser definida.
No nosso caso, ela foi usada para inicializar a pino do LED como sendo um pino digital
de sada atravs da funo reservada pinMode (). Mas, no se preocupe, falaremos das
funes digitais mais abaixo.
A outra novidade trazida pela funo pinMode () o uso da constante
predefinidaOUTPUT, uma constante do wiring usada para inicializar um pino digital
como sada.
Aps a execuo da funo setup (), o framework wiring determina que a prxima
funo a ser executada a funo reservada loop (), e como o nome diz, ela um lao
infinito, ou seja, aps a execuo da ltima linha, o cdigo voltar a executar a primeira
linha de cdigo da funo loop () e permanecer assim enquanto o circuito estiver
ligado.
Pinos Digitais de Entrada / Sada e Suas Funes:
O nosso cdigo traz como novidade as funes digitais. So elas, pinMode
(), digitalWrite ()e digitalRead ().
pinMode ():
Esta uma funo predefinida do wiring e tem a finalidade de configurar os pinos do
C para poderem exercer a funo de entrada ou sada, mas, devido ao circuito interno
do C, um pino no pode exercer as duas funes ao mesmo tempo.
Sintaxe: pinMode ( pino, INPUT / OUTPUT );
Dica importante: Embora a maioria dos exemplos do Arduino usem uma varivel
tipoint como indicador do nmero do pino, esta prtica ocupa dois bytes da memria de
dados sem necessidade. Por isto, usar constantes do tipo byte permitem usar pinos com
valores entre 0 e 255, ocupando apenas um byte da memria de cdigo, que por sua
vez, muito maior do que a memria de dados.
Exemplo errado:
int pinoDoLed = 13;

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

O exemplo acima ocupa dois bytes dentro da memria de cdigo para arquivar o
nmero 13 e leva mais tempo para ser executado do que o exemplo abaixo, que por sua
vez, no ocupa espao em memria de dados e leva menos tempo para ser executado,
uma vez que necessita tratar apenas um byte, em vez de dois, sempre que pinoDoLed
for usado no cdigo.
Exemplo correto:
const byte pinoDoLed = 13;

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

digitalWrite ():
Esta uma funo de escrita com duas modalidades, de acordo com o valor passado a
funo pinMode ().
O primeiro caso quando o valor passado a pinMode () for OUTPUT. Neste
caso,digitalWrite () vai ligar ou desligar o pino, se o parmetro passado
for HIGH ouLOW respectivamente.
A dica prestar ateno na tenso de alimentao da placa Arduino, pois, se a sua placa
for de 5V, o pino de sada vai apresentar 5V quando for passado HIGH e 0V quando for
passado LOW. Porm, se a sua placa for de 3.3V, o pino vai apresentar 3.3V e 0V na
sada.
O segundo caso quando o valor passado a pinMode () for INPUT. Neste caso, a
funodigitalWrite () vai ativar o resistor de pullup quando o valor passado for HIGH e
desativar o resistor de pullup quando o valor passado for LOW.
Na prtica, existe uma caracterstica das entradas digitais chamada de impedncia, ou
resistncia equivalente da entrada em relao ao seu terra. Quando um pino digital
usado para entrada, ele assume o estado de alta impedncia, equivalente a um resistor de
100M fazendo que este pino no drene muita corrente dos circuitos ligados a entrada.
Isto faz o pino de entrada no ter um valor de tenso definido se o pino no estiver
ligado a nenhum circuito externo. Porm, quando ligamos o resistor de pullup, o C liga
ao pino de entrada um resistor interno no valor de 20k, forando a entrada a nvel
lgico alto at que um circuito externo force o pino de entrada ao nvel lgico baixo.
A dica prtica usar o resistor de pullup quando o pino estiver ligado a um boto ou
chave mecnica, e desligar o resistor de pullup quando opino estiver ligado a um
circuito digital qualquer.
Sintaxe: digitalWrite ( pino, HIGH / LOW );
digitalRead ():
Esta funo serve para ler o estado de um pino digital usado como entrada e retorna o
valor desse pino como sendo HIGH ou LOW.
Na prtica, o framework wiring permite um pouco mais de flexibilidade do que os
programadores C/C++ esto acostumados e voc pode definir o tipo que achar
conveniente, e embora os exemplos do site Arduino adorem usar o tipo int e ocupar dois
bytes sem necessidade, eu recomendo que seja usado o tipo byte ou boolean para se
economizar memria de cdigo.
Sintaxe: HIGH / LOW = digitalRead ( pino );
Exemplo:
const byte entrada = 7;

boolean valorLido;

void setup ()
{
pinMode ( entrada, INPUT );
}

void loop ()
{
valorLido = digitalRead ( entrada );
}
Dica de desempenho: O Arduino tem uma arquitetura de 8 bits, o que faz o C
necessitar trabalhar mais na hora de tratar uma varivel tipo int, word, float, ou
qualquer tipo que ocupe mais de um byte, por isto, executar um comando qualquer com
um dado tipo byte mais rpido do que executar o mesmo comando com dado tipo int,
por exemplo.

S-ar putea să vă placă și