Arduino سان گهر گهر روبوٽ ڪيئن ٺاهيو

هن آرٽيڪل ۾ اسان سکڻ وارا آهيون ته ڪئين هڪ آرڊينو بورڊ طرفان سنڀاليو ننڙو گهرڙو روبوٽ. روبوٽ جو مقصد الٽراسائونڊ سينسر جي ذريعي رڪاوٽن کان بچڻ هوندو ، جڏهن اهو رڪاوٽ تي پهچي ويندو آهي ته اها ٻنهي طرفن ڏانهن ڏسندي مارچ جاري رکڻ جو بهترين آپشن طئي ڪندي.

هارڊويئر

هن پهرين حصي ۾ اسان روبوٽ پليٽ فارم جي تعمير تي ڌيان ڏيندو ، حصا گڏ ڪرڻ ۽ ڳن connectingڻ.

روبوٽ_اردوينو

ضروري مواد

  • هڪ آردوينو بورڊ
  • هڪ ٻن موٽرن لاءِ هڪ پل (منهنجي صورت ۾ مان ڊفروبوٽ کان آردوينو موٽر شيلڊ استعمال ڪندس)
  • ٻه پُشبون
  • ٻه ڊي سي موٽر (FIT0016 DFROBOT)
  • ٻه 10k اوه مزاحمت وارا
  • ٻه انڪوڊر (SEN0038 DFROBOT)
  • ٻه wheelsيٿون (FIT0003 DFROBOT)
  • هڪ بال ڪيٽر (بيهڻ)
  • هڪ سروازي
  • هڪ الٹراسونڪ قربت سينسر
  • هڪ 7,2v بيٽري
  • پليٽ فارم ٺاهڻ لاءِ ڪاٺ يا ايلومينيم

ايڇ پل:

اسان جي ميلنگ لسٽ ۾ سبسڪرائب ڪريو

ايڇ پل

اي پل هڪ اليڪٽرڪ سرڪٽ آهي جيڪا هڪ ڊي سي برقي موٽر کي ٻنهي طرفن ۾ گردش ڪرڻ جي اجازت ڏئي ٿي.
اهو 4 سوئچز مان ٺهيل آهي (ٽرسٽسٽر استعمال ڪندي) ۽ انهن جو ميلاپ انهي ڪري هڪڙي يا ٻئي طرف ڏانهن وڃي ٿو جيئن هيٺ ڏنل تصوير ۾ ڏيکاريل آهي.

ايڇ پل آپريشن

انڪوڊر:

ڪوڊٽر

هڪ انڪوڊر هڪ سينسر آهي جيڪو موٽر ۾ پنهنجي موٽر جي پوزيشن کي isاڻڻ لاءِ انسٽال ڪيو ويو آهي ، هي اسان کي ان جي گردش تي قابو پائڻ جي اجازت ڏئي ٿو.

الٹراسونڪ قربت سينسر:

الٹراسونڪ سينسر

هي سينسر الٽراسائونڊ جي دال موڪلي ٿو ، اهي واپس اچون ٿا ۽ واپس سينسر ڏانهن وڃن ٿا. فاصلي کي الٽراسائونڊ پلس پلس جي دوري ۽ هوا جي آواز جي رفتار مان ڳڻائي سگهجي ٿو. ان جي ماپ جي حد عام طور تي 3 سينٽي کان 4 ميٽر آهي.

تعمير

اڳتي هلي آئون پليٽ فارم جي اسيمبلي ۽ مختلف حصن جي ڪنيڪشن جي وضاحت ڪندس.
اھو ايلومينيم يا ڪاٺ سان تعمير ڪري سگھجي ٿو ، ايلومينيم کي integrityانچي کي وڌيڪ اھميت ڏيندو آھي پر ان کي پروسيس ڪرڻ وڌيڪ مشڪل آھي. منهنجي حالت ۾ مون اهو ايلومينيم مان ٺاهيو آهي.

سڀئي ماپا اشارو آهن

پليٽ فارم جو هيٺيون

روبوٽ پليٽ فارم ماپ

هن حصي ۾ موٽر ۽ بيئر رکيا ويندا ، پهرين اسان مواد کي مٿي کان ماپائي ويداسين ، جيڪڏهن اهو ڪاٺ مان ٺهيل آهي ، 5 حصن کي ڪٽڻ ۽ گڏ ٿيڻ گهرجي ۽ ٻئي طرف ، نلن سان گڏ ، ايلومينيم سان. س pieceو ٽُڪ کٽيو وڃي ٿو ۽ پوءِ ان کي ڳن foldي ڇڏيندس.

هڪ ڀيرو اسان وٽ مٿاهين حصي جي جوڙجڪ آهي ، اسان تقريباً 4 ميٽرڪ 3 سوراخ ڊرل ڪنداسين ۽ بعد ۾ سکرو ۽ نئڙن سان مٿي واري حصي سان هيٺين حصي ۾ شامل ٿيڻ جي قابل ٿي وينداسين.

بيئرنگ کي جاءِ ڏيڻ لاءِ اسين هڪ ميٽرڪ 30 تاج ۽ اينڪر اسڪرو لاءِ ڪنارن تي ٻه سوراخ ٺاهيندا آهيون.

انجڻ آخرڪار طرف ڀتين تي ويندا.

هيٺيون پليٽ فارم


پليٽ فارم جو مٿو

روبوٽ پليٽ فارم ماپ

هن حصي ۾ سرو موٽر کي گهرايو ويندو ۽ انهي کي هيٺئين حصي سان جوڙڻ سان جوڙيو ويندو. پهريان اسين 170mm قطر جي دائري کي ڪٽينداسين ، پوءِ اسين سکرو لاءِ چار سوراخ ٺاهينداسين ۽ سامهون واري حصي کي سرو موٽر کي داخل ڪرڻ لاءِ هڪ مستطيل ٺاهيو ويندو ، مون اهي ماپ نه لڳايو ڇو ته اهي سرو موٽر جي قسم تي منحصر هوندو جنهن کي توهان استعمال ڪندا. .

مٿين پليٽفارم

الٹراسونڪ سينسر لاءِ پليٽ

روبوٽ پليٽ فارم ماپ

پليٽ فارم موٽر کي الٽراسائونڊ سينسر سان ڳن willيندي ، جيڪڏهن اها ڪاٺ سان ٺاهي وڃي ته اسان کي ٻه حصا ٺاهڻا پوندا ۽ انهن سان ملڻو پوندو ، ايلومينيم سان گڏ فقط هڪ حصو ۽ فولڊ ڪري ، پهرين اسان پليٽ کي ڪٽي ۽ هڪ ڀيرو نن partي حصي ۾ جهلي. اسان سروومٽر جي حمايت لاءِ تقريبن ميٽرڪ 3 جو سوراخ ٺاهيندا آهيون (جڏهن توهان سرووموٽر خريد ڪندا آهيو ، اهو عام هوندو آهي ته توهان منهنجي صورت ۾ لنگر لاءِ مختلف سهڪار رکون ٿا مان هڪ ڪراس ڪتب آڻيندس) ، پوءِ اسان سوراخ جي حصي کي ٺاهيندا آهيون الٽراسائونڊ سينسر کي سکرو ۽ نٽ وغيره سان گڏ رکڻ لاءِ.

سينسر بورڊ

هڪ دفعو اهو ٿي چڪو آهي ، اسان سڀني کي گڏ رکون ٿا.

پليٽ فارم تي چڙهيل

پليٽ فارم تي چڙهيل

پليٽ فارم تي چڙهيل

ڪنيڪشن خاڪو

ڪنيڪشن اسڪيم

ٻن موٽرن کي ڪنٽرول ڪرڻ لاءِ پن 4 ، 5 ، 6 ، 7 موٽر شيلڊ ذريعي استعمال ڪيا ويا آهن

ڪنيڪشن پن

سافٽ ويئر

اسان سافٽ ويئر حصي تي ۽ روبوٽ آپريشن جي مظاهري تي ڌيان ڏيندا.

آردوين روبوٽ

هڪ پروگرام ڊگهو ڊگهو ڪرڻ لاءِ ، اهو صلاح ڏيڻ گهرجي ته آپريشن جي الگورتھم کي پيش ڪجي ، اهو پروگرامنگ جي دوران اسان جي ڪافي مدد ڪري سگهندو. هڪ الگورٿم اها هدايتن جو هڪ سيٽ آهي جيڪو توهان کي هڪ ڪارائتي ڪرڻ جي اجازت ڏئي ٿو.

الگهان:

روبوٽ الگورتھم

پروگرام کي بنيادي پروگرام ۾ ورهايو ويو آهي ۽ پوءِ ڪيترن ئي ذيلي پروگرامن ۾ ، بنيادي طور تي هي آهي جتي شروعاتي ۽ اسٽاپ بٽ واقع آهن ۽ فاضل پروگرامن کي فاصلي ، اڳڀرائي ۽ بعد واري دورن جي لحاظ کان مختلف موٽن جي ماپ لاءِ ڪالون آهن.

پروگرام:

//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;
}

مظاهرا

[نمايان ٿيل] ھي آرٽيڪل اصل ۾ Wk3 پاران Ikkaro لاءِ لکيو ويو [/ نمايان ٿيل]

”آردوينو سان گهر واري روبوٽ ڪيئن ٺاهجي“ تي 2 راءِ

  1. شب بخير ، آرڊينو روبوٽ سوفٽويئر ۾ قريب سينسر ، متغير موڙ = 1 ، اهو پروگرام انهي کي سا turnي طرف understandsيرائڻ سمجهي ٿو يا اهو سمجهڻ لاءِ لائبريرين سان ڳن isيل آهي.
    ساڳيو turnرڻ = 2 (روبوٽ کي کاٻي طرف موڙيو) ۽ موڙ = 3 (واپس وڃو ۽ روبوٽ کي موڙيو) ،
    مهرباني ڪري هن دلال جي وضاحت ڪريو ، مان توهان کي مهرباني ڪري.

    هڪ ٻيو نشان ربوٽ واپس ناهي آيو ۽ بند جي جاچڻ جي پرنٽ ۾ ، اهو ٻڌايو ويو آهي ته هڪ واپسي ۽ هڪ واپسي واپس ڏنل آهي = 3 ، پر اها حمايت ڪئي وئي آهي ته اتي ڪو رد نه ڪيو ويو هجي.

    مبارڪون ۽ مان توهان جي حمايت جو خواهشمند آهيان.

    جواب
  2. شب بخير ، آرڊينو روبوٽ سوفٽويئر ۾ قريب سينسر ، متغير موڙ = 1 ، اهو پروگرام انهي کي سا turnي طرف understandsيرائڻ سمجهي ٿو يا اهو سمجهڻ لاءِ لائبريرين سان ڳن isيل آهي.
    ساڳيو turnرڻ = 2 (روبوٽ کي کاٻي طرف موڙيو) ۽ موڙ = 3 (واپس وڃو ۽ روبوٽ کي موڙيو) ،
    مهرباني ڪري هن دلال جي وضاحت ڪريو ، مان توهان کي مهرباني ڪري.

    هڪ ٻيو نشان ربوٽ واپس ناهي آيو ۽ بند جي جاچڻ جي پرنٽ ۾ ، اهو ٻڌايو ويو آهي ته هڪ واپسي ۽ هڪ واپسي واپس ڏنل آهي = 3 ، پر اها حمايت ڪئي وئي آهي ته اتي ڪو رد نه ڪيو ويو هجي.

    مبارڪون ۽ مان توهان جي حمايت جو خواهشمند آهيان.

    جواب

تبصرو ڪيو