Search Code

Ẹkọ 25/31: Ọkọ̀-ayọ́kẹ́lẹ́ 3 Ọkọ̀-ayọ́kẹ́lẹ́ Ọlọ́gbọ́n Yẹra fún Ìdíwọ́ Nípa Lílò Àwọn Sẹ́ńsà Infuraredi | SunFounder Robojax

Ẹkọ 25/31: Ọkọ̀-ayọ́kẹ́lẹ́ 3 Ọkọ̀-ayọ́kẹ́lẹ́ Ọlọ́gbọ́n Yẹra fún Ìdíwọ́ Nípa Lílò Àwọn Sẹ́ńsà Infuraredi | SunFounder Robojax

Iṣẹ́ yìí yí ọkọ̀ ayọ́kẹ́lẹ́ SunFounder 3-in-1 Arduino rẹ padà sí ọkọ̀ ayọ́kẹ́lẹ́ tó ń yẹra fún àwọn ohun tó ń díwájú lọ́nà àdánidá. Nípa gbígbé àwọn sẹ́nsọ̀ infúréẹ̀dì (IR) méjì sí orí rẹ̀—ọ̀kan ní ọwọ́ òsì àti ọ̀kan ní ọwọ́ ọ̀tún—ọkọ̀ ayọ́kẹ́lẹ́ náà lè rí àwọn ohun tó wà níwájú rẹ̀ kí ó sì ṣe ìpinnu ní ẹ̀sẹ̀kẹsẹ̀ láti yí ká wọn. Èyí jẹ́ ìgbésẹ̀ pàtàkì ní ìmọ̀ ẹ̀rọ robot, tó ń kọ́ ọ bí o ṣe lè darapọ̀ ìmọ̀ sẹ́nsọ̀ pẹ̀lú ìmọ̀ ìṣàkóso mótò láti ṣẹ̀dá ẹ̀rọ tó ń fèsì sí àyíká rẹ̀, tó sì ń wakọ̀ fúnra rẹ̀. Àwọn ìlànà tó o ó kọ́ níbí yìí wúlò fún ọ̀pọ̀lọpọ̀ àwọn ohun tó ń lọ ní àgbáyé gidi, pẹ̀lú:

  • Kíkọ́ ẹ̀rọ ìfọ̀fọ́ ilé robot tó ń lọ káàkiri yàrá láìkọlu àwọn aga.
  • Ṣíṣẹ̀dá robot tó ń tẹ̀lé ìlà tàbí tó ń yanjú labyrinth fún àwọn ìdíje tàbí àwọn iṣẹ́ ẹ̀kọ́.
  • Dídàgbàsókè robot olùṣọ́ ààbò tó ń ṣiṣẹ́ lọ́nà àdánidá tó lè rìn káàkiri ààlà kan kó sì yẹra fún àwọn ògiri.
  • Ṣíṣe ọkọ̀ ayọ́kẹ́lẹ́ ìṣeré ọlọ́gbọ́n tó lè ṣeré fúnra rẹ̀ láìdi dúró.

Ìtọ́sọ́nà yìí kọ́ lórí àwọn ẹ̀kọ́ tó ti kọjá níbi tó o ti kọ́ láti ṣàkóso àwọn mótò ọkọ̀ ayọ́kẹ́lẹ́ náà àti láti lóye bí àwọn sẹ́nsọ̀ IR ṣe ń ṣiṣẹ́. Níhìn-ín, a ó darapọ̀ àwọn ọgbọ́n wọ̀nyẹn láti ṣe àgbékalẹ̀ àlọ́gọ́rítíìmù yíyẹra fún àwọn ohun tó ń díwájú tó rọrùn ṣùgbọ́n tó gbéṣẹ́.

Bí Ìmọ̀ Yíyẹra fún Àwọn Ohun Tó Ń Díwájú Ṣe ń Ṣiṣẹ́

Èrò pàtàkì náà rọrùn: ọkọ̀ ayọ́kẹ́lẹ́ náà ń lo àwọn sẹ́nsọ̀ IR méjì láti wá àwọn ohun tó ń díwájú ní ọwọ́ òsì àti ọ̀tún rẹ̀. Sẹ́nsọ̀ kọ̀ọ̀kan ń mú àmì oní nọ́ńbà jáde: LOW (0) nígbà tó bá rí ohun kan nínú ibi tó lè dé (nínú 20 cm) àti HIGH (1) nígbà tí ọ̀nà bá mọ́. Ìmọ̀ náà sì ń pinnu ohun tí ọkọ̀ ayọ́kẹ́lẹ́ yóò ṣe dá lórí ipò àwọn sẹ́nsọ̀ (nínú fídíò ní 02:35):

  • Ohun Tó Ń Díwájú ní Ọwọ́ Òsì, Ọwọ́ Ọ̀tún Mọ́: Ọkọ̀ ayọ́kẹ́lẹ́ yí sí ọwọ́ ọ̀tún láti yẹra fún un.
  • Ohun Tó Ń Díwájú ní Ọwọ́ Ọ̀tún, Ọwọ́ Òsì Mọ́: Ọkọ̀ ayọ́kẹ́lẹ́ yí sí ọwọ́ òsì.
  • Àwọn Ohun Tó Ń Díwájú ní Ẹ̀gbẹ́ Méjèèjì: Ọkọ̀ ayọ́kẹ́lẹ́ ń padà sẹ́yìn láti bọ́ kúrò nínú ibi tó lè jẹ́ òpin ọ̀nà.
  • Kò Sí Ohun Tó Ń Díwájú: Ọkọ̀ ayọ́kẹ́lẹ́ ń wakọ̀ síwájú.

Ọ̀nà ìfèsì yìí jẹ́ àpẹẹrẹ àtẹ̀wé kan ti ẹ̀rọ tó ní ipò tó lópin, níbi tí ìwà ọkọ̀ ayọ́kẹ́lẹ́ ti jẹ́ ìdáhùn tààràtà sí àwọn ohun tí àwọn sẹ́nsọ̀ rẹ̀ ń gbà ní àkókò yẹn.

Sunfounder-Smartcar-Obstacle-avoideance-1

Àwọn Ẹ̀yà Hàdúwàà

Láti parí iṣẹ́ yìí, o ó nílò àwọn ẹ̀yà wọ̀nyí, tí gbogbo wọn wà nínú àkójọpọ̀ SunFounder 3-in-1 Arduino:

  • 1x Àkójọpọ̀ Ọkọ̀ Ayọ́kẹ́lẹ́ SunFounder 3-in-1 Arduino (tàbí àwọn ẹ̀yà tó dọ́gba)
  • 2x Àwọn Sẹ́nsọ̀ Yíyẹra fún Àwọn Ohun Tó Ń Díwájú Infúréẹ̀dì
  • 1x Arduino Uno (tàbí bọ́ọ̀dù tó bá mu)
  • 1x Bọ́ọ̀dù/Àwọ̀n Ìṣàkóso Mótò
  • Àwọn Wáyà Jumper

Ìtọ́sọ́nà Ìsopọ̀ Wáyà

Ìtòlẹ́sẹẹsẹ sẹ́nsọ̀ tó tọ́ ṣe pàtàkì fún iṣẹ́ yìí láti ṣiṣẹ́. Àwọn sẹ́nsọ̀ IR gbọ́dọ̀ dojú kọ ọ̀nà níwájú àti díẹ̀ síta, nítorí wọ́n yóò ń wá àwọn ohun tó ń díwájú ní ẹ̀gbẹ́ ọkọ̀ ayọ́kẹ́lẹ́ náà (nínú fídíò ní 02:07). Àwòrán ìsopọ̀ wáyà tó tẹ̀le yìí fi bí o ṣe lè so àwọn sẹ́nsọ̀ pọ̀ mọ́ Arduino. Jọ̀wọ́ kíyè sí i pé olùkọ́ náà lo ibi pínpín agbára kan pàtó lórí bírádì ọkọ̀ ayọ́kẹ́lẹ́ náà, ṣùgbọ́n àwọn ìsopọ̀ sí Arduino ni ó ṣe pàtàkì.

Sunfounder-Smartcar-Obstacle-avoideance-wiring

Àwọn ìsopọ̀ wáyà náà ni wọ̀nyí (nínú fídíò ní 03:47):

  • Agbára (VCC): So pín VCC ti àwọn sẹ́nsọ̀ IR méjèèjì pọ̀ mọ́ ìjàde 5V lórí Arduino tàbí ọ̀nà agbára ọkọ̀ ayọ́kẹ́lẹ́ náà.
  • Ilẹ̀ (GND): So pín GND ti àwọn sẹ́nsọ̀ IR méjèèjì pọ̀ mọ́ ilẹ̀ kan ṣoṣo lórí Arduino tàbí ọ̀nà ilẹ̀ ọkọ̀ ayọ́kẹ́lẹ́ náà.
  • Ìjàde Sẹ́nsọ̀ Ọ̀tún (OUT): So pín ìjàde oní nọ́ńbà ti sẹ́nsọ̀ IR ọ̀tún pọ̀ mọ́ pín oní nọ́ńbà 7 lórí Arduino.
  • Ìjàde Sẹ́nsọ̀ Òsì (OUT): So pín ìjàde oní nọ́ńbà ti sẹ́nsọ̀ IR òsì pọ̀ mọ́ pín oní nọ́ńbà 8 lórí Arduino.

Àwọn ìsopọ̀ ìṣàkóso mótò fún àwọn mótò ọ̀tún àti òsì jẹ́ kanna pẹ̀lú àwọn tí a ti fi lẹ̀ nínú ẹ̀kọ́ tó kọjá lórí ìṣàkóso mótò.

Àlàyé Kóòdù

Kóòdù fún iṣẹ́ yìí tọ̀nà. Ètò pàtàkì náà wà fún ìgbàlọ̀ ní ìsàlẹ̀ àpilẹ̀kọ yìí. Níhìn-ín, a ó dojú kọ àwọn apá tí o lè ṣàtúnṣe fún ọkọ̀ ayọ́kẹ́lẹ́ tìrẹ.

const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int rightIR = 7;
const int leftIR = 8;

Àwọn ìlà wọ̀nyí ṣàlàyé àwọn pín tí a lò fún ìṣàkóso mótò àti àwọn sẹ́nsọ̀ IR. Àwọn pín mótò (A_1B, A_1A, B_1B, B_1A) ń ṣàkóso ìyára àti ìtọ́sọ́nà àwọn mótò méjì náà. Àwọn pín rightIR àti leftIR ni ibi tó o so àwọn wáyà àmì láti àwọn sẹ́nsọ̀ rẹ. Bí o bá lo àwọn pín ọ̀tọ̀ọ̀tọ̀, o ó yí àwọn iye wọ̀nyí padà níbí.

int speed = 150;

Oníyẹ̀wé yìí ṣètò ìyára ìpìlẹ̀ fún ọkọ̀ ayọ́kẹ́lẹ́ náà. Iye náà lè wà láàrin 0 sí 255, níbi tí 255 ti jẹ́ ìyára tó pọ̀ jùlọ. Iye 150 jẹ́ ibẹ̀rẹ̀ tó dára fún kíkọ́ ẹ̀kọ́, nítorí ó yára tó láti wúni lórí ṣùgbọ́n ó lọ́ra tó láti gba àkókò fún ìfèsì (nínú fídíò ní 07:10). O lè ṣàtúnṣe èyí láti mú ọkọ̀ ayọ́kẹ́lẹ́ rẹ yára tàbí lọ́ra sí i.

Ìyókù kóòdù náà ṣàlàyé ìṣe nínú iṣẹ́ loop(). Ó ka ipò àwọn sẹ́ńsà òsì àti ọ̀tún, lẹ́yìn náà ó pe iṣẹ́ ìṣísẹ̀ tí ó bá mu (moveForward(), moveBackward(), backLeft(), backRight()). Àwọn iṣẹ́ wọ̀nyí ti ṣe àtòkọ̀ tẹ́lẹ̀, wọ́n sì ń darí ẹ̀rọ ìṣàkóso mọ́tò láti mú ìṣísẹ̀ tí a fẹ́ ṣẹ. Olùkọ́ náà tún fi iṣẹ́ stop() kún un ní àtúnṣe tí ó tẹ̀lé e láti dá ọkọ̀ dúró fún ìgbà kúkúrú lẹ́yìn ìgbìyànjú yíyẹ̀ra, tí ó sì mú kí ìṣísẹ̀ rẹ̀ jẹ́ pípẹ́rẹ̀ (ní fídíò ní 10:29).

Ìfihàn Iṣẹ́-ọwọ́ Láàyè

Nínú fídíò náà, olùkọ́ kọ́kọ́ fi ìṣe náà hàn nípa lílo Serial Monitor. Nípa gbígbé àpótí kan sí ẹ̀gbẹ́ àwọn sẹ́ńsà, o lè rí àwọn ifiranṣẹ́ bíi "Go Left", "Go Right", tàbí "Go Backward" tí wọ́n ń yọ jáde lórí iboju, tí ó ń fi ìdí rẹ̀ múlẹ̀ pé àwọn ìwọ̀n sẹ́ńsà àti ìṣe náà tọ́ (ní fídíò ní 09:11).

Lẹ́yìn tí ó ti ṣàyẹ̀wò ìṣe náà, olùkọ́ fi àfikún pàtàkì kún un: iṣẹ́ stop(). Iṣẹ́ yìí máa ń mú ọkọ̀ dúró pátápátá fún àkókò tí a yàn (bíi 1 ìṣẹ́jú) lẹ́yìn tí ó bá yí tàbí padà sẹ́yìn, tí ó ń ṣèdíwọ́ fún ìṣísẹ̀ tí kò dára, tí ó sì ń jẹ́ kí ọkọ̀ tún ṣàyẹ̀wò àyíká rẹ̀ (ní fídíò ní 10:29).

Níkẹyìn, wọ́n dán ọkọ̀ náà wò lórí ilẹ̀ pẹ̀lú ọ̀pọ̀lọpọ̀ àwọn ohun tí ń díwọ̀n. Fídíò náà fi ọkọ̀ hàn tí ó ń lọ káàkiri láyọ̀, tí ó ń yí padà sí òsì, sí ọ̀tún, tí ó sì ń padà sẹ́yìn bí ó ti nílò, láti rí ọ̀nà tí ó mọ́, tí ó ń fi ìlò gidi ti àlógórítíìmù yíyẹ̀ra yìí hàn (ní fídíò ní 12:13).

Àwọn Orí-ọ̀rọ̀

  • [00:00] Ìfihàn sí Yíyẹ̀ra Ohun tí ń Díwọ̀n pẹ̀lú Àwọn Sẹ́ńsà IR
  • [01:24] Àwọn Ohun tí a Nílò Ṣáájú àti Àkópọ̀ Iṣẹ́-ọwọ́
  • [02:35] Bí Ìṣe Yíyẹ̀ra Ohun tí ń Díwọ̀n Ṣe ń Ṣiṣẹ́
  • [03:47] Sísopọ̀ Àwọn Sẹ́ńsà IR àti Àwọn Mọ́tò
  • [05:40] Ṣíṣí àti Ṣàlàyé Kóòdù náà
  • [09:11] Dídán Ìṣe náà Wò pẹ̀lú Serial Monitor
  • [10:29] Fífi Iṣẹ́ Stop Kún Un fún Ìṣísẹ̀ Tí Ó Dára Jù
  • [11:42] Dídán Iṣẹ́ Stop náà Wò
  • [12:13] Ìdánwò Gidi Ìkẹyìn Lórí Ilẹ̀

Aworan

Sunfounder-Smartcar-Obstacle-avoideance-1
Sunfounder-Smartcar-Obstacle-avoideance-1
Sunfounder-Smartcar-Obstacle-avoideance-wiring
Sunfounder-Smartcar-Obstacle-avoideance-wiring
894-Lesson 25: SunFounder's 3-in-1 Arduino kit Car-3 Smart Car Avoids Obstacle Using Infrared Sensors
Ede: C++
const int A_1B = 5;
const int A_1A = 6;
const int B_1B = 9;
const int B_1A = 10;

const int rightIR = 7;
const int leftIR = 8;

void setup() {
  Serial.begin(9600);

  //motor
  pinMode(A_1B, OUTPUT);
  pinMode(A_1A, OUTPUT);
  pinMode(B_1B, OUTPUT);
  pinMode(B_1A, OUTPUT);

  //IR obstacle
  pinMode(leftIR, INPUT);
  pinMode(rightIR, INPUT);

}

void loop() {

  int left = digitalRead(leftIR);  // 0: Obstructed   1: Empty
  int right = digitalRead(rightIR);
  int speed = 150;

  if (!left && right) {
    backLeft(speed);
  } else if (left && !right) {
    backRight(speed);
  } else if (!left && !right) {
    moveBackward(speed);
  } else {
    moveForward(speed);
  }
}

void moveForward(int speed) {
  analogWrite(A_1B, 0);
  analogWrite(A_1A, speed);
  analogWrite(B_1B, speed);
  analogWrite(B_1A, 0);
}

void moveBackward(int speed) {
  analogWrite(A_1B, speed);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, speed);
}

void backLeft(int speed) {
  analogWrite(A_1B, speed);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, 0);
}

void backRight(int speed) {
  analogWrite(A_1B, 0);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, speed);
}

Fáìlìs📁

Awọn ile-ikawe Arduino (zip)