Você está na página 1de 53

R

R botic ARDUINO LAB ARDUINO PARA INICIANTES WWW.ROBOTIC.COM.BR

botic

ARDUINO LAB

ARDUINO PARA INICIANTES

WWW.ROBOTIC.COM.BR

R
R

botic

Arduino Lab - Microcontroladores

Arduino Duemilanove Atmega 328

O arduino é uma placa simples que contem tudo que você precisa para começar a trabalhar com eletrônica e programação de microcontroladores. Este diagrama ilustra os principais componentes da placa:

Este diagrama ilustra os principais componentes da placa: Diferença entre Arduino UNO e Duemilanove: O

Diferença entre Arduino UNO e Duemilanove:

O microcontrolador utilizado no UNO é o Atmega 328, o mesmo do Duemilanove. Porém no Arduino UNO existe um microcontrolador adicional (Atmega8U2) no lugar do chip FTDI utilizado no Duemilanove, que é responsável pela conversão USB/Serial. A gravação no UNO ficou mais rápida também.

R
R

botic

Arduino Lab - Microcontroladores

Arduino UNO ou Duemilanove com Atmega328

O Arduino Uno é uma placa de microcontrolador baseado no ATmega328. Ele tem 14 pinos de entrada/saída

digital (dos quais 6 podem ser usados como saídas PWM), 6 entradas analógicas, um cristal oscilador de 16MHz, uma conexão USB, uma entrada de alimentação uma conexão ICSP e um botão de reset. Ele contém todos 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.

Resumo Microcontrolador ATmega328 Voltagem Operacional 5V Voltagem de entrada (recomendada) 7-12V Voltagem de entrada (limites) 6-20V Pinos E/S digitais 14 (dos quais 6 podems ser saídas PWM) Pinos de entrada analógica 6 Corrente CC por pino E/S 40 mA Corrente CC para o pino 3,3V 50 mA Flash Memory 32 KB (ATmega328) dos quais 0,5KB 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 é selecionada

automaticamente. 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 superaquecimento da 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 5V regulados.

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

Ground pinos GND

Memória

O 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 e 512 bytes de EEPROM (que pode ser lido e escrito com a biblioteca EEPROM ), o ATmega328 tem 2 KB de SRAM e 1 KB de EEPROM.

Entrada e Saída Cada 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.

R
R

botic

Arduino Lab - Microcontroladores

Pinos com funções específicas:

Serial: 0 (RX) e 1 (TX). Usado para receber (RX) e transmitir (TX TTL série de dados). Esses pinos são ligados aos pinos correspondentes do chip FTDI USB-to-TTL Serial.

Interrupções externas: 2 e 3. Estes pinos podem ser configurados para disparar uma interrupção em um valor baixo, um aumento ou diminuição de ponta, ou uma alteração no valor. (Veja a função attachInterrupt )

PWM: 3, 5, 6, 9, 10 e 11. Pinos de saída PWM

LED: 13. Há um built-in LED conectado ao pino digital 13. Quando o pino está em valor alto , o LED está ligado, quando o pino é baixo, ele está desligado

O arduino tem 6 entradas analógicas, cada uma das quais fornecem 10 bits de resolução (ou seja, 1.024 valores

diferentes). Por padrão, elas medem do GND para 5 volts, mas é possível mudar a extremidade superior de sua escala com o pino AREF e analogReference () função.

AREF. Tensão de referência para as entradas analógicas. Usado com analogReference ().

Reset. Traga esta linha baixa para redefinir o microcontrolador. Tipicamente usado para adicionar um botão de reset de escudos.

Comunicação

O Arduino tem uma série de facilidades para se comunicar com um computador, outro Arduino, ou outros

microcontroladores. O ATmega168 e ATmega328 fornecer UART TTL (5V), comunicação serial, que está disponível nos pinos digitais 0 (RX) e 1 (TX). Um FT232RL FTDI os canais de comunicação

serial de USB e os drivers FTDI (incluído 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 estão sendo transmitidos através do chip FTDI e conexão USB para o computador (mas não para comunicação serial nos pinos 0 e 1).

A

biblioteca Software Serial permite a comunicação serial em qualquer um dos pinos digitais do arduino.

O

apoio também ATmega328 I2C (TWI) e comunicação SPI.

O

software inclui uma biblioteca Arduino Wire para simplificar o uso do barramento I2C, veja a documentação

para mais detalhes. Para usar a comunicação SPI, consulte o datasheet ou ATmega328

Programação

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ê faça o upload do novo

código para ele sem a utilização de um programador de hardware externo.

Ele se comunica utilizando o protocolo STK500 original ( de referência , arquivos de cabeçalho C ). Você também pode ignorar o bootloader e programar o microcontrolador através 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 própria proteção.

R
R

botic

Arduino Lab - Microcontroladores

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.

Configurando:

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

Certifique-se que o Arduino Duemilanove ou UNO (Atmega 328) está selecionado em: Tools > Board www.robotic.com.br
R
R

botic

Arduino Lab - Microcontroladores

Escolhendo a Porta Serial Selecione a porta serial menu Tools | Serial Port. No Windows deveria ser:

COM3, COM4 ou COM5 para uma placa USB. Para descobrir qual é abra o Gerenciador de Dispositivos do Windows (na aba Hardware do painel de controle do sistema). Procure por "USB Serial Port" na seção de Portas;

Hardware do painel de controle do sistema). Procure por "USB Serial Port" na seção de Portas;
Hardware do painel de controle do sistema). Procure por "USB Serial Port" na seção de Portas;
R
R

botic

Arduino Lab - Microcontroladores

Ultrasom

Display LCD

RTC

Conectores para o Arduino

Sensor de Temperatura Servo Motor Módulo Receptor Infravermelho 3 LEDs comuns 1 LED infrared Protoboard
Sensor de
Temperatura
Servo Motor
Módulo Receptor
Infravermelho
3 LEDs comuns
1 LED infrared
Protoboard
Relé Chaves
LDR Buzzer

Tactils

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 LIBRARIES tem estas bibliotecas, caso falte alguma, baixe da pagina de download no site:

www.robotic.com.br e descompacte na pasta libraries.

R
R

botic

Arduino Lab - Microcontroladores

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.

pelo led depende do material semicondutor que o constitui. Simbologia O led está diretamente polarizado, e
pelo led depende do material semicondutor que o constitui. Simbologia O led está diretamente polarizado, e
pelo led depende do material semicondutor que o constitui. Simbologia O led está diretamente polarizado, e

Simbologia

depende do material semicondutor que o constitui. Simbologia O led está diretamente polarizado, e emite luz,

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 Arduino

negativo em relação ao cátodo. Ligando um LED no Arduino Cada cor de LED possui uma

Cada cor de LED possui uma tensao de trabalho (V) e uma corrente maxima suportada (I) que varia para cada fabricante, mas varia pouco em torno destes valores:

Vermelhos e Amarelos - 1,7V a 2V Verdes - 2V a 3V Azul,Violeta e Ultra-violeta Acima de 3V

Como os pinos do arduino trabalham com +5v é necessário um resistor em série com o LED afim de limitar a voltagem no LED impedindo sua queima.

R
R

botic

Arduino Lab - Microcontroladores

Experimento 1: Led piscante Faça as ligações conforme abaixo

1: Led piscante Faça as ligações conforme abaixo Conectando os Jumpers D8 - Pino Digital 8

Conectando os Jumpers

D8 - Pino Digital 8 ligado ao LED

Passos:

os Jumpers D8 - Pino Digital 8 ligado ao LED Passos: Copie e cole este programa
os Jumpers D8 - Pino Digital 8 ligado ao LED Passos: Copie e cole este programa

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; void setup()

// LED conectado ao pino digital 8

{ pinMode(ledPin, OUTPUT);

}

void loop()

// configura pino digital como saída

{ digitalWrite(ledPin, HIGH);

// liga o LED

}

delay(1000);

digitalWrite(ledPin, LOW);

delay(1000);

// temporiza 1 segundo

// desliga o LED

// aguarda mais um segundo

R
R

botic

Arduino Lab - Microcontroladores

Experimento 3: Gerando sons - Buzzer

Faça as ligações conforme abaixo

3: Gerando sons - Buzzer Faça as ligações conforme abaixo Conectando os Jumpers D8 - Pino

Conectando os Jumpers

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

Passos:

ao BUZZER Faça o download da biblioteca pitches Passos: Copie e cole este programa na IDE
ao BUZZER Faça o download da biblioteca pitches Passos: Copie e cole este programa na IDE

Copie e cole este programa na IDE do arduino

/*

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.

}

R
R

botic

Arduino Lab - Microcontroladores

Entendendo o Servo Motor RC (rádio controle)

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 tem trê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 300 a 400 Hz para servos digitais

O terceiro valor é o mais crítico, é o pulso positivo com PWM. A largura do pulso terá um resultado direto para

a posição de acionamento. Em outras palavras, para controlar a posição de um servo, deve alterar a duração

do pulso positivo do sinal de PWM conduzidos para o fio de sinal do 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.

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

Pulsos PWM para movimentar um Servo

Largura de Pulso de 2000 microsegundos o servo gira em sentido anit-horário periodo 20 mS
Largura de Pulso de 2000 microsegundos o servo gira em sentido anit-horário
periodo 20 mS
Largura de Pulso de 1500 microsegundos o servo pára na posição central
Largura de Pulso de 1000 microsegundos o servo gira em sentido horário
R
R

botic

Arduino Lab - Microcontroladores

Experimento 4: Controlando um Servo Motor com pulsos em microsegundos

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

Conectando os Jumpers

SIN do Servo ao pino digital 9

Conectando os Jumpers SIN do Servo ao pino digital 9 Este servo é um servo de

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.

#include <Servo.h> //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)

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

meu_servo.writeMicroseconds(1500);

delay(1000); //epera 1 segundo

}

void loop() { //Repete enquanto for verdadeiro

meu_servo.writeMicroseconds(1000); // gira o servo horario para 0º delay(2000); //espera 2 segundos

meu_servo.writeMicroseconds(1500); // 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

}

Passos:

// gira o servo sentido contrário para180º delay(2000); //espera 2 segundos } Passos: www.robotic.com.br
// gira o servo sentido contrário para180º delay(2000); //espera 2 segundos } Passos: www.robotic.com.br
R
R

botic

Arduino Lab - Microcontroladores

Experimento 4.1: Controlando um Servo Motor por ângulos.

90º

4.1: Controlando um Servo Motor por ângulos. 0º 90º 180º Conectando os Jumpers SIN do Servo

180º

Conectando os Jumpers

SIN do Servo ao pino digital 9

180º Conectando os Jumpers SIN do Servo ao pino digital 9 Este servo é um servo

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.

0º ->

Largura de pulso 544

180º ->

Largura de pulso 2400

#include <Servo.h> //inclue a biblioteca Servo

Servo myservo ;

//Cria o objeto meu_servo

void setup(){

//Configuração inicial, não se repete

myservo.attach(9,544,2400) ;

} //fim do void setup

//Meu servo ligado no pin9 (PWM) pulso mini e maximo para o servo

void loop() { myservo.write(0) ;

delay(2000);

myservo.write(90) ;

delay(2000);

//Repete enquanto for verdadeiro // gira o servo horario para 0º //espera 2 segundos

// pára o servo na posição central 90º //espera 2 segundos

myservo.write(180) ;

delay(2000);

} //fim do void loop

// gira o servo sentido contrário para 180º //espera 2 segundos

Passos:

} //fim do void loop // gira o servo sentido contrário para 180º //espera 2 segundos
} //fim do void loop // gira o servo sentido contrário para 180º //espera 2 segundos
R
R

botic

Arduino Lab - Microcontroladores

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

Conectando os Jumpers

SIN do Servo ao pino digital 9

Monitor Conectando os Jumpers SIN do Servo ao pino digital 9 Copie e cole este programa

Copie e cole este programa na IDE do arduino

#include <Servo.h> //Inclui a biblioteca Servo

Servo myservo;

//Cria a variável myservo

int char_in ; void setup()

//Cria a variável char_in para receber as opções do menu //Configuração inicial

{

Serial.begin(9600) ; //abre a porta serial, define a taxa de dados a 9600 bps

myservo.attach(9,544,2400) ; //Meu servo ligado no pin9 (PWM) pulso mini e maximo para o servo

colocaMenu() ;

//Cria o Menu

}

void loop() //Repete até verdadeiro

{

if(Serial.available() > 0 ) { //Verifica se a porta serial está disponível

char_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 1 myservo.write(0) ; //Posiciona o servo no ângulo 0 grau Serial.println(" Vai ao angulo 0 grau") ; //mostra esta frase no serial monitor break;

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

case '3':

myservo.write(180) ; //Posiciona o servo no ângulo 180 graus

Serial.println(" Vai ao angulo 180 graus") ; //mostra esta frase no serial monitor break;

} //fim da função switch

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

} //fim da void loop

//caso o valor da variável seja 3

void colocaMenu() { //Mostra o menu na tela Serial.println("Teste de motor servo") ; Serial.println("Selecione :") ; Serial.println("1 - VAI PARA O ANGULO 0 GRAU") ;

Serial.println("2 - VAI PARA O ANGULO 90 GRAUS") ; Serial.println("3 - VAI PARA O ANGULO 180 GRAUS") ; Serial.println("Opcao ? ") ;

}

Passos:

- VAI PARA O ANGULO 180 GRAUS") ; Serial.println("Opcao ? ") ; } Passos: www.robotic.com.br
- VAI PARA O ANGULO 180 GRAUS") ; Serial.println("Opcao ? ") ; } Passos: www.robotic.com.br
- VAI PARA O ANGULO 180 GRAUS") ; Serial.println("Opcao ? ") ; } Passos: www.robotic.com.br
R
R

botic

Arduino Lab - Microcontroladores

Experimento 5: Controlando um LED pelo sersor de luz LDR

Conectando os Jumpers

D8 - Pino Digital 8 ligado ao LED D2 - Pino digital 2 Ligado ao LDR

Faça as ligações conforme abaixo

digital 2 Ligado ao LDR Faça as ligações conforme abaixo Passos: Copie e cole este programa

Passos:

2 Ligado ao LDR Faça as ligações conforme abaixo Passos: Copie e cole este programa na
2 Ligado ao LDR Faça as ligações conforme abaixo Passos: Copie e cole este programa na

Copie e cole este programa na IDE do arduino

//Programa para controle de LED com LDR

int ledpin = 8; int ldr = 2; int val;

void setup () { pinMode (ledpin, OUTPUT ); pinMode (ldr, INPUT );

}

void loop () {

val = digitalRead(ldr);

if (val == LOW ) {

digitalWrite (ledpin, LOW );

}

if (val == HIGH ) {

digitalWrite (ledpin, HIGH );

}

}

R
R

botic

Arduino Lab - Microcontroladores

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

Faça as ligações conforme abaixo

pelo sensor de luz LDR Faça as ligações conforme abaixo Conectando os Jumpers D10 - Pino

Conectando os Jumpers

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

Passos:

ao SIN do servo D2 - Pino digital 2 Ligado ao LDR Passos: Copie e cole
ao SIN do servo D2 - Pino digital 2 Ligado ao LDR Passos: Copie e cole

Copie e cole este programa na IDE do arduino

//Programa para controlar o servo com LDR

#include <Servo.h> Servo myservo;

int servo = 10; int ldr = 2; int val;

void setup(){

pinMode(servo,OUTPUT);

pinMode(ldr,INPUT);

myservo.attach(servo,880,2300) ; //Inicia com o servo parado

myservo.write(70);

delay(300);

}

void loop() {

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

if (val == LOW ) {

myservo.attach(servo,880,2300) ; //Pára o servo

myservo.write(70);

delay(300);

}

if (val == HIGH ) {

myservo.attach(servo,880,2300) ; // aciona o servo myservo.write(180) ;

delay(300);

}

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 7: Controlando um LED pela Chave Táctil

Faça as ligações conforme abaixo

LED pela Chave Táctil Faça as ligações conforme abaixo Conectando os Jumpers D8 - Pino Digital

Conectando os Jumpers

D8 - Pino Digital 8 ligado ao LED D2 - Pino digital 2 Ligado ao Ch1

Passos:

8 ligado ao LED D2 - Pino digital 2 Ligado ao Ch1 Passos: Copie e cole
8 ligado ao LED D2 - Pino digital 2 Ligado ao Ch1 Passos: Copie e cole

Copie e cole este programa na IDE do arduino

int chave = 2;

// Chave táctil no pin 2

int led =

8;

// LED no pino 8

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

}

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 8: Controlando um Servo Motor pela Chave Táctil Faça as ligações conforme abaixo

pela Chave Táctil Faça as ligações conforme abaixo Conectando os Jumpers * Ligações das Chaves Tactils

Conectando os Jumpers

* Ligações das Chaves Tactils

PIN 6 - CH2 - Pino digital 6 ligado a Chave 2 PIN 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

Passos:

- Pino digital 9 ligado ao pino de sinal do servo Passos: Copie e cole este
- Pino digital 9 ligado ao pino de sinal do servo Passos: Copie e cole este

Copie e cole este programa na IDE do arduino

#include <Servo.h>

Servo myservo ; int ST1; int ST2; int CHAVE_1 = 7; int CHAVE_2 = 6; void setup(){

myservo.attach(9,880,2300) ;

pinMode(CHAVE_1,INPUT);

pinMode(CHAVE_2,INPUT);

//Declara variável ST1 //Declara variável ST2 //chave_1 ligada no pin digital 7 //chave_2 ligada no pin digital 6

//define as chaves como entrada

myservo.write(70) ;

//enviando um ângulo de 70 graus, mantém o servo parado

}

void loop() {

ST1 = digitalRead(CHAVE_1); ST2 = digitalRead(CHAVE_2);

//faz a leitura da chave 1 //faz a leitura da chave 2

if (ST1 == HIGH and ST2==HIGH){PARA();} if (ST1 == LOW and ST2==HIGH){GIRA();}

if (ST1 == HIGH and ST2==LOW){VOLTA();}

}

void GIRA() { myservo.write(180); // gira o servo

delay(1000);

PARA();

}

void PARA() {

myservo.write(70); // pára o servo

delay(5);

}

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

delay(1000);

PARA();

}

R
R

botic

Arduino Lab - Microcontroladores

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

Faça as ligações conforme abaixo

do potenciômetro Faça as ligações conforme abaixo Conectando os Jumpers D10 - Pino Digital 10 ligado

Conectando os Jumpers

D10 - Pino Digital 10 ligado a um LED

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

Passos:

do arduino ligado ao pino central do potenciômetro Passos: Copie e cole este programa na IDE
do arduino ligado ao pino central do potenciômetro Passos: Copie e cole este programa na IDE

Copie e cole este programa na IDE do arduino

int potPin = 5; int ledPin = 10;

// pino de entrada para o potenciômetro // pino de saida para o LED

void setup()

{

pinMode(ledPin, OUTPUT);

// declara ledPin como SAIDA

}

void loop()

{

digitalWrite(ledPin, HIGH); delay(analogRead(potPin));

// ledPin em on // Espera por um tempo “potPin”

digitalWrite(ledPin, LOW); delay(analogRead(potPin));

// ledPin em off // Espera por um tempo “potPin”

}

R
R

botic

Arduino Lab - Microcontroladores

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

Faça as ligações conforme abaixo

do potenciômetro Faça as ligações conforme abaixo Conectando os Jumpers SIN - Pino de sinal do

Conectando os Jumpers

SIN - Pino de sinal do Servo ao Pin Digital 10

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

Passos:

do arduino ligado ao pino central do potenciômetro Passos: Copie e cole este programa na IDE
do arduino ligado ao pino central do potenciômetro Passos: Copie e cole este programa na IDE

Copie e cole este programa na IDE do arduino

#include <Servo.h>

// Biblioteca que permite controlar mais facilmete os Servos

Servo 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 5

analogico 5 int 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); valor = map(valor, 0, 1023, 0, 179);

// leitura do valor do potenciometro e “escrita” desse valor na variavel valor // Escala para que o valor do potenciometro possa corresponder a um valor de posiçao no

servo1.write(valor);

// Gira o servo de acordo com a escala da linha acima

delay(1);

// Espera de 1 milisegunda para que o servo possa atingir a sua posiçao

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 11:

RTC - Real Time Clock

Programando o RTC com a data e horas atuais e visualizando no Serial Monitor.

Conectando os Jumpers

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

Faça as ligações conforme abaixo

pino analógico 5 ao SCL Faça as ligações conforme abaixo OBS.: Após carregar o programa, desligue

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

Passos:

ligue novamente, depois verifique no monitor serial Passos: Copie e cole este programa na IDE do
ligue novamente, depois verifique no monitor serial Passos: Copie e cole este programa na IDE do
ligue novamente, depois verifique no monitor serial Passos: Copie e cole este programa na IDE do

Copie e cole este programa na IDE do arduino

#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // Convert normal decimal numbers to binary coded decimal

// Ligar o SDA ao pin4 da entrada analógica e SCL ao pin5 da entrada analógica 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; minute = 32; hour = 8; dayOfWeek = 2;

//Segundos //Minutus //Hora //Dia da semana sendo 1 domingo

dayOfMonth = 19;

//Dia do mês

month = 3;

//Mês 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);

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 12: RTC - Real Time Clock

Visualizando a data e hora no Display LCD

Conectando os Jumpers

Ligações do Display ao Arduino:

* RS

* E

- Pino digital 12

- 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

Faça as ligações conforme abaixo

pino analógico 5 ao SCL Faça as ligações conforme abaixo Obs.: Gire o Trimpot (azul) até

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

Passos:

(azul) até aparecer os caracteres no display Passos: Copie e cole este programa na IDE do
(azul) até aparecer os caracteres no display Passos: Copie e cole este programa na IDE do

Copie e cole este programa na IDE do arduino

#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // Convert normal decimal numbers to binary coded decimal

// Ligar o SDA ao pin4 da entrada analógica e SCL ao pin5 da entrada analógica #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); byte decToBcd(byte val)

{

return ( (val/10*16) + (val%10) );

}

// Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val)

{

return ( (val/16*10) + (val%16) );

}

void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23

byte dayOfWeek, // 1-7

byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99

{

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.send(0);

Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock Wire.send(decToBcd(minute)); Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set // bit 6 (also need to change readDateDs1307) Wire.send(decToBcd(dayOfWeek)); Wire.send(decToBcd(dayOfMonth)); Wire.send(decToBcd(month)); Wire.send(decToBcd(year)); Wire.endTransmission();

}

// Gets the date and time from the ds1307 void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year)

{

// Reset the register pointer

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.send(0);

Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // A few of these need masks because certain bits are control bits

*second = bcdToDec(Wire.receive() & 0x7f); *minute = bcdToDec(Wire.receive());

*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm *dayOfWeek = bcdToDec(Wire.receive()); *dayOfMonth = bcdToDec(Wire.receive()); *month = bcdToDec(Wire.receive()); *year = bcdToDec(Wire.receive());

}

void setup() //Registrando a data atual no RTC

{ lcd.begin(8, 2);

//byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; Wire.begin();

}

void loop()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); lcd.print(hour, DEC); lcd.print(":"); lcd.print(minute, DEC); lcd.print(":"); lcd.print(second, DEC); lcd.setCursor(0,1); //Posiciona cursor na segunda linha lcd.print(dayOfMonth, DEC); lcd.print("/"); lcd.print(month, DEC); lcd.print("/");

lcd.print("20");

lcd.print(year, DEC);

delay(1000);

lcd.clear();

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 13: RTC - Real Time Clock

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

Conectando os Jumpers

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

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

* D13 pino digital 13 ligado ao LED

Faça as ligações conforme abaixo

digital 13 ligado ao LED Faça as ligações conforme abaixo Passos: Copie e cole este programa

Passos:

13 ligado ao LED Faça as ligações conforme abaixo Passos: Copie e cole este programa na
13 ligado ao LED Faça as ligações conforme abaixo Passos: Copie e cole este programa na
13 ligado ao LED Faça as ligações conforme abaixo Passos: Copie e cole este programa na

Copie e cole este programa na IDE do arduino

#include "Wire.h" #define DS1307_I2C_ADDRESS 0x68 // Convert normal decimal numbers to binary coded decimal

// Ligar o SDA ao pin4 da entrada analógica e SCL ao pin5 da entrada analógica int LED = 13; //led ligado ao pin 13 byte decToBcd(byte val)

{

return ( (val/10*16) + (val%10) );

}

// Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val)

{

return ( (val/16*10) + (val%16) );

}

void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99

{

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.send(0);

Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock Wire.send(decToBcd(minute)); Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set // bit 6 (also need to change readDateDs1307) Wire.send(decToBcd(dayOfWeek)); Wire.send(decToBcd(dayOfMonth)); Wire.send(decToBcd(month)); Wire.send(decToBcd(year)); Wire.endTransmission();

}

// Gets the date and time from the ds1307 void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year)

{

// Reset the register pointer

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.send(0);

Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // A few of these need masks because certain bits are control bits *second = bcdToDec(Wire.receive() & 0x7f); *minute = bcdToDec(Wire.receive());

*hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm *dayOfWeek = bcdToDec(Wire.receive()); *dayOfMonth = bcdToDec(Wire.receive()); *month = bcdToDec(Wire.receive()); *year = bcdToDec(Wire.receive());

}

void setup() //Registrando a data atual no RTC

{

//byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

Wire.begin();

Serial.begin(9600);

}

void loop()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); Serial.print("Sao: "); Serial.print(hour, DEC); Serial.print(":"); Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); Serial.print(" "); Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC);

Serial.print("/20");

Serial.println(year, DEC); // As 8:45h o led irá acender if (hour == 8 and minute == 45) { digitalWrite(LED, HIGH);} //Serial.println(dayOfWeek);

delay(1000);

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 14: RTC - Real Time Clock

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

Conectando os Jumpers

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

Faça as ligações conforme abaixo

ligado ao SIN do servo Faça as ligações conforme abaixo Passos: Copie e cole este programa

Passos:

ao SIN do servo Faça as ligações conforme abaixo Passos: Copie e cole este programa na
ao SIN do servo Faça as ligações conforme abaixo Passos: Copie e cole este programa na
ao SIN do servo Faça as ligações conforme abaixo Passos: Copie e cole este programa na

Copie e cole este programa na IDE do arduino

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

{

return ( (val/10*16) + (val%10) );

}

// Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val)

{

return ( (val/16*10) + (val%16) );

}

void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99

{

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.send(0);

Wire.send(decToBcd(second)); // 0 to bit 7 starts the clock Wire.send(decToBcd(minute));

Wire.send(decToBcd(hour)); // If you want 12 hour am/pm you need to set // bit 6 (also need to change readDateDs1307) Wire.send(decToBcd(dayOfWeek)); Wire.send(decToBcd(dayOfMonth)); Wire.send(decToBcd(month)); Wire.send(decToBcd(year)); Wire.endTransmission();

}

// Gets the date and time from the ds1307 void getDateDs1307(byte *second, byte *minute, byte *hour,

byte *dayOfWeek,

byte *dayOfMonth,

byte *month,

byte *year)

{

// Reset the register pointer

Wire.beginTransmission(DS1307_I2C_ADDRESS);

Wire.send(0);

Wire.endTransmission(); Wire.requestFrom(DS1307_I2C_ADDRESS, 7); // A few of these need masks because certain bits are control bits

*second = bcdToDec(Wire.receive() & 0x7f); *minute = bcdToDec(Wire.receive()); *hour = bcdToDec(Wire.receive() & 0x3f); // Need to change this if 12 hour am/pm *dayOfWeek = bcdToDec(Wire.receive()); *dayOfMonth = bcdToDec(Wire.receive()); *month = bcdToDec(Wire.receive()); *year = bcdToDec(Wire.receive());

}

void setup() //Registrando a data atual no RTC

{

//byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; Servos[1].attach(3,880,2300); //Servo na porta digital 3

Servos[1].write(70);

delay(15);

Wire.begin();

Serial.begin(9600);

}

void loop()

{

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); Serial.print("Sao: "); Serial.print(hour, DEC); Serial.print(":"); Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); Serial.print(" ");

Serial.print(dayOfMonth, DEC); Serial.print("/"); Serial.print(month, DEC);

Serial.print("/20");

Serial.println(year, DEC); // As 8:45h o servo será acionado e as 8:47 desligado

if (hour == 8 and minute >= 45) { Servos[1].write(180);} if (hour == 8 and minute >= 47) { Servos[1].write(70);} //Serial.println(dayOfWeek);

delay(1000);

}

R
R

botic

Arduino Lab - Microcontroladores

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 comando biná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 os seguintes comandos binários de 7 bits:

TVs Sony e inclui os seguintes comandos binários de 7 bits: Além do comando da tecla

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

Start bit Stop bit Código da tecla
Start bit
Stop bit
Código da tecla

Código do aparelho

Os controles remotos de padrão Sony usam um método de codificação de espaços em que o comprimento dos espaç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 de apenas 10 metros e exigem linha de visada. Isso significa que sinais infravermelhos não são transmitidos através de 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

R
R

botic

Arduino Lab - Microcontroladores

CONFIGURAÇÃO DO CONTROLE REMOTO

Códigos sony para cada técla do controle

2704 2192 144 1168 656 3216
2704
2192
144
1168
656
3216

2640

técla do controle 2704 2192 144 1168 656 3216 2640 Conectando os Jumpers Pino Digital 2

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 LIBRARIES tem estas bibliotecas, caso falte alguma, baixe da pagina de download no site:

www.robotic.com.br e descompacte na pasta libraries.

R
R

botic

Unidade Móvel Robotic - Microcontrolador

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

#include <IRremote.h>

const int RECV_PIN = 2; int LED = 7; IRrecv irrecv(RECV_PIN); decode_results results;

void setup()

// Inclue a biblioteca IRremote

//Receptor di IR no pino digital 2 //LED no pin 7

{ pinMode(LED, OUTPUT); irrecv.enableIRIn(); // Inicia o recebimento

}

void loop() { if (irrecv.decode(&results)) { if (results.value == 656){ digitalWrite(LED, HIGH);}

//Tecla MUTE do controle remoto //Acende o LED do pin 13

if (results.value == 2192){ //Tecla CH- do controle remoto digitalWrite(LED, LOW); } //Apaga o LED do pin 13

if (results.value == 144){

//Tecla CH+ do controle remoto

digitalWrite(LED, HIGH); } //Apaga o LED do pin 13

irrecv.resume(); // Recebe proximo valor

}

}

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

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

configuração, o LED deverá acender e apagar. 1- Mantenha precione a tecla MUTE até o LED
R
R

botic

Arduino Lab - Microcontroladores

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

Faça as ligações conforme abaixo

remoto no serial monitor Faça as ligações conforme abaixo Conectando os Jumpers Pino Digital 2 ligado

Conectando os Jumpers

Pino Digital 2 ligado ao Módulo Infrared

Copie e cole este programa na IDE do arduino

#include <IRremote.h> //Inclui a biblioteca Irremote

int RECV_PIN = 2;

IRrecv irrecv(RECV_PIN); decode_results results;

//Sensor de IR ligado no pino 2

//Variável irrecv recebe os dados emitidos pelo controle //Separa os bits para saber qual tecla foi precionada e armazena na variável results

void setup()

{

Serial.begin(9600);

irrecv.enableIRIn();

irrecv.blink13(true);

}

void loop() { if (irrecv.decode(&results)) {

Serial.println(results.value);

//Inicializa a porta serial (Serial Monitor) // Ativa o recebimento dos comandos do controle //Pisca o LED13 enquanto recebe comandos

// Verifica se a variável recebeu algum comando do controle

// Mostra em uma nova linha o valor da variável

irrecv.resume();

// Recebe proximo valor

}

}

Passos:

uma nova linha o valor da variável irrecv.resume(); // Recebe proximo valor } } Passos: www.robotic.com.br
uma nova linha o valor da variável irrecv.resume(); // Recebe proximo valor } } Passos: www.robotic.com.br
uma nova linha o valor da variável irrecv.resume(); // Recebe proximo valor } } Passos: www.robotic.com.br
R
R

botic

Arduino Lab - Microcontroladores

Experimento 16: Comandando um LED pelo controle remoto

Faça as ligações conforme abaixo

LED pelo controle remoto Faça as ligações conforme abaixo Conectando os Jumpers D7 - Pino Digital

Conectando os Jumpers

D7 - Pino Digital 7 ligado a um LED

D2 - Pino Digital 2 ligado ao Módulo Infrared

Copie e cole este programa na IDE do arduino

#include <IRremote.h> //Inclui a biblioteca Irremote

int RECV_PIN = 2;

int LED = 7;

IRrecv irrecv(RECV_PIN); decode_results results;

void setup()

{

Serial.begin(9600);

irrecv.enableIRIn();

irrecv.blink13(true);

//Sensor de IR ligado no pino 2

//LED ligado ao pin 7

//Variável irrecv recebe os dados emitidos pelo controle //Separa os bits para saber qual tecla foi precionada e armazena na variável results

//Inicializa a porta serial (Serial Monitor) // Ativa o recebimento dos comandos do controle //Pisca o LED13 enquanto recebe comandos

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

}

void loop() { if (irrecv.decode(&results)) {

Serial.println(results.value);

if (results.value == 144){

// Verifica se a variável recebeu algum comando do controle

// Mostra em uma nova linha o valor da variáve

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

// Recebe proximo valor

}

}

Passos:

// Recebe proximo valor } } Passos: OBS: Após carregar o programa use as teclas CH+
// Recebe proximo valor } } Passos: OBS: Após carregar o programa use as teclas CH+
// Recebe proximo valor } } Passos: OBS: Após carregar o programa use as teclas CH+

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

R
R

botic

Arduino Lab - Microcontroladores

Experimento 17: Comandando um servo motor pelo controle remoto

Conectando os Jumpers

INFRARED - Pin Digital 2

SIN -

pin digital 9 (servo)

Faça as ligações conforme abaixo

pin digital 9 (servo) Faça as ligações conforme abaixo Passos: Copie e cole este programa na

Passos:

9 (servo) Faça as ligações conforme abaixo Passos: Copie e cole este programa na IDE do
9 (servo) Faça as ligações conforme abaixo Passos: Copie e cole este programa na IDE do

Copie e cole este programa na IDE do arduino

#include <IRremote.h> // Inclue a biblioteca IRremote #include <MegaServo.h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos ligados. #define FIRST_SERVO_PIN 8

MegaServo Servos[NBR_SERVOS] ; const int RECV_PIN = 2; //Receptor di IR no pino digital 2

IRrecv irrecv(RECV_PIN); decode_results results;

int servo = 9;

//servo no pino digital 9

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

R
R

botic

Arduino Lab - Microcontroladores

Experimento 18: Comandando um RELÉ pelo controle remoto

Experimento 18: Comandando um RELÉ pelo controle remoto Conectando os Jumpers D7 - Pino Digital 8

Conectando os Jumpers

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

Passos:

DO RELÉ Comum ao +5volts NA - Ligar a um LED Passos: Copie e cole este
DO RELÉ Comum ao +5volts NA - Ligar a um LED Passos: Copie e cole este

Copie e cole este programa na IDE do arduino

#include <IRremote.h>

// Inclue a biblioteca IRremote

const int RECV_PIN = 2; int RELE = 8; IRrecv irrecv(RECV_PIN); decode_results results;

//Receptor di IR no pino digital 2 //Relé no pino 8

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

}

}

R
R

botic

Arduino Lab - Microcontroladores

Sensor de Temperatura Dallas DS18B20

Este sensor de temperatura mede de -55ºc a +125ºC. e possui resolução programável dentre outros recursos. Permite programar alarmes de temperatura, que ficarão registrados em sua memória não volá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 no mesmo pino. Ideal para projetos com microcontroladores.

se use vários sensores no mesmo pino. Ideal para projetos com microcontroladores. Esquema de ligação www.robotic.com.br

Esquema de ligação

se use vários sensores no mesmo pino. Ideal para projetos com microcontroladores. Esquema de ligação www.robotic.com.br
R
R

botic

Arduino Lab - Microcontroladores

Experimento 19: Mostrando temperaturas no serial monitor

Experimento 19: Mostrando temperaturas no serial monitor Conectando os Jumpers * DQ - Pino digital 12

Conectando os Jumpers

* DQ

- Pino digital 12

Faça as ligações conforme abaixo

Passos:

Pino digital 12 Faça as ligações conforme abaixo Passos: Copie e cole este programa na IDE
Pino digital 12 Faça as ligações conforme abaixo Passos: Copie e cole este programa na IDE
Pino digital 12 Faça as ligações conforme abaixo Passos: Copie e cole este programa na IDE

Copie e cole este programa na IDE do arduino

/*

DallasTemperature.CPP - Dallas Temperature Control Library 1.0.0

*/ #include <DallasTemperature.h> //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

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 20: Mostrando temperaturas no display LCD

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 interface

de 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.

(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) são 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 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 Biblioteca

LiquidCrystal 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.

Esquema de ligação do LCD

Trimpot
Trimpot
R
R

botic

Arduino Lab - Microcontroladores

Experimento 20: Mostrando temperaturas no display LCD

Experimento 20: Mostrando temperaturas no display LCD Conectando os Jumpers * - Pino digital 12 RS

Conectando os Jumpers

* - Pino digital 12

RS

* - Enable pino digital 11

E

* 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

Passos:

* DQ do Sensor de Temperatura ao pino digital 6 Passos: Copie e cole este programa
* DQ do Sensor de Temperatura ao pino digital 6 Passos: Copie e cole este programa

Copie e cole este programa na IDE do arduino

/* Mostrando a temperatura no Display */

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

void setup(void) {

// initialize entradas e 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 linha lcd.print(tempSensor.getTemperature()); lcd.print("C");

delay(1000); //espera 1 segundo para fazer a leitura novamente lcd.clear();

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 21: Os leds acendem de acordo com a temperatura

Experimento 21: Os leds acendem de acordo com a temperatura Conectando os Jumpers D8 - Pino

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

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

Passos:

Vermelho acende para temperaturas maiores que 30° Passos: Copie e cole este programa na IDE do
Vermelho acende para temperaturas maiores que 30° Passos: Copie e cole este programa na IDE do
Vermelho acende para temperaturas maiores que 30° Passos: Copie e cole este programa na IDE do

Copie e cole este programa na IDE do arduino

/*

SENSOR DE TEMPERATURA

- Este programa acende o led azul para temperatura abaixo de 25 graus

- Acende o led amarelo para temperaturas entre 25 e 30 graus

- Acende o led vermelho para temperaturas maiores que 30 graus */ #include <DallasTemperature.h> DallasTemperature tempSensor;

int led_azul = 8; int led_amar = 9; int led_verm = 10; int temp;

//led azul no pino 8 //led amarelo no pino 9 //led vermelho no pino 10

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()); Serial.print("C"); Serial.println();

Serial.print(tempSensor.getTemperature()); if (tempSensor.getTemperature() < 25)

{

digitalWrite(led_azul, HIGH);

digitalWrite(led_amar, LOW);

digitalWrite(led_verm, LOW);

}

if (tempSensor.getTemperature() > 25 and tempSensor.getTemperature() < 30) {

digitalWrite(led_azul, LOW);

digitalWrite(led_amar, HIGH); digitalWrite(led_verm, LOW);

}

if (tempSensor.getTemperature() > 30) {

digitalWrite(led_azul, LOW); digitalWrite(led_amar, LOW);

digitalWrite(led_verm, HIGH);

}

}

// envia para o monitor serial.

//verifica se a temperatura é menor que 20 graus

//verifica se a temperatura é menor que 20 graus

//verifica se a temperatura é menor que 20 graus

R
R

botic

Arduino Lab - Microcontroladores

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

22: O servo é acionado de acordo com a temperatura Conectando os Jumpers D7 - Pino

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 serão necessários:

- uma pedra de gelo envolvida por um pano.

- Um isqueiros (Cuidado somente adultos)

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

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

Passos:

maiores que 30° servo gira em sentido contrário Passos: Copie e cole este programa na IDE
maiores que 30° servo gira em sentido contrário Passos: Copie e cole este programa na IDE
maiores que 30° servo gira em sentido contrário Passos: Copie e cole este programa na IDE

Copie e cole este programa na IDE do arduino

/* SENSOR DE TEMPERATURA Este programa aciona um servo de acordo com a temperatura */ #include <DallasTemperature.h> DallasTemperature tempSensor; #include <MegaServo.h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos ligados #define FIRST_SERVO_PIN 3 MegaServo Servos[NBR_SERVOS] ; int temp;

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

Servos[1].attach(7,880,2300); //Servo na porta digital 7

Servos[1].write(70);

delay(15);

Serial.begin(9600); // inicializa a porta serial tempSensor.begin(12); // sensor ligado na porta digital 12 Serial.println("Temperatura Atual: ");

}

void loop() {

Serial.print(tempSensor.getTemperature()); 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);

}

}

// envia para o monitor serial.

R
R

botic

Arduino Lab - Microcontroladores

Entendendo o Sensor de Ultrassom

Lab - Microcontroladores Entendendo o Sensor de Ultrassom possue dois transdutores com cristais piezoelétricos que

possue dois transdutores com cristais piezoelétricos que ressonam em uma frequência

ultra-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).

O sensor

Os Pulsos são refletidos pelo

alvo 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 distânciaentresensor eoalvo.

.

Os

pulsos são emitidos

em uma forma

de

cone com um feixe destinado

a

um objeto alvo.

Quando utilizado para funções de detecção, o método de ultrassons tem vantagens únicas sobre os sensores convencionais de

infravermelho: O

detectam alvos claros, transparentes e brilhantes tão facilmente como materiais escuros e opaco. Esta capacidade permite que

os sensores de ultrassom sejam usados para detectar materiais que vão desde frascos de vidro transparente até pneus de

borrachapretaeetc.

sensor de ultrassom detectar alvos feitos de praticamente qualquer material, independentemente da cor. Eles

qualquer material, independentemente da cor. Eles A placa Arduino envia um impulso curto no pino TRIG

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.

R
R

botic

Arduino Lab - Microcontroladores

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

23: Medindo distâncias e mostrando no serial monitor Conectando os Jumpers ECHO - Pin Digital 7

Conectando os Jumpers

ECHO - Pin Digital 7 TRIG - Pin Digital 6

Passos:

os Jumpers ECHO - Pin Digital 7 TRIG - Pin Digital 6 Passos: Copie e cole
os Jumpers ECHO - Pin Digital 7 TRIG - Pin Digital 6 Passos: Copie e cole
os Jumpers ECHO - Pin Digital 7 TRIG - Pin Digital 6 Passos: Copie e cole

Copie e cole este programa na IDE do arduino

// HC-SR04 SENSOR DE ULTRASSOM //

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

int trigPin = 6;

//Variável trigpin definida como inteiro e ligado ao pin 6

void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);

//inicia a porta serial e define velocidade transferência de dados //define pino 6 como saida //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

}

R
R

botic

Arduino Lab - Microcontroladores

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

24: Medindo distâncias e mostrando no display LCD Conectando os Jumpers * - Pino digital 12

Conectando os Jumpers

* - Pino digital 12

* - Enable pino digital 11

* - Pino digital 5

* - Pino digital 4

* - Pino digital 3

* - Pino digital 2

* R/W - Pino GND

RS

E

D4

D5

D6

D7

* ECHO - Pino digital 7

* TRIG - Trig pino digital 6

Passos:

ECHO - Pino digital 7 * TRIG - Trig pino digital 6 Passos: Copie e cole
ECHO - Pino digital 7 * TRIG - Trig pino digital 6 Passos: Copie e cole

Copie e cole este programa na IDE do arduino

//

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

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //define os pinos do arduino para o LCD

//Chama a biblioteca do LCD

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

int trigPin = 6;

//Variável trigpin definida como inteiro e ligado ao pin 6

void setup() { Serial.begin (9600);

pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);

//inicia a porta serial e define velocidade transferência de dados //define pino 6 como saida //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

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 25: Medindo distâncias e comandando um servo

Ao detectar um objeto a menos de 20 cm de distância o servo deve girar

um objeto a menos de 20 cm de distância o servo deve girar Conectando os Jumpers

Conectando os Jumpers

TRIG - Pin Digital 6 ECHO - Pin Digital 7

SIN -

Pin PWM 10 (servo)

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

Passos:

o servo usando a distância de um obstáculo Passos: Copie e cole este programa na IDE
o servo usando a distância de um obstáculo Passos: Copie e cole este programa na IDE
o servo usando a distância de um obstáculo Passos: Copie e cole este programa na IDE

Copie e cole este programa na IDE do arduino

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

#include <Servo.h> //Inclui a biblioteca Servo Servo 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 7

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

pinMode(echoPin, INPUT);

//define pino 6 como saida

//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 <= 20) { meu_servo.writeMicroseconds(1000); // gira o servono sentido horario delay(2000); //espera 2 segundosgira();

} //Objeto a menos de 20cm o servo gira em um sentido

delay(500);

}

//Espera 0,5 segundo

R
R

botic

Arduino Lab - Microcontroladores

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

Experimento 26: Alarme de Incêndio com o sensor DS18B20 Conectando os Jumpers D8 - Pino Digital

Conectando os Jumpers

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

Passos:

Buzzer D12 - Pino Digital 12 ligado ao DQ do DS18B20 Passos: Copie e cole este
Buzzer D12 - Pino Digital 12 ligado ao DQ do DS18B20 Passos: Copie e cole este

Copie e cole este programa na IDE do arduino

/* Alarme de Incêndio com Dallas DS18B20

- Este programa aciona um alarme quando a temperatura ambiente for maior que 30 graus. */ #include <DallasTemperature.h> DallasTemperature tempSensor; int temp;

int del = 250;

int lowrange = 2000; int highrange = 4000;

// Duração do Tom

// Valor mais baixo da freqencia usada // Frequencia mais alta

void setup() {

// inicializando entradas e saídas

tempSensor.begin(12);

pinMode(8, OUTPUT);

}

// sensor ligado na porta digital 12 // Buzzer porta 8

void loop() { if (tempSensor.getTemperature() > 30){ for (int a = lowrange; a<=highrange; a++)

{

tone (8, a, del);

}

// Redução dos tons

for (int a = highrange; a>=lowrange; a--)

{

tone (8, a, del);

}

}

}

R
R

botic

Arduino Lab - Microcontroladores

Experimento 27: Alarme de intruso com ultrasom

Experimento 27: Alarme de intruso com ultrasom Conectando os Jumpers TRIG - Pin Digital 6 ECHO

Conectando os Jumpers

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

OBS: Este sistema irá emitir um alarme tipo sirene, sempre que for detectado a presença de um intruso no ressinto.

Passos:

for detectado a presença de um intruso no ressinto. Passos: Copie e cole este programa na
for detectado a presença de um intruso no ressinto. Passos: Copie e cole este programa na
for detectado a presença de um intruso no ressinto. Passos: Copie e cole este programa na

Copie e cole este programa na IDE do arduino

//Alarme de intruso com sensor de ultrasom int cm; int trig = 6; int echo = 7; long microseconds; int temp;

int del = 250;

// Duração do Tom

int

lowrange = 2000;

// Valor mais baixo da freqencia usada

int

highrange = 4000;

// Frequencia mais alta

void setup() {

Serial.begin(9600);

pinMode(trig, OUTPUT);

pinMode(echo, INPUT);

pinMode(8, OUTPUT);

// Buzzer porta 8

}

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() {

for (int a = lowrange; a<=highrange; a++)

{

tone (8, a, del);

}

// Redução dos tons

for

(int a = highrange; a>=lowrange; a--)

{

tone (8, a, del);

}

}

R
R

botic

Arduino Lab - Microcontroladores

Detectando objetos com infravermelho

- Microcontroladores Detectando objetos com infravermelho Sinal a 38Khz GND Módulo Receptor de Infravermelho Objeto

Sinal a 38Khz

GND

Módulo Receptor de Infravermelho Objeto
Módulo Receptor
de Infravermelho
Objeto

LED emissor de Infravermelho

de Infravermelho Objeto LED emissor de Infravermelho LED emissor de Infravermelho Módulo Receptor de

LED emissor de Infravermelho

Módulo Receptor de Infravermelho

R
R

botic

Arduino Lab - Microcontroladores

Experimento 28: Detectando obstáculos com Infrared

Experimento 28: Detectando obstáculos com Infrared Conectando os Jumpers D7 - Pino Digital 7 ligado ao

Conectando os Jumpers

D7 - Pino Digital 7 ligado ao LED D4 - Pino Digital 4 ligado ao LED INFRAVERMELHO D5 - Pino Digital 5 ligado ao Módulo Infrared

Aproxime um obstáculo do sensor de IR

Passos:

Infrared Aproxime um obstáculo do sensor de IR Passos: Copie e cole este programa na IDE
Infrared Aproxime um obstáculo do sensor de IR Passos: Copie e cole este programa na IDE

Copie e cole este programa na IDE do arduino

//define pinos. #define irLedPin 4 #define irSensorPin 5

int irRead(int readPin, int triggerPin); int LED = 7; void setup()

// lED infrared no pino 4

// Sensor infrared no pino 5

//função protótipo

{ pinMode(irSensorPin, INPUT); pinMode(irLedPin, OUTPUT); pinMode(LED, OUTPUT);

delay(100);

}

void loop()

{

if (irRead(irSensorPin, irLedPin) == 0){digitalWrite(LED, HIGH);} if (irRead(irSensorPin, irLedPin) == 1){digitalWrite(LED, LOW);}

delay(10); //Aguarda o envio

}

int irRead(int readPin, int triggerPin)

{

//um período em 38.5khZ é de aproximadamente 26 microssegundos, ciclos int = 38 int halfPeriod = 13;

//26 microssegundos * 38 é mais ou menos um milissegundo int cycles = 38; int i; for (i=0; i <=cycles; i++)

{ digitalWrite(triggerPin, HIGH); delayMicroseconds(halfPeriod); digitalWrite(triggerPin, LOW); delayMicroseconds(halfPeriod - 1);

} return digitalRead(readPin);

}

// - 1 para compensar a sobrecarga digitaWrite

R
R

botic

Arduino Lab - Microcontroladores

Experimento : Enviando comandos infravermelho de um Arduino Lab para outro

Vamos precisar de 2 Arduino Lab para acionar um LED remotamente

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

Lab 1(receptor), faça as ligações conforme abaixo: Conectando os Jumpers LAB1 D7 - Pino Digital 7

Conectando os Jumpers LAB1

D7 - Pino Digital 7 ligado a um LED

D2 - Pino Digital 2 ligado ao Módulo Infrared

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

Lab 2 (transmissor), Faça as ligações conforme abaixo: Conectando os Jumpers LAB2 D3 - Ao LED

Conectando os Jumpers LAB2

D3 - Ao LED infravermelho

R
R

botic

Arduino Lab - Microcontroladores

Carregue este programa no LAB1 (Receptor)

#include <IRremote.h>

const int RECV_PIN = 2; //Receptor ligado ao pin 2 int LED = 7; IRrecv irrecv(RECV_PIN); decode_results results; void setup()

{

Serial.begin(9600);

pinMode(LED, OUTPUT); irrecv.enableIRIn(); // Start the receiver

irrecv.blink13(true);

}

void loop() { if (irrecv.decode(&results)) { Serial.println(results.value); if (results.value == 144){ digitalWrite(LED, HIGH);}

if (results.value == 656){ digitalWrite(LED, HIGH);}

if (results.value == 2192){ digitalWrite(LED, LOW); }

irrecv.resume(); // Recebe proximo valor

}

}

Passos:

== 2192){ digitalWrite(LED, LOW); } irrecv.resume(); // Recebe proximo valor } } Passos: www.robotic.com.br
== 2192){ digitalWrite(LED, LOW); } irrecv.resume(); // Recebe proximo valor } } Passos: www.robotic.com.br
R
R

botic

Arduino Lab - Microcontroladores

Carregue este programa na LAB 2 (emissor)

//Programa Emissor

#include <IRremote.h>

IRsend irsend;

int flag = 0 ; int char_in ;

void setup()

{ Serial.begin(9600) ; colocaMenu() ;

}

void loop()

{

//piscaled() ; if(Serial.available() > 0 ) { char_in = Serial.read() ; if(char_in != -1) { Serial.println(char_in,BYTE) ;

switch (char_in) { case '1':

irsend.sendSony(144, 12); Serial.println("Acende LED") ;

delay(1000);

break;

case '2':

irsend.sendSony(2192, 12); Serial.println("Apaga LED") ;

delay(1000);

break;

default :

irsend.sendSony(3536, 12);

}

}

}

}

delay(1000);

break;

void colocaMenu() { Serial.println("CONTROLANDO A UMR PELA PORTA SERIAL USB") ; Serial.println("Selecione :") ; Serial.println("1 - ACENDE LED") ; Serial.println("2 - APAGA LED") ; Serial.println("OPCAO ? ") ;

}

Passos:

LED") ; Serial.println("2 - APAGA LED") ; Serial.println("OPCAO ? ") ; } Passos: www.robotic.com.br
LED") ; Serial.println("2 - APAGA LED") ; Serial.println("OPCAO ? ") ; } Passos: www.robotic.com.br
LED") ; Serial.println("2 - APAGA LED") ; Serial.println("OPCAO ? ") ; } Passos: www.robotic.com.br
R
R

botic

Arduino Lab - Microcontroladores

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

a Unidade Móvel Robotic Remotamente Pelo Notebook Material Necessário: 1 - UMR - Unidade Móvel Robotic
a Unidade Móvel Robotic Remotamente Pelo Notebook Material Necessário: 1 - UMR - Unidade Móvel Robotic
a Unidade Móvel Robotic Remotamente Pelo Notebook Material Necessário: 1 - UMR - Unidade Móvel Robotic

Material Necessário:

1 - UMR - Unidade Móvel Robotic

1 - Arduino Lab

1 - Led Infravermelho de 5mm

1 - Transistor PN2222A

c o n e c t a d o

a porta USB. No monitor serial irá mostrar 5 opções de movimentos para UMR. Os sinais

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

serão emitidos pelo LED infravermelho. Para o correto funcionamento

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

teremos

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

PN2222A EBC +5v PIN3 GND
PN2222A
EBC
+5v
PIN3
GND

LED INFRARED 5MM

RESISTOR

100R

R
R

botic

Unidade Móvel Robotic - Microcontrolador

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

#include <IRremote.h>

IRsend irsend;

int flag = 0 ; int char_in ;

void setup()

{ Serial.begin(9600) ; colocaMenu() ;

}

void loop()

{

//piscaled() ; if(Serial.available() > 0 ) { char_in = Serial.read() ; if(char_in != -1) { Serial.println(char_in,BYTE) ;

switch (char_in) { case '1':

irsend.sendSony(144, 12); Serial.println("frente") ;

delay(1000);

break;

case '2':

irsend.sendSony(2192, 12); Serial.println("Traz") ;

delay(1000);

case '3':

break;

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

}

R
R

botic

Unidade Móvel Robotic - Microcontrolador

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

#include <IRremote.h> #include <MegaServo.h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos ligados. Maximo de 48 arduino MEGA, 12 para outros arduinos #define FIRST_SERVO_PIN 8 MegaServo Servos[NBR_SERVOS] ;

const int RECV_PIN = 2; //SENSOR DE INFRARED NO PIN 2 IRrecv irrecv(RECV_PIN); decode_results results;

void setup()

{

Serial.begin(9600);

Servos[1].attach(8,880,2400) ; //SERVO DIREITO NO PIN 8 Servos[2].attach(9,880,2400) ; //SERVO ESQUERDO NO PIN 9 Servos[1].write(70) ; Servos[2].write(70) ; irrecv.enableIRIn(); // Start the receiver

irrecv.blink13(true);

delay(15);

}

void loop() {

if (irrecv.decode(&results)) { Serial.println(results.value);

if (results.value == 144){ //Chave CH+ frente Servos[1].write(180) ; Servos[2].write(0) ;

delay(15);}

if (results.value == 2192){ //Chave CH- volta Servos[1].write(0) ; Servos[2].write(180) ; delay(15); }

if (results.value == 1168){ //Chave VOL+ direita Servos[1].write(0) ; Servos[2].write(0) ; delay(15); }

if (results.value == 3216){ //Chave VOL+ esquerda Servos[1].write(180) ; Servos[2].write(180) ; delay(15); }

if (results.value >= 3536){ //Chave JUMP PÁRA Servos[1].write(70) ; Servos[2].write(70) ; delay(15); }

irrecv.resume(); // Recebe proximo valor

}

}

UNIDADE MÓVEL ROBOTIC Servos Sensor de Trilha Sensor de Ultrasom Shield Navigation Arduino Controle Remoto

UNIDADE MÓVEL ROBOTIC

UNIDADE MÓVEL ROBOTIC Servos Sensor de Trilha Sensor de Ultrasom Shield Navigation Arduino Controle Remoto
UNIDADE MÓVEL ROBOTIC Servos Sensor de Trilha Sensor de Ultrasom Shield Navigation Arduino Controle Remoto

Servos

Servos
UNIDADE MÓVEL ROBOTIC Servos Sensor de Trilha Sensor de Ultrasom Shield Navigation Arduino Controle Remoto

Sensor de Trilha

Sensor de Trilha

Sensor de Ultrasom

Sensor de Ultrasom

Shield Navigation

Shield Navigation

Arduino

Arduino

Controle Remoto

Controle Remoto
Controle Remoto
R
R

botic

Unidade Móvel Robotic - Microcontrolador

Montagem

botic Unidade Móvel Robotic - Microcontrolador Montagem 1 - Inserir o shield Navigation nos conectores do

1 - Inserir o shield Navigation nos conectores do arduino