Sobre o Autor
Formado como Tcnico em Eletrnica pela ETEC Aristteles Ferreira,
atualmente, estudo Engenharia Eltrica em uma universidade
localizada na cidade de Santos. Meu foco
principal seguir na rea de Eletrnica, vertente
na qual tenho mais facilidade e interesse.
1.1. H ARDWARE
1
como Shields. Tal tpico, discutiremos com mais detalhes no
prximo Captulo.
1.2. S OFTWARE
2
Windows, Linux e MAC OS, isto , voc escolhe a melhor opo de
Arduino deve funcionar e o que ele deve fazer. A IDE tem uma
3
seu trabalho. Analogamente, voc faz isso com as bibliotecas.
Existem trs tipos diferentes de bibliotecas: essencial(core), padro
e a de terceiros. Vamos entender um pouco sobre:
4
include no topo de seus sketch. Veja um exemplo, usando a
biblioteca Softwareserial:
#include <Softwareserial.h>
Biblioteca LiquidCrystal;
Biblioteca EEPROM;
Biblioteca Servo;
Biblioteca SPI;
Biblioteca Firmata;
5
A primeira maneira na prpria IDE do Arduino, na opo (Sketch
> Incluir Biblioteca > Gerenciar Bibliotecas ...):
6
Figura 1.3 - Instalao biblioteca auxiliar
7
1.4. B LINK L ED
/*
Blink
Turns on an LED on for one second, then off for one second,
repeatedly.
Most Arduinos have an on-board LED you can control. On the Uno
and
Leonardo, it is attached to digital pin 13. If you're unsure what
pin the on-board LED is connected to on your Arduino model, check
the documentation at http://www.arduino.cc
// the setup function runs once when you press reset or power the
board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}
8
1.5. E NTENDENDO O C DIGO
Protoboard;
Arduino Uno;
LED Vermelho ou outra cor de 5mm;
Resistor de 220;
9
Fios jumper.
10
1.6. R ESUMO
11
2. ENTRADAS E SADAS DO ARDUINO UNO
1Fonte <https://blog.arduino.cc/2011/01/05/nice-drawings-of-the-arduino-uno-and-mega-
2560/>
12
fonte de alimentao, cabealho ICSP e boto de reset, contendo
tudo que necessrio para um microcontrolador funcionar.
Microcontrolador ATmega328
Tenso de Operao 5V
Tenso de Entrada
7-12V
(recomendado)
Tenso de Entrada (limite) 5-20V
Entradas/Sadas Digitais 14 (6 podem ser utilizadas como PWM)
Entradas Analgicas 6
Corrente por I/O 20mA
Corrente por I/O para 3.3V 50mA
Memria Flash 32KB (0.5KB utilizado para bootloader)
SRAM 2KB
EEPROM 1KB
Clock 16MHz
Led embutido Pino 13
Tabela 2.1 - Especificaes Tcnicas - Arduino UNO
13
I2C: Pinos A4 (SDA) e A5 (SCL). Permite comunicao I2C, utilizando
a biblioteca padro Wire.
14
Creio que, a forma mais interessante de entender algo
explorando suas possibilidades e agregar conhecimento com
projetos. Agora, vamos explorar as entradas e sadas do uno com
um projeto simples, ok?
/*
Exemplo de Utilizao Push-button e LED
Utilizado: Arduino Uno, Push-button, LED
Autor: Yhan Christian Souza Silva - Data: 17/11/2016
*/
#define buttonPin 2
#define ledPin 8
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
15
}
}
digitalWrite(ledPin, ledState);
lastButtonState = reading;
}
Lista 2.1 - Exemplo Push Button e LED
16
Obs.: Debounce uma tcnica para evitar oscilaes e acionamentos
acidentais, prejudicando o funcionamento do programa, pode-se ser aplicado
por hardware ou software.
Protoboard;
Arduino Uno;
LED Vermelho ou outra cor de 5mm;
Push-button;
Resistor de 220;
Resistor de 10k;
Fios jumper.
17
Assim como no exemplo blink led, o resistor em srie com o led
tem a funo de limitar a corrente do mesmo. Para evitar danos ao
componente, com o push button ligado um resistor de pull-down,
para garantir que no haja rudos, que interfiram no devido
funcionamento do circuito.
Aps finalizar montagem, plugue o USB no Arduino e no
computador, clique em Verificar para checar se h algum erro.
Aps essa verificao, clique em Carregar para passar o cdigo
fonte para a placa. Com isso, o cdigo carregado e voc poder
testar, pressionando o boto: Uma vez, o led mudar de ligado
para desligado e, ao pressionar novamente, o led ligar, ou seja,
toda vez que pressionar o boto o led mudar o estado lgico.
18
leitura baseada na tenso aplicada no pino, sendo 0V (LOW) e
5V(HIGH). J no mundo analgico, as coisas possuem um intervalo
de valores, como, por exemplo, a temperatura variar em diversos
valores, onde estipularemos um mximo e um mnimo. Agora que
foi explicada a diferena, vamos explorar um pouco desse novo
mundo.
/*
Exemplo de Leitura Analgica
Utilizado: Arduino Uno, Potencimetro
Autor: Yhan Christian Souza Silva - Data: 17/11/2016
*/
#define potPin A0
void setup() {
Serial.begin(9600);
}
void loop() {
int reading = analogRead(potPin);
Serial.print("Leitura potenciometro: ");
Serial.println(reading, DEC);
delay(1000);
}
19
Entendendo o cdigo:
void loop: cria-se a varivel reading, para receber o valor lido pelo
pino do potencimetro, que varia de 0 1023 (por conta da
resoluo de 10 bits de uma entrada analgica no UNO).Exibe o
valor em decimal no monitor serial e se aguarda 1s para nova
leitura.
Protoboard;
Arduino Uno;
Potencimetro 10k;
Fios Jumper.
20
Figura 2.4 - Montagem na protoboard
21
2.7. Resumo
22
3. SENSORES PARA UTILIZAR EM SEUS PROJETOS.
23
Os sensores mais comuns e fceis de encontrar so: o LM35
(temperatura), DHT11/DHT22 (temperatura e umidade), LDR
(luminosidade) e existem muitos outros.
24
acionada a carga LED de alto brilho, quando o valor estiver dentro
das condies que estipularemos no cdigo fonte. Para isso, digite
cuidadosamente o sketch abaixo:
/*
Exemplo de LDR, LED de auto brilho
Utilizado: Arduino Uno, LDR, LED de auto brilho
Autor: Yhan Christian Souza Silva - Data: 17/11/2016
*/
// -- Hardware --
#define pinLdr 0
#define pinLed 8
// -- Variaveis --
int leituraValor = 0;
// -- Setup --
void setup() {
pinMode(pinLed, OUTPUT);
digitalWrite(pinLed, LOW);
}
void loop() {
leituraValor = analogRead(pinLdr);
if(leituraValor < 600) {
digitalWrite(pinLed, HIGH);
delay(125);
}
else digitalWrite(pinLed,LOW);
delay(125);
}
Lista 3.1 - Leitura de LDR e acionamento de LED
25
acionado; se no, continua desligado. O delay de 125ms o
intervalo para uma nova leitura do sensor LDR.
Protoboard;
Arduino Uno;
LED de auto brilho 5mm;
Sensor LDR;
Resistor de 330;
Resistor de 10k;
Fios jumper.
26
conjunto com o LDR, funcionar como um divisor de tenso. Aps
finalizar montagem, plugue o USB no Arduino e no computador,
clique em Verificar, para checar se h algum erro. Aps essa
verificao, clique em Carregar, para passar o cdigo fonte para a
placa.Com isso, o cdigo carregado e voc poder testar,
colocando sua mo prxima ao LDR para variar a luminosidade, ou
apagar a luz de seu quarto, laboratrio etc. Assim o LED acender e
quando houver maior luminosidade o LED apagar.
Tenho uma observao sobre o valor para acionamento do LED:
recomendo que antes de efetuar o teste com o LDR, exibindo seus
valores no Monitor Serial e, caso houver necessidade, altere 600
para o valor que se adeque a sua necessidade, fica o desafio hein :).
3.2. R ESUMO
27
4. MDULOS E SHIELDS PARA INCREMENTAR SEUS PROJETOS.
28
O shield uma placa de expanso de hardware, que se encaixa no
Arduino, fazendo um (sanduche). A inteno de seu uso acoplar
placa principal funes, que mesma no tem. Inmeros shields
possuem seus prprios conectores, possibilitando empilhar um
sobre o outro. Geralmente, para aproveitar todas suas
funcionalidades, necessria a instalao de bibliotecas adicionais,
disponveis, na maioria das vezes, no website do fabricante. Caso
voc tenha dvida sobre como instalar uma biblioteca de terceiros,
veja o primeiro Captulo do Ebook, onde tratamos o assunto.
29
do Arduino, para realizao de acionamento ou leitura de algum
dado.
30
Figura 4.3 - Mdulo rel 2 canais
Para acionar os rels muito simples: ele uma sada digital, logo,
voc define seu estado HIGH ou LOW. Um detalhe importante
desse mdulo em questo, que para acionar a carga, deve-se
mandar nvel lgico baixo, ou seja, LOW.
31
4.2.1. A CIONANDO CARGAS COM O MDULO R EL
#define btnRelay01 2
#define btnRelay02 3
#define relay01 8
#define relay02 9
void setup() {
pinMode(btnRelay01, INPUT);
pinMode(btnRelay02, INPUT);
pinMode(relay01, OUTPUT);
pinMode(relay02, OUTPUT);
digitalWrite(relay01, relay01State);
digitalWrite(relay02, relay02State);
}
void loop() {
int readRelay01 = digitalRead(btnRelay01);
int readRelay02 = digitalRead(btnRelay02);
if (readRelay01 != lastBtn01State) {
lastDebounceTime = millis();
}
if (readRelay02 != lastBtn02State) {
lastDebounceTime = millis();
}
32
if ((millis() - lastDebounceTime) > debounceDelay) {
if (readRelay01 != buttonState01) {
buttonState01 = readRelay01;
if (buttonState01 == HIGH) {
relay01State = !relay01State;
}
}
if (readRelay02 != buttonState02) {
buttonState02 = readRelay02;
if (buttonState02 == HIGH) {
relay02State = !relay02State;
}
}
}
digitalWrite(relay01, relay01State);
digitalWrite(relay02, relay02State);
lastBtn01State = readRelay01;
lastBtn02State = readRelay02;
}
33
pressionado, em ambos os casos inverte-se o estado se for HIGH
ficar LOW e vice-versa.
Protoboard;
Arduino Uno;
Mdulo Relay 2 Canais;
2 Lmpadas 220 ou 110V (poder usar outra carga AC);
Cabo Flexvel de 2,5 mm;
Fios jumper.
34
Figura 4.4 - Montagem na protoboard
35
Antes de ligar para testar, verifique todas as conexes e tenha
cuidado. Voc estar lidando com tenses de 110 ou 220V, no
manuseie jamais a placa com o circuito energizado, pois poder
tomar um belo de um choque. Vale ressaltar tambm, que faa a
montagem em um local reservado e longe de curiosos em sua
casa, a fim de evitar pequenos acidentes.
36
4.4. R ESUMO
37
5. COMUNICANDO SEU ARDUINO COM O MUNDO.
Funo Descrio
available() Retorna nmero de bytes disponveis para leitura
begin() Configura a taxa de transmisso, baud rate
print() Escreve na serial texto em formato ASCII
println() Similar a funo print(), com quebra de linha
read() L o byte mais recente
write() Escreve dados na porta serial
Tabela 5.1 - Funes Serial
38
um sensor de corrente AC est correto? Mande exibir via serial e
abra o serial monitor que ajuda bastante. Alm disso, um mdulo
bluetooth bem famoso, o HC-05, envia as informaes e recebe as
informaes por meio dessa comunicao.
39
Pino Funo
10 SS (slave)
11 MOSI
12 MISO
13 SCK
Funo Descrio
begin() Inicializa barramento SPI, definindo pinos SCK,MOSI
LOW e SS High
end() Desabilita comunicao SPI
setBitOrder(order) Define a ordem na qual os bits so deslocados no
barramento SPI
setClockDivider(amt) Define o divisor de clock de SPI em relao ao clock do
mcu, por padro adota-se um quarto do valor
byte transfer(val) Transfere um byte atravs do barramento SPI em
ambas as direes
setDataMode(mode) Define o modo de clock
Tabela 5.3 - Funes biblioteca SPI
40
5.3. C OMUNICAO I2C
Pino Funo
A4 SDA
A5 SCL
Tabela 5.4 - Arduino Uno: Comunicao I2C
Funo Descrio
available() Retorna o nmero de bytes disponveis
begin() Inicializa barramento I2C
beginTransmission(adress) Inicia transmisso de dados para o endereo
fornecido
endTransmission() Finaliza transmisso de dados
onReceiver(handler) Registra uma funo a ser chamada, quando um
dispositivo escravo recebe uma transmisso de
um mestre.
onRequest(handler) Registrar uma funo a ser chamada, quando um
mestre solicita dados a partir deste dispositivo
escravo.
41
read() L os bytes transmitidos do escravo para o
mestre
requestFrom() Mestre requisita bytes de um dispositivo escravo
write(value) Escreve dados do escravo em resposta a
requisio do mestre
Tabela 5.3 - Funes biblioteca Wire
42
hostis. Alm disso, sensores utilizam esse meio para transmitir seus
dados, um exemplo o sensor de temperatura DS18B20.
43
Python: Pyduino, PyFirmata;
Javascript: CylonJS, JohnnyFive;
.NET: Arduino;
Golang: Gobot;
Ruby: Artoo;
44
Enviar dados de seu Arduino via Bluetooth muito simples, pois
ele se comporta como uma portal serial virtual, ou seja, voc utiliza
os mesmos comandos de uma comunicao serial normal.
Pino Funo
VCC Alimentao VCC 3,6 6V
GND Ground
RX Comunicao c/ Arduino via Serial
TX Comunicao c/ Arduino via Serial
Tabela 5.4 - Pinagem mdulo bluetooth HC-06
45
5.6.2. C ONTROLE UM L ED RGB VIA B LUETOOTH
#define redPin 8
#define greenPin 9
#define bluePin 10
char val;
void setup() {
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
Serial.begin(9600);
}
void loop() {
while (Serial.available() > 0) {
val = Serial.read();
switch (val) {
case 'R':
digitalWrite(redPin, HIGH);
Serial.println("LED Vermelho - ligado");
break;
case 'r':
digitalWrite(redPin, LOW);
Serial.println("LED Vermelho - desligado");
break;
case 'G':
digitalWrite(greenPin, HIGH);
Serial.println("LED Verde - ligado");
break;
case 'g':
digitalWrite(greenPin, LOW);
Serial.println("LED Verde - desligado");
break;
46
case 'B':
digitalWrite(bluePin, HIGH);
Serial.println("LED Azul - ligado");
break;
case 'b':
digitalWrite(bluePin, LOW);
Serial.println("LED Azul - desligado");
break;
}
}
}
Lista 5.1 - Controle de Led RGB via bluetooth
Val Sada
R Led Vermelho ligado
r Led Vermelho desligado
G Led Verde ligado
g Led Verde desligado
B Led Azul ligado
b Led Azul desligado
Tabela 5.5 - Condies para acionamento dos pinos do led RGB
47
5.6.4. M ONTAGEM DO HARDWARE
Protoboard;
Arduino Uno;
Mdulo Bluetooh HC-06;
Led RGB;
Fios jumper.
48
O resistor nos pinos do LED RGB tem a funo de limitar a
corrente, como j explicado nos exemplos anteriores. Os
resistores, ligados ao mdulo bluetooth, tem a funo de criar um
divisor de tenso e garantir o nvel de 3,3V nos pinos de sinal
(como explicado acima). Aps finalizar montagem, plugue o USB no
Arduino e no computador, clique em Verificar, para checar se h
algum erro. Aps essa verificao, clique em Carregar (antes disso,
desconecte o pino RX e TX do mdulo bluetooth no Arduino), para
passar o cdigo fonte para a placa. Com isso, o cdigo carregado,
ento reconecte os pinos RX e TX do mdulo bluetooth no
Arduino.Agora, precisaremos testar se realmente isso funciona ;)'.
49
Figura 5.2 - Pareando dispositivo
50
Com o aplicativo aberto, clique sobre o HC-06 e escolha o modo
Terminal. Ao abrir a tela, clique logo abaixo em type in command e
digite uma das letras para acionamento dos leds RGB. Perceber
que o LED ligar e, ao mandar o comando para desligar, o mesmo
desligar (veja a tabela, logo acima, na explicao do cdigo).
51
5.7. O UTRAS COMUNICAES
5.8. R ESUMO
52
Pow, tem alguma dvida sobre cdigo ? No sabe o que diabos
um if, else, swich , etc. Separei, para voc, 2 apndices bem legais
logo abaixo, indicando bons locais para estudar e aprender mais. E,
alm disso, um pouco sobre a programao do Arduino.
53
A. APNDICE - GUIA PARA CODIFICAR SEU ARDUINO.
Variveis
Instrues de Controle
Loops
Funes
A.1. V ARIVEIS
54
Tipo de
Descrio
variavel
byte Um nmero de 8 bits com um intervalo de 0 a 255
boolean Detm dois valores: verdadeiro ou falso
Um nico caractere ASCII, armazenado como um nmero de
char
8 bits
Um nmero que tem ponto decimal, armazenado como um
float valor de 32 bits, com o intervalo de 3,4028325e+38 -
3,4028325e+38
Um nmero inteiro de 16 bits, com o intervalo de 32.767
int
-32.768
Um nmero inteiro longo armazenado como um valor de 32
long
bits, com o intervalo de 2.147.483.647 -2.147.483.648
Um nmero inteiro, sem valores negativos de 16 bits, com o
unsigned int
intervalo de 0 65.545
Um nmero inteiro longo, sem valores negativos de 32bits,
unsigned long
com o intervalo de 0 4.294.967.296
Um nmero sem sinal, armazenado como um valor de 16 bits,
word
com o intervalo de 0 65.545
Tabela A.1 - Tipos de Variveis
A.1.2. A RRAYS
55
A.1.3. S TRINGS
A.1.4. C ONSTANTES
void setup() {
pinMode(myLed, OUTPUT);
}
void loop() {
const int myLedLocal = 14; //Varivel Local
pinMode(myLedLocal, OUTPUT);
}
56
A.2. I NSTRUES DE C ONTROLE
Operador Descrio
> Maior que
>= Maior ou igual a
== Igualdade
< Menor que
<= Menor ou igual a
!= Desigualdade
&& Operador lgico E (AND)
|| Operador lgico OU (OR)
! Operador lgico NO (NOT)
Tabela A.2 - Operadores relacionais e lgicos
57
if( a > b) {
//ento a maior que b
}
else if (b > a) {
//ento b maior que a
}
else {
//nenhuma das condies anteriores verdadeira logo a = b
}
58
A.3. L OOP
A.3.1. F OR
A.3.2. W HILE
59
loop. Alm disso, muito usado para testes de entradas de
sensores ou botes, veja um exemplo:
int sensorValue = 0;
while(sensorValue < 1300) {
sensorValue = analogRead(analogPin);
}
A.3.3. D O W HILE
Assim como nos demais loops, esse bloco ficar rodando, at que a
condio seja falsa.
A.4. F UNES
60
necessrios, em seu cdigo. Para criar uma funo, voc precisa
declarar o tipo da funo, dar um nome a ela e, entre parnteses,
por os parmetros dessa funo. Ok, um pouco difcil de
entender de primeira rs. Mas,vamos ao exemplo de converso de
temperatura de Fahrenheit para Celsius e retorno desse valor.
float calculaTemperatura(float fahrenheit) {
float celsius;
celsius = (fahrenheit - 32) / 1.8;
return celsius;
}
A.5. R ESUMO
61
B. APNDICE - ONDE APRENDER MAIS.
Bom, espero que isso lhe ajude...Separei, para vocs, alguns links
que achei teis, relacionados a Arduino.
Filipe Flop:
http://blog.filipeflop.com/
WR Kits:
https://www.youtube.com/playlist?list=PLZ8dBTV2_5HSyOXhJ77d-iyt5Z_v_1DPM
GBK Robotics:
http://gbkrobotics.com.br/index.php/category/tutoriais/
Embarcados:
http://www.embarcados.com.br/
62
CONSIDERAES FINAIS...
At a prxima!