O tutorial de hoje é o final da serie de 4 tutoriais “Criando Robo com Arduino”. Para a primeira parte vermos como fazer o chassi que sustentará os motores, sensores e o arduino. Existem vários modelos na internet e um muito utilizado é o que se encontra abaixo:
Para não fugir a regra, usaremos esse mesmo modelo por ser mais simples o processo de corte, perfuração e montagem. O material a ser usado para construção do chassi pode ser : PVC, Acrilico, MDF entre outros… Para este caso irei utilizar PVC por ser um material barato, fácil de conseguir e cortar.
As rodas A e B foram retiradas de uma impressora antiga que tinha em casa e possuem esse formato:
A roda de apoio pode ser encontrada em lojas de ferragens e é chamada de “rodízio”: Preço pago: R$ 4,00.
A montagem deve ser feita conforme as imagens abaixo:
Acredito que essas imagens serão suficientes para que você possa montar a sua própria versão do robô, por isso vamos a parte da montagem do hardware e do código. A montagem do hardware é a mesma do tutorial 3:
Código do Robô:
O que o código faz?Seguindo os passos abaixo podemos determinar a ação do robô.
1- Inicia parado esperando por meio segundo.
2- Verifica a distancia que o robô esta de um determinado obstáculo.
3- Escreve a distancia no display LCD.
4- Anda para frente.
5 – Verifica a distancia novamente.
6- Escreve no LCD.
7- Verifica a primeira distancia com a segunda distancia: Se as duas distancias forem iguais, então quer dizer que o robô não andou para frente como deveria quando chamada a função para andar para frente (Passo 4). Se as distancias são iguais, então ele emite um sinal de alerta e vira 90° para a direita.
8- Caso a segunda distancia seja menor ou igual a 15 cm o robô emite um alerta, da a ré e vira para a direita 90°. Essa atitude serve para que o robô não bata em obstáculos.
9- Se a segunda distancia for maior que 1000 cm (1 metro) então o robô emite um alerta, da a ré e vira para a esquerda.
10- Caso as ações não satisfaçam nenhuma das condições acima, então o robô continua andando para frente durante um determinado período. Escreve a distancia no LCD
11- Volta para o Passo 1.
/* # Autor: Fernando Krein Pinheiro # Data: 09/03/2012 # Linguagem: C/C++ # ========= IMPORTANTE =========== # O codigo esta livre para usar, # citar e compartilhar desde que # mantida sua fonte e seu autor. # Obrigado. ---------------------------------- Para rotacao em graus pode ser utilizada a funcao delay(). Valores que correspondem aos graus para delay() sao: GRAUS DELAY 360 520 270 390 180 260 90 130 */ #include <LiquidCrystal.h> #include <Ultrasonic.h> #include <Servo.h> #define echoPin 13 #define trigPin 12 Servo motorDireita, motorEsquerda; Ultrasonic distancia(12,13); LiquidCrystal lcd(9, 11, 5, 4, 3, 2); int pinoAnalogico = 3; int valorAnalogico; int pinoPotenciometro = 0; long valorPotenciometro = 0; int BUZZER = 1; void setup() { iniciar_Motor(); Serial.begin(9600); pinMode(echoPin, INPUT); pinMode(trigPin, OUTPUT); lcd.begin(16, 2); } void loop() { rotacao_Parado(); delay(500); int dist = ultrasonico(); escrever_LCD(); rotacao_Frente(); int dist2 = ultrasonico(); escrever_LCD(); if(dist == dist2) { Alerta(BUZZER, 2000, 300); rotacao_Direita(); } else if(dist2 <= 15) { Alerta(BUZZER, 2000, 300); rotacao_Re(); rotacao_Direita(); } else if(dist2 > 1000) { Alerta(BUZZER, 2000, 300); rotacao_Re(); rotacao_Esquerda(); } else rotacao_Frente(); escrever_LCD(); } void rotacao_Parado() { Serial.println("Motor Parado"); motorDireita.detach(); motorEsquerda.detach(); } void rotacao_Frente() { iniciar_Motor(); Serial.println("Motor Frente"); motorDireita.write(0); motorEsquerda.write(180); delay(600); rotacao_Parado(); } void rotacao_Re() { iniciar_Motor(); Serial.println("Motor Re"); motorDireita.write(180); motorEsquerda.write(0); delay(600); rotacao_Parado(); } void rotacao_Direita() { iniciar_Motor(); Serial.println("Motor Direita"); motorDireita.write(180); motorEsquerda.write(180); delay(250); rotacao_Parado(); } void rotacao_Esquerda() { iniciar_Motor(); Serial.println("Motor Esquerda"); motorDireita.write(0); motorEsquerda.write(0); delay(250); rotacao_Parado(); } void iniciar_Motor() { motorDireita.attach(7); motorEsquerda.attach(6); } int ultrasonico() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); int cm = (distancia.Ranging(CM)); Serial.print("Distancia em CM: "); Serial.println(cm); return cm; } void escrever_LCD() { int distancia; valorPotenciometro = analogRead(pinoPotenciometro); distancia = ultrasonico(); lcd.setCursor(0,0); lcd.print("Distancia: "); lcd.print(distancia); lcd.setCursor(13,1); } void Alerta (unsigned char BUZZER, int frequencia, long tempoMilisegundos) { int Contador, x=0; long pausa = (long)(1000000/frequencia); long loopT = (long)((tempoMilisegundos*1000)/(pausa*2)); while(x<3) { for (Contador=0;Contador<loopT;Contador++) { digitalWrite(BUZZER,HIGH); delayMicroseconds(pausa); digitalWrite(BUZZER,LOW); delayMicroseconds(pausa); } delay(100); x++; } }
Vídeo de demonstração: OBS: No vídeo o robô apenas esta com seu funcionamento básico, sem o uso do display LCD e nem do dispositivo para o sinal sonoro, embora todo o código tenha sido testado e funcionado em perfeitas condições na montagem completa do robô. Note também que o robô está sendo alimentado através de uma tomada e não por baterias 9v, mas nada impede que você o alimente com a bateria, isso fica a seu critério.
ola este projerto e muito bom sempre gostei de veiculo autonamos como estou começando agora com arduino este serar o primeiro que vou montar ate eu conseguir fazer alguns projertos. OBS ;;;; mas o melhor de todos foi o projerto de assensibilidade do inicio da pargina simples e de grande valor ; ;;;;
Parabéns, vc será um ótimo “projertista”. =P
Saudações.
Eu estou montando um robô esse q esta no vídeo ai, https://www.youtube.com/watch?v=CicTUhE7E4g ,eu já consegui fazer algumas coisas só falta um pouquinho para mim conseguir mais esta muito complicado aqui esta o projeto, http://www.mediafire.com/download.php?ymj8zch4883dgwa
Olá, estou seguindo o tutorial para montar o meu robôzinho… mas quando insiro os dois servos nada funciona… já refiz as ligações várias vezes. Poderia me ajudar?
Olá amigo, gostei muito do projeto, suas aulas são nota mil, caso eu queira aperfeiçoar acrescentando por ex: comando de voz para movimentar partes, controlar por controles, instalar web e instar um som pra ele, vc tem mais tutorial? pergunto porque tem um kit neste site bem interessante, mais que eu tenho medo de comprar e não vir. http://www.ez-robot.com/
Obrigado!
kkkkkkkkkkkkkkkkkkkkkkkkkkk postei um comentaria acima pois não estava conseguindo abrir e video, agora que consegui, to aqui morrendo de rir, tá muito engraçado kra, mais fica algumas a mensagem acima para você me responder se possível kkkk eu vou rir sozinho se eu conseguir fazer isso kkk.
kra que controle é aquele que vc usa pra movimentar a cabeça dele?? e como tu fez pra dar esse movimento todo na cuca dele??? kkk tá irado!!! não me canço de ver.
muito show ,parabens
abraço
Ol, gostaria de saber se esse servos foram modificados, e se eles não precisam de uma fonte externa ?
Olá, gostaria de saber os meus motores servos são 360 graus de fabrica, como fica em questão aos graus
ainda nao fiz o meu só curiei o blog ainda nao tenho arduino mas ja entendo um pouco, trabalho com eletronica
parabens brother vc é féra valew
Como vc conectou as rodas ao micro servo motor?
qual parte da programação eu modfico para deixar a distancia entre robo e a parede maior ?