Manual Arduino Lab
Manual Arduino Lab
ARDUINO LAB
ARDUINO PARA INICIANTES
WWW.ROBOTIC.COM.BR
R botic
www.robotic.com.br
R botic
www.robotic.com.br
R botic
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
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
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
Display LCD
RTC
Conectores
para o Arduino
Sensor de
Temperatura
Servo Motor
Mdulo Receptor
Infravermelho
3 LEDs comuns
1 LED infrared
Protoboard
www.robotic.com.br
R botic
Simbologia
www.robotic.com.br
R botic
Conectando os Jumpers
D8 - Pino Digital 8 ligado ao LED
Passos:
www.robotic.com.br
R botic
Conectando os Jumpers
*/
#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
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
periodo 20 mS
Largura de Pulso de 1500 microsegundos o servo pra na posio central
www.robotic.com.br
R botic
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.
Passos:
www.robotic.com.br
R botic
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 ->
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);
Passos:
www.robotic.com.br
R botic
Experimento 4.2: Controlando um Servo Motor por ngulo via Serial Monitor
Conectando os Jumpers
SIN do Servo ao pino digital 9
Passos:
www.robotic.com.br
R botic
Conectando os Jumpers
D8 - Pino Digital 8 ligado ao LED
D2 - Pino digital 2 Ligado ao LDR
Passos:
www.robotic.com.br
R botic
Conectando os Jumpers
#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
Conectando os Jumpers
D8 - Pino Digital 8 ligado ao LED
D2 - Pino digital 2 Ligado ao Ch1
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
Conectando os Jumpers
#include <Servo.h>
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() {
ST1 = digitalRead(CHAVE_1);
ST2 = digitalRead(CHAVE_2);
Passos:
www.robotic.com.br
R botic
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;
void setup()
{
pinMode(ledPin, OUTPUT);
}
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
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
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
void loop()
{
valor = analogRead(pinopot);
valor = map(valor, 0, 1023, 0, 179);
servo1.write(valor);
delay(1);
}
Passos:
www.robotic.com.br
R botic
Conectando os Jumpers
* A4 -Ligar o pino analgico 4 ao SDA
* A5 -Ligar o pino analgico 5 ao SCL
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
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
Passos:
www.robotic.com.br
R botic
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
Passos:
www.robotic.com.br
R botic
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
Passos:
www.robotic.com.br
R botic
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
1168
144
656
3216
Conectando os Jumpers
2640
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
#include <IRremote.h>
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
}
}
www.robotic.com.br
R botic
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);
irrecv.resume();
}
}
Passos:
www.robotic.com.br
R botic
int LED = 7;
Serial.println(results.value);
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:
R botic
Conectando os Jumpers
INFRARED - Pin Digital 2
SIN - pin digital 9 (servo)
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
}
}
Passos:
www.robotic.com.br
R botic
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
Passos:
www.robotic.com.br
R botic
Esquema de ligao
www.robotic.com.br
R botic
Conectando os Jumpers
* DQ - Pino digital 12
*/
#include <DallasTemperature.h> //Inclui a biblioteca do sensor
DallasTemperature tempSensor; //Cria o objeto tempSensor
void setup() {
Passos:
www.robotic.com.br
R botic
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
www.robotic.com.br
R botic
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
/*
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
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
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
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:
Ao aproximar o isquiro do sensor tome os devidos cuidados para no cometer nenhum acidente.
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
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
Conectando os Jumpers
ECHO - Pin Digital 7
TRIG - Pin Digital 6
//repete at verdadeiro
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
Conectando os Jumpers
* 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
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
Conectando os Jumpers
//repete at verdadeiro
Passos:
www.robotic.com.br
R botic
Conectando os Jumpers
D8 - Pino Digital 8 ligado ao Buzzer
D12 - Pino Digital 12 ligado ao DQ do DS18B20
Passos:
www.robotic.com.br
R botic
Conectando os Jumpers
TRIG - Pin Digital 6
ECHO - Pin Digital 7
BUZZER - ligado ao pino digital 8
}
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:
www.robotic.com.br
R botic
Sinal a 38Khz
GND
Mdulo Receptor
de Infravermelho
Objeto
Mdulo Receptor
de Infravermelho
www.robotic.com.br
R botic
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
Passos:
www.robotic.com.br
R botic
www.robotic.com.br
R botic
#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
Passos:
www.robotic.com.br
R botic
Material Necessrio:
1 - UMR - Unidade Mvel Robotic
1 - Arduino Lab
1 - Led Infravermelho de 5mm
1 - Transistor PN2222A
EBC
+5v
LED INFRARED 5MM
RESISTOR
100R
GND
PIN3
www.robotic.com.br
R botic
www.robotic.com.br
R botic
#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
Shield Navigation
Arduino
Controle Remoto
Servos
Sensor de Trilha
R botic
Montagem