Olá, amantes de robótica!
Nesta etapa, disponibilizaremos o código fonte do robô CarAut v1.
Lembre-se, se copiar o código, não se esqueça de passar a referência do site.
Veja a outra versão do robô: CarAut v2, usa poucas peças, fácil de montar!
Agora é só abrir o programa arduino, copiar o código abaixo, colá-lo e enviá-lo para o arduino.
Não sabe programar? Então acesse: Como programar em Arduíno, fazer robôs e projetos diversos
Se você é iniciante veja:Como enviar (upload) o programa pronto para a placa do arduino uno, mega entre outros
Atenção:
Para o código fonte funcionar é necessário baixar as bibliotecas: Baixar Library.
Veja as outras etapas:
=> CarAut v1. Criando um carrinho autônomo (robô) com Arduíno, parte 1/4 (componentes)
=> CarAut v1. Criando um carrinho autônomo (robô) com Arduíno, parte 2/4 (hackeando servo motor)
=> CarAut v1. Criando um carrinho autônomo (robô) com Arduíno, parte 3/4 (montagem)
Pronto, qualquer duvida é só deixar nos comentários ou entrar em Contato
ROBÔ ATUALIZADO!
MELHORADO O CODIGO FONTE!
MELHORADO O DESEMPENHO!
VIDEO DE MONTAGEM DO ROBÔ!
ACESSE O NOVO TUTORIAL: SEUROBO.COM.BR
Veja como ficou o novo robô:
Lembre-se, se copiar o código, não se esqueça de passar a referência do site.
Veja o vídeo do CarAut v1 em funcionamento:
Veja a outra versão do robô: CarAut v2, usa poucas peças, fácil de montar!
O mais importante, o código fonte:
Agora é só abrir o programa arduino, copiar o código abaixo, colá-lo e enviá-lo para o arduino.
Não sabe programar? Então acesse: Como programar em Arduíno, fazer robôs e projetos diversos
Se você é iniciante veja:Como enviar (upload) o programa pronto para a placa do arduino uno, mega entre outros
Atenção:
Para o código fonte funcionar é necessário baixar as bibliotecas: Baixar Library.
/*
>>>>> Criando Robô Com Arduino <<<<<
##### Robôs, Projetos e Tutoriais! #####
.:: Site principal: http://www.CriandoRoboComArduino.com/
.:: Site secundário: http://www.TestCriandoRoboComArduino.com/
========== IMPORTANTE ==========
O código está livre para usar, citar, alterar e compartilhar,
desde que mantenha o site como referência.
Obrigado.
--------------------------------------------------------------------------------------------------
Projeto: CarAut v1. Criando um carrinho autônomo (robô) com Arduíno
---------------------------------------------------------------------------------------------------
*/
// inclusão de bibliotecas.
#include <Servo.h> // inclui biblioteca de manipulação de servos motores.
#include <Ultrasonic.h> // inclui biblioteca de manipulação do sensor ultrassónico.
#include <LiquidCrystal.h> // inclui biblioteca de manipulação do monitor LCD 16x2
#define echoPin 8 //Pino 8 será o Echo do sensor
#define trigPin 12 //Pino 12 será o TRig do sensor
Servo servo_ultra_sonico, motorDireita, motorEsquerda; // nomeando os servos motores
Ultrasonic ultrasonic(12,8); // nomeando o sensor
int BUZZER = 10; // Ligar o buzzer (Som) no pino 10
//variáveis para uso da função do LCD
LiquidCrystal lcd(9, 11, 5, 4, 3, 2); // ligando o display no arduino
int pinoPotenciometro = 0; // controle do brilho do LCD
long valorPotenciometro = 0; // controle do brilho do LCD
boolean dist = true; // Variável para saber se é para exibir a distância ou não
String lado = ""; //Variável para escrever qual o lado da medição
String frase = ""; //Variável para escrever uma frase na parte de cima
String frase2 = ""; //Variável para escrever uma frase na parte de baixo
int valor = 0; //Variável para colocar o valor da distancia
// executado na inicialização do Arduino
void setup(){
lcd.begin(16, 2); // inicia o LCD
Serial.begin(9600); // inicializa a comunicação serial para mostrar dados em um display LCD
escrever_LCD(dist = false, lado = "",valor = 0, frase = ">> CarAut v1 <<" , frase2 = "Iniciando..." );
delay(500);
//configurações do servos motores
servo_ultra_sonico.attach(13); // anexa o servo motor lógico ao físico no pino 13.
pinMode(trigPin, OUTPUT); // define o pino triger como saída.
pinMode(echoPin, INPUT); // define o pino echo como entrada.
pinMode(BUZZER,OUTPUT); // define o pino do buzzer como saída.
servo_ultra_sonico.write(90); // inicialmente servo do sensor à 90 graus
iniciar_Motor;
rotacao_Parado;
escrever_LCD(dist = false, lado = "",valor = 0, frase = "** Criado por **" , frase2 = "CRCA");
delay(2000);
escrever_LCD(dist = false, lado = "",valor = 0, frase = "www.CriandoRobo" , frase2 = "ComArduino.com" );
delay(2000);
}
// função principal do Arduino
void loop(){
escrever_LCD(dist = false, lado = "",valor = 0, frase = "Pensando..." , frase2 = ">> CarAut v1 <<");
//seta o pino 12 com um pulso baixo "LOW" ou desligado ou ainda 0
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou ainda 1
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
andar();
}
//função para unir outras funções para poder andar com o robô
void andar(){
reposicionaServoSonar();
int distancia = lerSonar();
if (distancia > 25) {
rotacao_Frente();
}else{
posicionaCarroMelhorCaminho();
andar();
}
}
//função para ler o sensor ultrassónico
int lerSonar(){
return ultrasonic.Ranging(CM);
}
//função para calcular a distancia do centro
int calcularDistanciaCentro(){
servo_ultra_sonico.write(90);
int leituraDoSonar = lerSonar();
return leituraDoSonar;
}
//função para calcular a distancia da direita
int calcularDistanciaDireita(){
servo_ultra_sonico.write(10);
int leituraDoSonar = lerSonar();
return leituraDoSonar;
}
//função para calcular a distancia da esquerda
int calcularDistanciaEsquerda(){
servo_ultra_sonico.write(180);
int leituraDoSonar = lerSonar();
return leituraDoSonar;
}
//função para pegar as distancia lidas e calcular qual a melhor distancia
char calculaMelhorDistancia(){
int esquerda = calcularDistanciaEsquerda();
int centro = calcularDistanciaCentro();
int direita = calcularDistanciaDireita();
reposicionaServoSonar();
int maiorDistancia = 0;
char melhorDistancia = '0';
if (centro > direita && centro > esquerda){
melhorDistancia = 'c';
maiorDistancia = centro;
}else if (direita > centro && direita > esquerda){
melhorDistancia = 'd';
maiorDistancia = direita;
}else if (esquerda > centro && esquerda > direita){
melhorDistancia = 'e';
maiorDistancia = esquerda;
}
if (maiorDistancia <= 25) {
rotacao_Re();
posicionaCarroMelhorCaminho();
}
reposicionaServoSonar();
return melhorDistancia;
}
// função para colocar o carrinho na melhor distancia, ou seja girar ele para a melhor distancia
void posicionaCarroMelhorCaminho(){
char melhorDist = calculaMelhorDistancia();
if (melhorDist == 'c'){
escrever_LCD(dist = false, lado = "",valor = 0, frase = "Melhor Distancia....: " , frase2 = "Frente" );
andar();
}else if (melhorDist == 'd'){
escrever_LCD(dist = false, lado = "",valor = 0, frase = "Melhor Distancia....: " , frase2 = "Direita" );
rotacao_Direita();
rotacao_Direita();
}else if (melhorDist == 'e'){
escrever_LCD(dist = false, lado = "",valor = 0, frase = "Melhor Distancia....: " , frase2 = "Esquerta" );
rotacao_Esquerda();
rotacao_Esquerda();
}else{
rotacao_Re();
}
reposicionaServoSonar();
}
//função para deixar o sensor "olho" do robô no centro
void reposicionaServoSonar(){
servo_ultra_sonico.write(90);
}
//função para escrever no LCD
void escrever_LCD(boolean dist, String lado, int valor, String frase, String frase2 )
{
lcd.clear();
valorPotenciometro = analogRead(pinoPotenciometro); // brilho do lcd
if (dist == true ) {
lcd.setCursor(0,0);
lcd.print("Distancia ");
lcd.print(lado+" : ");
lcd.setCursor(0,1);
lcd.print(valor);
}
if (dist == false){
lcd.setCursor(0,0);
lcd.print(frase);
lcd.setCursor(0,1);
lcd.print(frase2);
}
}
// função que faz o carro (servo motor) parar
void rotacao_Parado()
{
motorDireita.detach(); // para os motores
motorEsquerda.detach();
}
// função que faz o carro (servo motor) andar para frente
void rotacao_Frente()
{
escrever_LCD(dist = false, lado = "",valor = 0, frase = "Indo para:" , frase2 = "Frente");
iniciar_Motor(); // usa a função inicia motor
motorDireita.write(0); // motor da direita gira para frente
motorEsquerda.write(180); // motor da esquerda gira para a frente
delay(600);
rotacao_Parado();
}
// função que faz o carro (servo motor) andar para traz
void rotacao_Re()
{
tone(10,300,300);
escrever_LCD(dist = false, lado = "",valor = 0, frase = "Indo para:" , frase2 = "Tras");
tone(10,300,300);
iniciar_Motor(); //praticamente a mesma coisa que a função a cima
tone(10,300,300);
motorDireita.write(180);
motorEsquerda.write(0);
delay(600);
tone(10,300,300);
rotacao_Parado();
}
// função que faz o carro (servo motor) vira a direita
void rotacao_Direita()
{
escrever_LCD(dist = false, lado = "",valor = 0, frase = "Virando para:" , frase2 = "Direita");
iniciar_Motor();
motorDireita.write(180);
motorEsquerda.write(180);
delay(250);
rotacao_Parado();
}
// função que faz o carro (servo motor) vira a esquerda
void rotacao_Esquerda()
{
escrever_LCD(dist = false, lado = "",valor = 0, frase = "Virando para:" , frase2 = "Esquerta");
iniciar_Motor();
motorDireita.write(0);
motorEsquerda.write(0);
delay(250);
rotacao_Parado();
}
//função para iniciar os motores
void iniciar_Motor()
{
motorDireita.attach(7);
motorEsquerda.attach(6);
}
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
>>>>> Acesse os sites: <<<<<
.:: Robôs, Projetos e Tutoriais
http://www.CriandoRoboComArduino.com/
.:: Testes dos robôs, noticias sobre robótica e muito mais
http://www.TestCriandoRoboComArduino.com/
>>>>> Inscreva-se nos canais no Youtube: <<<<<
.:: Vídeos dos robôs, projetos e tutoriais
Criando Robô Com Arduino
https://www.youtube.com/CriandoRoboComArduin
.:: Mostrando os testes dos robôs e projetos
Test Criando Robô Com Arduino
https://www.youtube.com/TestCriandoRoboComAr
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
Veja as outras etapas:
=> CarAut v1. Criando um carrinho autônomo (robô) com Arduíno, parte 1/4 (componentes)
=> CarAut v1. Criando um carrinho autônomo (robô) com Arduíno, parte 2/4 (hackeando servo motor)
=> CarAut v1. Criando um carrinho autônomo (robô) com Arduíno, parte 3/4 (montagem)
Pronto, qualquer duvida é só deixar nos comentários ou entrar em Contato
Quer ajuda ou quer ajudar? Clique em Ajuda e veja como você pode ajudar ou ser ajudado.
ROBÔ ATUALIZADO!
MELHORADO O CODIGO FONTE!
MELHORADO O DESEMPENHO!
VIDEO DE MONTAGEM DO ROBÔ!
ACESSE O NOVO TUTORIAL: SEUROBO.COM.BR
Veja como ficou o novo robô:
Amigo goste muito desse projeto só estou tendo uns problemas com o código fonte ele da dois erros ( Ultrasonic ultrasonic(12,8); // nomeando o sensor ) e no ( return ultrasonic.Ranging(CM); ) se alguem poderia me ajudar ficaria muito grato
ResponderExcluirOlá Kelm, este erro acontece pois a biblioteca do ultrassônico não esta instalada, instale a biblioteca ultrasonic nesse link: http://www.criandorobocomarduino.com/p/bibliotecas-do-arduino.html
ExcluirAbraço
Bem, esse robô você fez ele com o arduino uno ... No caso aqui eu fiz um microcontrolador com um atmega8 (conhecido como druduino) e queria saber como posso fazer esse mesmo robô utilizando minha druduino ...
ResponderExcluirCara, e quase a mesma coisa, porém você vai ter que tem mais atenção com os pinos.
ExcluirDei uma olhada aqui e tudo mais .... ok .... Porém quando vou gravar o Código fonte dá o seguinte erro:
ExcluirErreur de Compilation.
c:/users/lucas gabriel de j.l/desktop/druduino/arduino-1.0.5-r2/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: sketch_may07a.cpp.elf section .text will not fit in region text
c:/users/lucas gabriel de j.l/desktop/druduino/arduino-1.0.5-r2/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: region text overflowed by 2954 bytes
Jonh, no programa arduino você selecionou o tipo do arduino? se não faça o seguinte caminho: Clique em "Tool" depois em "Board" e agora procure e clique no "Arduino NG or older w/ atmega8", veja se isso ira resolver.
ExcluirSim... eu já gravei muitos programas nele, uso muito o arduino no curso de mecatrônica e posso dizer com toda certeza que está tudo ok aqui.... Porém seu código fonte na está gravando e nem passando na verificação... Por isso pergunto qual seria o tipo de problema... O que está havendo aqui...
ExcluirVocê, instalou as bibliotecas: Servo.h, Ultrasonic.h e LiquidCrystal.h se se encontram no link: http://www.criandorobocomarduino.com/p/bibliotecas-do-arduino.html
Excluirse sim, desinstale o arduino e instale novamente com as bibliotecas.
Sim... sim .... Mas continua n funcionando até reinstalei o arduino e nada .... :/
ExcluirJonh, eu copie esse código e compilei normalmente aqui no meu note.
ExcluirClica em "contato" no site e me passe seu e-mail, pra gente se falar melhor.
Cara nao consegui intender onde quais pinos digitais ou analogicos ligo os 3 servo motores se puder ajudar fico grato!
ResponderExcluirOlá, o motor do ultrassônico você liga no pino digital 13.
Excluiro motor da direita você liga no pino digital 7.
o motor da esquerda você liga no pino digital 6.
Igual nessa imagem: http://2.bp.blogspot.com/-CCeBOy5ke44/U4_Cm5LwWlI/AAAAAAAAAWQ/tsHhWAgN5L8/s1600/Robo+com+arduino+autonomo+caraut+v1+esquema.jpg
abraço
Eu consigo fazer ele ter um caminho pré programado e parar quando encontrar um obstáculo?
ResponderExcluirOlá, consegue sim, porem tem que alterar muita coisa no código fonte.
ExcluirAbraço
Olá amigo, parabéns pelo projeto.
ResponderExcluirEstou montando um, porém não está aparecendo no display a parte do "Melhor distância" e estou com alguns problemas com o servo do sensor ultra sônico, pois o mesmo não se move para calcular a distância, somente algumas vezes na hora de ligar ele se reposiciona no centro, caso esteja fora.
Já conferi as ligações, mas o problema persiste. Você teria alguma ideia do que pode ser o problema ?
Muito Obrigado !
Olá, Felipe, obrigado!
ExcluirIsso tudo pode acontecer por dois motivos:
ligamento de cabos errados e tenta colocar uma fonte externa com 1A para testar.
Abraço
Eu posso usa (( Chassis Acrilico Duplo Robotica / Smart Car 2 Motores 2wd )) nesse projeto ??
ResponderExcluirqual a numeração dos pinos do LCD que ligou? tem como fazer o esboço tipo pino 1 do LCD ---- pino 9 do Arduino
ResponderExcluirAmigo, veja Montagem dos componentes.
ExcluirEstou com um probleminha na programação, o erro é o seguinte : ''sketch_sep15a.ino: 10: 90: erro fatal: Ultrasonic.h: Nenhum tal lima ou diretório
ResponderExcluircompilação terminada.
Erro Compilando.'' . Como posso resolve-lo . Abraços! Desde já agradeço.
amigo esse erro é por que vc não instalou a biblioteca ultrassonic
Excluir