Escolar Documentos
Profissional Documentos
Cultura Documentos
www.robotic.com.br
Ultrasom
Expansor de I/O
www.robotic.com.br
www.robotic.com.br
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
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
www.robotic.com.br
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
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
Conector Servo 1
Conector Servo 2
www.robotic.com.br
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
www.robotic.com.br
#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
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
#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
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
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
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
www.robotic.com.br
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
#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
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.
#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
www.robotic.com.br