- Componentes: 1 Placa Arduíno + 2 Motores + 1 Sensor ultrassônico + Fios + Materiais descartáveis (para montar o carro).
- Descrições: O sensor ultrassônico tem um emissor e um receptor, o transmissor manda um som que logo é percebido pelo receptor e assim podendo detectar se há um objeto a sua frente e qual a sua distancia. Como mostra na figura abaixo.
Carro =>
Código =>
int PortPin2 = 2; // Motor 1
int PortPin3 = 3; // Motor 1
int PortPin4 = 4; // Motor 2
int PortPin5 = 5; // Motor 2
int distancia = 0;
int disdir= 0;
int disesq = 0;
#define echoPin 13
#define trigPin 12
#include "Ultrasonic.h"
Ultrasonic ultrasonic(12,13);
void setup() {
Serial.begin(9600);
pinMode(PortPin2, OUTPUT);
pinMode(PortPin3, OUTPUT);
pinMode(PortPin4, OUTPUT);
pinMode(PortPin5, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
drive_frente();
delay(100);
distancia = ultrasonico();
Serial.println(distancia);
delay(10);
if(distancia <= 5){
drive_esquerda();
delay(1500);
drive_stop();
delay(200);
disesq = ultrasonico();
Serial.print("Esquerda: ");
Serial.println (disesq);
drive_direita();
delay(2900);
drive_stop();
delay(200);
disdir = ultrasonico();
Serial.print("Direita: ");
Serial.println(disdir);
if(disdir >= disesq){
Serial.println("-->Direita");
drive_frente();
}
else{
Serial.println("<--Esquerda");
drive_esquerda();
delay(2800);
drive_stop();
delay(200);
drive_frente();
}
}
}
void drive_esquerda(){ //função drive_esquerda
digitalWrite(PortPin2, LOW); //Motor 1
digitalWrite(PortPin3, HIGH); //Motor 2
digitalWrite(PortPin4, HIGH); //Motor 1
digitalWrite(PortPin5, LOW); //Motor 2
}
void drive_direita(){ //função drive_direita
digitalWrite(PortPin2, HIGH); //Motor 1
digitalWrite(PortPin3, LOW); //Motor 1
digitalWrite(PortPin4, LOW); //Motor 2
digitalWrite(PortPin5, HIGH); //Motor 2
}
void drive_stop(){ //função drive_stop
digitalWrite(PortPin2, LOW); //Motor 1
digitalWrit e(PortPin4, LOW); //Motor 2
digitalWrite(PortPin3, LOW); //Motor 1
digitalWrite(PortPin5, LOW); //Motor 2
}
void drive_re(){ //função drive_re
digitalWrite(PortPin2, HIGH); //Motor 1
digitalWrite(PortPin3, LOW); //Motor 1
digitalWrite(PortPin4, HIGH); //Motor 2
digitalWrite(PortPin5, LOW); //Motor 2
}
void drive_frente(){ //função drive_frente
digitalWrite(PortPin2, LOW); //Motor 1
digitalWrite(PortPin3, HIGH); //Motor 1
digitalWrite(PortPin4, LOW); //Motor 2
digitalWrite(PortPin5, HIGH); //Motor 2
}
int ultrasonico(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int distancia = (ultrasonic.Ranging(CM));
return(distancia);
}
int PortPin3 = 3; // Motor 1
int PortPin4 = 4; // Motor 2
int PortPin5 = 5; // Motor 2
int distancia = 0;
int disdir= 0;
int disesq = 0;
#define echoPin 13
#define trigPin 12
#include "Ultrasonic.h"
Ultrasonic ultrasonic(12,13);
void setup() {
Serial.begin(9600);
pinMode(PortPin2, OUTPUT);
pinMode(PortPin3, OUTPUT);
pinMode(PortPin4, OUTPUT);
pinMode(PortPin5, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
drive_frente();
delay(100);
distancia = ultrasonico();
Serial.println(distancia);
delay(10);
if(distancia <= 5){
drive_esquerda();
delay(1500);
drive_stop();
delay(200);
disesq = ultrasonico();
Serial.print("Esquerda: ");
Serial.println (disesq);
drive_direita();
delay(2900);
drive_stop();
delay(200);
disdir = ultrasonico();
Serial.print("Direita: ");
Serial.println(disdir);
if(disdir >= disesq){
Serial.println("-->Direita");
drive_frente();
}
else{
Serial.println("<--Esquerda");
drive_esquerda();
delay(2800);
drive_stop();
delay(200);
drive_frente();
}
}
}
void drive_esquerda(){ //função drive_esquerda
digitalWrite(PortPin2, LOW); //Motor 1
digitalWrite(PortPin3, HIGH); //Motor 2
digitalWrite(PortPin4, HIGH); //Motor 1
digitalWrite(PortPin5, LOW); //Motor 2
}
void drive_direita(){ //função drive_direita
digitalWrite(PortPin2, HIGH); //Motor 1
digitalWrite(PortPin3, LOW); //Motor 1
digitalWrite(PortPin4, LOW); //Motor 2
digitalWrite(PortPin5, HIGH); //Motor 2
}
void drive_stop(){ //função drive_stop
digitalWrite(PortPin2, LOW); //Motor 1
digitalWrit e(PortPin4, LOW); //Motor 2
digitalWrite(PortPin3, LOW); //Motor 1
digitalWrite(PortPin5, LOW); //Motor 2
}
void drive_re(){ //função drive_re
digitalWrite(PortPin2, HIGH); //Motor 1
digitalWrite(PortPin3, LOW); //Motor 1
digitalWrite(PortPin4, HIGH); //Motor 2
digitalWrite(PortPin5, LOW); //Motor 2
}
void drive_frente(){ //função drive_frente
digitalWrite(PortPin2, LOW); //Motor 1
digitalWrite(PortPin3, HIGH); //Motor 1
digitalWrite(PortPin4, LOW); //Motor 2
digitalWrite(PortPin5, HIGH); //Motor 2
}
int ultrasonico(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int distancia = (ultrasonic.Ranging(CM));
return(distancia);
}
olá eu posso tirar essa função: int distancia = (ultrasonic.Ranging(CM)); porque esta aparecendo o seguinte erro: class ultrasonic has no member named ranging. Posso tirar esta linha??????????obrigado
ResponderExcluirpode me enviar por email quem me responder.weslersonaraujo@hotmail.com
ResponderExcluirola pessoal alguem sabe como consertar esses erros:( se alguem arrumar no código tbm agradeço):
ResponderExcluirEXPECTED '(' BEFORE 'ELSE'
sketch_jul28a.ino: In function 'void pedra()':
sketch_jul28a:63: error: expected `(' before 'else'
sketch_jul28a:86: error: expected `}' at end of input
código:
#include"Ultrasonic.h"//incluir o arquivo da lib
#include"Servo.h"//incluir o arquivo da lib
#define TRIG_PIN 7
#define ECHO_PIN 4
#define SEE 3
#define SED 0
#define DMF 10
#define DMT 9
#define EMF 5
#define EMT 6
Servo motor;// lib servor
Ultrasonic OurModule(TRIG_PIN,ECHO_PIN);//lib Ultrasonic
int vel=255;//velocidade curva
int tempo1=350;//tempo de curva
void move(int DmF,int DmT,int EmF,int EmT)
{
analogWrite(DMF,DmF);
analogWrite(DMT,DmT);
analogWrite(EMF,EmF);
analogWrite(EMT,EmT);
}
void linha(){
if(digitalRead(SEE)==1){//esquerda
move(vel,0,0,vel);
delay(tempo1);
Serial.print("esquerda");
Serial.println("\n");
Serial.println(digitalRead(SED));
}
else if(digitalRead(SEE)==1){//direita
move(0,vel,vel,0);
delay(tempo1);
Serial.print("direita");
Serial.println("\n");
Serial.println(digitalRead(SEE));
}
Serial.print("seguindo para frente");
Serial.println("\n");
move(150,0,150,0);
delay(10);
}
void pedra (){
int Sensor_teste=0;
motor.write(90);
delay(500);
motor.write(0);//realocar para esquerda
delay(500);
if(OurModule.Ranging(CM)>10){
motor.write(90);
delay(500);
Sensor_teste=1;
}
motor.write(180);//realocar para direita
delay(500);
if(OurModule.Ranging(CM)>10){
motor.write(90);
delay(500);
Sensor_teste=2;
}//parte responsavel pelo movimento do carro apos detectar os objetos
if(Sensor_teste==2){//se encontrar uma pedra na direita virar para esquerda
move(vel,0,0,vel);
delay(tempo1);
}if else(Sensor_teste==1){//se encontar uma pedra na esquerda vira para
direita
move(0,vel,vel,0);
delay(tempo1);
else{//caso não houver nehuma pedra virar para direita por padrão
move(0,vel,vel,0);
delay(tempo1);
}
}
void setup(){
pinMode(SED,INPUT);
pinMode(SEE,INPUT);
Serial.begin(9600);
motor.attach(8);
delay(500);
}
void loop(){
linha();
if(OurModule.Ranging(CM)<15){
delay(200);
if(OurModule.Ranging(CM)<15){
}
}
}
pode me enviar por email quem me responder.weslersonaraujo@hotmail.com
ResponderExcluirola leonardo vou pedir um favor pra vc. vc poderia arrumar os erros que eu postei acima arrume pra mim direto no código.. pq eu nao sei onde é que é a função eu n sei mexer com isso. pelo amor de deus.deus vai te abençoar em dobro.
ResponderExcluirinstalei a placa certinho. fui passar o codigo pa placa arduino e apareceu isso no final ;avrdude: stk500_getsync(): not in sync: resp=0x00 o q é isso?
ResponderExcluirCara, provavelmente o seu computador não encontrou a porta serial do Arduíno, você instalou os drivers? se não, siga nosso tutorial http://robo4edu.blogspot.com.br/2012/09/passo-1-instalando-driver.html
Excluirolá voce pode me passar o esquema de ligação,na placa arduino do seu robo.(deste que esta aki no blog).
ResponderExcluireditei o código estar abaixo
ExcluirTem como fazer usando servos?
ResponderExcluireita erro q persiste
ResponderExcluirsketch_robo.ino: In function 'int ultrasonico()':
sketch_robo:111: error: 'class Ultrasonic' has no member named 'Ranging'
sketch_robo:111: error: 'CM' was not declared in this scope
a sua biblioteca ultrassonic nao tem a funcao rangning tenta achar uma mais recente
Excluirsegue o código corrigido
ResponderExcluirint PortPin2 = 2; // Motor 1
int PortPin3 = 3; // Motor 1
int PortPin4 = 4; // Motor 2
int PortPin5 = 5; // Motor 2
int distancia = 0;
int disdir= 0;
int disesq = 0;
#define echoPin 13
#define trigPin 12
#include "Ultrasonic.h"
Ultrasonic ultrasonic(12,13);
void setup() {
Serial.begin(9600);
pinMode(PortPin2, OUTPUT);
pinMode(PortPin3, OUTPUT);
pinMode(PortPin4, OUTPUT);
pinMode(PortPin5, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}
void loop() {
drive_frente();
delay(100);
distancia = ultrasonico();
Serial.println(distancia);
delay(10);
if(distancia <= 5){
drive_esquerda();
delay(1500);
drive_stop();
delay(200);
disesq = ultrasonico();
Serial.print("Esquerda: ");
Serial.println (disesq);
drive_direita();
delay(2900);
drive_stop();
delay(200);
disdir = ultrasonico();
Serial.print("Direita: ");
Serial.println(disdir);
if(disdir >= disesq){
Serial.println("-->Direita");
drive_frente();
}
else{
Serial.println("<--Esquerda");
drive_esquerda();
delay(2800);
drive_stop();
delay(200);
drive_frente();
}
}
}
void drive_esquerda(){ //função drive_esquerda
digitalWrite(PortPin2, LOW); //Motor 1
digitalWrite(PortPin3, HIGH); //Motor 2
digitalWrite(PortPin4, HIGH); //Motor 1
digitalWrite(PortPin5, LOW); //Motor 2
}
void drive_direita(){ //função drive_direita
digitalWrite(PortPin2, HIGH); //Motor 1
digitalWrite(PortPin3, LOW); //Motor 1
digitalWrite(PortPin4, LOW); //Motor 2
digitalWrite(PortPin5, HIGH); //Motor 2
}
void drive_stop(){ //função drive_stop
digitalWrite(2, LOW); //Motor 1
digitalWrite(4, LOW); //Motor 2
digitalWrite(3, LOW); //Motor 1
digitalWrite(5, LOW); //Motor 2
}
void drive_re(){ //função drive_re
digitalWrite(PortPin2, HIGH); //Motor 1
digitalWrite(PortPin3, LOW); //Motor 1
digitalWrite(PortPin4, HIGH); //Motor 2
digitalWrite(PortPin5, LOW); //Motor 2
}
void drive_frente(){ //função drive_frente
digitalWrite(PortPin2, LOW); //Motor 1
digitalWrite(PortPin3, HIGH); //Motor 1
digitalWrite(PortPin4, LOW); //Motor 2
digitalWrite(PortPin5, HIGH); //Motor 2
}
int ultrasonico(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
return(distancia);
}
vc fez sem ponte H?
ResponderExcluirAlguém sabe como conecto dois sensores, ultrassônico e infravermelho, em um só arduíno?
ResponderExcluirolá eu posso tirar essa função: int distancia = (ultrasonic.Ranging(CM)); porque esta aparecendo o seguinte erro: class ultrasonic has no member named ranging. Posso tirar esta linha??????????obrigado
ResponderExcluirComo pode 2 pessoas terem a mesma lógica?
ResponderExcluirEu fiz minha propria lógica de decisão (existe várias maneiras)... e por coincidencia achoi esse código e é exatamente a mesma logica, extrutura.. só muda as variaveis direita e esquerda kkkk PENSAMOS IGUAL KKKK
Ou será que já vi esse código antes e estava no meu subconciente ?? kkkk
ResponderExcluirUma dica pra quem não conseguir usar o código... a razão é a seguinte... existe várias bibliotecas pro ultrasonico, e todas tem funções diferentes... o autor do tópico deveria ter colocado a bibliote que ele ultilizou.
ResponderExcluirOlá. uma duvida em relação a esse projeto, os motores são alimentados como?
ResponderExcluir