Manual Arduino Lab

download Manual Arduino Lab

of 53

Transcript of Manual Arduino Lab

  • 8/18/2019 Manual Arduino Lab

    1/53

      botic

      RDUINO L B

    WWW.ROBOTIC.COM.BR

      RDUINO P R INICI NTES

  • 8/18/2019 Manual Arduino Lab

    2/53

  • 8/18/2019 Manual Arduino Lab

    3/53

    Arduino UNO ou Duemilanove com Atmega328

    O Arduino Uno é uma placa de microcontrolador baseado no ATmega328. Ele tem 14 pinos de entrada/saídadigital (dos quais 6 podem ser usados como saídas PWM), 6 entradas analógicas, um cristal oscilador de16MHz, uma conexão USB, uma entrada de alimentação uma conexão ICSP e um botão de reset. Ele contémtodos os componentes necessários 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 começar.

     A diferença do Uno para o Duemilanove é que o Uno não utiliza o chip FTDI cara conversão do sinal serial.Utiliza no seu lugar um Atmega8U2 programado como conversor de USB para serial.

    ResumoMicrocontrolador ATmega328Voltagem Operacional 5VVoltagem de entrada (recomendada) 7-12VVoltagem de entrada (limites) 6-20VPinos E/S digitais 14 (dos quais 6 podems ser saídas PWM)Pinos de entrada analógica 6Corrente CC por pino E/S 40 mA

    Corrente CC para o pino 3,3V 50 mAFlash Memory 32 KB (ATmega328) dos quais 0,5KB são 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 alimentação é selecionadaautomaticamente. Alimentação externa pode ser tanto de uma fonte DC ou bateria.

    Esta placa tem uma faixa recomendável de alimentação externa de 7 a 12 volts evitando o superaquecimentoda placa.

    Os pinos de alimentação são os seguintes:

    VIN. A tensão de entrada para a placa Arduino, quando se está usando uma fonte externa de energia(ao contrário de 5 volts a partir da conexão USB). Você pode fornecer a tensão através desse pino.

    5V. A fonte de alimentação regulada usada para alimentar o microcontrolador e outros componentes na placa.Isto pode vir tanto de VIN através de um regulador de bordo, ou seja alimentado por USB ou outra fonte de 5Vregulados.

    3V3. é gerada pelo chip FTDI-on. Máximo consumo de corrente é de 50 mA.

    Ground pinos GND..

    MemóriaO ATmega168 tem 16 KB de memória flash para armazenar o código (de 2 KB que é usado para o gerenciador  de inicialização).

     ATmega328 tem 32 KB, (também com 2 KB utilizado para o bootloader). O ATmega168 tem 1 KB de SRAM e512 bytes de EEPROM (que pode ser lido e escrito com a biblioteca EEPROM ), o ATmega328 tem 2 KB deSRAM e 1 KB de EEPROM.

    Entrada e SaídaCada um dos 14 pinos digital no arduino pode ser usado como uma entrada ou saída, usando pinMode () ,digitalWrite () , e digitalRead () funções. Eles operam em 5 volts. Cada pino pode fornecer ou receber um

    máximo de 40 mA e tem um resistor pull-up interno (desligado por padrão) de 20-50 kOhms.

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

  • 8/18/2019 Manual Arduino Lab

    4/53

  • 8/18/2019 Manual Arduino Lab

    5/53

    Instalando o Programa

    1 Faça o download do ambiente de desenvolvimento do Arduino versção 23 em: 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 distribuição do Arduino ou na pasta drivers para o UNO.

    www.robotic.com.br

    Certifique-se que o Arduino Duemilanove ou UNO (Atmega 328) está selecionado em: Tools > Board

    Configurando:

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    http://www.robotic.com.br/http://www.robotic.com.br/

  • 8/18/2019 Manual Arduino Lab

    6/53

    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 doWindows (na aba Hardware do painel de controle do sistema). Procure por "USB Serial Port" na seção de Portas;

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

  • 8/18/2019 Manual Arduino Lab

    7/53

    Ultrasom Display LCD RTC

    Conectorespara o Arduino

    Servo Motor 

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    OBS: Para os experimentos deste manual serão necessários as seguintes bibliotecas:

    - DallasTemperature- MegaServo- LiquidCrystal- Wire- Irremote- Ultrasonic

    Verifique no diretório onde foi instalado a IDE do arduino se na pasta LIBRARIEStem estas bibliotecas, caso falte alguma, baixe da pagina de download no site:www.robotic.com.br e descompacte na pasta libraries.

    Sensor deTemperatura

    Módulo Receptor nfravermelho

    Protoboard

    Relé ChavesTactils

    LDR Buzzer 

    3 LEDs comuns1 LED infrared

  • 8/18/2019 Manual Arduino Lab

    8/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Experimento 1: LED Diodo Emissor de Luz

    Um led é constituído por uma junção PN de material semicondutor e por dois terminais, o Ânodo (A) e o Cátodo (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 relação ao cátodo.

    O led está inversamente polarizado, e não emite luz,quando o ânodo está negativo em relação ao cátodo.

    Ligando um LED no ArduinoCada cor de LED possui uma tensao de trabalho (V) e uma corrente maximasuportada (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 é necessário um resistor em série como LED afim de limitar a voltagem no LED impedindo sua queima.

  • 8/18/2019 Manual Arduino Lab

    9/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    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 8void setup(){  pinMode(ledPin, OUTPUT); // configura pino digital como saída}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

    }

    D8 - Pino Digital 8 ligado ao LED

    Experimento 1: Led piscante

  • 8/18/2019 Manual Arduino Lab

    10/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 3: Gerando sons - Buzzer 

    /* Melodia

    */#include "pitches.h"

    // notas da melodia:

    int melody[] = { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

    // durações nota: 4 nota = trimestre, nota 8 = oitava, etc:int noteDurations[] = { 4, 8, 8, 4,4,4,4,4 };void setup() {

     // iteração sobre as notas da melodia: for (int thisNote = 0; thisNote < 8; thisNote++) {

      // calcular a duração da nota, em um segundo // dividido pelo tipo de nota. // por exemplo semínima = 1000 / 4, colcheia = 1000 / 8, etc

      int noteDuration = 1000/noteDurations[thisNote];  tone(8, melody[thisNote],noteDuration);

      // para distinguir as notas, definir um tempo mínimo entre elas. // duração da nota + 30% parece funcionar bem:

      int pauseBetweenNotes = noteDuration * 1.30;  delay(pauseBetweenNotes);

      // parar a reprodução de tom:  noTone(8); }}void loop() {// para não repetir a melodia.}

    D8 - Pino Digital 8 ligado ao BUZZERFaça o download da biblioteca pitches 

  • 8/18/2019 Manual Arduino Lab

    11/53

    Arduino Lab - Microcontroladores  botic

    Entendendo o Servo Motor RC (rádio controle)

    www.robotic.com.br 

    periodo 20 mS

    Largura de Pulso de 1000 microsegundos o servo gira em sentido horário

    Largura de Pulso de 1500 microsegundos o servo pára na posição central

    Largura de Pulso de 2000 microsegundos o servo gira em sentido anit-horário

    Pulsos PWM para movimentar um Servo

    Definição de: PWM: (Pulse Width Modulation) uma técnica de modulação que gera impulsos de largura variável para representar a amplitude de um sinal de entrada analógico.

    Servo Motor RC são usadas para converter o sinal eléctrico em movimento polar ou linear.

    Os servos RC são controlados com um sinal de PWM conduzido ao seu fio de sinal. Um sinal de PWM temtrês parâmetros que o caracteriza: O primeiro é a amplitude (ou pico a tensão de pico) do sinal. No arduino usa 5 volts. O segundo é a frequência. Em PWM, a frequência é normalmente fixado a um valor entre 30-50 Hz para um servo analógico e para servos digitais300 a 400 Hz

    O terceiro valor é o mais crítico, é o pulso positivo com PWM. A largura do pulso terá um resultado direto paraa posição de acionamento. Em outras palavras, para controlar a posição de um servo, deve alterar a duraçãodo pulso positivo do sinal de PWM conduzidos para o fio de sinal do servo.

    O servo espera um pulso a cada 20 ms a fim de obter informações 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.

    Também podemos posicionar o servo diretamente com o valor do ângulo a ser posicionado usando outra função

    do arduino

  • 8/18/2019 Manual Arduino Lab

    12/53

    Arduino Lab - Microcontroladores  botic

    Experimento 4: Controlando um Servo Motor com pulsos em microsegundos

    www.robotic.com.br 

    Passos:

    Conectando os Jumpers

    SIN do Servo ao pino digital 9

    #include //inclue a biblioteca Servo Servo meu_servo ; //Cria o objeto meu_servo

    void setup(){ //Configuração inicial, não se repete

    meu_servo.attach(9) ; //Meu_servo ligado no pino 9 (PWM)

    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); // pára o servo na posição central 90º  delay(2000); //espera 2 segundos

      meu_servo.writeMicroseconds(2000); // gira o servo sentido contrário para180º  delay(2000); //espera 2 segundos

      }

    // Envia um pulso de 1500 microsegundo mantendo o servo parado em 90º

    Este servo é um servo de posição, ou seja gira para determinados ângulos, existem os servos de

    rotação contínua, que giram continuamente para os dois lados ou ficam parados conforme a largura

    de pulso PWM) ou conforme o ângulo.

    Obs. Para experimentos com motores é necessárioma fonte externa de 9 ou 12 volts de no mínimo00mA; pois a porta USB não fornece corrente suficiente.

  • 8/18/2019 Manual Arduino Lab

    13/53

    Arduino Lab - Microcontroladores  botic

    Experimento 4.1: Controlando um Servo Motor por ângulos.

    www.robotic.com.br 

    Passos:

    Conectando os Jumpers

    SIN do Servo ao pino digital 9

    Este servo é um servo de posição, ou seja gira para determinados ângulos, existem os servos derotação contínua, que giram continuamente para os dois lados ou ficam parados conforme a largurade pulso (PWM) ou conforme o ângulo.

    #include //inclue a biblioteca Servo Servo myservo ; //Cria o objeto meu_servo

    void setup(){ //Configuração inicial, não se repetemyservo.attach(9,544,2400) ; //Meu servo ligado no pin9 (PWM) pulso mini e maximo para o servo} //fim do void setup

    void loop() { //Repete enquanto for verdadeiromyservo.write(0) ; // gira o servo horario para 0º  delay(2000); //espera 2 segundos

    myservo.write(90) ; // pára o servo na posição central 90º  delay(2000); //espera 2 segundos

    myservo.write(180) ; // gira o servo sentido contrário para 180º  delay(2000); //espera 2 segundos

      } //fim do void loop

    90º

    180º

      0º -> Largura de pulso 544

    180º -> Largura de pulso 2400

  • 8/18/2019 Manual Arduino Lab

    14/53

    Conectando os Jumpers

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    #include //Inclui a biblioteca ServoServo myservo; //Cria a variável myservo

    int char_in ; //Cria a variável char_in para receber as opções do menu

    void setup() //Configuração inicial{Serial.begin(9600) ; //abre a porta serial, define a taxa de dados a 9600 bpsmyservo.attach(9,544,2400) ; //Meu servo ligado no pin9 (PWM) pulso mini e maximo para o servocolocaMenu() ; //Cria o Menu}

    void loop() //Repete até verdadeiro{

    if(Serial.available() > 0 ) { //Verifica se a porta serial está disponívelchar_in = Serial.read() ; //Lê o valor na porta serial e carrega para a variável

    Serial.print(char_in,BYTE) ; //Mostra o valor carregado na variável e muta para tipo byte

    switch (char_in) { //A instrução switch espera valores numéricos únicos para cada opção da função case;case '1': //caso o valor da variável seja 1myservo.write(0) ; //Posiciona o servo no ângulo 0 grauSerial.println(" Vai ao angulo 0 grau") ; //mostra esta frase no serial monitor break;

    case '2': //caso o valor da variável seja 2myservo.write(90) ; //Posiciona o servo no ângulo 90 grausSerial.println(" Vai ao angulo 90 graus") ; //mostra esta frase no serial monitor break;

    case '3': //caso o valor da variável seja 3myservo.write(180) ; //Posiciona o servo no ângulo 180 grausSerial.println(" Vai ao angulo 180 graus") ; //mostra esta frase no serial monitor break;

    } //fim da função switch} //fim da função serial.available()} //fim da void loop

    void colocaMenu() { //Mostra o menu na telaSerial.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 ? ") ;}

    SIN do Servo ao pino digital 9

    Experimento 4.2: Controlando um Servo Motor por ângulo via Serial Monitor 

  • 8/18/2019 Manual Arduino Lab

    15/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 5: Controlando um LED pelo sersor de luz LDR

    D8 - Pino Digital 8 ligado ao LEDD2 - Pino digital 2 Ligado ao LDR

    //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 );}

  • 8/18/2019 Manual Arduino Lab

    16/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 6: Controlando um Servo Motor pelo sensor de luz LDR

    //Programa para controlar o servo com LDR

    #include 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 paradomyservo.write(70);delay(300);}

    void loop() {

    val = digitalRead(ldr); //verifica o ldr e guarda seu status if (val == LOW ) {

      myservo.attach(servo,880,2300) ; //Pára o servo  myservo.write(70);  delay(300);}

    if (val == HIGH ) {myservo.attach(servo,880,2300) ; // aciona o servomyservo.write(180) ;delay(300);} 

    }

    D10 - Pino Digital 10 ligado ao SIN do servoD2 - Pino digital 2 Ligado ao LDR

  • 8/18/2019 Manual Arduino Lab

    17/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 7: Controlando um LED pela Chave Táctil

    D8 - Pino Digital 8 ligado ao LEDD2 - Pino digital 2 Ligado ao Ch1

    int chave = 2; // Chave táctil no pin 2int led = 8; // LED no pino 8int State = 0; // variável 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);

    }}

  • 8/18/2019 Manual Arduino Lab

    18/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 8: Controlando um Servo Motor pela Chave Táctil

    * Ligações das Chaves Tactils

    PIN 6 - CH2 - Pino digital 6 ligado a Chave 2PIN 7 - CH1 - Pino digital 7 ligado a Chave 1

    * Ligação do Servo Motor 

    PIN9 - SIN - Pino digital 9 ligado ao pino de sinal do servo

    #include

    Servo myservo ;int ST1; //Declara variável ST1int ST2; //Declara variável ST2int CHAVE_1 = 7; //chave_1 ligada no pin digital 7int CHAVE_2 = 6; //chave_2 ligada no pin digital 6void setup(){

    myservo.attach(9,880,2300) ;pinMode(CHAVE_1,INPUT); //define as chaves como entradapinMode(CHAVE_2,INPUT);myservo.write(70) ; //enviando um ângulo de 70 graus, mantém o servo parado}void loop() {

    ST1 = digitalRead(CHAVE_1); //faz a leitura da chave 1ST2 = digitalRead(CHAVE_2); //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); // pára o servo  delay(5);  }

    void VOLTA() {myservo.write(0); // gira o servo sentido contrário

      delay(1000);  PARA();}

  • 8/18/2019 Manual Arduino Lab

    19/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 9: Controlando um LED através do potenciômetro

    D10 - Pino Digital 10 ligado a um LED

    A5 - Pino 5 analógico do arduino ligado aopino central do potenciômetro

    int potPin = 5; // pino de entrada para o potenciômetroint ledPin = 10; // pino de saida para o LED

    void setup(){  pinMode(ledPin, OUTPUT); // declara ledPin como SAIDA}

    void loop(){  digitalWrite(ledPin, HIGH); // ledPin em on  delay(analogRead(potPin)); // Espera por um tempo “potPin”

      digitalWrite(ledPin, LOW); // ledPin em off   delay(analogRead(potPin)); // Espera por um tempo “potPin”}

  • 8/18/2019 Manual Arduino Lab

    20/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 10: Controlando um Servo através do potenciômetro

    SIN - Pino de sinal do Servo ao Pin Digital 10

    A5 - Pino 5 analógico do arduino ligado ao

    pino central do potenciômetro

    #include // Biblioteca que permite controlar mais facilmete os ServosServo servo1; // Criação de um objecto que permitira controlar o servo

    int pinopot = 5; // Declaração da variavel para o pino que vai ler o valor do potenciometro, neste caso é o pino 5analogico 5int valor; // Declaração da variavel onde vai ser colocado o valor lido do pino analogico 0

    void setup(){servo1.attach(10); // Porta onde ira ser ligado o servo}

    void loop(){

    valor = analogRead(pinopot); // leitura do valor do potenciometro e “escrita” desse valor na variavel valor valor = map(valor, 0, 1023, 0, 179); // Escala para que o valor do potenciometro possa corresponder a um valor de posiçao no

    servo1.write(valor); // Gira o servo de acordo com a escala da linha acimadelay(1); // Espera de 1 milisegunda para que o servo possa atingir a sua posiçao}

  • 8/18/2019 Manual Arduino Lab

    21/53

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 11: RTC - Real Time Clock 

    Programando o RTC com a data e horas

    tuais e visualizando no Serial Monitor.

    #include "Wire.h"#define DS1307_I2C_ADDRESS 0x68// Convert normal decimal numbers to binary coded decimal// Ligar o SDA ao pin4 da entrada analógica e SCL ao pin5 da entrada analógicabyte decToBcd(byte val){return ( (val/10*16) + (val%10) );}// Convert binary coded decimal to normal decimal numbersbyte bcdToDec(byte val){return ( (val/16*10) + (val%16) );}void setDateDs1307(byte second, // 0-59byte minute, // 0-59byte hour, // 1-23byte dayOfWeek, // 1-7byte dayOfMonth, // 1-28/29/30/31byte month, // 1-12byte year) // 0-99{Wire.beginTransmission(DS1307_I2C_ADDRESS);Wire.send(0);Wire.send(decToBcd(second)); // 0 to bit 7 starts the clockWire.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 ds1307void 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 RTCsecond = 45; //Segundosminute = 32; //Minutushour = 8; //HoradayOfWeek = 2; //Dia da semana sendo 1 domingodayOfMonth = 19; //Dia do mêsmonth = 3; //Mês atualyear =12; //Ano atualsetDateDs1307(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);}

    * A4 -Ligar o pino analógico 4 ao SDA* A5 -Ligar o pino analógico 5 ao SCL

    OBS.: Após carregar o programa,esligue a chave L/D e ligue novamente,epois verifique no monitor serial

  • 8/18/2019 Manual Arduino Lab

    22/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 12: RTC - Real Time Clock

    Visualizando a data e hora no Display LCD

     Ligações 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 Ligações do RTC: * A4 -Ligar o pino analógico 4 ao SDA* A5 -Ligar o pino analógico 5 ao SCL

    #include "Wire.h"#define DS1307_I2C_ADDRESS 0x68// Convert normal decimal numbers to binary coded decimal// Ligar o SDA ao pin4 da entrada analógica e SCL ao pin5 da entrada analógica#include 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 numbersbyte bcdToDec(byte val){return ( (val/16*10) + (val%16) );}void setDateDs1307(byte second, // 0-59byte minute, // 0-59byte hour, // 1-23byte dayOfWeek, // 1-7byte dayOfMonth, // 1-28/29/30/31byte month, // 1-12byte year) // 0-99{Wire.beginTransmission(DS1307_I2C_ADDRESS);Wire.send(0);Wire.send(decToBcd(second)); // 0 to bit 7 starts the clockWire.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 ds1307void 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 linhalcd.print(dayOfMonth, DEC);lcd.print("/");lcd.print(month, DEC);lcd.print("/");

    lcd.print("20");lcd.print(year, DEC);delay(1000);lcd.clear();}

    Obs.: Gire o Trimpot (azul) até aparecer os caracteres no display

  • 8/18/2019 Manual Arduino Lab

    23/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 13: RTC - Real Time Clock

    Demostrativo de alarme - Acender um LED as 8:45h

    #include "Wire.h"#define DS1307_I2C_ADDRESS 0x68// Convert normal decimal numbers to binary coded decimal// Ligar o SDA ao pin4 da entrada analógica e SCL ao pin5 da entrada analógicaint LED = 13; //led ligado ao pin 13byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}// Convert binary coded decimal to normal decimal numbersbyte bcdToDec(byte val)

    {return ( (val/16*10) + (val%16) );}void setDateDs1307(byte second, // 0-59byte minute, // 0-59byte hour, // 1-23byte dayOfWeek, // 1-7byte dayOfMonth, // 1-28/29/30/31byte month, // 1-12byte year) // 0-99{Wire.beginTransmission(DS1307_I2C_ADDRESS);Wire.send(0);Wire.send(decToBcd(second)); // 0 to bit 7 starts the clockWire.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);}

    * A4 -Ligar o pino analógico 4 ao SDA* A5 -Ligar o pino analógico 5 ao SCL* D13 pino digital 13 ligado ao LED

  • 8/18/2019 Manual Arduino Lab

    24/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 14: RTC - Real Time Clock

    Demostrativo de acionamento do servo motor de 8:45h às 8:47h

    Ligações do RTC:

    * A4 -Ligar o pino analógico 4 ao SDA* A5 -Ligar o pino analógico 5 ao SCL* D13 pino digital 13 ligado ao SIN do servo

    #include "Wire.h"#define DS1307_I2C_ADDRESS 0x68#include //Inclue a biblioteca MegaServos#define NBR_SERVOS 12 // Numero de Servos ligados. Maximo de 48 arduino MEGA, 12 para outrosarduinos#define FIRST_SERVO_PIN 3MegaServo Servos[NBR_SERVOS] ;// Convert normal decimal numbers to binary coded decimal// Ligar o SDA ao pin4 da entrada analógica e SCL ao pin5 da entrada analógicaint LED = 13; //led ligado ao pin 13

    byte decToBcd(byte val){return ( (val/10*16) + (val%10) );}// Convert binary coded decimal to normal decimal numbersbyte bcdToDec(byte val){return ( (val/16*10) + (val%16) );}void setDateDs1307(byte second, // 0-59byte minute, // 0-59byte hour, // 1-23byte dayOfWeek, // 1-7byte dayOfMonth, // 1-28/29/30/31byte month, // 1-12byte year) // 0-99{Wire.beginTransmission(DS1307_I2C_ADDRESS);Wire.send(0);Wire.send(decToBcd(second)); // 0 to bit 7 starts the clockWire.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 ds1307void 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 3Servos[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 desligadoif (hour == 8 and minute >= 45) { Servos[1].write(180);}if (hour == 8 and minute >= 47) { Servos[1].write(70);}//Serial.println(dayOfWeek);delay(1000);}

  • 8/18/2019 Manual Arduino Lab

    25/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Como funciona o protocolo do controle remoto infravermelho padrão sony

     Ao apertar um botão de um controle remoto, o circuito integrado do controle detecta isso e envia o comandobinário ao LED de infravermelho que fica na frente do controle remoto.  O LED envia uma série de pulsos de luz que correspondem ao comando binário "da tecla precionada".

    Um exemplo de código de controle remoto é o protocolo Sony Control-S, usado pelas TVs Sony e inclui osseguintes comandos binários de 7 bits:

     Além do comando da tecla precionada o código binário também carrega outras informação:

      Um comando “iniciar” Start bit,  O código de comando da "tecla precionanada"  O endereço do aparelho (um código binário que identifica o aparelho receptor)  Um comando “parar” (disparado quando se libera o botão") stop bit

    Código da tecla Código do aparelho

    Stop bitStart bit

    Os controles remotos de padrão Sony usam um método de codificação de espaços em que o comprimento dosespaços entre os pulsos de luz representam 1 ou 0 (+5V, 0V) código binário.

    O código IR possui limitações relacionadas à natureza da luz infravermelha. Primeiro, eles têm um alcance deapenas 10 metros e exigem linha de visada. Isso significa que sinais infravermelhos não são transmitidos atravésde paredes nem fazem curvas mas podem ser refletidos. Além disso, a luz infravermelha é tão comum que as interferências podem ser um problema.

    Exemplo de fontes de luz infravermelha usadas diariamente:

      luz do sol  lâmpadas fluorescentes  corpo humano

  • 8/18/2019 Manual Arduino Lab

    26/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Códigos sony para cada técla do controle

    2192

    1168144

    656

    3216

    2640

    CONFIGURAÇÃO DO CONTROLE REMOTO

    Conectando os Jumpers

     Pino Digital 2 ligado ao Módulo Infrared Pino Digital 7 ligado a um LED

    OBS:

    Para este experimento é necessário a biblioteca: IRremote

    Verifique no diretório onde foi instalado a IDE do arduino se na pasta LIBRARIEStem estas bibliotecas, caso falte alguma, baixe da pagina de download no site:www.robotic.com.br e descompacte na pasta libraries.

    2704

  • 8/18/2019 Manual Arduino Lab

    27/53

    Unidade Móvel Robotic - Microcontrolador

    www.robotic.com.br 

    #include // Inclue a biblioteca IRremote

    const int RECV_PIN = 2; //Receptor di IR no pino digital 2

    int LED = 7; //LED no pin 7IRrecv irrecv(RECV_PIN);decode_results results;

    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

     irrecv.resume(); // Recebe proximo valor 

      }}

      if (results.value == 144){ //Tecla CH+ do controle remoto  digitalWrite(LED, HIGH); } //Apaga o LED do pin 13

    PROGRAMA - CONFIGURANDO O CONTROLE: Copie e cole na IDE do arduino

      botic

    1- Mantenha precione a tecla MUTE atéo LED acender.

    2- Nas chaves CH+ e CH- você testaa configuração, o LED deverá acender e apagar.

  • 8/18/2019 Manual Arduino Lab

    28/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Conectando os Jumpers

    Faça as ligações conforme abaixo

    Passos:

    Copie e cole este programa na IDE do arduino

    Experimento 15: Mostrando os códigos das teclas do controle remoto  no serial monitor 

     Pino Digital 2 ligado ao Módulo Infrared

    #include //Inclui a biblioteca Irremote

    int RECV_PIN = 2; //Sensor de IR ligado no pino 2

    IRrecv irrecv(RECV_PIN); //Variável irrecv recebe os dados emitidos pelo controledecode_results results; //Separa os bits para saber qual tecla foi precionada e armazena na variável results

    void setup(){Serial.begin(9600); //Inicializa a porta serial (Serial Monitor)irrecv.enableIRIn(); // Ativa o recebimento dos comandos do controleirrecv.blink13(true); //Pisca o LED13 enquanto recebe comandos}

    void loop() {if (irrecv.decode(&results)) { // Verifica se a variável recebeu algum comando do controle

    Serial.println(results.value); // Mostra em uma nova linha o valor da variável

    irrecv.resume(); // Recebe proximo valor }}

  • 8/18/2019 Manual Arduino Lab

    29/53

    D7 - Pino Digital 7 ligado a um LED

    D2 - Pino Digital 2 ligado ao Módulo Infrared

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduino

    Conectando os Jumpers

    Experimento 16: Comandando um LED pelo controle remoto

    OBS: Após carregar o programa use as  teclas CH+ e CH- do controle para  acionar o LED

    #include //Inclui a biblioteca Irremote

    int RECV_PIN = 2; //Sensor de IR ligado no pino 2

    IRrecv irrecv(RECV_PIN); //Variável irrecv recebe os dados emitidos pelo controledecode_results results; //Separa os bits para saber qual tecla foi precionada e armazena na variável results

    void setup(){Serial.begin(9600); //Inicializa a porta serial (Serial Monitor)irrecv.enableIRIn(); // Ativa o recebimento dos comandos do controleirrecv.blink13(true); //Pisca o LED13 enquanto recebe comandos

    }void loop() {if (irrecv.decode(&results)) { // Verifica se a variável recebeu algum comando do controle

    Serial.println(results.value); // Mostra em uma nova linha o valor da variáve

    irrecv.resume(); // Recebe proximo valor }}

    int LED = 7; //LED ligado ao pin 7

    pinMode(LED, OUTPUT); //pino 7 definido como saída

     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

  • 8/18/2019 Manual Arduino Lab

    30/53

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 17: Comandando um servo motor pelo controle remoto

    INFRARED - Pin Digital 2

    SIN - pin digital 9 (servo)

    #include // Inclue a biblioteca IRremote#include //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

    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

  • 8/18/2019 Manual Arduino Lab

    31/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 18: Comandando um RELÉ pelo controle remoto

    #include // Inclue a biblioteca IRremote

    const int RECV_PIN = 2; //Receptor di IR no pino digital 2int RELE = 8; //Relé no pino 8IRrecv 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   }}

    D7 - Pino Digital 8 ligado ao RELÉD2 - Pino Digital 2 ligado ao Módulo Infrared

    CONEXÕES DO RELÉComum ao +5volts

    NA - Ligar a um LED

  • 8/18/2019 Manual Arduino Lab

    32/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Sensor de Temperatura Dallas DS18B20

    Este sensor de temperatura mede de -55ºc a +125ºC. e possui resolução programável dentre outrosrecursos. Permite programar alarmes de temperatura, que ficarão registrados em sua memória nãovolátil. Possui interface 1-wire, que requer apenas um pino do microcontrolador. Além disso, ele

    possui uma numeração única por dispositivo, de 64 bits, que permite que se use vários sensores nomesmo pino. Ideal para projetos com microcontroladores.

    Esquema de ligação

  • 8/18/2019 Manual Arduino Lab

    33/53

    Faça as ligações conforme abaixo

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 19: Mostrando temperaturas no serial monitor 

    /*  DallasTemperature.CPP - Dallas Temperature Control Library 1.0.0 */#include //Inclui a biblioteca do sensor DallasTemperature tempSensor; //Cria o objeto tempSensor 

    void setup() { // initialize entradas e saídas

     // 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 centígrado no serial monitor  Serial.println(); //Vai para a próxima linha}

     * DQ - Pino digital 12

  • 8/18/2019 Manual Arduino Lab

    34/53

    Arduino Lab - Microcontroladores  botic

    Experimento 20: Mostrando temperaturas no display LCD

    www.robotic.com.br 

     A biblioteca LiquidCrystal permite-lhe controlar os display de LCD

    O LCDs têm um interface paralelo, o que significa que o microcontrolador tem de manipular pinos de interfacede uma só vez para controlar a exibição. A interface consiste dos pinos seguintes:

    Pino +5v para alimentar o LCD

    Pino (RS) registo select, que controla onde na memória do LCD que você está escrevendo dados. Vocêpode selecionar o registo de dados, que detém o que se passa na tela, ou um registrador de instrução, queé onde o controlador de LCD procura por instruções sobre o que fazer em seguida.

    Pino para selecionar o modo de leitura ou escrita. Em nossos experimentos usaremos sempre omodo escrita; portanto este pino está configurado como modo de escrita.

    8 pinos de dados (D0-D7). Os estados desses pinos (alto ou baixo) são os bits que você está escrevendopara um registo.

     pino de constrast onde está ligado o trimpot azul afim de ajustar o contraste da tela

    O processo de controlar a exibição envolve colocar os dados que formam a imagem do que você deseja exibir para os registradores de dados, em seguida, colocar instruções no registrador de instruções. A BibliotecaLiquidCrystal simplifica isso para você, assim você não precisa saber as instruções de baixo nível.

    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.

    (E) Pino ENABLE para ativar ou desativar o LCD

    (R / W)

    (Vo)

         T    r     i    m

        p    o     t

    Esquema de ligação do LCD

  • 8/18/2019 Manual Arduino Lab

    35/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 20: Mostrando temperaturas no display LCD

    /*Mostrando a temperatura no Display*/

    #include #include LiquidCrystal lcd(12, 11, 5, 4, 3, 2);DallasTemperature tempSensor;

    void setup(void) { // initialize entradas e saídas

     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 linhalcd.print(tempSensor.getTemperature());lcd.print("C");delay(1000); //espera 1 segundo para fazer a leitura novamentelcd.clear();}

    * 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 Ligações do Sensor DS18B20:* DQ do Sensor de Temperatura ao pino digital 6

  • 8/18/2019 Manual Arduino Lab

    36/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 21: Os leds acendem de acordo com a temperatura

    ED Azul acende para temperaturas menores que 25°ED Amarelo acende para temperaturas entre 25° e 30°ED Vermelho acende para temperaturas maiores que 30°

    D8 - Pino digital 8 ligado ao LED AzulD9 - Pino digital 9 Ligado ao Led AmareloD10 - Pino digital 10 Ligado ao Led VermelhoD12 - Pino digital 12 ligado ao DQ do DS18B20

    /*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 tempSensor;int led_azul = 8; //led azul no pino 8int led_amar = 9; //led amarelo no pino 9int led_verm = 10; //led vermelho no pino 10int temp;

    void setup() { // inicializando entradas e saídas 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 grausdigitalWrite(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 grausdigitalWrite(led_amar, HIGH);digitalWrite(led_verm, LOW);}if (tempSensor.getTemperature() > 30) {digitalWrite(led_azul, LOW); //verifica se a temperatura é menor que 20 grausdigitalWrite(led_amar, LOW);digitalWrite(led_verm, HIGH);}}

  • 8/18/2019 Manual Arduino Lab

    37/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 22: O servo é acionado de acordo com a temperatura

    Temperatura menores que 25° servo gira para um ladoTemperaturas entre 25° e 30° servo se mantém paradoTemperaturas maiores que 30° servo gira em sentido contrário

    D7 - Pino Digital 7 ligado ao SIN do servoD12 - Pino Digital 12 ligado ao DQ do DS18B20

    /*  SENSOR DE TEMPERATURA  Este programa aciona um servo de acordo com a temperatura*/#include DallasTemperature tempSensor;#include //Inclue a biblioteca MegaServos#define NBR_SERVOS 12 // Numero de Servos ligados#define FIRST_SERVO_PIN 3

    MegaServo Servos[NBR_SERVOS] ;int temp;

    void setup() { // inicializando entradas e saídas

    Servos[1].attach(7,880,2300); //Servo na porta digital 7Servos[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: ");}

    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);}}

    BS:Para este experimento serão necessários:

    uma pedra de gelo envolvida por um pano.Um isqueiros (Cuidado somente adultos)

    o aproximar o isquiro do sensor tome os devidos cuidados para não cometer nenhum acidente.

  • 8/18/2019 Manual Arduino Lab

    38/53

    O s e n s o r p o s s u e d o i s t r a n s d u t o r e s c o m c r i s t a i s p i e z o e l é t r i c o s q u e r e s s o n a m e m u m a f r e q u ê n c i aultra-sônica os transdutores convertem energia elétrica em energia acústica e vice-versa, um módulo emite o sinal (trigger) e o outro recebe o eco (echo).

    Os pulsos são emitidos em uma forma de cone com um feixe destinado a um objeto alvo. Os Pulsos são refletidos peloalvo para o sensor através de ecos. O dispositivo mede o tempo entre cada pulso emitido e o eco para determinar com precisão a

    Quando utilizado para funções de detecção, o método de ultrassons tem vantagens únicas sobre os sensores convencionais denfravermelho: O sensor de ultrassom detectar alvos feitos de praticamente qualquer material, independentemente da cor. Eles

    detectam alvos claros, transparentes e brilhantes tão facilmente como materiais escuros e opaco. Esta capacidade permite queos sensores de ultrassom sejam usados para detectar materiais que vão desde frascos de vidro transparente até pneus deborracha preta e etc.

     distância entre sensor e o alvo.

    www.robotic.com.br 

    Arduino Lab - Microcontroladores  botic

    Entendendo o Sensor de Ultrassom

      A placa Arduino envia um impulso curto no pino TRIG para desencadear a detecção, em seguida,ouve um pulso de retorno no pin de echo. A duração deste segundo pulso é igual ao tempo necessário

    para o ultrassom viajar ao objecto e voltar para o sensor.

  • 8/18/2019 Manual Arduino Lab

    39/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 23: Medindo distâncias e mostrando no serial monitor 

    ECHO - Pin Digital 7TRIG - Pin Digital 6

    // HC-SR04 SENSOR DE ULTRASSOM //

    int echoPin = 7; //Variável echopin definida como inteiro e ligado ao pin 7int trigPin = 6; //Variável trigpin definida como inteiro e ligado ao pin 6

    void setup() {  Serial.begin (9600); //inicia a porta serial e define velocidade transferência de dados

      pinMode(trigPin, OUTPUT); //define pino 6 como saida  pinMode(echoPin, INPUT); //define o pino 7 como entrada}

    void loop() { //repete até verdadeiro

    // Variávei que estabelece a duração do trigger,// O resultado da distância em centímetros:

      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 duração é o tempo (em microssegundos) a partir do envio do trig

      para a recepção de seu eco fora de um objeto. */

      duration = pulseIn(echoPin, HIGH); /* Converter o tempo em uma distância, sabendo que a velocidade do som é  de 340 m / s ou 29 microssegundos por centímetro. Objeto fica na metade  da distância percorrida.*/

      cm = duration / 29 / 2; 

    Serial.print(cm); //Imprime o valor da variálvel cm no serial monitor   Serial.println(" cm"); //Imprime o nome ‘ cm’ e pula para uma nova linha

      delay(500); //Espera 0,5 segundo}

  • 8/18/2019 Manual Arduino Lab

    40/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 24: Medindo distâncias e mostrando no display LCD

    * 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

    // HC-SR04 Ultrasonic Sensor - Robotic.com.br //

    #include //Chama a biblioteca do LCDLiquidCrystal lcd(12, 11, 5, 4, 3, 2); //define os pinos do arduino para o LCD

    int echoPin = 7; //Variável echopin definida como inteiro e ligado ao pin 7int trigPin = 6; //Variável trigpin definida como inteiro e ligado ao pin 6

    void setup() {  Serial.begin (9600); //inicia a porta serial e define velocidade transferência 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

    // Variávei que estabelece a duração do trigger,// O resultado da distância em centímetros:  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 duração é o tempo (em microssegundos) a partir do envio do trig  para a recepção de seu eco fora de um objeto. */

      duration = pulseIn(echoPin, HIGH); /* Converter o tempo em uma distância, sabendo que a velocidade do som é

      de 340 m / s ou 29 microssegundos por centímetro. Objeto fica na metade  da distância percorrida.*/

      cm = duration / 29 / 2; 

    lcd.clear(); //Limpa a área do lcd lcd.print(cm); //Imprime o valor da variálvel cm no LCD

    lcd.print(" cm"); //Imprime a sigla ‘cm’delay(100); //Espera 100 milisegundos

    }

  • 8/18/2019 Manual Arduino Lab

    41/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 25: Medindo distâncias e comandando um servo

    TRIG - Pin Digital 6ECHO - Pin Digital 7SIN - Pin PWM 10 (servo)

    Este programa irá comandar o servosando a distância de um obstáculo

    // HC-SR04 Sensor de Ultrassom e Servo Motor //

    #include //Inclui a biblioteca ServoServo meu_servo ; // Cria o objeto meu_servo para controlar um servo motor 

    int echoPin = 7; //Variável echopin definida como inteiro e ligado ao pin 7int trigPin = 6; //Variável 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 // Variávei que estabelece a duração do trigger,// O resultado da distância em centímetros:

      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 duração é o tempo (em microssegundos) a partir do envio do trig  para a recepção de seu eco fora de um objeto. */

      duration = pulseIn(echoPin, HIGH); /* Converter o tempo em uma distância, sabendo que a velocidade do som é

      de 340 m / s ou 29 microssegundos por centímetro. Objeto fica na metade  da distância percorrida.*/

      cm = duration / 29 / 2; 

    Serial.println(cm); //mostra no serial monitor a distacia em nova linha if (cm

  • 8/18/2019 Manual Arduino Lab

    42/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 26: Alarme de Incêndio com o sensor DS18B20

    D8 - Pino Digital 8 ligado ao Buzzer D12 - Pino Digital 12 ligado ao DQ do DS18B20

    /* Alarme de Incêndio com Dallas DS18B20- Este programa aciona um alarme quando a temperatura ambiente for maior que 30 graus.*/#include

    DallasTemperature tempSensor;int temp;int del = 250; // Duração do Tomint lowrange = 2000; // Valor mais baixo da freqencia usadaint highrange = 4000; // Frequencia mais alta

    void setup() { // inicializando entradas e saídas 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=lowrange; a--){tone (8, a, del);}}}

  • 8/18/2019 Manual Arduino Lab

    43/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 27: Alarme de intruso com ultrasom

    TRIG - Pin Digital 6ECHO - Pin Digital 7BUZZER - ligado ao pino digital 8

    //Alarme de intruso com sensor de ultrasomint cm;int trig = 6;int echo = 7;long microseconds;int temp;int del = 250; // Duração do Tomint lowrange = 2000; // Valor mais baixo da freqencia usada

    int highrange = 4000; // Frequencia mais altavoid setup() {  Serial.begin(9600); 

    pinMode(trig, OUTPUT);  pinMode(echo, INPUT);  pinMode(8, OUTPUT); // Buzzer porta 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

  • 8/18/2019 Manual Arduino Lab

    44/53

    Módulo Receptor de Infravermelho

    LED emissor de Infravermelho

    Objeto

    Sinal a 38Khz

    GND

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Detectando objetos com infravermelho

    LED emissor de Infravermelho

    Módulo Receptor de Infravermelho

  • 8/18/2019 Manual Arduino Lab

    45/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Copie e cole este programa na IDE do arduinoConectando os Jumpers

    Experimento 28: Detectando obstáculos com Infrared

    D7 - Pino Digital 7 ligado ao LEDD4 - Pino Digital 4 ligado ao LED INFRAVERMELHOD5 - Pino Digital 5 ligado ao Módulo Infrared

    //define pinos.#define irLedPin 4 // lED infrared no pino 4#define irSensorPin 5 // Sensor infrared no pino 5int irRead(int readPin, int triggerPin); //função protótipoint 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){ 

    int halfPeriod = 13;

    int cycles = 38;int i;

      for (i=0; i

  • 8/18/2019 Manual Arduino Lab

    46/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Experimento : Enviando comandos infravermelho de um Arduino Lab para outro

    Vamos precisar de 2 Arduino Lab para acionar um LED remotamente

    Conectando os Jumpers LAB1

    No Arduino Lab 1(receptor), faça as ligações conforme abaixo:

    No arduino Lab 2 (transmissor), Faça as ligações conforme abaixo:

    D7 - Pino Digital 7 ligado a um LED

    D2 - Pino Digital 2 ligado ao Módulo Infrared

    Conectando os Jumpers LAB2

    D3 - Ao LED infravermelho

  • 8/18/2019 Manual Arduino Lab

    47/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Carregue este programa no LAB1 (Receptor)

    #include const int RECV_PIN = 2; //Receptor ligado ao pin 2int 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 }}

  • 8/18/2019 Manual Arduino Lab

    48/53

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Passos:

    Carregue este programa na LAB 2 (emissor)

    //Programa Emissor 

    #include

    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 ? ") ;

    }

  • 8/18/2019 Manual Arduino Lab

    49/53

    PN2222A

    EBC

    Arduino Lab - Microcontroladores

    www.robotic.com.br 

      botic

    Experimento 29: Controlando a Unidade Móvel Robotic Remotamente Pelo Notebook

    Material Necessário:

    1 - UMR - Unidade Móvel Robotic1 - Arduino Lab1 - Led Infravermelho de 5mm1 - Transistor PN2222A

    A U M R s e r á c o n t r o l a d a a p a r t i r d o A r d u i n o L a b c o n e c t a d oa porta USB. No monitor serial irá mostrar 5 opções de movimentos para UMR. Os sinaisserão emitidos pelo LED infravermelho. Para o correto funcionamento teremos

    que carregar 2 programas um no Arduino Lab (emissor) e o outro na UMR (receptor)

    LED INFRARED 5MM

    RESISTOR100R

    GND

    +5v

    PIN3

    Faça as ligações conforme abaixo (emissor)

  • 8/18/2019 Manual Arduino Lab

    50/53

    Unidade Móvel Robotic - Microcontrolador

    www.robotic.com.br 

    PROGRAMA EMISSOR: Copie e cole na IDE do arduinoEste programa deve ser carregado no Arduino Lab que irá emitir os sinais pelo LED IR.

    #include

    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 ? ") ;}

    botic

  • 8/18/2019 Manual Arduino Lab

    51/53

    Unidade Móvel Robotic - Microcontrolador

    www.robotic.com.br 

    PROGRAMA RECEPTOR: Copie e cole na IDE do arduinoEste programa deve ser carregado na UMR (Unidade Móvel Robotic).

    #include #include //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 8MegaServo Servos[NBR_SERVOS] ;

    const int RECV_PIN = 2; //SENSOR DE INFRARED NO PIN 2IRrecv 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 PÁRA  Servos[1].write(70) ;

    Servos[2].write(70) ;  delay(15); } 

    irrecv.resume(); // Recebe proximo valor   }

    }

      botic

  • 8/18/2019 Manual Arduino Lab

    52/53

    UNIDADE MÓVEL ROBOTIC

    Sensor de Ultrasom

    ServosSensor de Trilha

    Arduino

    Shield Navigation

    Controle Remoto

  • 8/18/2019 Manual Arduino Lab

    53/53

    Unidade Móvel Robotic - Microcontrolador  botic

    Montagem