ዝርዝር ሁኔታ:

የ Pan-Tilt Multi Servo Control: 11 ደረጃዎች (ከስዕሎች ጋር)
የ Pan-Tilt Multi Servo Control: 11 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የ Pan-Tilt Multi Servo Control: 11 ደረጃዎች (ከስዕሎች ጋር)

ቪዲዮ: የ Pan-Tilt Multi Servo Control: 11 ደረጃዎች (ከስዕሎች ጋር)
ቪዲዮ: Marlin Firmware 2.0.x Explained 2024, ታህሳስ
Anonim
የፓን-ዘንበል ባለብዙ ሰርቪ ቁጥጥር
የፓን-ዘንበል ባለብዙ ሰርቪ ቁጥጥር

በዚህ ማጠናከሪያ ትምህርት ላይ Raspberry Pi ላይ Python ን በመጠቀም ብዙ ሰርጎችን እንዴት እንደሚቆጣጠሩ እንመረምራለን። ግባችን ካሜራ (ፒኢካም) ለማስቀመጥ የ PAN/TILT ዘዴ ይሆናል።

የእኛ የመጨረሻ ፕሮጀክት እንዴት እንደሚሰራ እዚህ ማየት ይችላሉ-

የ Servo መቆጣጠሪያ ቁጥጥር loop ሙከራን ይቆጣጠሩ

ምስል
ምስል

ደረጃ 1 - ቦኤም - የቁሳቁስ ሂሳብ

ዋና ክፍሎች:

  1. Raspberry Pi V3 - US $ 32.00
  2. 5 ሜጋፒክስሎች 1080p ዳሳሽ OV5647 ሚኒ ካሜራ ቪዲዮ ሞዱል - US $ 13.00
  3. TowerPro SG90 9G 180 ዲግሪዎች ማይክሮ Servo (2 X)- የአሜሪካ ዶላር 4.00
  4. ሚኒ ፓን/ ዘንበል ካሜራ መድረክ ፀረ -ንዝረት ካሜራ ተራራ w/ 2 Servos (*) - US $ 8.00
  5. Resistor 1K ohm (2X) - እንደ አማራጭ
  6. ልዩ ልዩ -የብረት ክፍሎች ፣ ባንዶች ፣ ወዘተ (የፓን/ማጋጠሚያ ዘዴዎን ቢገነቡ)

(*) የተሟላ የፓን/ዘንበል መድረክን በ servos መግዛት ወይም የራስዎን መገንባት ይችላሉ።

ደረጃ 2: PWM እንዴት እንደሚሰራ

Raspberry Pi የአናሎግ ውጤት የለውም ፣ ግን እኛ የ PWM (Pulse Width Modulation) አቀራረብን በመጠቀም ይህንን ማስመሰል እንችላለን። እኛ የምናደርገው የቋሚውን ድግግሞሽ ያለው ዲጂታል ሲግናልን ማመንጨት ነው ፣ እኛ የ pulse ባቡር ስፋትን የምንቀይርበት ፣ ከዚህ በታች እንደሚታየው እንደ “አማካይ” የውጤት ቮልቴጅ ደረጃ “የሚተረጎመው”

ምስል
ምስል

ለምሳሌ የ LED ብሩህነትን ለመቆጣጠር ይህንን “አማካይ” የቮልቴጅ ደረጃን መጠቀም እንችላለን-

ምስል
ምስል

እዚህ ላይ አስፈላጊ የሆነው ድግግሞሽ ራሱ አይደለም ፣ ግን “ተረኛ ዑደት” ፣ ያ ጥምጣሞች በማዕበል ጊዜ በተከፈለ “ከፍተኛ” ጊዜ መካከል ያለው ግንኙነት ነው። ለምሳሌ ፣ በአንደኛው Raspberry Pi GPIO ላይ የ 50Hz ምት ድግግሞሽ እናመነጫለን እንበል። ጊዜው (ገጽ) የተደጋጋሚነት ወይም 20ms (1/f) ተገላቢጦሽ ይሆናል። የእኛ ኤልኢዲ (“ግማሽ”) ብሩህ እንዲሆን ከፈለግን የ 50%የግዴታ ዑደት ሊኖረን ይገባል ፣ ያ ማለት ለ 10ms “ከፍተኛ” የሆነ “ምት” ማለት ነው።

ከዚህ በታች እንደሚታየው “የተግባር ዑደት” የአገልጋዩን አቀማመጥ ከገለጸ በኋላ የእኛን ‹servo› አቀማመጥ ለመቆጣጠር ይህ መርህ ለእኛ በጣም አስፈላጊ ይሆናል።

ሰርቮ

ደረጃ 3: HW ን መጫን

Hw ን በመጫን ላይ
Hw ን በመጫን ላይ
Hw ን በመጫን ላይ
Hw ን በመጫን ላይ

አገልጋዮቹ የውሂብ ፒን (በእኔ ሁኔታ ፣ ቢጫ ሽቦቸው) ከ Raspberry Pi GPIO ጋር እንደሚገናኙ ከውጭው 5V አቅርቦት ጋር ይገናኛል።

  • GPIO 17 ==> ያጋደሉ ሰርቮ
  • GPIO 27 ==> ፓን ሰርቮ

ጂኤንዲዎችን አንድ ላይ ማገናኘትዎን አይርሱ ==> Raspberry Pi - Servos - የውጭ የኃይል አቅርቦት)

በ Raspberry Pi GPIO እና በአገልጋይ የውሂብ ግብዓት ፒን መካከል እንደ አማራጭ ፣ የ 1K ohm resistor ሊኖርዎት ይችላል። በ servo ችግር ውስጥ ይህ የእርስዎን አርፒፒ ይጠብቃል።

ደረጃ 4: Servos Calibration

ሰርቮስ መለካት
ሰርቮስ መለካት
ሰርቮስ መለካት
ሰርቮስ መለካት
ሰርቮስ መለካት
ሰርቮስ መለካት

ማድረግ ያለብዎት የመጀመሪያው ነገር የአገልጋዮችዎን ዋና ባህሪዎች ማረጋገጥ ነው። በእኔ ሁኔታ እኔ Power Pro SG90 ን እየተጠቀምኩ ነው።

ከእሱ የውሂብ ሉህ ፣ እኛ ልንመለከተው እንችላለን-

  • ክልል: 180o
  • የኃይል አቅርቦት: 4.8V (ውጫዊ 5VDC እንደ የዩኤስቢ ኃይል አቅርቦት በጥሩ ሁኔታ ይሠራል)
  • የሥራ ድግግሞሽ 50Hz (ክፍለ ጊዜ 20 ሚሴ)
  • የልብ ምት ስፋት - ከ 1ms እስከ 2ms

በንድፈ ሀሳብ ፣ ሰርቪው በእሱ ላይ ይሆናል

  • የውሂብ ተርሚናል 1 ኤም ምት ሲተገበር የመጀመሪያ ቦታ (0 ዲግሪዎች)
  • የውሂብ ተርሚናል ላይ የ 1.5 ሚ.ሜ ምት ሲተገበር ገለልተኛ አቀማመጥ (90 ዲግሪዎች)
  • የውሂብ ተርሚናል ላይ የ 2 ሚ.ሜ ምት ሲተገበር የመጨረሻ ቦታ (180 ዲግሪዎች)

Python ን በመጠቀም የ servo ቦታን መርሃ ግብር ለማዘጋጀት ከላይ ለተዘረዘሩት የሥራ ቦታዎች “ተረኛ ዑደት” የሚለውን ዘጋቢ ማወቅ በጣም አስፈላጊ ይሆናል ፣ እስቲ አንዳንድ ስሌቶችን እናድርግ-

  • የመነሻ አቀማመጥ ==> (0 ዲግሪ) የልብ ስፋት ==> 1ms ==> የግዴታ ዑደት = 1ms/20ms ==> 2.0%
  • ገለልተኛ አቋም (90 ዲግሪ) የ 1.5 ሚ.ሜ ስፋት ስፋት ==> ተረኛ ዑደት = 1.5ms/20ms ==> 7.5%
  • የመጨረሻ ቦታ (180 ዲግሪዎች) የ 2 ሚ.ሜ ስፋት ስፋት ==> የግዴታ ዑደት = 2ms/20ms ==> 10%

ስለዚህ የግዴታ ዑደት ከ 2 እስከ 10 %ባለው ክልል ውስጥ ሊለያይ ይገባል።

እስቲ ሰርዶቹን በተናጠል እንፈትሽ። ለዚያ የ Raspberry ተርሚናልዎን ይክፈቱ እና የ Python 3 editorል አርታዒዎን እንደ “sudo” ያስጀምሩት (ምክንያቱም እርስዎ ከጂፒዮዎች ጋር ለማስተናገድ “እጅግ በጣም ተጠቃሚ” መሆን አለብዎት)

sudo python3

በፓይዘን llል ላይ

>>

የ RPI. GPIO ሞጁሉን ያስመጡ እና GPIO ብለው ይደውሉለት

RPi. GPIO ን እንደ GPIO ያስመጡ

የትኛውን የፒን-ቁጥር መርሃግብሮች (BCM ወይም BOARD) መጠቀም እንደሚፈልጉ ይግለጹ። ይህንን ሙከራ ከቦርድ ጋር አድርጌአለሁ ፣ ስለዚህ የተጠቀምኳቸው ፒኖች አካላዊ ፒን (GPIO 17 = Pin 11 እና GPIO 27 Pin 13) ነበሩ። በፈተናው ወቅት እነሱን ለመለየት እና ስህተቶችን ላለማድረግ ለእኔ ቀላል ነበር (በመጨረሻው ፕሮግራም እኔ BCM ን እጠቀማለሁ)። ከእርስዎ ምርጫ አንዱን ይምረጡ ፦

GPIO.setmode (GPIO. BOARD)

የሚጠቀሙበትን የ servo pin ይግለጹ

tiltPin = 11

በምትኩ ፣ የቢሲኤም መርሃ ግብርን ከተጠቀሙ ፣ የመጨረሻዎቹ 2 ትዕዛዞች በሚከተለው መተካት አለባቸው

GPIO.setmode (GPIO. BCM)

tiltPin = 17

አሁን ፣ ይህ ፒን “ውፅዓት” እንደሚሆን መግለፅ አለብን።

GPIO.setup (tiltPin ፣ GPIO. OUT)

እናም ፣ በዚህ ፒን ላይ የሚፈጠረው ድግግሞሽ ምን ያህል ይሆናል ፣ ለኛ አገልጋዩ 50Hz ይሆናል -

ያጋደለ = GPIO. PWM (tiltPin ፣ 50)

አሁን ፣ ከመጀመሪያው የግዴታ ዑደት ጋር በፒን ላይ የ PWM ምልክት ማመንጨት እንጀምር (እኛ “0” እናስቀምጠዋለን)

ዘንበል = ጀምር (0)

አሁን የአገልጋይዎን እንቅስቃሴ በመመልከት የተለያዩ የግዴታ ዑደት እሴቶችን ማስገባት ይችላሉ። በ 2% እንጀምር እና የሚሆነውን እንይ (ሰርቪው ወደ “ዜሮ አቀማመጥ” ሲሄድ እንመለከታለን)

ያዘንብላል።

በእኔ ሁኔታ ሰርቪው ወደ ዜሮ ቦታ ሄዶ ነበር ግን የግዴታ ዑደቱን ወደ 3% ስቀይር ሰርቪው በተመሳሳይ ቦታ ላይ እንደቆየ አስተዋልኩ ፣ ከ 3% በሚበልጡ የሥራ ዑደቶች መንቀሳቀስ ጀመርኩ። ስለዚህ ፣ 3% የመጀመሪያ ቦታዬ (o ዲግሪዎች) ነው። በ 10%ተመሳሳይ ነበር ፣ የእኔ ሰርቪስ ከዚህ እሴት በላይ ወጣ ፣ መጨረሻውን በ 13%ላይ ጨምሯል። ስለዚህ ለዚህ ልዩ ሰርቪስ ውጤቱ የሚከተለው ነበር

  • 0 ዲግሪ ==> የግዴታ ዑደት 3%
  • 90 ዲግሪ ==> የሥራ ዑደት 8%
  • 180 ዲግሪ ==> የግዴታ ዑደት 13%

ፈተናዎችዎን ከጨረሱ በኋላ PWM ን ማቆም እና GPIOs ን ማጽዳት አለብዎት-

ዘንበል = አቁም ()

GPIO. Cananup ()

ከላይ ያለው ተርሚናል የህትመት ማያ ገጽ ለሁለቱም አገልጋዮቼ ውጤቱን ያሳያል (ተመሳሳይ ውጤት አለው)። የእርስዎ ክልል የተለየ ሊሆን ይችላል።

ደረጃ 5 የ Python ስክሪፕት መፍጠር

የ Python ስክሪፕት መፍጠር
የ Python ስክሪፕት መፍጠር

ወደ የእኛ አገልጋይ ለመላክ የ PWM ትዕዛዞች በመጨረሻው ደረጃ ላይ እንዳየነው በ “ግዴታ ዑደቶች” ውስጥ ናቸው። ነገር ግን አብዛኛውን ጊዜ ሰርቨርን ለመቆጣጠር እንደ መለኪያ እንደ “መለኪያ” በዲግሪዎች መጠቀም አለብን። ስለዚህ ፣ በእኛ ፒ እንደተረዳነው በግብር ዑደት ውስጥ ለእኛ የበለጠ የተፈጥሮ ልኬት የሆነውን “አንግል” መለወጥ አለብን።

እንዴት ማድረግ እንደሚቻል? በጣም ቀላል! የግዴታ ዑደት ክልል ከ 3% ወደ 13% እንደሚሄድ እና ይህ ከ 0 እስከ 180 ዲግሪዎች ከሚሆኑ ማዕዘኖች ጋር እኩል መሆኑን እናውቃለን። እንዲሁም ፣ እነዚያ ልዩነቶች መስመራዊ መሆናቸውን እናውቃለን ፣ ስለዚህ ከላይ እንደሚታየው ተመጣጣኝ መርሃ ግብር መገንባት እንችላለን። ስለዚህ ፣ አንግል ከተሰጠ ፣ ተጓዳኝ የግዴታ ዑደት ሊኖረን ይችላል-

ግዴታ ዑደት = አንግል/18 + 3

ይህንን ቀመር ያስቀምጡ። በሚቀጥለው ኮድ ውስጥ እንጠቀማለን።

ፈተናዎቹን ለማስፈጸም የ Python ስክሪፕት እንፍጠር። በመሠረቱ ፣ ቀደም ሲል በ Python Shell ላይ ያደረግነውን እንደግማለን-

ከጊዜ ወደ ጊዜ እንቅልፍ ያስመጣሉ

RPi. GPIO ን እንደ GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (ሐሰት) def setServoAngle (servo ፣ angle) pwm = GPIO. PWM (servo ፣ 50) pwm.start (8) dutyCycle = angle / 18. + 3. pwm. ChangeDutyCycle (dutyCycle) እንቅልፍ (0.3) pwm.stop () _name_ == '_main_' ከሆነ ፦ sys servo = int (sys.argv [1]) GPIO.setup (servo ፣ GPIO. OUT) setServoAngle (servo, int (sys.argv [2])) GPIO.cleanup ()

ከላይ ያለው ኮድ ዋና ተግባር setServoAngle (servo ፣ angle) ነው። ይህ ተግባር እንደ ክርክሮች ፣ የ servo GPIO ቁጥር እና ሰርቪው መቀመጥ ያለበት ወደ አንግል እሴት ይቀበላል። አንዴ የዚህ ተግባር ግብዓት ‹አንግል› ከሆነ ፣ ከዚህ በፊት የተዘጋጀውን ቀመር በመጠቀም ወደ ተረኛ ዑደት መለወጥ አለብን።

ስክሪፕቱ ሲተገበር እንደ ግቤቶች ፣ servo GPIO እና አንግል ማስገባት አለብዎት።

ለምሳሌ:

sudo python3 angleServoCtrl.py 17 45

ከላይ ያለው ትእዛዝ በ GPIO 17 ላይ የተገናኘውን ሰርቪስ በ “ከፍታ” ከ 45 ዲግሪዎች ጋር ያስቀምጣል። ተመሳሳይ ትእዛዝ ለፓን ሰርቮ ቁጥጥር (በ “አዚሙት” ውስጥ እስከ 45 ዲግሪዎች ድረስ) ሊያገለግል ይችላል-

sudo python angleServoCtrl.py 27 45

የፋይሉ አንግልServoCtrl.py ከኔ GitHub ማውረድ ይችላል

ደረጃ 6 የፓን ዘንበል ሜካኒዝም

የፓን-ዘንበል ሜካኒዝም
የፓን-ዘንበል ሜካኒዝም

የ “ፓን” ሰርቪው ካሜራችንን (“አዚሙዝ አንግል”) እና “ዘንበል” ሰርጎችን “በአቀባዊ” (ከፍታ አንግል) ያንቀሳቅሰዋል።

ከታች ያለው ስዕል የፓን/ማጋጠሚያ ዘዴ እንዴት እንደሚሰራ ያሳያል

ምስል
ምስል

በእድገታችን ወቅት ወደ “ጽንፍ” አንሄድም እና የእኛን የፓን/ዘንበል ዘዴ ከ 30 እስከ 150 ዲግሪ ብቻ እንጠቀማለን። ይህ ክልል በካሜራ ለመጠቀም በቂ ይሆናል።

ደረጃ 7 - የፓን ዘንበል ሜካኒዝም - መካኒካል ግንባታ

የፓን ዘንበል ሜካኒዝም - መካኒካል ግንባታ
የፓን ዘንበል ሜካኒዝም - መካኒካል ግንባታ
የፓን ዘንበል ሜካኒዝም - መካኒካል ግንባታ
የፓን ዘንበል ሜካኒዝም - መካኒካል ግንባታ
የፓን -ዘንበል ሜካኒዝም - መካኒካል ግንባታ
የፓን -ዘንበል ሜካኒዝም - መካኒካል ግንባታ

እስቲ አሁን የእኛን 2 ሰርዶዎች እንደ ፓን/ዘንበል ዘዴ እንሰብስብ። እዚህ 2 ነገሮችን ማድረግ ይችላሉ። በመጨረሻው ደረጃ ላይ እንደሚታየው የ Pan-Tilt መድረክ ዘዴን ይግዙ ወይም እንደ ፍላጎቶችዎ የራስዎን ይገንቡ።

ከላይ በፎቶዎች ላይ እንደሚታየው አንድ ምሳሌ እኔ የሠራሁት ፣ ሰርጎችን እርስ በእርስ ብቻ በማሰር እና ከድሮ አሻንጉሊቶች ትናንሽ የብረት ቁርጥራጮችን በመጠቀም ነው።

ደረጃ 8 የኤሌክትሪክ ፓን/ዘንበል ስብሰባ

የኤሌክትሪክ ፓን/ዘንበል ስብሰባ
የኤሌክትሪክ ፓን/ዘንበል ስብሰባ
የኤሌክትሪክ ፓን/ዘንበል ስብሰባ
የኤሌክትሪክ ፓን/ዘንበል ስብሰባ
የኤሌክትሪክ ፓን/ዘንበል ስብሰባ
የኤሌክትሪክ ፓን/ዘንበል ስብሰባ
የኤሌክትሪክ ፓን/ዘንበል ስብሰባ
የኤሌክትሪክ ፓን/ዘንበል ስብሰባ

አንዴ የፓን/ዘንበል ዘዴዎ ከተሰበሰበ በኋላ ለሙሉ የኤሌክትሪክ ግንኙነት ፎቶዎቹን ይከተሉ።

  1. የእርስዎን Pi ያጥፉት።
  2. ሁሉንም የኤሌክትሪክ ግንኙነቶች ያድርጉ።
  3. ሁለቴ ይፈትሹት።
  4. መጀመሪያ በእርስዎ ፒ ላይ ኃይል ያድርጉ።
  5. ሁሉም ነገር ደህና ከሆነ ፣ አገልጋዮችዎን ያብሩ።

ካሜራውን እንዴት ማዋቀር እንደሚቻል በዚህ ትምህርት ላይ አንመረምርም ፣ ይህ በሚቀጥለው መማሪያ ላይ ይብራራል።

ደረጃ 9 የ Python ስክሪፕት

ሁለቱንም አገልጋዮች በአንድ ጊዜ ለመቆጣጠር የ Python ስክሪፕት እንፍጠር።

ከጊዜ ወደ ጊዜ እንቅልፍ ያስመጣሉ

RPi.) # ግራጫ ==> የ PAN def setServoAngle (servo ፣ angle): አንግል አንግል> = 30 እና አንግል 90 (መካከለኛ ነጥብ) ==> 150 setServoAngle (tilt, int (sys.argv [2])) # 30 ==> 90 (መካከለኛ ነጥብ) ==> 150 ጂፒአይ.ፅዳት ()

ስክሪፕቱ በሚፈፀምበት ጊዜ እንደ መለኪያዎች ፣ የፓን አንግል እና የታጠፈ አንግል ማስገባት አለብዎት። ለምሳሌ:

sudo python3 servoCtrl.py 45 120

ከላይ ያለው ትዕዛዝ የፓን/ማጋጠሚያ ዘዴን በ ‹‹Azimuth›› (የፓን አንግል) እና በ ‹120› ደረጃ (ከፍ ያለ አንግል) በ 120 ዲግሪዎች ያስቀምጣል። ምንም መመዘኛዎች ካልገቡ ፣ ነባሪው ሁለቱም ፣ የፓን እና የማጋጠሚያ ማዕዘኖች እስከ 90 ዲግሪዎች እንደሚሆኑ ልብ ይበሉ።

ከዚህ በታች አንዳንድ ሙከራዎችን ማየት ይችላሉ-

ምስል
ምስል

የ servoCtrl.py ፋይል ከእኔ GitHub ማውረድ ይችላል።

ደረጃ 10 - የአገልጋዮች loop ሙከራ

ሙሉውን የ servos ክልል በራስ -ሰር ለመሞከር አሁን የ Python ስክሪፕት እንፍጠር።

ከጊዜ ወደ ጊዜ እንቅልፍ ያስመጣሉ

RPi.) # ግራጫ ==> የ PAN def setServoAngle (servo ፣ angle): አንግል አንግል> = 30 እና አንግል <= 150 pwm = GPIO. PWM (servo ፣ 50) pwm.start (8) dutyCycle = angle / 18. + 3። pwm. ChangeDutyCycle (dutyCycle) እንቅልፍ (0.3) pwm.stop () _name_ == '_main_': በክልል ውስጥ ለ (30 ፣ 160 ፣ 15) - setServoAngle (pan, i) setServoAngle (tilt, i) ለ i ክልል (150 ፣ 30 ፣ -15) ፦ setServoAngle (pan, i) setServoAngle (tilt, i) setServoAngle (pan, 100) setServoAngle (tilt, 90) GPIO.cleanup ()

ፕሮግራሙ በሁለቱም ማዕዘኖች ከ 30 እስከ 150 ዲግሪዎች በራስ -ሰር አንድ ዙር ያከናውናል።

ከውጤቱ በታች -

ቀደም ሲል እንደተገለፀው የ PWM ንድፈ ሃሳቡን ለማሳየት አንድ oscilloscope ን ብቻ አገናኘሁ።

ምስል
ምስል

ከላይ ያለው ኮድ ፣ servoTest.py ከ GitHub ማውረድ ይችላል።

ደረጃ 11 መደምደሚያ

መደምደሚያ
መደምደሚያ

እንደተለመደው ፣ ይህ ፕሮጀክት ሌሎች ወደ አስደሳች የኤሌክትሮኒክስ ዓለም እንዲገቡ ይረዳቸዋል ብዬ ተስፋ አደርጋለሁ!

ለዝርዝሮች እና ለመጨረሻ ኮድ ፣ እባክዎን የ GitHub ማስቀመጫዬን ይጎብኙ-RPi-Pan-Tilt-Servo-Control

ለተጨማሪ ፕሮጄክቶች እባክዎን የእኔን ብሎግ ይጎብኙ - MJRoBot.org

ከሚቀጥለው ትምህርቴ ፍንጭ በታች -

ምስል
ምስል

ሳሉዶስ ከደቡብ ዓለም!

በሚቀጥለው አስተማሪዬ ውስጥ እንገናኝ!

አመሰግናለሁ, ማርሴሎ

የሚመከር: