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.
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-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.
Codeeyaha:
Enoder waa shidma lagu rakibay mootada si loo ogaado booska mootada, tani waxay noo ogolaaneysaa inaan xakameyno wareeggiisa.
Xiinka dhawaanshaha 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
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.
Top of madal
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 .
Saxanka dareenka shidma
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.
Marka tan la dhammeeyo ayaan wada dhigeynaa.
Jaantuska iskuxirka
Pins 4, 5, 6, 7 waxaa isticmaala gaashaanka gawaarida si uu u xakameeyo labada matoor
Software
Waxaan diirada saari doonaa qeybta softiweerka iyo muujinta howlgalka robot.
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:
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]
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.
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.