Tutorial Iniciante Arduino: Guia Prático
Tutorial Iniciante Arduino: Guia Prático
Tutorial para leigos, isto é, pessoas que estão tomando contato com o Arduíno pela
primeira vez na vida e que também são totalmente leigas em eletrônica mas dotados de
incrível criatividade e enorme poder de concentração e com uma grande vontade de criar
dispositivos úteis para o dia a dia das pessoas, sem depender de especialistas.
O autor desta apostila, Roberto Massaru Watanabe, é formado em engenharia pela
Universidade de São Paulo, turma de 1972, e desejando projetar uma casa “customizada”
um Lar Doce Lar Sob Medida para cada um dos moradores, uma casa dotada de
dispositivos que automaticamente movimentam armários, pias, vaso sanitário,
trancam/destrancam gavetas a um simples toque na maçaneta deixando tudo na medida
da ergonomia (estatura, peso, altura, etc.) da pessoa e até de preferências pessoais como
a temperatura da água do banho.
No seu desenvolvimento, Watanabe encontrou muitas dificuldades em aprofundar-se no
Mundo Arduíno. Adquiriu dezenas de livros, acessou centenas de sites na internet mas
não encontrou explicações claras para detalhes os mais simples como o código de cores
de um resistor ou a polaridade das pernas de um transistor.
Anotou tudo que ía descobrindo, muitas vezes re-escrevendo de
maneira mais didática e, de depois de um tempo, tinha em mãos
material suficiente para compor uma apostila.
Seguindo o caráter pedagógico e a diretriz Open-Source da
ARDUÍNO, todo o conteúdo deste tutorial pode também ser
livremente copiado, impresso e distribuído. Àqueles que se
interessarem pelo tema, sugira fotografar QR-CODE ao lado para
obter, gratuitamente, um exemplar em formato PDF e assinado
digitalmente via ICP-Brasil.
1 - BOAS VINDAS:
Olhando para todos esses componentes você pode até ficar meio
assustado mas vamos com calma pois é andando devagar que se vai
ao longe, dando um passo de cada vez. Só para constar, vai aqui a
lista de todos os componentes que fazem parte da figura acima:
01 – CD com software e material de apoio
01 – Arduino Uno R3 + cabo USB
01 – Fonte chaveada 9v 1A
01 – Módulo Wireless Esp8266 WIFI
01 – Chave gangorra 2 polos KCD1/101
01 – Barra de pinos preta 1x40 180 Graus
50 – Jumper fêmea fêmea premium 20cm
01 – Protoboard 400 Pontos
01 – Clip bateria com plug saída P4
05 – Led difuso Verde 5mm
05 – Led difuso Amarelo 5mm
05 – Led difuso Vermelho 5mm
05 – Led Difuso Azul 5mm
01 – Display lcd 16x2 + barra de pinos
01 – Módulo Serial I2C para display
01 – Módulo relógio RTC DS3231
01 – Bateria CR2032 para RTC
01 – Módulo bluetooth HC-05
01 – Sensor ultrassônico HC-SR04
01 – Sensor de umidade e temperatura DHT11
Se o kit que você comprou ou ganhou veio tudo num pacote, então
adquira uma caixa organizadora com divisórias. A mais prática é a
Caixa Organizadora Tamanho G de tamanho 27X34cm da Plasmont:
você, que é novo no pedaço, não vai fazer ideia do ele faz nem
muito menos como utilizá-lo. Mas, não se desespere. Na pagina
([Link]/arduino/[Link]) eu
apresento a fotos dos sensores mais empregados. Consulte a página
e localize quem é quem.
Além das caixas para guardar componentes é bom ter várias caixas
para guardar "montagens em andamento". Algumas montagens,
pela complexidade ou pelo trabalho que dá para montar podem levar
um longo tempo para serem concluídas. Depois da montagem
finalizada, nem sempre se deseja desmontá-la. Então sugiro ter
3 - AS PARTES DO ARDUINO:
COMO É UM SKETCH?
para fazer uma pausa, não será possível a gente ver o LED aceso.
Você que está iniciando e não tem ainda o Editor ARDUINO instalado
no seu computador, então entre no site da ARDUINO
[Link] vá em SOFTWARE e baixe a última versão do
Editor de acordo com o sistema operacional do seu computador
(Android ou Ios). O site da Arduino apresenta a seguinte tela:
Sugiro criar uma pasta \ARDUINO e baixar o Editor Arduino lá: Depois de
baixado, você verá uma lista de pastas e programas como a seguinte:
Você, que é novo em Arduino, não vai entender esta tela e talvez
ache até complicada. Mas não é.
NOME DO PROGRAMA:
6 - EXPERIÊNCIAS PRÁTICAS:
Usando um
Um início bem
Protoboard Resistor que varia
básico
para montar 3 o valor da
para você que LED que emite Mede a distância
LEDs que resistência
está tomando cores até objetos
piscam um de em função da
contato pela
cada vez claridade.
primeira vez.
sequencialmente.
6- Sensor
7- LÊ C.R. da TV 8- Módulo Relé 9- Sensor PIR 10- Teclado 4X4
Reflexivo
Basta fazer passar uma corrente que ele irá emitir uma luz. A cor da luz
não é do LED pois a ciência não sabe, ainda, produzir luz com cores. A luz
emitida pelo LED é branca e a cor é dada pelo encapsulamento (o plástico
que recobre o led).
CUIDADO: A corrente que passamos pelo LED não pode ser maior que 20
miliamperes, de modo que você deve colocar um resistor em série com
ele para limitar a corrente elétrica. Se você passar uma corrente maior
que 20 miliamperes você vai queimar o led.
LED
RESISTOR
Sendo um diodo, o LED tem polaridade, isto é, uma das pernas é polo
positivo e a outra é polo negativo. O polo positivo é a perna mais longa. O
sentido da corrente deve ser do polo positivo para o polo negativo. Caso
você ligue o LED ao contrário, isto é, entrando com a corrente pelo polo
negativo, o LED não vai acender.
20 PASSO: Vamos enrolar a ponta do fio, com os dedos até que todos os
filetes fiquem bem juntos:
80 PASSO: A Perna Mais Longa (polo positivo) do LED num dos Furos
Digitais do ARDUIDO, por exemplo, no Furo n 0 8:
digitalWrite(8,LOW);
delay(1000);
}
O comando pinMode(8, OUTPUT) define para o Arduíno que a porta n0 8 será uma
porta de saída.
O comando digitalWrite(8,hIGH) ativa ou liga a porta 8, acendendo o LED que está
nela.
O comando delay(1000) pede para o Arduíno parar e esperar passar 1.000
milissegundos, que é 1 segundo.
O comando digitalWrite(8, LOW) desativa ou desliga a porta 8, apagando o LED.
Depois, graças ao laço void loop(){ ... } o que está entre as chaves {} é repetido
novamente, isto é, o Arduino volta a ligar o LED e assim por diante.
Um desses símbolos é a barra dupla // que pode ser colocada numa linha:
// Feito por Roberto Watanabe em 08.03.2018
NOTA IMPORTANTE:
Para a ligação dos componentes na experiência n0 1, anterior, você teve
que enrolar pernas de componentes (fios) na perna de outro componente,
como nas fotos:
Este tipo de ligação é muito precária pois pode ocorrer falhas no contato
elétrico, a ligação pode escapar, e quando você desmontar a experiência,
os componentes estarão com as pernas todas enroladas e tortas
dificultando a montagem de outra experiência.
À primeira vista parece uma placa complicada mas vamos ver que
existem ligações elétricas por baixo dos furos.
O grupo da borda:
E o grupo do meio:
Por exemplo, a perna mais curta no furo e5 e a perna mais longa no furo
e6. Em seguida enfiar as pernas do resistor nos furos c1 e c5. Observe
que a perna do resistor enfiada no furo c5 está fazendo contato (por
dentro do protoboard) com a perna mais curta do LED enfiada no futo e5.
Basta fazer passar uma corrente que ele irá emitir uma luiz. A cor da luz
não é do LED pois não sabemos, ainda, produzir luz com cores. A luz
emitida pelo LED é branca e a cor é dada pelo encapsulamento (o plástico
que recobre o led).
CUIDADO: A corrente que passamos pelo LED não pode ser maior que 20
miliamperes, de modo que você deve colocar um resistor em série com
ele para limitar a corrente elétrica.
Sendo um diodo, o LED tem polaridade, isto é, uma das pernas é polo
positivo e a outra é polo negativo. O polo positivo é a perna mais longa.
O sentido da corrente deve ser do polo positivo para o polo negativo.
Caso você ligue o LED ao contrário, isto é, entrando com a corrente pelo
polo negativo, o LED não vai acender.
Veja o programa:
int led1 = 8;
int led2 = 10;
int led3 = 12;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop() {
Basta fazer passar uma corrente que ele irá emitir uma luiz. A cor da luz
vai depende de qual das pernas está passando a corrente elétrica.
CUIDADO: A corrente que passamos pelo LED não pode ser maior que 20
miliamperes, de modo que você deve colocar um resistor em série com
ele para limitar a corrente elétrica.
Sendo um diodo, o LED tem polaridade, isto é, uma das pernas é polo
positivo e a outra é polo negativo. O polo positivo é a perna mais longa.
Veja uma montagem simples que nem precisa do ARDUINO para você ver
como é o funcionamento do LED RGB. No caso,empreguei resistores de
470 ohms, 3 botoeiras e uma bateria de 9 Volts.
LED
RGB
BOTOEIRA
B2
BOTOEIRA
BOTOEIRA B3
B1
void setup()
{
pinMode(RED_botao, INPUT_PULLUP); //Configura o pino 2 como entrada e com o
resistor de pullup ativo
pinMode(GREEN_botao, INPUT_PULLUP); //Configura o pino 3 como entrada e com
o resistor de pullup ativo
pinMode(BLUE_botao, INPUT_PULLUP); //Configura o pino 4 como entrada e com o
resistor de pullup ativo
}
void loop()
{
while(!(digitalRead(RED_botao))) //Enquanto o botão do pino 2 estiver pressionado
{
valor_RED = map(analogRead(pot), 0, 1023, 0, 255); //Pega o valor do potenciômetro,
//converte a escala de 0 a 1023 em 0 a 255, e armazena em
valor_RED
analogWrite(RED_RGB, valor_RED); //Gera o PWM no pino 9 (R - Vermelho), com o
valor convertido //do potenciômetro
}
//========================================
while(!(digitalRead(GREEN_botao))) //Enquanto o botão do pino 3 estiver pressionado
{
valor_GREEN = map(analogRead(pot), 0, 1023, 0, 255); //Pega o valor do
potenciômetro, //converte a escala de 0 a 1023 em 0 a 255, e armazena em
valor_GREEN
Usei no meu circuito um resistor de 330 ohms para o led e de 10K para o
LDR. Caso o seu circuito não funcione adequadamente, ajuste esses
valores :
// Programa : LDR - Sensor de Iluminação
// Autor : Arduino e Cia
void setup()
{
pinMode(portaLed, OUTPUT); //Define a porta do Led como saída
}
void loop()
{
int estado = analogRead(portaLDR); //Lê o valor fornecido pelo LDR
Material:
Protoboard
Jumpers
Placa Arduino
Notebook
* =================================
*/
#include <Ultrasonic.h>
#define PINO_TRG 4
#define PINO_ECHO 5
void setup() {
[Link](9600);
[Link]("Lendo Dados Recebidos ...");
}
void loop() {
float cmMsec;
delay(1000);
}
ALTERNATIVA NÃO USANDO A BIBLIOTECA Ultrasonic.h
/* =================================
* \watanabe\Demo04a-Distancia
*
* Circuito que mede distâncias com
* o Sensor de Ultrassom HC-SR-04.
* Alternavia SEM USAR a Biblioteca Ultrasonic.
*
* Roberto Massaru Watanabe
* R-0
* R-1 04/02/2018
* =================================
*/
void setup() {
pinMode(Gatilho, OUTPUT);
pinMode(Receptor, INPUT);
[Link](9600);
void loop() {
[Link]("Distância = ");
[Link](range);
[Link](" cm.\n");
delay(1000);
PROGRAMA:
// Programa : Teste sensor óptico reflexivo
// Autor : Arduino e Cia
int objeto = 0;
void setup()
{
pinMode(7, INPUT); //Pino ligado ao coletor do fototransistor
[Link](9600);
}
void loop()
{
objeto = digitalRead(7);
if (objeto == 0)
{
[Link]("Objeto : Detectado");
}
else
{
[Link]("Objeto : Ausente !");
}
}
Quando você pressiona uma tecla no controle remoto, ele consulta uma
tabela interna e emite um raio (invisível) que é "codificado", isto é,
carrega o código da tecla que foi pressionada. O aparelho de TV, ao
receber o raio, interpreta o código trazido pelo raio e, consultando a
tabela interna, descobre qual é a função desejada pelo usuário.
Monte o circuito:
Editor Arduino:
/*===================
* \WATANABE\DEMO-05-LeCR da TV
* Circuito que recebe comando do Controle Remoto
* e mostra no Monitor o código da tecla pressionada no CR
*
* Usa o Sensor VS-1838B com a perna de sinal
* conectado na porta 2 do Arduino
*============================
* Roberto Massaru Watanabe
* R-0 31/01/2018
*/
#include <IRremote.h>
int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
[Link](9600);
[Link]();
}
void loop(){
if ([Link](&results)){
[Link]([Link],HEX);
[Link]();
}
}
Com o Controle Remoto apontado para o VS-1838, apertando qualquer
tecla será mostrado no monitor o código da tecla pressionada.
Este Módulo Relé 5V com 2 canais é a alternativa perfeita pra quem busca
um módulo compacto e de qualidade para projetos com Arduino e outros
controladores.
Especificações:
– Modelo: SRD-05VDC-SL-C (Datasheet)
– Tensão de operação: 5VDC
– Permite controlar cargas de 220V AC
– Corrente típica de operação: 15~20mA
– LED indicador de status
– Pinagem: Normal Aberto, Normal Fechado e Comum
– Tensão de saída: (30 VDC a 10A) ou (250VAC a 10A)
– Furos de 3mm para fixação nas extremidades da placa
– Tempo de resposta: 5~10ms
– Dimensões: 51 x 38 x 20mm
– Peso: 30g
O botão da esquerda aciona o relé 1, que por sua vez está ligado à uma
lâmpada. Já o botão da direita controla o relé 2, que no nosso exemplo
liga e desliga um ventilador, mas pode ser substituído por qualquer
aparelho de sua preferência, como uma cafeteira ou um motor , desde
que a corrente exigida não ultrapasse 10 A
int porta_botao2 = 3;
//Armazena o estado do rele - 0 (LOW) ou 1 (HIGH)
int estadorele1 = 1;
int estadorele2 = 1;
//Armazena o valor lido dos botoes
int leitura1 = 0;
int leitura2 = 0;
void setup()
{
//Define pinos para o rele como saida
pinMode(porta_rele1, OUTPUT);
pinMode(porta_rele2, OUTPUT);
//Define pinos dos botoes como entrada
pinMode(porta_botao1, INPUT);
pinMode(porta_botao2, INPUT);
//Estado inicial dos reles - desligados
digitalWrite(porta_rele1, HIGH);
digitalWrite(porta_rele2, HIGH);
}
void loop()
{
//Verifica o acionamento do botao 1
leitura1 = digitalRead(porta_botao1);
if (leitura1 != 0)
{
while(digitalRead(porta_botao1) != 0)
{
delay(100);
}
//Inverte o estado da porta
estadorele1 = !estadorele1;
//Comandos para o rele 1
digitalWrite(porta_rele1, estadorele1);
}
Ele fica o tempo todo “vendo” os objetos e quando ocorre uma variação
no sinal infravermelho a saída é acionada por um determinado tempo. A
lente fresnel tem a função de "ampliar" o campo de visão do sensor,
condensando a luz.
void setup()
{
pinMode(pinoledverm, OUTPUT); //Define pino como saida
pinMode(pinoledazul, OUTPUT); //Define pino como saida
pinMode(pinopir, INPUT); //Define pino sensor como entrada
void loop()
{
acionamento = digitalRead(pinopir); //Le o valor do sensor PIR
if (acionamento == LOW) //Sem movimento, mantem led azul ligado
{
digitalWrite(pinoledverm, LOW);
digitalWrite(pinoledazul, HIGH);
}
else //Caso seja detectado um movimento, aciona o led vermelho
{
digitalWrite(pinoledverm, HIGH);
digitalWrite(pinoledazul, LOW);
}
}
CONEXÕES:
PROGRAMA:
void setup()
{
//Pinos ligados aos pinos 1, 2, 3 e 4 do teclado - Linhas
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
[Link](9600);
[Link]("Aguardando acionamento das teclas...");
[Link]();
}
void loop()
{
for (int ti = 3; ti<7; ti++)
{
//Alterna o estado dos pinos das linhas
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(ti, HIGH);
//Verifica se alguma tecla da coluna 1 foi pressionada
if (digitalRead(8) == HIGH)
{
imprime_linha_coluna(ti-2, 1);
while(digitalRead(8) == HIGH){}
}
Para mostrar a letra pressinada, você deve montar uma tabela interna
relacionando LinhaXColuna com a letra ou algarismo.
PROGRAMA:
byte seven_seg_digits[16][7] = { { 1,1,1,1,1,1,0 }, //DIGITO 0
{ 0,1,1,0,0,0,0 }, //DIGITO 1
{ 1,1,0,1,1,0,1 }, //DIGITO 2
{ 1,1,1,1,0,0,1 }, //DIGITO 3
{ 0,1,1,0,0,1,1 }, //DIGITO 4
{ 1,0,1,1,0,1,1 }, //DIGITO 5
{ 1,0,1,1,1,1,1 }, //DIGITO 6
{ 1,1,1,0,0,0,0 }, //DIGITO 7
{ 1,1,1,1,1,1,1 }, //DIGITO 8
{ 1,1,1,0,0,1,1 }, //DIGITO 9
{ 1,1,1,0,1,1,1 }, //DIGITO A
{ 0,0,1,1,1,1,1 }, //DIGITO B
{ 1,0,0,1,1,1,0 }, //DIGITO C
{ 0,1,1,1,1,0,1 }, //DIGITO D
{ 1,0,0,1,1,1,1 }, //DIGITO E
{ 1,0,0,0,1,1,1 } //DIGITO F
};
void setup(){
pinMode(2, OUTPUT); //PINO 2 -> SEGMENTO A
pinMode(3, OUTPUT); //PINO 3 -> SEGMENTO B
pinMode(4, OUTPUT); //PINO 4 -> SEGMENTO C
pinMode(5, OUTPUT); //PINO 5 -> SEGMENTO D
pinMode(6, OUTPUT); //PINO 6 -> SEGMENTO E
pinMode(7, OUTPUT); //PINO 7 -> SEGMENTO F
pinMode(8, OUTPUT); //PINO 8 -> SEGMENTO G
pinMode(9, OUTPUT); //PINO 9 -> SEGMENTO PONTO
writePonto(0);
}
void writePonto(byte dot){ //FUNÇÃO QUE ACIONA O PONTO NO DISPLAY
digitalWrite(9, dot);
}
void sevenSegWrite(byte digit){ //FUNCÇÃO QUE ACIONA O DISPLAY
byte pin = 2;
CONEXÕES:
PROGRAMA:
The [Link](16,2) command set up the LCD number of columns and rows. For
example, if you have an LCD with 20 columns and 4 rows (20x4) you will have to
change this to [Link](20x4).
The [Link]("--message--") command print a message to first column and row of lcd
display. The "message" must have maximum length equal to lcd columns number.
For example, for 16 columns display max length is equal with 16 and for 20 columns
display max length is equal with 20.
The [Link](0,1) command will set cursor to first column of second row. If you
have an LCD 20x4 and you want to print a message to column five and third row you
have to use: [Link](4,2).
void setup() {
// set up the LCD's number of columns and rows:
[Link](16, 2);
// Print a message to the LCD.
[Link]("Hello World!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
[Link](0, 1);
//Print a message to second line of LCD
[Link]("Codebender");
}
PROGRAMA:
Específico para o módulo sensor Ethernet ENC28J60.
#include "ETHER_28J60.h"
//Define o MAC da placa de rede. Nao eh necessario alterar
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
//Define o endereco IP da sua placa
static uint8_t ip[4] = {192, 168, 1, 199};
static uint16_t port = 80;
ETHER_28J60 e;
int pin = 1; // Pino analogico para ligacao do LM35
int tempc = 0; // Variavel que armazena a temperatura em Celsius
void setup()
{
//Inicializa a placa com as configuracoes fornecidas
[Link](mac, ip, port);
}
void loop()
{
//Calcula o valor da temperatura:
tempc = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
Constituído por seis fios, o Leitor Biométrico utiliza somente quatro destes
para realizar o seu funcionamento, no qual temos um fio que corresponde
ao GND, VCC, TX e RX, observe a relação de cores:
– Preto: GND;
– Branco: RX;
– Verde: TX;
– Vermelho: VCC.
1° PASSO
OBS: O pino Amarela e Azul contido no cabo do produto não será utilizado
em nosso projeto.
PROGRAMA-1 [Link]:
// Programa para teste de funcionamento do Leitor Biometrico
// Traduzido e adaptado por Usinainfo
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
uint8_t id;
uint8_t getFingerprintEnroll();
void setup() {
[Link](9600);
[Link]("Procurando Leitor Biometrico ...");
if ([Link]()) {
[Link]("Leitor Biometrico encontrado");
}
else {
[Link]("Leitor Biometrico nao encontrado");
while (1);
}
}
uint8_t readnumber(void) {
uint8_t num = 0;
boolean validnum = false;
while (1) {
while (! [Link]());
char c = [Link]();
if (isdigit(c)) {
num *= 10;
num += c - '0';
validnum = true;
} else if (validnum) {
return num;
}
}
}
void loop() {
[Link]("Pronto para Cadastrar Dados! Indique o ID# o qual deve ser
salvo");
id = readnumber();
[Link]("Inscrever ID#");
[Link](id);
while (! getFingerprintEnroll() );
}
uint8_t getFingerprintEnroll() {
int p = -1;
[Link]("Esperando digital para inscrever #");
[Link](id);
while (p != FINGERPRINT_OK) {
p = [Link]();
switch (p) {
case FINGERPRINT_OK:
[Link]("Imagem Capturada");
break;
case FINGERPRINT_NOFINGER:
[Link](".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Erro ao se Comunicar");
break;
case FINGERPRINT_IMAGEFAIL:
[Link]("Erro ao Capturar Imagem");
break;
default:
[Link]("Erro Desconhecido");
break;
}
}
// OK success!
p = finger.image2Tz(1);
switch (p) {
case FINGERPRINT_OK:
[Link]("Imagem convertida");
break;
case FINGERPRINT_IMAGEMESS:
[Link]("Imagem muito Confusa");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Erro ao se Comunicar");
return p;
case FINGERPRINT_FEATUREFAIL:
[Link]("Impossivel encontrar caracteristicas da digital");
return p;
case FINGERPRINT_INVALIDIMAGE:
[Link]("Impossível encontrar características da digital");
return p;
default:
[Link]("Erro Desconhecido");
return p;
}
[Link]("Retire o dedo");
delay(2000);
p = 0;
while (p != FINGERPRINT_NOFINGER) {
p = [Link]();
}
[Link]("ID ");
[Link](id);
p = -1;
[Link]("Coloque o mesmo dedo novamente");
while (p != FINGERPRINT_OK) {
p = [Link]();
switch (p) {
case FINGERPRINT_OK:
[Link]("Imagem Capturada");
break;
case FINGERPRINT_NOFINGER:
[Link](".");
break;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Erro ao se Comunicar");
break;
case FINGERPRINT_IMAGEFAIL:
[Link]("Erro ao Capturar Imagem");
break;
default:
[Link]("Erro Desconhecido");
break;
}
}
// OK success!
p = finger.image2Tz(2);
switch (p) {
case FINGERPRINT_OK:
[Link]("Imagem Convertida");
break;
case FINGERPRINT_IMAGEMESS:
[Link]("Imagem muito Confusa");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Erro ao se comunicar");
return p;
case FINGERPRINT_FEATUREFAIL:
[Link]("Nao foi possível encontrar características da impressao
digital");
return p;
case FINGERPRINT_INVALIDIMAGE:
[Link]("Nao foi possível encontrar características da impressao
digital");
return p;
default:
[Link]("Erro Desconhecido");
return p;
}
// OK converted!
[Link]("Criando cadastro para #");
[Link](id);
p = [Link]();
if (p == FINGERPRINT_OK) {
[Link]("Digital Combinada");
}
else if (p == FINGERPRINT_PACKETRECIEVEERR) {
[Link]("Erro ao se Comunicar");
return p;
}
else if (p == FINGERPRINT_ENROLLMISMATCH) {
[Link]("Digital nao corresponde");
return p;
}
else {
[Link]("Erro Desconhecido");
return p;
}
[Link]("ID ");
[Link](id);
p = [Link](id);
if (p == FINGERPRINT_OK) {
[Link]("Armazenado!");
}
else if (p == FINGERPRINT_PACKETRECIEVEERR) {
[Link]("Erro ao se Comunicar");
return p;
}
else if (p == FINGERPRINT_BADLOCATION) {
[Link]("Impossível Armazenar Dados");
return p;
}
else if (p == FINGERPRINT_FLASHERR) {
[Link]("Erro ao salvar na memoria");
return p;
}
else {
[Link]("Erro Desconhecido");
return p;
}
}
PROGRAMA-2 [Link]:
// Programa para teste de funcionamento do Leitor Biometrico
// Traduzido e adaptado por Usinainfo
#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
int getFingerprintIDez();
void setup() {
[Link](9600);
[Link]("Iniciando Leitor Biometrico");
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
[Link](57600);
if ([Link]()) {
[Link]("Leitor Biometrico Encontrado");
} else {
[Link]("Leitor Biometrico nao encontrada");
while (1);
}
[Link]("Esperando Dedo para Verificar");
}
void loop()
{
getFingerprintIDez();
digitalWrite(12, HIGH);
delay(50);
}
uint8_t getFingerprintID() {
uint8_t p = [Link]();
switch (p) {
case FINGERPRINT_OK:
[Link]("Imagem Capturada");
break;
case FINGERPRINT_NOFINGER:
[Link]("Dedo nao Localizado");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Erro ao se comunicar");
return p;
case FINGERPRINT_IMAGEFAIL:
[Link]("Erro ao Capturar");
return p;
default:
[Link]("Erro desconhecido");
return p;
}
p = finger.image2Tz();
switch (p) {
case FINGERPRINT_OK:
[Link]("Imagem Convertida");
break;
case FINGERPRINT_IMAGEMESS:
[Link]("Imagem muito confusa");
return p;
case FINGERPRINT_PACKETRECIEVEERR:
[Link]("Erro ao se comunicar");
return p;
case FINGERPRINT_FEATUREFAIL:
[Link]("Impossivel localizar Digital");
return p;
case FINGERPRINT_INVALIDIMAGE:
[Link]("Impossivel Localizar Digital");
return p;
default:
[Link]("Erro Desconhecido");
return p;
}
p = [Link]();
if (p == FINGERPRINT_OK) {
[Link]("Digital Encontrada");
} else if (p == FINGERPRINT_PACKETRECIEVEERR) {
[Link]("Erro ao se comunicar");
return p;
} else if (p == FINGERPRINT_NOTFOUND) {
[Link]("Digital Desconhecida");
return p;
} else {
[Link]("Erro Desconhecido");
return p;
}
[Link]("ID # Encontrado");
[Link]([Link]);
[Link](" com precisao de ");
[Link]([Link]);
}
int getFingerprintIDez() {
uint8_t p = [Link]();
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return -1;
p = [Link]();
if (p != FINGERPRINT_OK) return -1;
digitalWrite(12, LOW);
digitalWrite(11, HIGH);
delay(1000);
digitalWrite(11, LOW);
delay(1000);
digitalWrite(12, HIGH);
[Link]("ID # Encontrado");
[Link]([Link]);
[Link](" com precisao de ");
[Link]([Link]);
return [Link];
}
1 Push button
1 Led
1 resistor de 220 ohms (resistor pull-up do push-button)
1 resistor de 470 ohms (para o led)
#include <VirtualWire.h>
int valor_botao;
char Valor_CharMsg[4];
//Armazena estado led = ligar/desligar
int estado = 0;
void setup()
{
[Link](9600);
pinMode(ledPin,OUTPUT);
pinMode(pino_botao,INPUT);
//Pino ligado ao pino DATA do transmissor RF
vw_set_tx_pin(4);
//Velocidade de comunicacao (bits por segundo)
vw_setup(5000);
[Link]("Trasmissao modulo RF - Acione o botao...");
}
void loop()
{
//Verifica o estado do push-button
valor_botao = digitalRead(pino_botao);
//itoa(valor_botao,Valor_CharMsg,10);
#include <VirtualWire.h>
//Define pino led
int ledPin = 5;
int valor_recebido_RF;
char recebido_RF_char[4];
void setup()
{
[Link](9600);
pinMode(ledPin, OUTPUT);
//Pino ligado ao pino DATA do receptor RF
vw_set_rx_pin(7);
//Velocidade de comunicacao (bits por segundo)
vw_setup(5000);
//Inicia a recepcao
vw_rx_start();
[Link]("Recepcao modulo RF - Aguardando...");
}
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
if (vw_get_message(buf, &buflen))
{
int i;
for (i = 0; i < buflen; i++)
{
//Armazena os caracteres recebidos
recebido_RF_char[i] = char(buf[i]);
}
recebido_RF_char[buflen] = '\0';
//Converte o valor recebido para integer
valor_recebido_RF = atoi(recebido_RF_char);
//Mostra no serial monitor o valor recebido
[Link]("Recebido: ");
[Link](valor_recebido_RF);
//Altera o estado do led conforme o numero recebido
if (valor_recebido_RF == 1)
{
digitalWrite(ledPin, HIGH);
[Link](" - Led aceso !");
}
if (valor_recebido_RF == 0)
{
digitalWrite(ledPin, LOW);
[Link](" - Led apagado !");
}
}
}
Você também pode acompanhar o resultado da recepção desse
circuito no serial monitor, que vai ter informações sobre o valor
recebido e o estado do led:
ASSINATURA DIGITAL
A presente apostila recebe Assinatura Digital com Certificação Digital de acordo
com as disposições normativas da ICP-Brasil – Infraestrutura de Chaves Públicas
Brasileira, instituída pela Medida Provisória N0 2200-2 de 24/08/2001.
A assinatura válida está incorporada no quadro ao lado deste arquivo PDF. Se o
quadro ao lado se apresentar em branco é por que o conteúdo foi violado e,
portanto, não possui mais o aval do autor Roberto Massaru Watanabe.