ኮድ ይፈልጉ

ትምህርት 27/31፡ የSunFounder ስማርት መኪና-5 እጅዎን ይከተላል በአርዱኖ በመጠቀም | ሮቦጃክስ

ትምህርት 27/31፡ የSunFounder ስማርት መኪና-5 እጅዎን ይከተላል በአርዱኖ በመጠቀም | ሮቦጃክስ

መግቢያ

መቼም ለመገኘትዎ በማስተዋል የሚምላሽ ሮቦት ለመስራት ፈልገው ያውቃሉ? ይህ ፕሮጀክት መደበኛ SunFounder Smart Carን በእጅ እንቅስቃሴ የሚቆጣጠር ተሽከርካሪ ይለውጠዋል። በርቀት መቆጣጠሪያ ወይም በስማርትፎን መተግበሪያ ፋንታ፣ ይህ መኪና የእጅዎን አቀማመጥ እና ርቀት ለመለየት የአልትራሶኒክ እና የኢንፍራሬድ ዳሳሾችን ጥምረት ይጠቀማል፣ ይህም በቀላል የተፈጥሮ እንቅስቃሴዎች ወደ ግራ፣ ወደ ቀኝ ወይም ወደ ፊት እንዲመሩት ያስችልዎታል።

27-SunFounder-Car-5-Follow-Hand

ይህ ፕሮጀክት የRobojax Arduino ኮርስ (ትምህርት 27/31) አካል ሲሆን SunFounder 3-in-1 Arduino ኪት በመጠቀም የተሰራ ነው። ብዙ ዳሳሾች አንድ ላይ ሆነው የበለጠ ውስብስብ እና ምላሽ ሰጪ ባህሪ ለመፍጠር የሚሰሩበትን የሴንሰር ውህደት ለመማር እጅግ ጥሩ መንገድ ነው። እዚህ ላይ ያለው ተግባራዊ ጠቀሜታ ውሳኔ ለማድረግ የተለያዩ የግብዓት አይነቶችን እንዴት ማጣመር እንደሚቻል መረዳት ነው፣ ይህም በሮቦቲክስ እና አውቶሜሽን ውስጥ መሰረታዊ ፅንሰ-ሀሳብ ነው።

በዚህ አመክንዮ ላይ መገንባት የሚችሏቸው ጥቂት ተግባራዊ ሀሳቦች እዚህ አሉ፡

  • መስተጋብራዊ ኤግዚቢሽኖች፡ የጎብኚዎችን ትኩረት ለመሳብ የሚከተል ትንሽ ሮቦቲክ ማሳያ ይፍጠሩ።
  • ራሱን የቻለ እንቅፋት የሚያስወግድ መድረክ፡ መኪናው እጅን ከመከተል ይልቅ እንቅፋቶችን በማስወገድ ክፍሉን እንዲዘዋወር ኮዱን ያሻሽሉ።
  • ትምህርታዊ ሮቦቲክስ ኪት፡ ተማሪዎችን ስለ ሴንሰር ውህደት፣ አመክንዮ እና የሞተር ቁጥጥር ለማስተማር እንደ መሰረታዊ ፕሮጀክት ይጠቀሙበት።
  • ብልህ የመላኪያ ትሮሊ፡ ቁጥጥር በሚደረግበት አካባቢ፣ ይህ አመክንዮ በመጋዘን ወይም በፋብሪካ ውስጥ ሰውን የሚከተል ትንሽ ትሮሊ ለማላመድ ይቻላል።

ሃርድዌር እና ክፍሎች

ይህ ፕሮጀክት በSunFounder 3-in-1 Arduino ኪት ውስጥ የተካተቱትን ክፍሎች ይጠቀማል። የሚጠቀሙባቸው ዋና ዋና ክፍሎች እነዚህ ናቸው፡

  • SunFounder Smart Car ቻሲስ፡ መንኮራኩሮች እና ሞተሮች ያሉት አካላዊ መድረክ።
  • Arduino ቦርድ፡ ኮዱን የሚያስኬድ የመኪናው "አእምሮ"።
  • አልትራሶኒክ ዳሳሽ (HC-SR04)፡ ከመኪናው ፊት ለፊት ያለውን ነገር (እጅዎን) ርቀት ለመለካት ይጠቅማል።
  • ሁለት IR (ኢንፍራሬድ) እንቅፋት መከላከያ ዳሳሾች፡ በግራ እና በቀኝ ጎኖች ላይ ተጭነው የእጅዎን መገኘት በእነዚያ ጎኖች ለመለየት ያገለግላሉ።
  • ሞተር ሾፌር፡ ከArduino ምልክቶች መሰረት የመኪናውን ሞተሮች ፍጥነት እና አቅጣጫ ለመቆጣጠር የሚያገለግል ሞጁል (ብዙውን ጊዜ L298N ወይም ተመሳሳይ)።
  • የኃይል ምንጭ፡ Arduino እና ሞተሮችን ለማብራት ባትሪዎች።

የወልና መመሪያ

car_7_8_follow_hand

በቪዲዮው ላይ እንደተጠቀሰው፣ የዚህ ፕሮጀክት የወልና አደረጃጀት በቀደሙት ትምህርቶች ለእንቅፋት መከላከያ መኪና ከተብራራው ጋር ተመሳሳይ ነው። ዳሳሾቹ እና ሞተሮቹ ሁሉም ከArduino ዲጂታል እና አናሎግ ፒኖች ጋር ተገናኝተዋል። ለእይታ ማጣቀሻ፣ እባክዎ የSunFounder Smart Carን የወልና ሥዕላዊ መግለጫ ይመልከቱ።

ኮዱ ለእያንዳንዱ ክፍል የሚያገለግሉትን ልዩ ፒኖች ይገልጻል፣ እነዚህም በሚቀጥለው ክፍል በዝርዝር ተብራርተዋል።

የኮድ ማብራሪያ

ይህ ክፍል ለራስዎ መኪና ማስተካከል የሚፈልጉትን በተጠቃሚ ሊዋቀሩ የሚችሉ የኮድ ክፍሎች ላይ ያተኩራል። ሙሉ ፕሮግራሙ በRobojax መርጃ ገጽ ላይ ለማውረድ ይገኛል።

በስኬቹ መጀመሪያ ላይ፣ የፒን ትርጓሜዎችን ያገኛሉ። መኪናዎን ከአስተማሪው በተለየ መንገድ ካገናኙት እነዚህ ለመረዳት በጣም ወሳኝ መስመሮች ናቸው።

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;

const int trigPin = 3;
const int echoPin = 4;

እያንዳንዱ የፒን ቡድን የሚያደርገው ነገር ይህ ነው፡

  • የሞተር ፒኖች (A_1A, A_1B, B_1A, B_1B)፡ እነዚህ ሁለቱን ሞተሮች ለመቆጣጠር ከሞተር ሾፌሩ ጋር የተገናኙ ፒኖች ናቸው። "A" እና "B" መለያዎች በተለምዶ በቅደም ተከተል የግራ እና የቀኝ ሞተሮችን ያመለክታሉ። የሞተር ሾፌርዎ ከተለያዩ Arduino ፒኖች ጋር ከተገናኘ እነዚህን መቀየር አለብዎት።
  • የIR ዳሳሽ ፒኖች (rightIR, leftIR)፡ እነዚህ ዲጂታል የግብዓት ፒኖች ከግራ እና ቀኝ የኢንፍራሬድ እንቅፋት ዳሳሾች ምልክቱን ያነባሉ። የ0 እሴት ማለት እንቅፋት (እጅዎ) ተገኝቷል ማለት ሲሆን 1 ማለት መንገዱ ግልጽ ነው ማለት ነው።
  • የአልትራሶኒክ ዳሳሽ ፒኖች (trigPin, echoPin)፡ trigPin አጭር የአልትራሶኒክ ምት የሚልክ ውፅዓት ሲሆን echoPin ርቀትን ለማስላት የተንጸባረቀውን ምት ቆይታ የሚያነብ ግብዓት ነው።

loop() ተግባር ውስጥ፣ ዋናውን የባህሪ አመክንዮ ያገኛሉ። ማስተካከል የሚፈልጉት አንድ ተለዋዋጭ አለ፡

int speed = 150;

ይህ speed ተለዋዋጭ በእንቅስቃሴ ወቅት ወደ ሞተሮች የሚላከውን ኃይል ይቆጣጠራል። ከ0 (የቆመ) እስከ 255 (ከፍተኛ ፍጥነት) ሊደርስ ይችላል። ለፈጠነ መኪና ይህንን እሴት መጨመር (ለምሳሌ ወደ 200) ወይም ለበለጠ ቁጥጥር የሚደረግ ቀርፋፋ እንቅስቃሴ መቀነስ (ለምሳሌ ወደ 100) ይችላሉ።

ኮዱ እንዲሁም moveForward()turnLeft() እና turnRight() የመሳሰሉ ተግባራትን ይዟል። እነዚህ ተግባራት የመኪናውን እንቅስቃሴ ለመቆጣጠር ያገለግላሉ እና በዳሳሽ ንባቦች መሰረት ይጠራሉ። እነሱን መቀየር አያስፈልግዎትም፣ ነገር ግን የራስዎን ብጁ ባህሪዎች ለመፍጠር እንደ ግንባታ ብሎኮች ሊጠቀሙባቸው ይችላሉ።

"እጅዎን ይከተሉ" አመክንዮ እንዴት እንደሚሰራ

የዚህ ፕሮጀክት አስማት የሚገኘው Arduino ከሶስቱ ዳሳሾች የተገኘውን መረጃ እንዴት እንደሚተረጉም ነው። አመክንዮው ቀላል ነው እና በloop() ተግባር ውስጥ ያለማቋረጥ ይከናወናል።

በመጀመሪያ፣ መኪናው በቀጥታ ከፊቱ ያለውን ነገር ርቀት የሚለካው የአልትራሶኒክ ዳሳሽ በመጠቀም ነው። ከዚያም፣ በግራ ወይም በቀኝ በኩል ነገር መኖሩን ለማየት ሁለቱን የኢንፍራሬድ ዳሳሾች ይፈትሻል። የውሳኔ አሰጣጥ ሂደቱ እንደሚከተለው ነው፦

  1. �ቀድም ይሂድ፦ በአልትራሶኒክ ዳሳሽ የሚለካው ርቀት ከ5 ሳ.ሜ በላይ ግን ከ10 ሳ.ሜ በታች ከሆነ፣ መኪናው ወደ ፊት ይሄዳል። ይህ መኪናው እጅዎን የሚከተልበትን "ምርጥ ቦታ" ዞን ይፈጥራል።
  2. ወደ ግራ ዞር፦ ርቀቱ በዚያ ዞን ውስጥ ከሌለ፣ መኪናው የIR ዳሳሾችን ይፈትሻል። የግራ ዳሳሽ ከተዘጋ (እጅዎ በግራ በኩል ከሆነ) እና የቀኝ ዳሳሽ ንጹህ ከሆነ፣ መኪናው ወደ ግራ ይዞራል።
  3. ወደ ቀኝ ዞር፦ በተቃራኒው፣ የቀኝ ዳሳሽ ከተዘጋ እና የግራው ንጹህ ከሆነ፣ መኪናው ወደ ቀኝ ይዞራል።
  4. ቁም፦ ከእነዚህ ሁኔታዎች ውስጥ አንዳቸውም ካልተሟሉ—ለምሳሌ፣ እጅዎ በጣም ሩቅ ወይም በጣም ቅርብ ከሆነ—መኪናው ይቆማል።

ይህ ቀላል የህጎች ስብስብ መኪናው ለእጅዎ አቀማመጥ በተለዋዋጭ ምላሽ እንዲሰጥ ያስችለዋል፣ ይህም ለስላሳ እና ሊታወቅ የሚችል የመከተል ባህሪ ይፈጥራል።

የቀጥታ ፕሮጀክት ማሳያ

በቪዲዮ ማሳያው ውስጥ፣ አስተማሪው የመኪናውን ባህሪ በቅጽበት ያሳያል። የተከታታይ መቆጣጠሪያ (serial monitor) በአልትራሶኒክ ዳሳሽ የተነበበውን ርቀት ለማሳየት ይጠቅማል። መኪናው ስራ ፈት በሚሆንበት ጊዜ እና እጅዎ ሩቅ በሚሆንበት ጊዜ (ለምሳሌ፣ 36 ሳ.ሜ)፣ ቆሞ ይቀራል። እጅዎን ከመኪናው ፊት በ5-10 ሳ.ሜ ዞን ውስጥ እንዳስቀመጡት፣ ወደ ፊት መንቀሳቀስ ይጀምራል።

ማሳያው የመዞር አመክንዮውንም ያጎላል። እጅዎን በመኪናው ግራ በኩል ሲያስቀምጡ፣ የግራ IR ዳሳሽ ይነቃል፣ እና መኪናው ወደ ግራ ይዞራል። በተመሳሳይ፣ እጅዎን በቀኝ በኩል ማስቀመጥ መኪናው ወደ ቀኝ እንዲዞር ያደርጋል። መኪናው እጅዎን ሲያንቀሳቅሱ መከተልዎን ይቀጥላል፣ እጅዎ ከዳሳሽ ክልሉ ሲወገድ ወይም በጣም ቅርብ ሲሆን ብቻ ይቆማል። ይህ የዳሳሽ ውህደት እና አመክንዮ እንደታሰበው እየሰሩ መሆናቸውን ያረጋግጣል፣ ምላሽ ሰጪ እና አስደሳች ፕሮጀክት ይፈጥራል።

ምዕራፎች

  • [00:00] ለእጅ ተከታይ ስማርት መኪና መግቢያ
  • [00:35] ስለ Robojax Arduino ኮርስ እና ኪት
  • [01:41] የፕሮጀክት አጠቃላይ እይታ እና የኮድ ዝግጅት
  • [02:19] የፒን ትርጓሜዎች እና ዝግጅት ማብራሪያ
  • [03:19] እጅዎን ለመከተል የኮድ አመክንዮ
  • [05:48] የመኪናው የቀጥታ ማሳያ በስራ ላይ
  • [07:28] የመጨረሻ ማሳያ እና የአፈጻጸም ግምገማ

ምስሎች

Car 7 8 follow hand
Car 7 8 follow hand
27 SunFounder Car 5 follow hand
27 SunFounder Car 5 follow hand
898-Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
ቋንቋ: C++
/*
Lesson 27/31: Car-5 SunFounder Smart Car Follows Your Hand
Get this code and watch video Download and resource page https://robojax.com/RJT610
YouTube video https://www.youtube.com/watch?v=mcbJlE7-8ro

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

const int trigPin = 3;
const int echoPin = 4;

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);
  
  //ultrasonic
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);
}

void loop() {

  float distance = readSensorData();

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

  if (distance>5 && distance<10){
    moveForward(speed);
  }else if(!left&&right){
    turnLeft(speed);
  }else if(left&&!right){
    turnRight(speed);
  }else{
    stopMove();
  }
}

float readSensorData() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  float distance = pulseIn(echoPin, HIGH) / 58.00; //Equivalent to (340m/s*1us)/2
  return distance;
}

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 turnRight(int speed) {
  analogWrite(A_1B, speed);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, speed);
  analogWrite(B_1A, 0);
}

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

void stopMove() {
  analogWrite(A_1B, 0);
  analogWrite(A_1A, 0);
  analogWrite(B_1B, 0);
  analogWrite(B_1A, 0);
}

እንደሚያስፈልግዎት ይችላል

ምንጮች እና ምንጮች

ፋይሎች📁

Arduino ቤተ መዝገቦች (zip)