Você está na página 1de 23

R botic

ROBTICA EDUCACIONAL INICIANDO EM MICROCONTROLADORES

www.robotic.com.br

UNIDADE MVEL ROBOTIC

Ultrasom

Placa Shield Arduino Navigator

Arduino Atmega 328

Expansor de I/O

Servos Sensor de Trilha

Unidade Mvel Robotic - Microcontrolador

Arduino Duemilanove Atmega 328


O Arduino uma placa simples que contm tudo o que voc precisa para comear a trabalhar com eletrnica e programao de microcontroladores. Este diagrama ilustra os principais componentes da placa

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador


Arduino Duemilanove Atmega328 O Arduino Duemilanove uma placa baseada no microcontrolador Atmega328. "Duemilanove" significa em italiano 2009 foi nomeado aps o ano de seu lanamento. O Duemilanove o ltimo de uma srie de placas Arduino USB. Tem 14 pinos de entrada e saida digital (dos quais 6 podem ser utilizados como sadas PWM), 6 entradas analgicas. (Com a biblioteca Mega Servos pode se ligar servos em qualquer saida digital). Resumo Microcontrolador ATmega328 Tenso 5V Tenso de entrada (recomendado) 7-12V Tenso de entrada (limites) 6-20V Digital pinos de I / O 14 (dos quais 6 oferecem sada PWM) Analog Input Pins 6 DC atual por I / O Pin 40 mA Corrente DC 3.3V para Pin 50 mA Memria Flash 32 KB de que 2 KB utilizado pelo bootloader SRAM 2 KB EEPROM 1 KB A velocidade do clock 16 MHz O Arduino Duemilanove pode ser alimentado atravs da conexo USB ou com fonte de alimentao externa, adaptador AC para DC ou bateria (7-12v). O plug do adaptador 2,1 mm com centro-positivo. A fonte de energia selecionado automaticamente. Os pinos de alimentao so os seguintes: VIN. A tenso de entrada para a placa Arduino, quando se est usando uma fonte externa de energia (ao contrrio de 5 volts a partir da conexo USB). Voc pode fornecer a tenso atravs desse pino. 5V. A fonte de alimentao regulada usada para alimentar o microcontrolador e outros componentes na placa. Isto pode vir tanto de VIN atravs de um regulador de bordo, ou seja alimentado por USB ou outra fonte de 5V regulados. 3V3. gerada pelo chip FTDI-on. Mximo consumo de corrente de 50 mA. Ground pinos GND.. Memria O ATmega168 tem 16 KB de memria flash para armazenar o cdigo (de 2 KB que usado para o gerenciador de inicializao). ATmega328 tem 32 KB, (tambm com 2 KB utilizado para o bootloader). O ATmega168 tem 1 KB de SRAM e 512 bytes de EEPROM (que pode ser lido e escrito com a biblioteca EEPROM ), o ATmega328 tem 2 KB de SRAM e 1 KB de EEPROM. Entrada e Sada Cada um dos 14 pinos digital no Duemilanove pode ser usado como uma entrada ou sada, usando pinMode () , digitalWrite () , e digitalRead () funes. Eles operam em 5 volts. Cada pino pode fornecer ou receber um mximo de 40 mA e tem um resistor pull-up interno (desligado por padro) de 20-50 kOhms.

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Pinos com funes especficas: Serial: 0 (RX) e 1 (TX). Usado para receber (RX) e transmitir (TX TTL srie de dados). Esses pinos so ligados aos pinos correspondentes do chip FTDI USB-to-TTL Serial. Interrupes externas: 2 e 3. Estes pinos podem ser configurados para disparar uma interrupo em um valor baixo, um aumento ou diminuio de ponta, ou uma alterao no valor. (Veja a funo attachInterrupt ) PWM: 3, 5, 6, 9, 10 e 11. Pinos de sada PWM LED: 13. H um built-in LED conectado ao pino digital 13. Quando o pino est em valor alto , o LED est ligado, quando o pino baixo, ele est desligado O Duemilanove tem 6 entradas analgicas, cada uma das quais fornecem 10 bits de resoluo (ou seja, 1.024 valores diferentes). Por padro, elas medem do GND para 5 volts, mas possvel mudar a extremidade superior de sua escala com o pino AREF e analogReference () funo. AREF. Tenso de referncia para as entradas analgicas. Usado com analogReference (). Reset. Traga esta linha baixa para redefinir o microcontrolador. Tipicamente usado para adicionar um boto de reset de escudos. Comunicao O Duemilanove tem uma srie de facilidades para se comunicar com um computador, outro Arduino, ou outros microcontroladores. O ATmega168 e ATmega328 fornecer UART TTL (5V), comunicao serial, que est disponvel nos pinos digitais 0 (RX) e 1 (TX). Um FT232RL FTDI os canais de comunicao serial de USB e os drivers FTDI (includo com o software Arduino) oferecem uma porta virtual com o software no computador. O software inclui um monitor Arduino serial que permite que dados simples de texto a ser enviado e da placa Arduino. O RX e TX LEDs na placa pisca quando dados esto sendo transmitidos atravs do chip FTDI e conexo USB para o computador (mas no para comunicao serial nos pinos 0 e 1). A biblioteca Software Serial permite a comunicao serial em qualquer um dos pinos digitais do Duemilanove o. O apoio tambm ATmega328 I2C (TWI) e comunicao SPI. O software inclui uma biblioteca Arduino Wire para simplificar o uso do barramento I2C, veja a documentao para mais detalhes. Para usar a comunicao SPI, consulte o datasheet ou ATmega328 Programao O Duemilanove pode ser programado com o software IDE Arduino. Selecione "Arduino Duemilanove Atmega328 no menu Ferramentas (de acordo com o microcontrolador na placa). O Arduino Duemilanove ATmega328 vem com um gerenciador (BOOTLOADER) que permite que voc faa o upload do novo cdigo para ele sem a utilizao de um programador de hardware externo. Ele se comunica utilizando o protocolo STK500 original ( de referncia , arquivos de cabealho C ). Voc tambm pode ignorar o bootloader e programar o microcontrolador atravs do ICSP (In-Circuit Serial Programming), O Arduino Duemilanove tem um polyfuse resettable que protege as portas USB do seu computador a partir de shorts e sobrecorrente. Embora a maioria dos computadores fornecem sua prpria proteo

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Instalando o Programa
1 Faa o download do ambiente de desenvolvimento do Arduino em: www.robotic.com.br
Para programar uma placa Arduino voc precisa do ambiente de desenvolvimento. Quando o download terminar descompacte (unzip) os arquivos. Certifique-se de preservar a estrutura das pastas. Abra a pasta. Dentro voc vai encontrar alguns arquivos e sub-pastas. O aplicativo Arduino seu programa ambiente de desenvolvimento. 2 Ao conectar a Placa Arduino na Porta USB e caso for solicitado drives localize os drivers USB para o chip FTDI da placa na pasta drivers/FTDI USB Drivers da distribuio do Arduino.

Configurando:
Certifique-se que o "Arduino Duemilanove Atmega 328 " est selecionado em: Tools > Board

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador


Escolhendo a Porta Serial Selecione a porta serial menu Tools | Serial Port. No Windows deveria ser: COM3, COM4 ou COM5 para uma placa USB. Para descobrir qual abra o Gerenciador de Dispositivos do Windows (na aba Hardware do painel de controle do sistema). Procure por "USB Serial Port" na seo de Portas;

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Obs: As referencias da lingugem de programao do arduino voce pode ver no site: http://arduino.cc/en/Reference/HomePage

Os programas em Arduino podem ser divididos em trs partes principais: estrutura, valores (variveis e constantes) e funes. A linguagem Arduino baseada em C/C++. Estrutura * void setup () * void loop () Estruturas de controle * if * if...else * for * switch case * while * do... while * break * continue * return * goto Elementos de sintaxe * ; (ponto e vrgula) * {} (chaves) * // (linha de comentrio) * /* */ (bloco de comentrio) * #define * #include Operadores aritmticos * = (igualdade) * + (adio) * - (subtrao) * * (multiplicao) * / (diviso) * % (resto da diviso) Operadores de comparao * == (igual a) * != (diferente de) * < (menor que) * > (maior que) * <= (menor ou igual a) * >= (maior ou igual a) Operadores booleanos * && (e) * || (ou) * ! (No)

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Operadores de bits * & (operador de bits AND) * | (operador de bits OR) * ^ (operador de bits XOR) * ~ (operador de bits NOT) * << (desvio esquerda) * >> (desvio direita) * &=(de bits composto AND) * |=(de bits composto OR) Operadores compostos * ++ (incrementar) * -- (decrementar) * += (adio composta) * -= (subtrao composta) * *= (multiplicao composta) * /= (diviso composta) Variveis Variveis so expresses que voc pode usar em programas para armazenar valores como a leitura de um sensor em um pino analgico. Constantes Constantes so valores particulares com significados especficos. * HIGH | LOW * INPUT | OUTPUT * true | false * Constantes inteiras Tipos de dados Variveis podem ser de vrios tipos: * boolean * char * byte * int * unsigned int * long * unsigned long * float * double * string * array * void Converso * char() * byte() * int() * long() * float()

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Arduino Shield Navigation

Conector Sensor de Trilha

Conector Servo 1

Conector Servo 2

Conector Sensores Esquerdo Central Direito do sensor de linha

Sinal de Controle do Servo 2 - Ligar para os pinos digitais do Arduino

Conectores para outros servos ou sensores

Ativa e Desativa os Emissores de Infravermelho

Sinal de controle do sensor infravermelho esquerdo e direito Conector p/ Ultrasom

Emissor de infravermelho direito (IR-D)

Mdulo de Controle Remoto 38Khz

Pino TRIG do ultrasom Pino ECHO do ultrasom

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Ligando um servo motor


Shield Arduino Navigation

Ligue um fio jumper para um dos pinos digitais do arduino P0 - P13

PROGRAMA EXEMPLO // Sweep // by BARRAGAN <http://barraganstudio.com> // Este exemplo de cdigo de domnio pblico. #include <Servo.h> Servo myservo; // criar objeto servo para controlar um servo // Um mximo de oito objetos servo pode ser criado int pos = 0; // varivel para armazenar a posio do servo

void setup() { myservo.attach(9); // servo ligado no pino 9. } void loop() { for(pos = 0; pos < 180; pos += 1) // vai de 0 a 180 graus, incrementa com passos de 1 { myservo.write(pos); // diz ao servo para ir para a posio da varivel 'POS' // aguarda 15ms para o servo para chegar posio delay(15); } for(pos = 180; pos>=1; pos-=1) // vai de 180 a 0 graus { myservo.write(pos); // diz ao servo para ir para a posio da varivel 'POS' // aguarda 15ms para o servo para chegar posio delay(15); } }

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

NAVEGAO COM INFRAVERMELHO


Shield Arduino Navigation

Conecte o jumper para ligar o emissor de infravermelho

Conecte o cabo jumper do IR-D ao pin 7 e IR-E para o pino 6 do arduino

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador


PROGRAMA PARA NAVEGAO COM INFRAVERMELHO

#include <MegaServo.h> //Inclue a biblioteca MegaServos #define NBR_SERVOS 12 // Numero de Servos. Maximo de 48 arduino MEGA, 12 para outros arduinos #define FIRST_SERVO_PIN 8 MegaServo Servos[NBR_SERVOS] ; int motor_d = 9; //Servo motor direito no pin 9 int motor_e = 10; //servo motor esquerdo pin 10 int ir_receptor_d = 7; //IR-D pin 7 int ir_receptor_e = 6; // IR-E pin 6 int status_d; // variavel para quardar o valor no ir receptor direito int status_e; //int status_c; //status para comparar a distancia void setup(){ Servos[1].attach(motor_d,880,2400) ; Servos[2].attach(motor_e,880,2400) ; pinMode(ir_receptor_d,INPUT); pinMode(ir_receptor_e,INPUT); para(); } void loop() { status_d = digitalRead(ir_receptor_d); //verifica cada sensor e guarda seu status status_e = digitalRead(ir_receptor_e); if (status_d == HIGH and status_e==HIGH){frente();} if (status_d == LOW and status_e==LOW){para();} if (status_d == HIGH and status_e==LOW){direita();} if (status_d == LOW and status_e==HIGH){esquerda();} } void frente() { Servos[1].write(180) ; Servos[2].write(0) ; delay(15); } void para() { Servos[1].write(70) ; Servos[2].write(70) ; delay(300); } void direita() { Servos[1].write(0); Servos[2].write(0); delay(30);} void esquerda() { Servos[1].write(180); Servos[2].write(180); delay(30); }

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Navegando com Ultrasom


Ligue um fio JUMPER do TRIG ao P6 do arduino e ECHO ao P7

Conecte o sensor de ultrasom

Ligue um fio jumper para um dos pinos digitais do arduino P0 - P13

Ligue o servo do sonar no pino 8 do arduino Ligue o servo esquerdo no pino 9 Ligue o servo direito no pino 10 Ligue o TRIG ao pin 6 Ligue o ECHO ao pin 7
www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador PROGRAMA DE NAVEGAO COM ULTRASOM

#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] ; int cm; int st; int trig = 6; int echo = 7; long microseconds; void setup() { st=2; pinMode(trig, OUTPUT); pinMode(echo, INPUT); Servos[1].attach(8,880,2400); Servos[2].attach(9,880,2400); Servos[3].attach(10,880,2400); Servos[1].write(90); Servos[2].write(70); //enviando um ngulo de 70 graus os servos param Servos[3].write(70); delay(5000); } 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); if (cm > 25 and st==1){alinha();} if (cm <= 25 and st==1){Sonar2();} if (cm <= 25 and st==2){pare();} if (cm > 25 and st==2){frente();} if (cm > 25 and st==3){frente();} if (cm <= 25 and st==3){alinha2();} } long microsecondsToCentimeters(long microseconds) { return microseconds / 29 / 2;}

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

PROGRAMA DE NAVEGAO COM ULTRASOM - CONTINUAO

void frente() { Servos[1].write(90); Servos[2].writeMicroseconds (1000); Servos[3].writeMicroseconds (2000); delay(15); } void pare() { Servos[2].write(70); //enviando um ngulo de 70 graus os servos param Servos[3].write(70); st = 1; delay(200); Sonar(); } void Sonar() { Servos[1].write(0); delay(2000); } void Sonar2() { Servos[1].write(180); st=3; delay(2000);} void alinha() { //alinhar o sonar com e motores Servos[1].write(90); for(int i=0;i<=10;i++) { Servos[2].writeMicroseconds (2000); Servos[3].writeMicroseconds (2000); st = 2; delay(30);}} void alinha2() { Servos[1].write(90); for(int i=0;i<=10;i++) { Servos[2].writeMicroseconds (1000); Servos[3].writeMicroseconds (1000); st = 2; delay(30);}}

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

ACIONANDO UM LED PELO CONTROLE REMOTO

Material Necessrio: 1 - Placa Arduino Navigation 1 - Controle Remoto Sony Obs: Pode-se usar um dos leds do Shield Expansor de I/O Procedimentos: - Encaixe a placa Shield Navigation nos conectores do arduino. - Ligue um LED com seu resistor apropriado nos pinos P7 do arduino e GND. - Ligue um fio Jumper do pino P2 do arduino ao IR-D ou IR-E - Conecte o cabo USB no arduino -Abra a IDE de programao do arduino -Digite o programa da prxima pgina -Carregue o programa para o arduino

Obs: O controle Sony o mais apropriado, devido ao seu protocolo mais simples; portanto, os comandos neste manual s funcionam em controles de TV SONY.

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Utilizando o Controle Remoto

Retire o jumper para desabilitar o emissor de infravermelho, evitando qualquer interferncia no mdulo receptor de infrared

PROGRAMA:
//Robotic.com.br int ir_pin = 2; int led_pin = 13; int led = 7; //Sensor de 38khz ligado na porta p2 //Led do pin13 status de recebimento //Led de teste ligado no pin7

int debug = 0;//A conexao serial deve ser iniciado para depurar int start_bit = 2000;//Limiar - Start bit (microssegundos) int bin_1 = 1000;//Binario 1 limiar (microssegundos) int bin_0 = 400;//Binario 0 limiar (microssegundos) void setup() { pinMode(led_pin, OUTPUT);//O led do p13 acende e mostra que estamos prontos para receber pinMode(led, OUTPUT); // Led no p7 para teste pinMode(ir_pin, INPUT); digitalWrite(led_pin, LOW); Serial.begin(9600); } void loop() { int key = getIRKey(); //Busca o boto do controle(que foi precionado) Serial.print("Boto Precionado: "); //Mostra na tela a palavra "Boto Precionado" Serial.println(key); //Mostra o valor do boto // *******************DIGITE SEU CDIGO AQUI****************************************** if (key == 144) // tecle a chave up do controle digitalWrite(led, HIGH); //acende o led do pin7 if (key == 145) // tecle a chave dw do controle digitalWrite(led, LOW); //apaga o led } //************FIM DOS SEUS COMANDOS************************************************** // pino do infrare como entrada ligado no pin2 //se no tiver pronto para receber apaga o led do p13

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Utilizando o Controle Remoto


int getIRKey() { int data[12]; digitalWrite(led_pin, HIGH); //Ok, Esta pronto para receber os comandos while(pulseIn(ir_pin, LOW) < 2200) { //Espera o start bit } data[0] = pulseIn(ir_pin, LOW);//Comea a medir os bits data[1] = pulseIn(ir_pin, LOW); data[2] = pulseIn(ir_pin, LOW); data[3] = pulseIn(ir_pin, LOW); data[4] = pulseIn(ir_pin, LOW); data[5] = pulseIn(ir_pin, LOW); data[6] = pulseIn(ir_pin, LOW); data[7] = pulseIn(ir_pin, LOW); data[8] = pulseIn(ir_pin, LOW); data[9] = pulseIn(ir_pin, LOW); data[10] = pulseIn(ir_pin, LOW); data[11] = pulseIn(ir_pin, LOW); digitalWrite(led_pin, LOW); if(debug == 1) { Serial.println("-----"); } for(int i=0;i<11;i++) { //Analisando if (debug == 1) { Serial.println(data[i]); } if(data[i] > bin_1) { // 1? data[i] = 1; } else { if(data[i] > bin_0) {// 0? data[i] = 0; } else { } } } for(int i=0;i<11;i++) { //Checar se h dados com erros if(data[i] > 1) { return -1; //Retorna 1 se os dados forem errados } } int result = 0; int seed = 1; for(int i=0;i<11;i++) { //Convert bits em numero inteiro if(data[i] == 1) { result += seed; } seed = seed * 2; } return result; //Retorna o numero do boto precionado }

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Seguindo Trilha

Conecte o sensor de trilha,no conector do shield Navigation Ligue cabos Jumpers do SD ao P7 do arduino, SC ao P6 e SE ao P5. SD => Sensor direito SC => Sensor Central SE => Sensor Esquerdo

Faa uma trilha usando fita isolante ou pintada na cor preta, com 20mm de largur em uma superfcie branca

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

#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] ; int motor_d = 9; int motor_e = 10; int ir_d = 7; int ir_c = 6; int ir_e = 5; int st_d; // variavel para quardar o valor no ir receptor direito int st_c; int st_e; void setup(){ Servos[1].attach(motor_d,880,2400) ; Servos[2].attach(motor_e,880,2400) ; pinMode(ir_d,INPUT); pinMode(ir_c,INPUT); pinMode(ir_e,INPUT); para(); } void loop() { st_d = digitalRead(ir_d); //verifica cada sensor e guarda seu status st_c = digitalRead(ir_c); st_e = digitalRead(ir_e); if (st_e == HIGH and st_c==LOW and st_d==HIGH){frente();} if (st_e == HIGH and st_c==HIGH and st_d==HIGH){para();} if (st_e == LOW and st_c==HIGH and st_d==HIGH){esquerda();} if (st_e == LOW and st_c==LOW and st_d==HIGH){esquerda();} if (st_d == LOW and st_c==HIGH and st_e==HIGH){direita();} if (st_d == LOW and st_c==LOW and st_e==HIGH){direita();} } void frente() { Servos[1].write(180) ; Servos[2].write(0) ; delay(15); } void para() { Servos[1].write(70) ; Servos[2].write(70) ; delay(300); } void direita() { Servos[1].write(0); Servos[2].write(0); delay(30);} void esquerda() { Servos[1].write(180); Servos[2].write(180); delay(30); }

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

Expansor de I/O Shield

Este shield aumenta o nmero de sadas digitais do arduino para um total de 27 sadas. Utilizando 3 sadas (Pin 8, 12 e 13) para gerar mais 16 sadas digitais.

Faa o download da biblioteca Expande I/O no site: www.robotic.com.br e faa a extrao dos arquivos na pasta Libraries no diretrio do programa arduino.
Experimento: Ligue um fio jumper da porta 22 para o conector do LED, o LED dever ficar aceso, inicialmente, devido a polarizao do mesmo. (Um dos pinos do led est ligado ao +5v e o outro em aberto aguardando o sinal do arduino; como as portas de 14 a 29 esto em nvel baixo, o led fica aceso.

Exemplo de programa: Piscar um LED na porta 22

#include < Expande.h > //Inclui a biblioteca Expande Expande saida = Expande(); // Cria o objeto saida void setup() {} void loop() { saida.digitalWrite(22, HIGH); delay (200); saida.digitalWrite(22, LOW); delay (200); } Obs: Os pinos do 14 ao 29 s funcionam como sadas digitais

www.robotic.com.br

Unidade Mvel Robotic - Microcontrolador

www.robotic.com.br

Você também pode gostar