Sida loo sameeyo robot guri lagu sameeyo oo leh Arduino

Qodobkaan waxaan ku baran doonaa sida loo sameeyo a aaladaha yaryar ee guryaha lagu sameeyo oo ay maamusho guddiga Arduino. Ujeedada robotku waxay noqon doontaa in laga fogaado caqabadaha iyadoo la adeegsanayo qalabka 'ultrasound sensor', markay gaarto carqalad waxay eegi doontaa labada dhinac waxayna go'aamin doontaa ikhtiyaarka ugu fiican ee lagu sii wadi karo socodkiisa

hardware

Qeybtan koowaad waxaan diiradda saari doonnaa dhismaha mashiinka aaladaha, isu-keenidda qaybaha iyo isku xirka.

robot_arduino

Waxyaabaha loo baahan yahay

  • Gole Arduino ah
  • Buundada H-ga ee laba matoor (Xaaladdayda waxaan u isticmaali doonaa gaashaanka Arduino mootada dfrobot)
  • Laba batoon
  • Laba matoorro DC ah (FIT0016 DFROBOT)
  • Laba iska caabin ah 10k Ohm
  • Laba codeeye (SEN0038 DFROBOT)
  • Laba giraangiraha (FIT0003 DFROBOT)
  • Qasabad kubadeed (dhalid)
  • Mashiinka adeegga
  • Qalabka dareenka dhawaanta ee ultrasonic
  • Hal batari 7,2v ah
  • Qoryo ama aluminium si loo dhiso madal

H buundada:

H buundada

H-Bridge waa wareeg elektaroonik ah oo u oggolaanaya mashiinka korantada DC inuu ku wareego labada jiho.
Waxay ka kooban tahay 4 shido (iyadoo la adeegsanayo transistors) isku darka kuwan waxay ka dhigeysaa inay u socoto hal dhinac ama mid kale sida ka muuqata sawirka soo socda.

H hawlgalka buundada

Codeeyaha:

nuqul

Enoder waa shidma lagu rakibay mootada si loo ogaado booska mootada, tani waxay noo ogolaaneysaa inaan xakameyno wareeggiisa.

Xiinka dhawaanshaha Ultrasonic:

shidma ultrasonic

Dareemuhu wuxuu soo diraa unugyada 'ultrasound', kuwani dib ayey u soo laabtaan waxayna ku noqdaan aaladda. Masaafada waxaa lagu xisaabin karaa inta uu socdo ultrasound-ka iyo xawaaraha codka hawada. Qiyaasta cabirkeedu waa 3cm ilaa 4 mitir.

Dhismaha:

Marka xigta waxaan sharxi doonaa isku imaatinka barxadda iyo isku xidhka qaybaha kala duwan.
Tan waxaa lagu dhisi karaa aluminium ama alwaax, aluminium ayaa si fiican u siisa qaab dhismeedka laakiin way ka dhib badan tahay ka shaqeeyntiisa. Xaaladdayda waxaan ka sameeyay aluminium.

Dhammaan cabbiraadu waa tilmaam

Gunta madal

cabbiraadaha madal robot

Qeybtan ayaa matoorrada iyo santuuqa la dejin doonaa, marka hore waxaan ku gooyn doonnaa qalabka cabbiraadaha kor ku xusan, haddii ay ka sameysan tahay alwaax, 5 qaybood waa in la gooyaa oo lagu dhejiyaa ciddiyaha, dhinaca kale, aluminium, gabal dhan waa la goyn karaa ka dibna isku laabi karaa.

Marka aan helno qaab dhismeedka qaybta kore, waxaan qodeynaa 4 god oo qiyaastii 3 metrik ah si aan hadhow awood ugu yeelano inaan qeybta hoose ku biiro qeybta kore oo leh boolal iyo lows.

Si aan u dhigno santuuqa waxaan god ka sameysaneynaa mitir 30 taaj iyo laba god oo dhinacyada ah si loogu xiro barroosinka.

Mashiinadu waxay ku aadi doonaan derbiyada dhinaca dhamaadka.

gunta hoose


Top of madal

cabbiraadaha madal robot

Qeybtaan mootada adeegga ayaa la dejin doonaa waxaana lagu biirin doonaa qeybta hoose oo leh boolal. Marka hore waxaan jaraynaa wareegga dhexroorka 170mm, ka dibna waxaan u sameyn doonnaa afarta god ee boolal iyo qeybta hore leydi si loo geliyo mootada adeegga, ma dhejinayo cabirradan maxaa yeelay waxay ku xirnaan doonaan nooca qalabka adeegga ee aad isticmaasho .

madal sare

Saxanka dareenka shidma

cabbiraadaha madal robot

Taarikada ayaa isku xiri doonta mootada shaqada iyo qalabka 'ultrasound sensor', haddii lagu sameeyo alwaax waa inaan sameynaa laba qaybood oo aan ku soo biirnaa, aluminium kaliya hal qayb oo isku laab, marka hore waxaan jarjarnaa saxanka marna isku laaban qaybta gaaban. Waxaan u sameynaa god qiyaastii metric 3 ah oo loogu talagalay taageerada servomotor (Markaad iibsaneyso servomotor waa wax iska caadi ah inaad leedahay taageero kala duwan oo aad ku xirto kiiskeyga waxaan isticmaali doonaa kan iskutallaabta ah), ka dib waxaan u sameyn doonnaa godadka qaybta weyn ku hay qalabka 'ultrasound sensor' boolal iyo lowska.

guddiga shidma

Marka tan la dhammeeyo ayaan wada dhigeynaa.

madal dhajinta

madal dhajinta

madal dhajinta

Jaantuska iskuxirka

nidaamka xiriirinta

Pins 4, 5, 6, 7 waxaa isticmaala gaashaanka gawaarida si uu u xakameeyo labada matoor

biinanka isku xidhka

Software

Waxaan diirada saari doonaa qeybta softiweerka iyo muujinta howlgalka robot.

Robotka Arduino

Si aad u sameyso barnaamij waxoogaa dheer, waxaa lagugula talinayaa inaad soo jeediso algorithm-ka hawlgalka, tani wax badan ayey naga caawin doontaa marka aan barnaamijyada sameyno. Algorithm waa qeexitaan tilmaam ah oo kuu oggolaanaya inaad qabato hawl.

Algorithm:

Algorithm Robot

Barnaamijku wuxuu u qaybsan yahay barnaamijka weyn ka dibna dhowr barnaamij-hoosaadyo, midka ugu weyn waa halka ay ku yaalliin badhanka bilowga iyo joogsiga iyo wicitaanada barnaamijyada hoose ee cabbirka masaafada, hore u socodka iyo wejiyada kala duwan oo ku xiran masaafada dambe.

Barnaamijka:

//Librerias
#include <Servo.h>

//Declaración E/S
int EM1 = 2; //Encoder motor 1 (Izquierda)
int EM2 = 3; //Encoder motor 2 (Derecha)
int M2D = 4; //Motor 2 control de dirección (Derecha)
int M1P = 6; //Motor 1 control PWM
int M2P = 5; //Motor 2 control PWM
int M1D = 7; //Motor 1 control de dirección (Izquierda)
int SU = 8; //Sensor de distancia por ultrasonidos
Servo servo1; //Servomotor
int BI = 10; //Boton de inicio
int BP = 11; //Boton de paro

//Declaración variables
int CRI = 0; //Contador rueda izquierda
int CRD = 0; //Contador rueda derecha
int EBI = 0; //Estado boton inicio
int velocidad = 200; //Velocidad de los motores
long dist = 0; //Distancia del robot (cm)
long duracion = 0; //Duración del recorrido del ping (microsegundos)
int VEA = 0; //variable encendido/apagado
int EBP = 0; //Estado boton de paro
long distizq = 0; // Distancia del robot (cm) a su izquierda
long distder = 0; // Distancia del robot (cm) a su derecha
byte giro = 0; //Variable para saber por donde girar
byte caso = 0; //Para seleccionar el caso de giro
int estadoAnterior = 0; //variables para cambio de estado del encoder izquierdo
int estadoActual;       //variables para cambio de estado del encoder izquierdo
int estadoAnterior1 = 0; //variables para cambio de estado del encoder derecho
int estadoActual1;      //variables para cambio de estado del encoder izquierdo

void setup() {
pinMode(M1D, OUTPUT);
pinMode(M2D, OUTPUT);
pinMode(EM1, INPUT);         //encoder 1 como entrada
digitalWrite(EM1, HIGH);    //resistencia pull-up para encoder
pinMode(EM2, INPUT);          //encoder 2 como entrada
digitalWrite(EM2, HIGH);    //resistencia pull-up para encoder
servo1.attach(9);  //inicializamos servo
servo1.write(100);   //lo colocamos en una posición media
pinMode(BI, INPUT);  //Boton de inicio como entrada
pinMode(BP, INPUT);  //Boton de paro como entrada
}

void loop() {
EBP=digitalRead(BP);    //lee los estados del boton
EBI=digitalRead(BI);    //lee los estados del boton
if (EBI == HIGH){        //si el estado del boton de inicio esta on
VEA = 1;              //variable encendido/apagado = 1

}
else if(EBP == HIGH) {    //si esta el de paro on
VEA = 0;               //variable encendido/apagado = 0
}
dist = sensorultrasonidos(); //Llama a la función para saber la distancia
if (VEA == 1 && dist > 15){  //Si la variable encendido/apagado tiene valor high y hay distancia suficiente
avanzar();  //Ir a la función avanzar
}
if (VEA == 1 && dist < 15){  //Si la variable encendido/apagado tiene valor high y no hay distancia suficiente
caso = comprobarbandas();  //Comprobamos bandas y depende el caso ira a una función determinada
switch(caso) {
case 1:
derecha();
break;
case 2:
izquierda();
break;
case 3:
giro180();
break;
}
}
}
void avanzar () {  //Función de avanzar hasta que haya una distancia de 15cm con el objeto en frente
digitalWrite(M1D,LOW);
digitalWrite(M2D, LOW);
analogWrite(M1P, velocidad);
analogWrite(M2P, velocidad);
while(dist >15){
dist = sensorultrasonidos(); //Llama a la función para saber la distancia
}
frenar();
}

int sensorultrasonidos() { //Función para medir la distancia con el sensor de ultrasonidos (cm)
pinMode(SU, OUTPUT);              //Configuramos el sensor de ultrasonidos como salida
digitalWrite(SU, LOW);            //Hacemos ping LOW-HIGH-LOW
delayMicroseconds(2);
digitalWrite(SU, HIGH);
delayMicroseconds(15);
digitalWrite(SU, LOW);
delayMicroseconds(20);
pinMode(SU, INPUT);               //Configuramos el sensor de ultrasonidos como entrada
duracion = pulseIn(SU, HIGH);     //Leemos la duración del pulso
delay(50);
return duracion / 29 / 2;     // Conversión de microsegundos a la distancia cm (velocidad del sonido 340m/s o 29 microsegundos por centimetro y son ida y vuelta /2)
}

void frenar (){    //funcion para frenar el robot
digitalWrite(M1D,HIGH);
digitalWrite(M2D, HIGH);
analogWrite(M1P, 0);
analogWrite(M2P, 0);
}

void derecha() {    //función para girar a la derecha teniendo en cuenta la rotacion de los encoders
digitalWrite(M1D,LOW);
digitalWrite(M2D, HIGH);
analogWrite(M1P, velocidad);
analogWrite(M2P, velocidad);
while (CRI <= 15 && CRD <=15 ){
contador_izq();
contador_der();
}
frenar();
}

void izquierda() {    //función para girar a la izquierda teniendo en cuenta la rotacion de los encoders
digitalWrite(M1D,HIGH);
digitalWrite(M2D, LOW);
analogWrite(M1P, velocidad);
analogWrite(M2P, velocidad);
while (CRI <= 15 && CRD <=15 ){
contador_izq();
contador_der();
}
frenar();
}

void giro180() {    //función para girar 180º teniendo en cuenta la rotacion de los encoders
digitalWrite(M1D,LOW);
digitalWrite(M2D, HIGH);
analogWrite(M1P, velocidad);
analogWrite(M2P, velocidad);
while (CRI <= 30 && CRD <=30 ){
contador_izq();
contador_der();
}
frenar();
}

void contador_izq(){    //Contaje de los estados del encoder izquierdo
estadoActual = digitalRead(EM1);
if (estadoAnterior != estadoActual)  // ha habido un cambio de estado
{
CRI++;                          // cuenta los cambios de estado
estadoAnterior = estadoActual;
}
}

void contador_der(){    //Contaje de los estados del encoder derecho
estadoActual1 = digitalRead(EM1);
if (estadoAnterior1 != estadoActual1)  // ha habido un cambio de estado
{
CRD++;                          // cuenta los cambios de estado
estadoAnterior1 = estadoActual1;
}
}

int comprobarbandas() {    //Función para comprovar bandas, mide la distancia de la izquierda y la derecha
CRI = 0;
CRD = 0;
servo1.write(5);
delay(500);
distizq = sensorultrasonidos();
servo1.write(175);
delay(500);
distder = sensorultrasonidos();
servo1.write(100);
delay(500);
if (distder >= distizq && distder > 15) {    //si la distancia derecha es mayor o igual a la distancia izquierda, girara a la derecha
giro = 1;
}
else if(distizq >= distder && distizq > 15) {  //si la distancia izquierda es mayor o igual a la distancia derecha, girara a la izquierda
giro = 2;
}
else if(distizq < 15 && distder < 15) {
giro = 3;
}
return giro;
}

Banaanbax:

Maqaalkan waxaa asal ahaan u qoray Wk3 Ikkaro [/ iftiimiyay]

Haddii aad tahay qof nasasho la'aan sida annaga oo kale oo aad rabto in aad iska kaashato dayactirka iyo hagaajinta mashruuca, waxaad samayn kartaa tabaruc. Dhammaan lacagta ayaa ku bixi doonta in lagu soo iibiyo buugaag iyo agab si loo tijaabiyo oo loo sameeyo casharro

2 faallooyin ku saabsan "Sida loo sameeyo robot guri lagu sameeyo oo leh Arduino"

  1. Habeen wanaagsan, softiweerka arduino ee soodhowrka leh dareeraha dhawaanshaha, beddelka isbeddelka = 1, barnaamijku wuxuu u fahmaa inuu u leexdo dhanka midig ama tan waxay ku xiran tahay maktabadaha si ay tan u fahmaan.
    isku mid u noqoshada = 2 (robotka bidix u jeedi) una leexo = 3 (dib u laabo oo roogga rogo),
    FADLAN SHARAFTAN SII SHARAF, WAAN KU MAHADSANAHAY.

    TILMAAMO KALE OO AH ROOBTU MA LEH COD BADAN IN LAGU CELIYO IYO IN LA BAADIYO FADHIYADO, WAA LOO XUSAY IN KU SOO CELISTA = 3 SOO CELINTA IYO SOO CELINTA AYAA LAGU SHAQEEYAY, LAAKIIN WAXA LAGU TILMAAMAA IN AAN LAHAYN CADNAAN OO LOOGU YIRAAHAY SOO NOQOSHADA.

    Salaan kadib waxaanan raadinaayaa TAAGEERADAADA.

    jawaab
  2. Habeen wanaagsan, softiweerka arduino ee soodhowrka leh dareeraha dhawaanshaha, beddelka isbeddelka = 1, barnaamijku wuxuu u fahmaa inuu u leexdo dhanka midig ama tan waxay ku xiran tahay maktabadaha si ay tan u fahmaan.
    isku mid u noqoshada = 2 (robotka bidix u jeedi) una leexo = 3 (dib u laabo oo roogga rogo),
    FADLAN SHARAFTAN SII SHARAF, WAAN KU MAHADSANAHAY.

    TILMAAMO KALE OO AH ROOBTU MA LEH COD BADAN IN LAGU CELIYO IYO IN LA BAADIYO FADHIYADO, WAA LOO XUSAY IN KU SOO CELISTA = 3 SOO CELINTA IYO SOO CELINTA AYAA LAGU SHAQEEYAY, LAAKIIN WAXA LAGU TILMAAMAA IN AAN LAHAYN CADNAAN OO LOOGU YIRAAHAY SOO NOQOSHADA.

    Salaan kadib waxaanan raadinaayaa TAAGEERADAADA.

    jawaab

Tomato comentario un