R botic
ARDUINO LAB
ARDUINO PARA INICIANTES
WWW.ROBOTIC.COM.BR
R botic
Arduino Lab - Microcontroladores
Arduino Duemilanove Atmega 328
O arduino uma placa simples que contem tudo que voc precisa para comear a
trabalhar com eletrnica e programao de microcontroladores. Este diagrama ilustra
os principais componentes da placa:
Diferena entre Arduino UNO e Duemilanove:
O microcontrolador utilizado no UNO o Atmega 328, o mesmo do Duemilanove. Porm no Arduino UNO
existe um microcontrolador adicional (Atmega8U2) no lugar do chip FTDI utilizado no Duemilanove, que
responsvel pela converso USB/Serial. A gravao no UNO ficou mais rpida tambm.
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Arduino UNO ou Duemilanove com Atmega328
O Arduino Uno uma placa de microcontrolador baseado no ATmega328. Ele tem 14 pinos de entrada/sada
digital (dos quais 6 podem ser usados como sadas PWM), 6 entradas analgicas, um cristal oscilador de
16MHz, uma conexo USB, uma entrada de alimentao uma conexo ICSP e um boto de reset. Ele contm
todos os componentes necessrios para suportar o microcontrolador, simplesmente conecte a um computador
pela porta USB ou alimentar com uma fonte ou com uma bateria e tudo pronto para comear.
A diferena do Uno para o Duemilanove que o Uno no utiliza o chip FTDI cara converso do sinal serial.
Utiliza no seu lugar um Atmega8U2 programado como conversor de USB para serial.
Resumo
Microcontrolador ATmega328
Voltagem Operacional 5V
Voltagem de entrada (recomendada) 7-12V
Voltagem de entrada (limites) 6-20V
Pinos E/S digitais 14 (dos quais 6 podems ser sadas PWM)
Pinos de entrada analgica 6
Corrente CC por pino E/S 40 mA
Corrente CC para o pino 3,3V 50 mA
Flash Memory 32 KB (ATmega328) dos quais 0,5KB so utilizados pelo bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Velocidade de Clock 16 Mhz
O arduino Uno pode ser alimentado pela porta USB ou com uma fonte externa. A alimentao selecionada
automaticamente. Alimentao externa pode ser tanto de uma fonte DC ou bateria.
Esta placa tem uma faixa recomendvel de alimentao externa de 7 a 12 volts evitando o superaquecimento
da placa.
Os pinos de alimentao so os seguintes:
VIN. A tenso de entrada para a placa Arduino, quando se est usando uma fonte externa de energia
(ao contrrio de 5 volts a partir da conexo USB). Voc pode fornecer a tenso atravs desse pino.
5V. A fonte de alimentao regulada usada para alimentar o microcontrolador e outros componentes na placa.
Isto pode vir tanto de VIN atravs de um regulador de bordo, ou seja alimentado por USB ou outra fonte de 5V
regulados.
3V3. gerada pelo chip FTDI-on. Mximo consumo de corrente de 50 mA.
Ground pinos GND..
Memria
O ATmega168 tem 16 KB de memria flash para armazenar o cdigo (de 2 KB que usado para o gerenciador
de inicializao).
ATmega328 tem 32 KB, (tambm com 2 KB utilizado para o bootloader). O ATmega168 tem 1 KB de SRAM e
512 bytes de EEPROM (que pode ser lido e escrito com a biblioteca EEPROM ), o ATmega328 tem 2 KB de
SRAM e 1 KB de EEPROM.
Entrada e Sada
Cada um dos 14 pinos digital no arduino pode ser usado como uma entrada ou sada, usando pinMode () ,
digitalWrite () , e digitalRead () funes. Eles operam em 5 volts. Cada pino pode fornecer ou receber um
mximo de 40 mA e tem um resistor pull-up interno (desligado por padro) de 20-50 kOhms.
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Pinos com funes especficas:
Serial: 0 (RX) e 1 (TX). Usado para receber (RX) e transmitir (TX TTL srie de dados). Esses pinos so ligados
aos pinos correspondentes do chip FTDI USB-to-TTL Serial.
Interrupes externas: 2 e 3. Estes pinos podem ser configurados para disparar uma interrupo em um
valor baixo, um aumento ou diminuio de ponta, ou uma alterao no valor. (Veja a funo attachInterrupt )
PWM: 3, 5, 6, 9, 10 e 11. Pinos de sada PWM
LED: 13. H um built-in LED conectado ao pino digital 13.
Quando o pino est em valor alto , o LED est ligado, quando o pino baixo, ele est desligado
O arduino tem 6 entradas analgicas, cada uma das quais fornecem 10 bits de resoluo (ou seja, 1.024 valores
diferentes). Por padro, elas medem do GND para 5 volts, mas possvel mudar a extremidade superior de sua
escala com o pino AREF e analogReference () funo.
AREF. Tenso de referncia para as entradas analgicas. Usado com analogReference ().
Reset. Traga esta linha baixa para redefinir o microcontrolador. Tipicamente usado para adicionar um boto
de reset de escudos.
Comunicao
O Arduino tem uma srie de facilidades para se comunicar com um computador, outro Arduino, ou outros
microcontroladores. O ATmega168 e ATmega328 fornecer UART TTL (5V), comunicao serial,
que est disponvel nos pinos digitais 0 (RX) e 1 (TX). Um FT232RL FTDI os canais de comunicao
serial de USB e os drivers FTDI (includo com o software Arduino) oferecem uma porta virtual com o software no
computador. O software inclui um monitor Arduino serial que permite que dados simples de texto a ser enviado
e da placa Arduino. O RX e TX LEDs na placa pisca quando dados esto sendo transmitidos atravs do chip
FTDI e conexo USB para o computador (mas no para comunicao serial nos pinos 0 e 1).
A biblioteca Software Serial permite a comunicao serial em qualquer um dos pinos digitais do arduino.
O apoio tambm ATmega328 I2C (TWI) e comunicao SPI.
O software inclui uma biblioteca Arduino Wire para simplificar o uso do barramento I2C, veja a documentao
para mais detalhes. Para usar a comunicao SPI, consulte o datasheet ou ATmega328
Programao
O Arduino pode ser programado com o software IDE Arduino. Selecione "Arduino Duemilanove ou UNO Atmega
328 no menu Ferramentas (de acordo com o microcontrolador na placa).
O Arduino ATmega328 vem com um gerenciador (BOOTLOADER) que permite que voc faa o upload do novo
cdigo para ele sem a utilizao de um programador de hardware externo.
Ele se comunica utilizando o protocolo STK500 original ( de referncia , arquivos de cabealho C ).
Voc tambm pode ignorar o bootloader e programar o microcontrolador atravs do ICSP
(In-Circuit Serial Programming),
O Arduino tem um polyfuse resettable que protege as portas USB do seu computador a partir de shorts e
sobrecorrente. Embora a maioria dos computadores fornecem sua prpria proteo.
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Instalando o Programa
1 Faa o download do ambiente de desenvolvimento do Arduino verso 23 em:
www.robotic.com.br Para programar uma placa Arduino voc precisa do ambiente de desenvolvimento.
Quando o download terminar descompacte (unzip) os arquivos. Certifique-se de preservar a estrutura das pastas.
Abra a pasta. Dentro voc vai encontrar alguns arquivos e sub-pastas. O aplicativo Arduino seu programa
ambiente de desenvolvimento.
2 Ao conectar a Placa Arduino na Porta USB e caso for solicitado drives localize os drivers USB
para o chip FTDI da placa na pasta drivers/FTDI USB Drivers da distribuio do Arduino ou na pasta drivers
para o UNO.
Configurando:
Certifique-se que o Arduino Duemilanove ou UNO (Atmega 328) est selecionado em: Tools > Board
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Escolhendo a Porta Serial Selecione a porta serial menu Tools | Serial Port. No Windows deveria ser:
COM3, COM4 ou COM5 para uma placa USB. Para descobrir qual abra o Gerenciador de Dispositivos do
Windows (na aba Hardware do painel de controle do sistema). Procure por "USB Serial Port" na seo de Portas;
www.robotic.com.br
R botic
Ultrasom
Arduino Lab - Microcontroladores
Display LCD
RTC
Conectores
para o Arduino
Sensor de
Temperatura
Servo Motor
Mdulo Receptor
Infravermelho
3 LEDs comuns
1 LED infrared
Protoboard
Rel Chaves LDR Buzzer
Tactils
OBS: Para os experimentos deste manual sero necessrios as seguintes bibliotecas:
- DallasTemperature
- MegaServo
- LiquidCrystal
- Wire
- Irremote
- Ultrasonic
Verifique no diretrio onde foi instalado a IDE do arduino se na pasta LIBRARIES
tem estas bibliotecas, caso falte alguma, baixe da pagina de download no site:
www.robotic.com.br e descompacte na pasta libraries.
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 1: LED Diodo Emissor de Luz
Um led constitudo por uma juno PN de material semicondutor e por dois terminais, o nodo (A) e o Ctodo (K).
A cor da luz emitida pelo led depende do material semicondutor que o constitui.
Simbologia
O led est diretamente polarizado, e emite luz,
quando o nodo est positivo em relao ao ctodo.
O led est inversamente polarizado, e no emite luz,
quando o nodo est negativo em relao ao ctodo.
Ligando um LED no Arduino
Cada cor de LED possui uma tensao de trabalho (V) e uma corrente maxima
suportada (I) que varia para cada fabricante, mas varia pouco em torno destes valores:
Vermelhos e Amarelos - 1,7V a 2V Verdes - 2V a 3V Azul,Violeta e Ultra-violeta
Acima de 3V
Como os pinos do arduino trabalham com +5v necessrio um resistor em srie com
o LED afim de limitar a voltagem no LED impedindo sua queima.
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 1: Led piscante
Faa as ligaes conforme abaixo
Conectando os Jumpers
D8 - Pino Digital 8 ligado ao LED
Copie e cole este programa na IDE do arduino
/* LED piscante
*
* Liga e Desliga um LED conectado a um pino digital 8
* em intervalos de 1 segundos.
*/
int ledPin = 8;
// LED conectado ao pino digital 8
void setup()
{
pinMode(ledPin, OUTPUT);
// configura pino digital como sada
}
void loop()
{
digitalWrite(ledPin, HIGH); // liga o LED
delay(1000);
// temporiza 1 segundo
digitalWrite(ledPin, LOW); // desliga o LED
delay(1000);
// aguarda mais um segundo
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 3: Gerando sons - Buzzer
Faa as ligaes conforme abaixo
Conectando os Jumpers
Copie e cole este programa na IDE do arduino
/*
Melodia
D8 - Pino Digital 8 ligado ao BUZZER
Faa o download da biblioteca pitches
*/
#include "pitches.h"
// notas da melodia:
int melody[] = {
NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};
// duraes nota: 4 nota = trimestre, nota 8 = oitava, etc:
int noteDurations[] = {
4, 8, 8, 4,4,4,4,4 };
void setup() {
// iterao sobre as notas da melodia:
for (int thisNote = 0; thisNote < 8; thisNote++) {
// calcular a durao da nota, em um segundo
// dividido pelo tipo de nota.
// por exemplo semnima = 1000 / 4, colcheia = 1000 / 8, etc
int noteDuration = 1000/noteDurations[thisNote];
tone(8, melody[thisNote],noteDuration);
// para distinguir as notas, definir um tempo mnimo entre elas.
// durao da nota + 30% parece funcionar bem:
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// parar a reproduo de tom:
noTone(8);
}
}
void loop() {
// para no repetir a melodia.
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Entendendo o Servo Motor RC (rdio controle)
Servo Motor RC so usadas para converter o sinal elctrico em movimento polar
ou linear.
Os servos RC so controlados com um sinal de PWM conduzido ao seu fio de sinal. Um sinal de PWM tem
trs parmetros que o caracteriza: O primeiro a amplitude (ou pico a tenso de pico) do sinal. No arduino
usa 5 volts. O segundo a frequncia. Em PWM, a frequncia normalmente fixado a um valor entre 30-50
Hz para um servo analgico e 300 a 400 Hz para servos digitais
O terceiro valor o mais crtico, o pulso positivo com PWM. A largura do pulso ter um resultado direto para
a posio de acionamento. Em outras palavras, para controlar a posio de um servo, deve alterar a durao
do pulso positivo do sinal de PWM conduzidos para o fio de sinal do servo.
Definio de: PWM: (Pulse Width Modulation) uma tcnica de modulao que gera impulsos de largura
varivel para representar a amplitude de um sinal de entrada analgico.
O servo espera um pulso a cada 20 ms a fim de obter informaes corretas sobre o ngulo. A largura de pulso
leva o servo diretamente para o ngulo. Os servos trabalham com larguras de pulso entre 1000 a 2000
microsegundos.
Tambm podemos posicionar o servo diretamente com o valor do ngulo a ser posicionado usando outra funo
do arduino
Pulsos PWM para movimentar um Servo
Largura de Pulso de 2000 microsegundos o servo gira em sentido anit-horrio
periodo 20 mS
Largura de Pulso de 1500 microsegundos o servo pra na posio central
Largura de Pulso de 1000 microsegundos o servo gira em sentido horrio
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 4: Controlando um Servo Motor com pulsos em microsegundos
Obs. Para experimentos com motores necessrio
uma fonte externa de 9 ou 12 volts de no mnimo
800mA; pois a porta USB no fornece corrente suficiente.
Conectando os Jumpers
SIN do Servo ao pino digital 9
Este servo um servo de posio, ou seja gira para determinados ngulos, existem os servos de
rotao contnua, que giram continuamente para os dois lados ou ficam parados conforme a largura
de pulso (PWM) ou conforme o ngulo.
#include <Servo.h> //inclue a biblioteca Servo
Servo meu_servo ; //Cria o objeto meu_servo
void setup(){ //Configurao inicial, no se repete
meu_servo.attach(9) ;
//Meu_servo ligado no pino 9 (PWM)
// Envia um pulso de 1500 microsegundo mantendo o servo parado em 90
meu_servo.writeMicroseconds(1500);
delay(1000); //epera 1 segundo
}
void loop() { //Repete enquanto for verdadeiro
meu_servo.writeMicroseconds(1000); // gira o servo horario para 0
delay(2000); //espera 2 segundos
meu_servo.writeMicroseconds(1500); // pra o servo na posio central 90
delay(2000); //espera 2 segundos
meu_servo.writeMicroseconds(2000); // gira o servo sentido contrrio para180
delay(2000); //espera 2 segundos
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 4.1: Controlando um Servo Motor por ngulos.
90
180
Conectando os Jumpers
SIN do Servo ao pino digital 9
Este servo um servo de posio, ou seja gira para determinados ngulos, existem os servos de
rotao contnua, que giram continuamente para os dois lados ou ficam parados conforme a largura
de pulso (PWM) ou conforme o ngulo.
0 ->
180 ->
Largura de pulso 544
Largura de pulso 2400
#include <Servo.h> //inclue a biblioteca Servo
Servo myservo ;
//Cria o objeto meu_servo
void setup(){
//Configurao inicial, no se repete
myservo.attach(9,544,2400) ; //Meu servo ligado no pin9 (PWM) pulso mini e maximo para o servo
}
//fim do void setup
void loop() {
myservo.write(0) ;
delay(2000);
//Repete enquanto for verdadeiro
// gira o servo horario para 0
//espera 2 segundos
myservo.write(90) ; // pra o servo na posio central 90
delay(2000);
//espera 2 segundos
myservo.write(180) ; // gira o servo sentido contrrio para 180
delay(2000);
//espera 2 segundos
} //fim do void loop
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 4.2: Controlando um Servo Motor por ngulo via Serial Monitor
Conectando os Jumpers
SIN do Servo ao pino digital 9
Copie e cole este programa na IDE do arduino
#include <Servo.h> //Inclui a biblioteca Servo
Servo myservo;
//Cria a varivel myservo
int char_in ;
//Cria a varivel char_in para receber as opes do menu
void setup()
//Configurao inicial
{
Serial.begin(9600) ; //abre a porta serial, define a taxa de dados a 9600 bps
myservo.attach(9,544,2400) ; //Meu servo ligado no pin9 (PWM) pulso mini e maximo para o servo
colocaMenu() ;
//Cria o Menu
}
void loop() //Repete at verdadeiro
{
if(Serial.available() > 0 ) { //Verifica se a porta serial est disponvel
char_in = Serial.read() ; //L o valor na porta serial e carrega para a varivel
Serial.print(char_in,BYTE) ; //Mostra o valor carregado na varivel e muta para tipo byte
switch (char_in) { //A instruo switch espera valores numricos nicos para cada opo da funo case;
case '1': //caso o valor da varivel seja 1
myservo.write(0) ; //Posiciona o servo no ngulo 0 grau
Serial.println(" Vai ao angulo 0 grau") ; //mostra esta frase no serial monitor
break;
case '2': //caso o valor da varivel seja 2
myservo.write(90) ; //Posiciona o servo no ngulo 90 graus
Serial.println(" Vai ao angulo 90 graus") ; //mostra esta frase no serial monitor
break;
case '3':
//caso o valor da varivel seja 3
myservo.write(180) ; //Posiciona o servo no ngulo 180 graus
Serial.println(" Vai ao angulo 180 graus") ; //mostra esta frase no serial monitor
break;
} //fim da funo switch
} //fim da funo serial.available()
} //fim da void loop
void colocaMenu() { //Mostra o menu na tela
Serial.println("Teste de motor servo") ;
Serial.println("Selecione :") ;
Serial.println("1 - VAI PARA O ANGULO 0 GRAU") ;
Serial.println("2 - VAI PARA O ANGULO 90 GRAUS") ;
Serial.println("3 - VAI PARA O ANGULO 180 GRAUS") ;
Serial.println("Opcao ? ") ;
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 5: Controlando um LED pelo sersor de luz LDR
Conectando os Jumpers
D8 - Pino Digital 8 ligado ao LED
D2 - Pino digital 2 Ligado ao LDR
Faa as ligaes conforme abaixo
Copie e cole este programa na IDE do arduino
//Programa para controle de LED com LDR
int ledpin = 8;
int ldr = 2;
int val;
void setup () {
pinMode (ledpin, OUTPUT );
pinMode (ldr, INPUT );
}
void loop () {
val = digitalRead(ldr);
if (val == LOW ) {
digitalWrite (ledpin, LOW );
}
if (val == HIGH ) {
digitalWrite (ledpin, HIGH );
}
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 6: Controlando um Servo Motor pelo sensor de luz LDR
Faa as ligaes conforme abaixo
Copie e cole este programa na IDE do arduino
Conectando os Jumpers
//Programa para controlar o servo com LDR
D10 - Pino Digital 10 ligado ao SIN do servo
D2 - Pino digital 2 Ligado ao LDR
#include <Servo.h>
Servo myservo;
int servo = 10;
int ldr = 2;
int val;
void setup(){
pinMode(servo,OUTPUT);
pinMode(ldr,INPUT);
myservo.attach(servo,880,2300) ; //Inicia com o servo parado
myservo.write(70);
delay(300);
}
void loop() {
val = digitalRead(ldr); //verifica o ldr e guarda seu status
if (val == LOW ) {
myservo.attach(servo,880,2300) ; //Pra o servo
myservo.write(70);
delay(300);
}
Passos:
if (val == HIGH ) {
myservo.attach(servo,880,2300) ; // aciona o servo
myservo.write(180) ;
delay(300);
}
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 7: Controlando um LED pela Chave Tctil
Faa as ligaes conforme abaixo
Conectando os Jumpers
D8 - Pino Digital 8 ligado ao LED
D2 - Pino digital 2 Ligado ao Ch1
Copie e cole este programa na IDE do arduino
int chave = 2;
int led = 8;
int State = 0;
// Chave tctil no pin 2
// LED no pino 8
// varivel para armazenar o estado da chave
void setup() {
pinMode(led, OUTPUT);
pinMode(chave, INPUT);
}
void loop(){
State = digitalRead(chave);
if (State == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 8: Controlando um Servo Motor pela Chave Tctil
Faa as ligaes conforme abaixo
Conectando os Jumpers
Copie e cole este programa na IDE do arduino
* Ligaes das Chaves Tactils
PIN 6 - CH2 - Pino digital 6 ligado a Chave 2
PIN 7 - CH1 - Pino digital 7 ligado a Chave 1
#include <Servo.h>
* Ligao do Servo Motor
Servo myservo ;
int ST1;
//Declara varivel ST1
int ST2;
//Declara varivel ST2
int CHAVE_1 = 7;
//chave_1 ligada no pin digital 7
int CHAVE_2 = 6;
//chave_2 ligada no pin digital 6
void setup(){
myservo.attach(9,880,2300) ;
pinMode(CHAVE_1,INPUT);
//define as chaves como entrada
pinMode(CHAVE_2,INPUT);
myservo.write(70) ;
//enviando um ngulo de 70 graus, mantm o servo parado
}
void loop() {
PIN9 - SIN - Pino digital 9 ligado ao pino de sinal do servo
ST1 = digitalRead(CHAVE_1);
ST2 = digitalRead(CHAVE_2);
//faz a leitura da chave 1
//faz a leitura da chave 2
if (ST1 == HIGH and ST2==HIGH){PARA();}
if (ST1 == LOW and ST2==HIGH){GIRA();}
if (ST1 == HIGH and ST2==LOW){VOLTA();}
}
void GIRA() {
myservo.write(180); // gira o servo
delay(1000);
PARA();
}
void PARA() {
myservo.write(70); // pra o servo
delay(5);
}
void VOLTA() {
myservo.write(0); // gira o servo sentido contrrio
delay(1000);
PARA();
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 9: Controlando um LED atravs do potencimetro
Faa as ligaes conforme abaixo
Copie e cole este programa na IDE do arduino
Conectando os Jumpers
D10 - Pino Digital 10 ligado a um LED
A5 - Pino 5 analgico do arduino ligado ao
pino central do potencimetro
int potPin = 5;
int ledPin = 10;
// pino de entrada para o potencimetro
// pino de saida para o LED
void setup()
{
pinMode(ledPin, OUTPUT);
}
// declara ledPin como SAIDA
void loop()
{
digitalWrite(ledPin, HIGH);
delay(analogRead(potPin));
// ledPin em on
// Espera por um tempo potPin
digitalWrite(ledPin, LOW);
delay(analogRead(potPin));
// ledPin em off
// Espera por um tempo potPin
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 10: Controlando um Servo atravs do potencimetro
Faa as ligaes conforme abaixo
Conectando os Jumpers
SIN - Pino de sinal do Servo ao Pin Digital 10
A5 - Pino 5 analgico do arduino ligado ao
pino central do potencimetro
Copie e cole este programa na IDE do arduino
#include <Servo.h>
Servo servo1;
// Biblioteca que permite controlar mais facilmete os Servos
// Criao de um objecto que permitira controlar o servo
int pinopot = 5;
analogico 5
int valor;
// Declarao da variavel para o pino que vai ler o valor do potenciometro, neste caso o pino 5
void setup()
{
servo1.attach(10);
}
// Declarao da variavel onde vai ser colocado o valor lido do pino analogico 0
// Porta onde ira ser ligado o servo
void loop()
{
valor = analogRead(pinopot);
valor = map(valor, 0, 1023, 0, 179);
servo1.write(valor);
delay(1);
}
// leitura do valor do potenciometro e escrita desse valor na variavel valor
// Escala para que o valor do potenciometro possa corresponder a um valor de posiao no
// Gira o servo de acordo com a escala da linha acima
// Espera de 1 milisegunda para que o servo possa atingir a sua posiao
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 11: RTC - Real Time Clock
Copie e cole este programa na IDE do arduino
Programando o RTC com a data e horas
atuais e visualizando no Serial Monitor.
Conectando os Jumpers
* A4 -Ligar o pino analgico 4 ao SDA
* A5 -Ligar o pino analgico 5 ao SCL
Faa as ligaes conforme abaixo
OBS.: Aps carregar o programa,
desligue a chave L/D e ligue novamente,
depois verifique no monitor serial
Passos:
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
// Ligar o SDA ao pin4 da entrada analgica e SCL ao pin5 da entrada analgica
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}
// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// A few of these need masks because certain bits are control bits
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
void setup()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
Serial.begin(9600);
//Digite aqui os dados de Data e Hora atuais para configurar o RTC
second = 45;
//Segundos
minute = 32;
//Minutus
hour = 8;
//Hora
dayOfWeek = 2;
//Dia da semana sendo 1 domingo
dayOfMonth = 19; //Dia do ms
month = 3;
//Ms atual
year =12;
//Ano atual
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
}
void loop()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
Serial.print("Sao: ");
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(month, DEC);
Serial.print("/20");
Serial.print(year, DEC);
switch(dayOfWeek){
case 1:Serial.print(" Domingo"); break;
case 2:Serial.print(" Segunda-feira"); break;
case 3:Serial.print(" Ter? a-feira"); break;
case 4:Serial.print(" Quarta-feira"); break;
case 5:Serial.print(" Quinta-feira"); break;
case 6:Serial.print(" Sexta-feira"); break;
case 7:Serial.print(" Sabado"); break;
default:Serial.print(" ");
}
Serial.println(dayOfWeek);
delay(1000);
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 12: RTC - Real Time Clock
Visualizando a data e hora no Display LCD
Conectando os Jumpers
Ligaes do Display ao Arduino:
* RS - Pino digital 12
*E
- Enable pino digital 11
* D4 - Pino digital 5
* D5 - Pino digital 4
* D6 - Pino digital 3
* D7 - Pino digital 2
Ligaes do RTC:
* A4 -Ligar o pino analgico 4 ao SDA
* A5 -Ligar o pino analgico 5 ao SCL
Faa as ligaes conforme abaixo
Obs.: Gire o Trimpot (azul) at aparecer
os caracteres no display
Passos:
Copie e cole este programa na IDE do arduino
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
// Ligar o SDA ao pin4 da entrada analgica e SCL ao pin5 da entrada analgica
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}
// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// A few of these need masks because certain bits are control bits
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
void setup() //Registrando a data atual no RTC
{
lcd.begin(8, 2);
//byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
}
void loop()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
lcd.print(hour, DEC);
lcd.print(":");
lcd.print(minute, DEC);
lcd.print(":");
lcd.print(second, DEC);
lcd.setCursor(0,1); //Posiciona cursor na segunda linha
lcd.print(dayOfMonth, DEC);
lcd.print("/");
lcd.print(month, DEC);
lcd.print("/");
lcd.print("20");
lcd.print(year, DEC);
delay(1000);
lcd.clear();
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 13: RTC - Real Time Clock
Demostrativo de alarme - Acender um LED as 8:45h
Conectando os Jumpers
* A4 -Ligar o pino analgico 4 ao SDA
* A5 -Ligar o pino analgico 5 ao SCL
* D13 pino digital 13 ligado ao LED
Faa as ligaes conforme abaixo
Passos:
Copie e cole este programa na IDE do arduino
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68
// Convert normal decimal numbers to binary coded decimal
// Ligar o SDA ao pin4 da entrada analgica e SCL ao pin5 da entrada analgica
int LED = 13; //led ligado ao pin 13
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}
// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// A few of these need masks because certain bits are control bits
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
void setup() //Registrando a data atual no RTC
{
//byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
Serial.begin(9600);
}
void loop()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
Serial.print("Sao: ");
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(month, DEC);
Serial.print("/20");
Serial.println(year, DEC);
// As 8:45h o led ir acender
if (hour == 8 and minute == 45) { digitalWrite(LED, HIGH);}
//Serial.println(dayOfWeek);
delay(1000);
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 14: RTC - Real Time Clock
Demostrativo de acionamento do servo motor de 8:45h s 8:47h
Conectando os Jumpers
Ligaes do RTC:
* A4 -Ligar o pino analgico 4 ao SDA
* A5 -Ligar o pino analgico 5 ao SCL
* D13 pino digital 13 ligado ao SIN do servo
Faa as ligaes conforme abaixo
Passos:
Copie e cole este programa na IDE do arduino
#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68
#include <MegaServo.h> //Inclue a biblioteca MegaServos
#define NBR_SERVOS 12 // Numero de Servos ligados. Maximo de 48 arduino MEGA, 12 para outros
arduinos
#define FIRST_SERVO_PIN 3
MegaServo Servos[NBR_SERVOS] ;
// Convert normal decimal numbers to binary coded decimal
// Ligar o SDA ao pin4 da entrada analgica e SCL ao pin5 da entrada analgica
int LED = 13; //led ligado ao pin 13
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set
// bit 6 (also need to change readDateDs1307)
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}
// Gets the date and time from the ds1307
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Reset the register pointer
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// A few of these need masks because certain bits are control bits
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
void setup() //Registrando a data atual no RTC
{
//byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Servos[1].attach(3,880,2300); //Servo na porta digital 3
Servos[1].write(70);
delay(15);
Wire.begin();
Serial.begin(9600);
}
void loop()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
Serial.print("Sao: ");
Serial.print(hour, DEC);
Serial.print(":");
Serial.print(minute, DEC);
Serial.print(":");
Serial.print(second, DEC);
Serial.print(" ");
Serial.print(dayOfMonth, DEC);
Serial.print("/");
Serial.print(month, DEC);
Serial.print("/20");
Serial.println(year, DEC);
// As 8:45h o servo ser acionado e as 8:47 desligado
if (hour == 8 and minute >= 45) { Servos[1].write(180);}
if (hour == 8 and minute >= 47) { Servos[1].write(70);}
//Serial.println(dayOfWeek);
delay(1000);
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Como funciona o protocolo do controle remoto infravermelho padro sony
Ao apertar um boto de um controle remoto, o circuito integrado do controle detecta isso e envia o comando
binrio ao LED de infravermelho que fica na frente do controle remoto.
O LED envia uma srie de pulsos de luz que correspondem ao comando binrio "da tecla precionada".
Um exemplo de cdigo de controle remoto o protocolo Sony Control-S, usado pelas TVs Sony e inclui os
seguintes comandos binrios de 7 bits:
Alm do comando da tecla precionada o cdigo binrio tambm carrega outras informao:
Um comando iniciar Start bit,
O cdigo de comando da "tecla precionanada"
O endereo do aparelho (um cdigo binrio que identifica o aparelho receptor)
Um comando parar (disparado quando se libera o boto") stop bit
Start bit
Cdigo da tecla
Stop bit
Cdigo do aparelho
Os controles remotos de padro Sony usam um mtodo de codificao de espaos em que o comprimento dos
espaos entre os pulsos de luz representam 1 ou 0 (+5V, 0V) cdigo binrio.
O cdigo IR possui limitaes relacionadas natureza da luz infravermelha. Primeiro, eles tm um alcance de
apenas 10 metros e exigem linha de visada. Isso significa que sinais infravermelhos no so transmitidos atravs
de paredes nem fazem curvas mas podem ser refletidos. Alm disso, a luz infravermelha to comum que as
interferncias podem ser um problema.
Exemplo de fontes de luz infravermelha usadas diariamente:
luz do sol
lmpadas fluorescentes
corpo humano
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
CONFIGURAO DO CONTROLE REMOTO
Cdigos sony para cada tcla do controle
2704
2192
1168
144
656
3216
Conectando os Jumpers
2640
Pino Digital 2 ligado ao Mdulo Infrared
Pino Digital 7 ligado a um LED
OBS:
Para este experimento necessrio a biblioteca: IRremote
Verifique no diretrio onde foi instalado a IDE do arduino se na pasta LIBRARIES
tem estas bibliotecas, caso falte alguma, baixe da pagina de download no site:
www.robotic.com.br e descompacte na pasta libraries.
www.robotic.com.br
R botic
Unidade Mvel Robotic - Microcontrolador
PROGRAMA - CONFIGURANDO O CONTROLE: Copie e cole na IDE do arduino
#include <IRremote.h>
// Inclue a biblioteca IRremote
const int RECV_PIN = 2;
int LED = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
//Receptor di IR no pino digital 2
//LED no pin 7
void setup()
{
pinMode(LED, OUTPUT);
irrecv.enableIRIn(); // Inicia o recebimento
}
void loop() {
if (irrecv.decode(&results)) {
if (results.value == 656){
//Tecla MUTE do controle remoto
digitalWrite(LED, HIGH);} //Acende o LED do pin 13
if (results.value == 2192){ //Tecla CH- do controle remoto
digitalWrite(LED, LOW); } //Apaga o LED do pin 13
if (results.value == 144){ //Tecla CH+ do controle remoto
digitalWrite(LED, HIGH); } //Apaga o LED do pin 13
irrecv.resume(); // Recebe proximo valor
}
}
2- Nas chaves CH+ e CH- voc testa
a configurao, o LED dever acender
e apagar.
1- Mantenha precione a tecla MUTE at
o LED acender.
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 15: Mostrando os cdigos das teclas do controle remoto
no serial monitor
Faa as ligaes conforme abaixo
Conectando os Jumpers
Pino Digital 2 ligado ao Mdulo Infrared
Copie e cole este programa na IDE do arduino
#include <IRremote.h> //Inclui a biblioteca Irremote
int RECV_PIN = 2;
//Sensor de IR ligado no pino 2
IRrecv irrecv(RECV_PIN); //Varivel irrecv recebe os dados emitidos pelo controle
decode_results results;
//Separa os bits para saber qual tecla foi precionada e armazena na varivel results
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
//Inicializa a porta serial (Serial Monitor)
// Ativa o recebimento dos comandos do controle
//Pisca o LED13 enquanto recebe comandos
void loop() {
if (irrecv.decode(&results)) {
// Verifica se a varivel recebeu algum comando do controle
Serial.println(results.value);
// Mostra em uma nova linha o valor da varivel
irrecv.resume();
}
}
// Recebe proximo valor
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 16: Comandando um LED pelo controle remoto
Faa as ligaes conforme abaixo
Conectando os Jumpers
D7 - Pino Digital 7 ligado a um LED
D2 - Pino Digital 2 ligado ao Mdulo Infrared
Copie e cole este programa na IDE do arduino
#include <IRremote.h> //Inclui a biblioteca Irremote
int RECV_PIN = 2;
int LED = 7;
//Sensor de IR ligado no pino 2
//LED ligado ao pin 7
IRrecv irrecv(RECV_PIN); //Varivel irrecv recebe os dados emitidos pelo controle
decode_results results;
//Separa os bits para saber qual tecla foi precionada e armazena na varivel results
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
//Inicializa a porta serial (Serial Monitor)
// Ativa o recebimento dos comandos do controle
//Pisca o LED13 enquanto recebe comandos
pinMode(LED, OUTPUT); //pino 7 definido como sada
}
void loop() {
if (irrecv.decode(&results)) {
// Verifica se a varivel recebeu algum comando do controle
Serial.println(results.value);
// Mostra em uma nova linha o valor da varive
if (results.value == 144){
//Se a tecla CH+ for precionada
digitalWrite(LED, HIGH);} //envia +5v para o pin7
if (results.value == 2192){ //Se a tecla CH- for precionada
digitalWrite(LED, LOW); } ////envia 0v para o pin7
irrecv.resume();
}
}
Passos:
// Recebe proximo valor
OBS: Aps carregar o programa use as
teclas CH+ e CH- do controle para
acionar o LED
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 17: Comandando um servo motor pelo controle remoto
Conectando os Jumpers
INFRARED - Pin Digital 2
SIN - pin digital 9 (servo)
Copie e cole este programa na IDE do arduino
#include <IRremote.h> // Inclue a biblioteca IRremote
#include <MegaServo.h> //Inclue a biblioteca MegaServos
#define NBR_SERVOS 12 // Numero de Servos ligados.
#define FIRST_SERVO_PIN 8
MegaServo Servos[NBR_SERVOS] ;
const int RECV_PIN = 2; //Receptor di IR no pino digital 2
IRrecv irrecv(RECV_PIN);
decode_results results;
int servo = 9;
//servo no pino digital 9
Faa as ligaes conforme abaixo
void setup()
{
irrecv.enableIRIn(); // Inicia o recebimento
Servos[1].attach(servo,880,2400) ;
Servos[1].write(70) ;
delay(15);
}
void loop() {
if (irrecv.decode(&results)) {
if (results.value == 144){ //Tecla CH+ do controle remoto
Servos[1].write(180) ;
delay(15); }
if (results.value == 2192){ //Tecla CH- do controle remoto
Servos[1].write(0) ;
delay(15);}
if (results.value == 1168){ //Tecla VOL+ do controle remoto
Servos[1].write(70) ;
delay(15);}
irrecv.resume(); // Recebe proximo valor
}
}
OBS: Numero de Servos ligados. Maximo de 48 para o arduino MEGA,
e 12 para outros arduinos
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 18: Comandando um REL pelo controle remoto
Conectando os Jumpers
D7 - Pino Digital 8 ligado ao REL
D2 - Pino Digital 2 ligado ao Mdulo Infrared
CONEXES DO REL
Comum ao +5volts
NA - Ligar a um LED
Copie e cole este programa na IDE do arduino
#include <IRremote.h>
// Inclue a biblioteca IRremote
const int RECV_PIN = 2; //Receptor di IR no pino digital 2
int RELE = 8;
//Rel no pino 8
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(RELE, OUTPUT);
irrecv.enableIRIn();
// Inicia o recebimento
}
void loop() {
if (irrecv.decode(&results)) {
if (results.value == 144){
//Tecla CH+ do controle remoto
digitalWrite(RELE, LOW);} //Aciona o Rel
if (results.value == 2192){ //Tecla CH- do controle remoto
digitalWrite(RELE, HIGH); } //Desliga o Rel
irrecv.resume(); // Recebe proximo valor
}
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Sensor de Temperatura Dallas DS18B20
Este sensor de temperatura mede de -55c a +125C. e possui resoluo programvel dentre outros
recursos. Permite programar alarmes de temperatura, que ficaro registrados em sua memria no
voltil. Possui interface 1-wire, que requer apenas um pino do microcontrolador. Alm disso, ele
possui uma numerao nica por dispositivo, de 64 bits, que permite que se use vrios sensores no
mesmo pino. Ideal para projetos com microcontroladores.
Esquema de ligao
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 19: Mostrando temperaturas no serial monitor
Conectando os Jumpers
Copie e cole este programa na IDE do arduino
/*
DallasTemperature.CPP - Dallas Temperature Control Library 1.0.0
* DQ - Pino digital 12
*/
#include <DallasTemperature.h> //Inclui a biblioteca do sensor
DallasTemperature tempSensor; //Cria o objeto tempSensor
void setup() {
Faa as ligaes conforme abaixo
// initialize entradas e sadas
// inicializa a porta serial
Serial.begin(9600);
tempSensor.begin(12); // sensor ligado na porta digital 12
Serial.println("Temperatura Atual: "); //Mostra esta frase no serial monitor
}
void loop() { //repete emquanto verdadeiro
// Pega temperatura e envia para o monitor serial.
Serial.print(tempSensor.getTemperature());
Serial.print("C"); //Mostra o C de centgrado no serial monitor
Serial.println(); //Vai para a prxima linha
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 20: Mostrando temperaturas no display LCD
A biblioteca LiquidCrystal permite-lhe controlar os display de LCD
O LCDs tm um interface paralelo, o que significa que o microcontrolador tem de manipular pinos de interface
de uma s vez para controlar a exibio. A interface consiste dos pinos seguintes:
Pino +5v para alimentar o LCD
Pino (RS) registo select, que controla onde na memria do LCD que voc est escrevendo dados. Voc
pode selecionar o registo de dados, que detm o que se passa na tela, ou um registrador de instruo, que
onde o controlador de LCD procura por instrues sobre o que fazer em seguida.
(E) Pino ENABLE para ativar ou desativar o LCD
(R / W) Pino para selecionar o modo de leitura ou escrita. Em nossos experimentos usaremos sempre o
modo escrita; portanto este pino est configurado como modo de escrita.
8 pinos de dados (D0-D7). Os estados desses pinos (alto ou baixo) so os bits que voc est escrevendo
para um registo.
(Vo) pino de constrast onde est ligado o trimpot azul afim de ajustar o contraste da tela
O processo de controlar a exibio envolve colocar os dados que formam a imagem do que voc deseja exibir
para os registradores de dados, em seguida, colocar instrues no registrador de instrues. A Biblioteca
LiquidCrystal simplifica isso para voc, assim voc no precisa saber as instrues de baixo nvel.
O LCDs pode ser controlado em dois modos: 4 bits ou 8 bits. O modo de 4-bit requer sete pinos I / O do
Arduino, enquanto o modo de 8 bits requer 11 pinos. Voc pode fazer quase tudo, em modo 4 bits.
Trimpot
Esquema de ligao do LCD
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 20: Mostrando temperaturas no display LCD
Conectando os Jumpers
* RS
*E
* D4
* D5
* D6
* D7
- Pino digital 12
- Enable pino digital 11
- Pino digital 5
- Pino digital 4
- Pino digital 3
- Pino digital 2
Ligaes do Sensor DS18B20:
* DQ do Sensor de Temperatura ao pino digital 6
Copie e cole este programa na IDE do arduino
/*
Mostrando a temperatura no Display
*/
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
DallasTemperature tempSensor;
void setup(void) {
// initialize entradas e sadas
lcd.clear();
lcd.begin(8, 2);
tempSensor.begin(6); // sensor ligado na porta digital 6
lcd.print("Temp.:"); // envia a mensagem para o LCD.
}
void loop(void) {
// Pega temperatura e envia para o monitor serial.
lcd.setCursor(0,1); //Posiciona cursor na segunda linha
lcd.print(tempSensor.getTemperature());
lcd.print("C");
delay(1000); //espera 1 segundo para fazer a leitura novamente
lcd.clear();
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 21: Os leds acendem de acordo com a temperatura
Conectando os Jumpers
D8 - Pino digital 8 ligado ao LED Azul
D9 - Pino digital 9 Ligado ao Led Amarelo
D10 - Pino digital 10 Ligado ao Led Vermelho
D12 - Pino digital 12 ligado ao DQ do DS18B20
Copie e cole este programa na IDE do arduino
/*
SENSOR DE TEMPERATURA
- Este programa acende o led azul para temperatura abaixo de 25 graus
- Acende o led amarelo para temperaturas entre 25 e 30 graus
- Acende o led vermelho para temperaturas maiores que 30 graus
*/
#include <DallasTemperature.h>
DallasTemperature tempSensor;
int led_azul = 8;
//led azul no pino 8
int led_amar = 9;
//led amarelo no pino 9
int led_verm = 10;
//led vermelho no pino 10
int temp;
void setup() { // inicializando entradas e sadas
LED Azul acende para temperaturas menores que 25
LED Amarelo acende para temperaturas entre 25 e 30
LED Vermelho acende para temperaturas maiores que 30
Passos:
pinMode(led_azul, OUTPUT);
pinMode(led_amar, OUTPUT);
pinMode(led_verm, OUTPUT);
Serial.begin(9600); // inicializa a porta serial
tempSensor.begin(12); // sensor ligado na porta digital 12
Serial.println("Temperatura Atual: ");
}
void loop() {
Serial.print(tempSensor.getTemperature());
// envia para o monitor serial.
Serial.print("C");
Serial.println();
Serial.print(tempSensor.getTemperature());
if (tempSensor.getTemperature() < 25)
{
digitalWrite(led_azul, HIGH);
//verifica se a temperatura menor que 20 graus
digitalWrite(led_amar, LOW);
digitalWrite(led_verm, LOW);
}
if (tempSensor.getTemperature() > 25 and tempSensor.getTemperature() < 30) {
digitalWrite(led_azul, LOW);
//verifica se a temperatura menor que 20 graus
digitalWrite(led_amar, HIGH);
digitalWrite(led_verm, LOW);
}
if (tempSensor.getTemperature() > 30) {
digitalWrite(led_azul, LOW);
//verifica se a temperatura menor que 20 graus
digitalWrite(led_amar, LOW);
digitalWrite(led_verm, HIGH);
}
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 22: O servo acionado de acordo com a temperatura
Conectando os Jumpers
D7 - Pino Digital 7 ligado ao SIN do servo
D12 - Pino Digital 12 ligado ao DQ do DS18B20
OBS:
Para este experimento sero necessrios:
Copie e cole este programa na IDE do arduino
/*
SENSOR DE TEMPERATURA
Este programa aciona um servo de acordo com a temperatura
*/
#include <DallasTemperature.h>
DallasTemperature tempSensor;
#include <MegaServo.h> //Inclue a biblioteca MegaServos
#define NBR_SERVOS 12 // Numero de Servos ligados
#define FIRST_SERVO_PIN 3
MegaServo Servos[NBR_SERVOS] ;
int temp;
- uma pedra de gelo envolvida por um pano.
- Um isqueiros (Cuidado somente adultos)
void setup() { // inicializando entradas e sadas
Ao aproximar o isquiro do sensor tome os devidos cuidados para no cometer nenhum acidente.
Servos[1].attach(7,880,2300); //Servo na porta digital 7
Servos[1].write(70);
delay(15);
Serial.begin(9600); // inicializa a porta serial
tempSensor.begin(12); // sensor ligado na porta digital 12
Serial.println("Temperatura Atual: ");
}
Temperatura menores que 25 servo gira para um lado
Temperaturas entre 25 e 30 servo se mantm parado
Temperaturas maiores que 30 servo gira em sentido contrrio
void loop() {
Serial.print(tempSensor.getTemperature());
// envia para o monitor serial.
Serial.print("C");
Serial.println(" ");
//Serial.println(tempSensor.getTemperature());
if (tempSensor.getTemperature() < 25)
{
Servos[1].write(0);
delay(30);
}
if (tempSensor.getTemperature() > 25 and tempSensor.getTemperature() < 30) {
Servos[1].write(70);
delay(30);
}
if (tempSensor.getTemperature() > 30) {
Servos[1].write(180);
delay(30);
}
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Entendendo o Sensor de Ultrassom
O sensor possue dois transdutores com cristais piezoeltricos que ressonam em uma frequncia
ultra-snica os transdutores convertem energia eltrica em energia acstica e vice-versa, um mdulo emite o sinal (trigger) e o outro recebe o eco (echo).
Os pulsos so emitidos em uma forma de cone com um feixe destinado a um objeto alvo. Os Pulsos so refletidos pelo
alvo para o sensor atravs de ecos. O dispositivo mede o tempo entre cada pulso emitido e o eco para determinar com preciso a distncia entre sensor e o alvo.
.
Quando utilizado para funes de deteco, o mtodo de ultrassons tem vantagens nicas sobre os sensores convencionais de
infravermelho: O sensor de ultrassom detectar alvos feitos de praticamente qualquer material, independentemente da cor. Eles
detectam alvos claros, transparentes e brilhantes to facilmente como materiais escuros e opaco. Esta capacidade permite que
os sensores de ultrassom sejam usados para detectar materiais que vo desde frascos de vidro transparente at pneus de
borracha preta e etc.
A placa Arduino envia um impulso curto no pino TRIG para desencadear a deteco, em seguida,
ouve um pulso de retorno no pin de echo. A durao deste segundo pulso igual ao tempo necessrio
para o ultrassom viajar ao objecto e voltar para o sensor.
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 23: Medindo distncias e mostrando no serial monitor
Copie e cole este programa na IDE do arduino
Conectando os Jumpers
ECHO - Pin Digital 7
TRIG - Pin Digital 6
// HC-SR04 SENSOR DE ULTRASSOM //
int echoPin = 7; //Varivel echopin definida como inteiro e ligado ao pin 7
int trigPin = 6; //Varivel trigpin definida como inteiro e ligado ao pin 6
void setup() {
Serial.begin (9600);
//inicia a porta serial e define velocidade transferncia de dados
pinMode(trigPin, OUTPUT); //define pino 6 como saida
pinMode(echoPin, INPUT); //define o pino 7 como entrada
}
void loop() {
//repete at verdadeiro
// Varivei que estabelece a durao do trigger,
// O resultado da distncia em centmetros:
int duration, cm;
// O trig accionado por um pulso baixo (LOW) de 2 microssegundos.
// D um pulso elevado (HIGH) de 10 microssegundos.
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
/* Pulso cuja durao o tempo (em microssegundos) a partir do envio do trig
para a recepo de seu eco fora de um objeto. */
duration = pulseIn(echoPin, HIGH);
/* Converter o tempo em uma distncia, sabendo que a velocidade do som
de 340 m / s ou 29 microssegundos por centmetro. Objeto fica na metade
da distncia percorrida.*/
cm = duration / 29 / 2;
Passos:
Serial.print(cm);
//Imprime o valor da varilvel cm no serial monitor
Serial.println(" cm"); //Imprime o nome cm e pula para uma nova linha
delay(500);
//Espera 0,5 segundo
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 24: Medindo distncias e mostrando no display LCD
Conectando os Jumpers
Copie e cole este programa na IDE do arduino
// HC-SR04 Ultrasonic Sensor - Robotic.com.br //
* RS - Pino digital 12
*E
- Enable pino digital 11
* D4 - Pino digital 5
* D5 - Pino digital 4
* D6 - Pino digital 3
* D7 - Pino digital 2
* R/W - Pino GND
* ECHO - Pino digital 7
* TRIG - Trig pino digital 6
#include <LiquidCrystal.h>
//Chama a biblioteca do LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //define os pinos do arduino para o LCD
int echoPin = 7; //Varivel echopin definida como inteiro e ligado ao pin 7
int trigPin = 6; //Varivel trigpin definida como inteiro e ligado ao pin 6
void setup() {
Serial.begin (9600);
//inicia a porta serial e define velocidade transferncia de dados
pinMode(trigPin, OUTPUT); //define pino 6 como saida
pinMode(echoPin, INPUT); //define o pino 7 como entrada
lcd.begin(8, 2);
//Inicializa LCD e define numero de colunas/ linhas
lcd.clear();
//Limpa a tela do LCD
}
void loop() {
//repete at verdadeiro
lcd.setCursor(0, 0); // Posiciona o cursor do LCD para a coluna 0, linha 0
// Varivei que estabelece a durao do trigger,
// O resultado da distncia em centmetros:
int duration, cm;
// O trig accionado por um pulso baixo (LOW) de 2 microssegundos.
// D um pulso elevado (HIGH) de 10 microssegundos.
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
/* Pulso cuja durao o tempo (em microssegundos) a partir do envio do trig
para a recepo de seu eco fora de um objeto. */
duration = pulseIn(echoPin, HIGH);
/* Converter o tempo em uma distncia, sabendo que a velocidade do som
de 340 m / s ou 29 microssegundos por centmetro. Objeto fica na metade
da distncia percorrida.*/
cm = duration / 29 / 2;
Passos:
lcd.clear();
//Limpa a rea do lcd
lcd.print(cm);
//Imprime o valor da varilvel cm no LCD
lcd.print(" cm"); //Imprime a sigla cm
delay(100);
//Espera 100 milisegundos
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 25: Medindo distncias e comandando um servo
Ao detectar um objeto a menos de 20 cm de distncia o servo deve girar
Copie e cole este programa na IDE do arduino
Conectando os Jumpers
// HC-SR04 Sensor de Ultrassom e Servo Motor //
TRIG - Pin Digital 6
ECHO - Pin Digital 7
SIN - Pin PWM 10 (servo)
Este programa ir comandar o servo
usando a distncia de um obstculo
#include <Servo.h> //Inclui a biblioteca Servo
Servo meu_servo ; // Cria o objeto meu_servo para controlar um servo motor
int echoPin = 7; //Varivel echopin definida como inteiro e ligado ao pin 7
int trigPin = 6; //Varivel trigpin definida como inteiro e ligado ao pin 6
void setup() {
Serial.begin(9600); //inicial a porta serial e define velocidade em bytes por segundos
meu_servo.attach(10) ; //meu_servo ligado no pin10 (porta PWM)
pinMode(trigPin, OUTPUT); //define pino 6 como saida
pinMode(echoPin, INPUT); //define o pino 7 como entrada
}
void loop() {
//repete at verdadeiro
meu_servo.writeMicroseconds(1500); // Centraliza o cervo
delay(500); //espera 0,5 segundos
// Varivei que estabelece a durao do trigger,
// O resultado da distncia em centmetros:
int duration, cm;
// O trig accionado por um pulso baixo (LOW) de 2 microssegundos.
// D um pulso elevado (HIGH) de 10 microssegundos.
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
/* Pulso cuja durao o tempo (em microssegundos) a partir do envio do trig
para a recepo de seu eco fora de um objeto. */
duration = pulseIn(echoPin, HIGH);
/* Converter o tempo em uma distncia, sabendo que a velocidade do som
de 340 m / s ou 29 microssegundos por centmetro. Objeto fica na metade
da distncia percorrida.*/
cm = duration / 29 / 2;
Serial.println(cm);
//mostra no serial monitor a distacia em nova linha
if (cm <= 20) {
meu_servo.writeMicroseconds(1000); // gira o servono sentido horario
delay(2000); //espera 2 segundosgira();
}
//Objeto a menos de 20cm o servo gira em um sentido
delay(500);
Passos:
//Espera 0,5 segundo
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 26: Alarme de Incndio com o sensor DS18B20
Conectando os Jumpers
D8 - Pino Digital 8 ligado ao Buzzer
D12 - Pino Digital 12 ligado ao DQ do DS18B20
Copie e cole este programa na IDE do arduino
/*
Alarme de Incndio com Dallas DS18B20
- Este programa aciona um alarme quando a temperatura
ambiente for maior que 30 graus.
*/
#include <DallasTemperature.h>
DallasTemperature tempSensor;
int temp;
int del = 250;
// Durao do Tom
int lowrange = 2000; // Valor mais baixo da freqencia usada
int highrange = 4000; // Frequencia mais alta
void setup() {
// inicializando entradas e sadas
tempSensor.begin(12); // sensor ligado na porta digital 12
pinMode(8, OUTPUT); // Buzzer porta 8
}
void loop() {
if (tempSensor.getTemperature() > 30){
for (int a = lowrange; a<=highrange; a++)
{
tone (8, a, del);
}
// Reduo dos tons
for (int a = highrange; a>=lowrange; a--)
{
tone (8, a, del);
}
}
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 27: Alarme de intruso com ultrasom
Conectando os Jumpers
TRIG - Pin Digital 6
ECHO - Pin Digital 7
BUZZER - ligado ao pino digital 8
Copie e cole este programa na IDE do arduino
//Alarme de intruso com sensor de ultrasom
int cm;
int trig = 6;
int echo = 7;
long microseconds;
int temp;
int del = 250;
// Durao do Tom
int lowrange = 2000; // Valor mais baixo da freqencia usada
int highrange = 4000; // Frequencia mais alta
void setup() {
Serial.begin(9600);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(8, OUTPUT); // Buzzer porta 8
OBS: Este sistema ir emitir um alarme
tipo sirene, sempre que for detectado a
presena de um intruso no ressinto.
}
void loop() {
long duration, cm;
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
delayMicroseconds(2);
duration = pulseIn(echo, HIGH);
cm = microsecondsToCentimeters(duration);
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
if (cm <= 250){alarme();} //Objeto a menos de 250cm
else {digitalWrite(8,LOW);}
}
long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2;}
void alarme() {
Passos:
for (int a = lowrange; a<=highrange; a++)
{
tone (8, a, del);
}
// Reduo dos tons
for (int a = highrange; a>=lowrange; a--)
{
tone (8, a, del);
}
}
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Detectando objetos com infravermelho
Sinal a 38Khz
GND
LED emissor de Infravermelho
Mdulo Receptor
de Infravermelho
Objeto
LED emissor de Infravermelho
Mdulo Receptor
de Infravermelho
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 28: Detectando obstculos com Infrared
Conectando os Jumpers
D7 - Pino Digital 7 ligado ao LED
D4 - Pino Digital 4 ligado ao LED INFRAVERMELHO
D5 - Pino Digital 5 ligado ao Mdulo Infrared
Aproxime um obstculo do sensor de IR
Copie e cole este programa na IDE do arduino
//define pinos.
#define irLedPin 4
// lED infrared no pino 4
#define irSensorPin 5
// Sensor infrared no pino 5
int irRead(int readPin, int triggerPin);
//funo prottipo
int LED = 7;
void setup()
{
pinMode(irSensorPin, INPUT);
pinMode(irLedPin, OUTPUT);
pinMode(LED, OUTPUT);
delay(100);
}
void loop()
{
if (irRead(irSensorPin, irLedPin) == 0){digitalWrite(LED, HIGH);}
if (irRead(irSensorPin, irLedPin) == 1){digitalWrite(LED, LOW);}
delay(10); //Aguarda o envio
}
int irRead(int readPin, int triggerPin)
{
//um perodo em 38.5khZ de aproximadamente 26 microssegundos, ciclos int = 38
int halfPeriod = 13;
//26 microssegundos * 38 mais ou menos um milissegundo
int cycles = 38;
int i;
for (i=0; i <=cycles; i++)
{
digitalWrite(triggerPin, HIGH);
delayMicroseconds(halfPeriod);
digitalWrite(triggerPin, LOW);
delayMicroseconds(halfPeriod - 1);
// - 1 para compensar a sobrecarga digitaWrite
}
return digitalRead(readPin);
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento : Enviando comandos infravermelho de um Arduino Lab para outro
Vamos precisar de 2 Arduino Lab para acionar um LED remotamente
No Arduino Lab 1(receptor), faa as ligaes conforme abaixo:
Conectando os Jumpers LAB1
D7 - Pino Digital 7 ligado a um LED
D2 - Pino Digital 2 ligado ao Mdulo Infrared
No arduino Lab 2 (transmissor), Faa as ligaes conforme abaixo:
Conectando os Jumpers LAB2
D3 - Ao LED infravermelho
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Carregue este programa no LAB1 (Receptor)
#include <IRremote.h>
const int RECV_PIN = 2; //Receptor ligado ao pin 2
int LED = 7;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
pinMode(LED, OUTPUT);
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);
if (results.value == 144){
digitalWrite(LED, HIGH);}
if (results.value == 656){
digitalWrite(LED, HIGH);}
if (results.value == 2192){
digitalWrite(LED, LOW); }
irrecv.resume(); // Recebe proximo valor
}
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Carregue este programa na LAB 2 (emissor)
//Programa Emissor
#include <IRremote.h>
IRsend irsend;
int flag = 0 ;
int char_in ;
void setup()
{
Serial.begin(9600) ;
colocaMenu() ;
}
void loop() {
//piscaled() ;
if(Serial.available() > 0 ) {
char_in = Serial.read() ;
if(char_in != -1) {
Serial.println(char_in,BYTE) ;
switch (char_in) {
case '1':
irsend.sendSony(144, 12);
Serial.println("Acende LED") ;
delay(1000);
break;
case '2':
irsend.sendSony(2192, 12);
Serial.println("Apaga LED") ;
delay(1000);
break;
default :
irsend.sendSony(3536, 12);
delay(1000);
break;
}
}
}
}
void colocaMenu() {
Serial.println("CONTROLANDO A UMR PELA PORTA SERIAL USB") ;
Serial.println("Selecione :") ;
Serial.println("1 - ACENDE LED") ;
Serial.println("2 - APAGA LED") ;
Serial.println("OPCAO ? ") ;
}
Passos:
www.robotic.com.br
R botic
Arduino Lab - Microcontroladores
Experimento 29: Controlando a Unidade Mvel Robotic Remotamente Pelo Notebook
Material Necessrio:
1 - UMR - Unidade Mvel Robotic
1 - Arduino Lab
1 - Led Infravermelho de 5mm
1 - Transistor PN2222A
A UMR ser controlada a partir do Arduino Lab conectado
a porta USB. No monitor serial ir mostrar 5 opes de movimentos para UMR. Os sinais
sero emitidos pelo LED infravermelho. Para o correto funcionamento teremos
que carregar 2 programas um no Arduino Lab (emissor) e o outro na UMR (receptor)
Faa as ligaes conforme abaixo (emissor)
PN2222A
EBC
+5v
LED INFRARED 5MM
RESISTOR
100R
GND
PIN3
www.robotic.com.br
R botic
Unidade Mvel Robotic - Microcontrolador
PROGRAMA EMISSOR: Copie e cole na IDE do arduino
Este programa deve ser carregado no Arduino Lab que ir emitir os sinais pelo LED IR.
#include <IRremote.h>
IRsend irsend;
int flag = 0 ;
int char_in ;
void setup()
{
Serial.begin(9600) ;
colocaMenu() ;
}
void loop() {
//piscaled() ;
if(Serial.available() > 0 ) {
char_in = Serial.read() ;
if(char_in != -1) {
Serial.println(char_in,BYTE) ;
switch (char_in) {
case '1':
irsend.sendSony(144, 12);
Serial.println("frente") ;
delay(1000);
break;
case '2':
irsend.sendSony(2192, 12);
Serial.println("Traz") ;
delay(1000);
break;
case '3':
irsend.sendSony(1168, 12);
Serial.println("Direita") ;
delay(1000);
break;
case '4':
irsend.sendSony(3216, 12);
Serial.println("Esquerda") ;
delay(1000);
break;
case '5':
irsend.sendSony(3536, 12);
Serial.println("Parar") ;
delay(1000);
break;
default :
irsend.sendSony(3536, 12);
delay(1000);
break;
}
}
}
}
void colocaMenu() {
Serial.println("CONTROLANDO A UMR PELA PORTA SERIAL USB") ;
Serial.println("Selecione :") ;
Serial.println("1 - FRENTE") ;
Serial.println("2 - TRAZ") ;
Serial.println("3 - DIREITA") ;
Serial.println("4 - ESQUERDA") ;
Serial.println("5 - PAPAR") ;
Serial.println("OPCAO ? ") ;
}
www.robotic.com.br
R botic
Unidade Mvel Robotic - Microcontrolador
PROGRAMA RECEPTOR: Copie e cole na IDE do arduino
Este programa deve ser carregado na UMR (Unidade Mvel Robotic).
#include <IRremote.h>
#include <MegaServo.h> //Inclue a biblioteca MegaServos
#define NBR_SERVOS 12 // Numero de Servos ligados. Maximo de 48 arduino MEGA, 12 para outros arduinos
#define FIRST_SERVO_PIN 8
MegaServo Servos[NBR_SERVOS] ;
const int RECV_PIN = 2; //SENSOR DE INFRARED NO PIN 2
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
Servos[1].attach(8,880,2400) ; //SERVO DIREITO NO PIN 8
Servos[2].attach(9,880,2400) ; //SERVO ESQUERDO NO PIN 9
Servos[1].write(70) ;
Servos[2].write(70) ;
irrecv.enableIRIn(); // Start the receiver
irrecv.blink13(true);
delay(15);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);
if (results.value == 144){ //Chave CH+ frente
Servos[1].write(180) ;
Servos[2].write(0) ;
delay(15);}
if (results.value == 2192){ //Chave CH- volta
Servos[1].write(0) ;
Servos[2].write(180) ;
delay(15); }
if (results.value == 1168){ //Chave VOL+ direita
Servos[1].write(0) ;
Servos[2].write(0) ;
delay(15); }
if (results.value == 3216){ //Chave VOL+ esquerda
Servos[1].write(180) ;
Servos[2].write(180) ;
delay(15); }
if (results.value >= 3536){ //Chave JUMP PRA
Servos[1].write(70) ;
Servos[2].write(70) ;
delay(15); }
irrecv.resume(); // Recebe proximo valor
}
}
www.robotic.com.br
UNIDADE MVEL ROBOTIC
Sensor de Ultrasom
Shield Navigation
Arduino
Controle Remoto
Servos
Sensor de Trilha
R botic
Unidade Mvel Robotic - Microcontrolador
Montagem
1 - Inserir o shield Navigation nos conectores do arduino
www.robotic.com.br