ኮድ ይፈልጉ

ኮርስ ትምህርት 8 ከ10: Raspberry Pi Pico ስማርት መኪና – ትምህርት 8: ሰርቮ ሞተር እና ነገር መከተል

ይህ ትምህርት ከ: Raspberry Pi Pico 4WD ስማርት መኪና

ኮርስ ትምህርት 8 ከ10: Raspberry Pi Pico ስማርት መኪና – ትምህርት 8: ሰርቮ ሞተር እና ነገር መከተል

ይህ ትምህርት ከሮቦጃክስ የ Raspberry Pi Pico Smart Car ኮርስ የሰርቮ ሞተርን ተግባር እና እቃን የሚከተል ወይም "እጅህን የሚከተል" ሮቦት ለመፍጠር እንዴት መጠቀም እንደሚቻል ይዳስሳል። ፕሮጀክቱ ከቀላል የሞተር ቁጥጥር ባለፈ በሰርቮ የሚነዳ የአልትራሶኒክ ዳሳሽ ከብልህ የፓይቶን አመክንዮ ጋር በማጣመር በክልሉ ውስጥ ያለን እቃ በንቃት የሚፈልግ እና የሚከተል መኪና መፍጠርን ያሳያል። ይህ በሮቦቲክስ ውስጥ መሰረታዊ ፅንሰ-ሀሳብ ነው፣ ይህም ሰውን የሚከተል ሮቦት፣ ኳስ የሚጫወት ብልህ የቤት እንስሳ፣ ወይም እንቅስቃሴን የሚከታተል ራሱን የቻለ የደህንነት ካሜራ የመሳሰሉ በይነተገናኝ ፕሮጀክቶችን እንድትገነቡ ያስችላችኋል። ትምህርቱ ሁለተኛ፣ ቀላል ፕሮጀክትንም ይሸፍናል፡ በተወሰነ የርቀት ክልል ውስጥ ወደሚገኙ እቃዎች በራሱ የሚቀርብ፣ የሚገፋ እና የሚመለስ መኪና።

pi_pico_4WD_follow-hand

ሃርድዌር እና ክፍሎች

ይህ ፕሮጀክት በ SunFounder Raspberry Pi Pico 4WD መኪና ኪት ላይ የተመሰረተ ነው። በዚህ ትምህርት ውስጥ ጥቅም ላይ የዋሉ ቁልፍ ክፍሎች የሚከተሉት ናቸው፡

  • Raspberry Pi Pico ቦርድ
  • 4WD Smart Car ቻሲስ ከሞተሮች ጋር
  • ሰርቮ ሞተር (በተለይ ለጥንካሬ የብረት ጊር ሰርቮ)
  • የአልትራሶኒክ ርቀት ዳሳሽ (HC-SR04)
  • የሞተር አሽከርካሪ ቦርድ (የመኪና ኪት አካል)
  • RGB LED (ለእይታ ግብረመልስ)
  • የኃይል ምንጭ (ለመኪናው የባትሪ ማህደር)
PICOBOARDWHITEANGLE2_1200x857

ሰርቮ ሞተር የዚህ ትምህርት ተግባር እምብርት ነው። ያለማቋረጥ ከሚሽከረከረው መደበኛ የዲሲ ሞተር በተለየ፣ ሰርቮ ሞተር የተወሰነ የማዕዘን ቦታን፣ በተለይም ከ0 እስከ 180 ዲግሪ፣ ለመዞር እና ለመያዝ የተነደፈ ነው። ይህ የአልትራሶኒክ ዳሳሹን በትክክል ለማነጣጠር ፍጹም ያደርገዋል። የሰርቮ ጥራት ብዙውን ጊዜ የሚወሰነው በጊር ቁሳቁሱ (ፕላስቲክ እና ብረት) እና በቶርክ ነው፣ ይህም ጥንካሬውን እና ጠበኝነቱን ይወስናል።

እንዴት እንደሚሰራ

ከታች ያለው ገበታ ኮዱ እንዴት እንደሚሰራ ያስረዳል። 

pi_pico_4WD_follow-hand_flow_chart

የወልና መመሪያ

የዚህ ትምህርት ወልና ቀላል ነው፣ ምክንያቱም ቀድሞ በተሰበሰበው የመኪና ኪት ላይ ይገነባል። ወሳኙ ግንኙነት ሰርቮ ሞተሩ ነው፣ እሱም በ Pico ላይ ካለ የተወሰነ GPIO ፒን ጋር መገናኘት አለበት።

በቪዲዮው ውስጥ፣ አስተማሪው ሰርቮውን በ Raspberry Pi Pico ላይ ካለው ፒን ቁጥር 18 ጋር ያገናኛል። የአልትራሶኒክ ዳሳሹ በሰርቮ ቀንድ ላይ ተጭኗል፣ ይህም አካባቢውን ለመቃኘት ወደ ግራ እና ቀኝ እንዲሽከረከር ያስችለዋል። የተቀሩት የሞተሮች፣ RGB LED እና የኃይል ግንኙነቶች ከቀዳሚ ትምህርቶች አስቀድመው የተገናኙ እንደሆኑ ይታሰባል።

ለዝርዝር የእይታ መመሪያ፣ እባክዎ ከታች ያለውን የወልና ሥዕላዊ መግለጫ ይመልከቱ።

Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction

የኮድ ማብራሪያ

የዚህ ትምህርት የፓይቶን ኮድ ውስብስብ የሃርድዌር መስተጋብርን ቀላል በሚያደርግ ብጁ pico_4wd ቤተ-መጻሕፍት ዙሪያ የተገነባ ነው። በተጠቃሚ ሊዋቀሩ የሚችሉ ክፍሎች በስክሪፕቱ አናት ላይ ይገኛሉ እና የመኪናውን ባህሪ ይቆጣጠራሉ።

የሮቦትዎን "እጅን የመከተል" ባህሪ ለማበጀት ሊያስተካክሏቸው የሚችሏቸው ቁልፍ ተለዋዋጮች እነዚሁ ናቸው፡

  • car.RADAR_REFERENCE = 25: ይህ ዳሳሹ "የሚያየው" ከፍተኛው ርቀት በሴንቲሜትር ነው። ከዚህ ርቀት በላይ ያለ ማንኛውም እቃ ችላ ይባላል። መኪናውን የበለጠ ስሜታዊ ለማድረግ ሊጨምሩት ወይም የበለጠ ቅርብ እቃ ለማስፈለግ ሊቀንሱት ይችላሉ።
  • car.RADAR_MAX_ANGLE = 45 & car.RADAR_MIN_ANGLE = -45: እነዚህ ሰርቮው የሚቃኝባቸውን የግራኝ (45) እና የቀኝኛ (-45) ማዕዘኖች ይገልጻሉ። ይህ በመኪናው ፊት ለፊት የ90 ዲግሪ የእይታ መስክ ይፈጥራል።
  • car.RADAR_STEP_ANGLE = 10: ይህ ሰርቮው በመቃኝያ ነጥቦች መካከል ለመንቀሳቀስ የሚጠቀምበት ጭማሪ (በዲግሪ) ነው። ትንሽ እርምጃ (ለምሳሌ 5) የተሻለ ጥራት ይሰጣል ነገር ግን ሙሉ ቅኝት ለማጠናቀቅ ብዙ ጊዜ ይወስዳል። ትልቅ እርምጃ (ለምሳሌ 15) በፍጥነት ይቃኛል ነገር ግን በዝቅተኛ ትክክለኛነት።
  • MOTOR_FORWARD_POWER = 40: ይህ መኪናው ወደተገኘው እቃ ወደፊት በሚንቀሳቀስበት ጊዜ ጥቅም ላይ የሚውለውን የሞተር ኃይል (0-100) ያዘጋጃል። የመኪናውን የማሳደድ ፍጥነት ለመቀየር ይህን ያስተካክሉ።
  • MOTOR_TURNING_POWER = 40: ይህ መኪናው እቃውን ለመጋፈጥ በሚዞርበት ጊዜ ጥቅም ላይ የሚውለውን የሞተር ኃይል ያዘጋጃል። ከፍ ያለ እሴት መኪናው በበለጠ ኃይል እንዲዞር ያደርጋል።

main() ተግባር ዋና አመክንዮ ቀጣይነት ያለው ዑደት ነው። በመጀመሪያ car.radar_scan() ይጠራል፣ ይህም በእ প্রতিটি የመቃኝያ ማዕዘን ላይ እቃ መገኘቱን ወይም አለመገኘቱን የሚወክሉ የ'1' እና '0' ሕብረቁምፊ ይመልሳል ('1' ማለት እቃ በማጣቀሻ ርቀቱ ውስጥ አለ ማለት ነው)። ኮዱ ከዚያም ይህን ሕብረቁምፊ በመተንተን ትልቁን ተከታታይ የ'1' ቡድን ያገኛል፣ ይህም የተገኘውን እቃ መሃል ያመለክታል። ይህ መሃል በመቃኝያ መስኩ ውስጥ ባለበት ቦታ ላይ በመመስረት፣ መኪናው ከእቃው ጋር ለመሰለፍ እና ለመከተል ወደ ግራ እንዲዞር፣ ወደ ቀኝ እንዲዞር፣ ወይም ወደፊት እንዲሄድ ይታዘዛል።

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

ቪዲዮው የፕሮጀክቱን ተግባራዊ ሁኔታ በግልጽ ያሳያል። አስተማሪው መጀመሪያ የሙከራ ስክሪፕት ያሂዳል፣ ይህም የሰርቮ ሞተሩ እንደ 90፣ 0 እና -90 ዲግሪ ወደመሳሰሉ ትክክለኛ ማዕዘኖች እንዴት እንደሚንቀሳቀስ ለማሳየት ነው። ይህ የሰርቮውን ክልል ለመረዳት እና የአልትራሳውንድ ዳሳሹን በትክክል ለመጫን ወሳኝ ነው።

ዳሳሹን ከጫኑ በኋላ፣ የ"እጅን መከተል" ባህሪው ይታያል። አስተማሪው እጁን በመኪናው ፊት ሲያንቀሳቅስ፣ በሰርቮ ላይ የተገጠመው ዳሳሽ ወደ ግራ እና ቀኝ ይቃኛል። የመኪናው አመክንዮ የዳሳሹን መረጃ በማስኬድ መንኮራኩሮቹን ያዞራል፣ ወደተገኘው እጅ አቅጣጫ ለመምራት፣ በውጤቱም መሬት ላይ እየተንቀሳቀሰ ይከተለዋል። ማሳያው መኪናው እቃን ሲንቀሳቀስ እንዴት እንደሚከታተል እና አቅጣጫውን እንደሚያስተካክል ያጎላል። ሁለተኛ ፕሮጀክትም ይታያል፣ መኪናው ከ10 እስከ 20 ሴንቲሜትር ርቀት ላይ እቃ ከተገኘ ወደ እሱ ቀርቦ የሚገፋበት፣ እቃው በጣም ከተጠጋ (ከ10 ሴንቲሜትር በታች) ወደ ኋላ የሚመለስበት ፕሮግራም ተዘጋጅቷል።

ቁልፍ ትምህርቶች

ይህ ትምህርት ሰርቮ ሞተሮችን በመጠቀም በይነተገናኝ ሮቦቲክ ባህሪያትን ለመፍጠር እጅግ በጣም ጥሩ መግቢያ ነው። ሰርቮን ከርቀት ዳሳሽ ጋር በማጣመር፣ "የማየት ስሜት" ያለው ሮቦት መገንባት ይችላሉ፣ ይህም አካባቢውን በንቃት የሚከታተል እና ምላሽ የሚሰጥ ነው። እንደ የቃኝ ማዕዘኖች፣ የደረጃ መጠን እና የሞተር ኃይል ያሉ መለኪያዎችን የማስተካከል ችሎታ በሮቦቱ ባህሪ ላይ ጥቃቅን ቁጥጥር ለማድረግ ያስችላል፣ ይህም ለማንኛውም የሮቦቲክስ ፕሮጀክት ወሳኝ ችሎታ ነው።

ምዕራፎች

  • [00:00] የሰርቮ ሞተር እና የእቃ መከታተል መግቢያ
  • [01:48] የኮርስ ኪት ባህሪያት እና አቅሞች
  • [03:08] የሰርቮ ሞተር አሠራርን መረዳት
  • [06:08] ሰርቮ ሞተርን በፓይዘን ኮድ መሞከር
  • [09:59] የ"እጅን መከተል" ባህሪን ማብራራት
  • [10:49] የ"እጅን መከተል" ተግባርን ማሳየት
  • [15:37] ፕሮጀክት፡ እቃን መግፋት እና ወደ ኋላ መመለስ
  • [18:40] የእቃ መግፋት ፕሮጀክት ማሳያ
  • [19:25] ማጠቃለያ እና ቀጣይ እርምጃዎች

ምስሎች

pico-4wd_main
pico-4wd_main
PICOBOARDWHITEANGLE2_1200x857
PICOBOARDWHITEANGLE2_1200x857
pi_pico_4WD_follow-hand
pi_pico_4WD_follow-hand
pi_pico_4WD_follow-hand_flow_chart
pi_pico_4WD_follow-hand_flow_chart
Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction
Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction
905-Lesson 8/10 Pi Pico 4WD card Python code: follow hand
ቋንቋ: C++
# Lesson 8/10 Pi Car Pico 4WD: Follow hand
# Download and resource page https://robojax.com/RJT630

import pico_4wd as car

car.RADAR_REFERENCE = 25
car.RADAR_MAX_ANGLE = 45
car.RADAR_MIN_ANGLE = -45
car.RADAR_STEP_ANGLE = 10
MOTOR_FORWARD_POWER = 40
MOTOR_TURNING_POWER = 40

def main():
    while True:
        radar_data = car.radar_scan()
        if isinstance(radar_data, int):
            continue
        radar_data = [str(i) for i in radar_data]
        radar_data = "".join(radar_data)
        paths = radar_data.split("1")
        length_list = []
        for path in paths:
            length_list.append(len(path))
        if max(length_list) == 0:
            car.move("stop") 
        else:
            i = length_list.index(max(length_list))
            pos = radar_data.index(paths[i])
            pos += (len(paths[i]) - 1) / 2
            delta = len(radar_data) / 3
            if pos < delta:
                car.move("right", MOTOR_TURNING_POWER)
            elif pos > 2 * delta:
                car.move("left", MOTOR_TURNING_POWER)
            else:
                #if radar_data[int(len(radar_data)/2-1)] == "0":
                #    car.move("stop")
                #else:
                car.move("forward", MOTOR_FORWARD_POWER)

try:
    main()
finally:
    car.move("stop")
    car.set_light_off()

ምንጮች እና ምንጮች

አሁን ምንም ምንጮች የለም።

ፋይሎች📁

አንድ ፋይል የለም።