Tafuta Msimbo

Kozi Somo la 8 kati ya 10: Gari Mahiri la Raspberry Pi Pico – Somo la 8: Motor ya Servo na Kufuata Kitu

Denna lektion är en del av: Raspberry Pi Pico 4WD Smart Gari

Kozi Somo la 8 kati ya 10: Gari Mahiri la Raspberry Pi Pico – Somo la 8: Motor ya Servo na Kufuata Kitu

Somo hili kutoka kwenye kozi ya Raspberry Pi Pico Smart Car ya Robojax linachunguza utendakazi wa motor ya servo na jinsi ya kuitumia kuunda roboti inayofuata kitu au "kufuata mkono wako". Mradi huu unaenda zaidi ya udhibiti rahisi wa motor, kuonyesha jinsi ya kuchanganya sensor ya ultrasonic inayoendeshwa na servo na mantiki ya kisasa ya Python kuunda gari ambalo hutafuta na kufuata kitu ndani ya eneo lake. Hii ni dhana ya msingi katika robotiki, inayokuwezesha kujenga miradi shirikishi kama roboti inayomfuata mtu, mnyama kipenzi mwerevu anayecheza mpira, au kamera ya usalama inayojitegemea inayofuatilia mwendo. Somo pia linashughulikia mradi wa pili, rahisi zaidi: gari ambalo hukaribia kiotomatiki, kusukuma, na kurudi nyuma kutoka kwa vitu ndani ya eneo maalum la umbali.

pi_pico_4WD_follow-hand

Vifaa na Sehemu

Mradi huu unategemea kit cha gari cha SunFounder Raspberry Pi Pico 4WD. Sehemu muhimu zinazotumiwa katika somo hili ni:

  • Bodi ya Raspberry Pi Pico
  • Chasi ya Smart Car 4WD yenye motors
  • Motor ya servo (ikiwezekana servo ya gear ya chuma kwa uimara)
  • Sensor ya umbali ya ultrasonic (HC-SR04)
  • Bodi ya kiendeshaji cha motor (sehemu ya kit cha gari)
  • LED ya RGB (kwa maoni ya kuona)
  • Chanzo cha nguvu (kifurushi cha betri kwa gari)
PICOBOARDWHITEANGLE2_1200x857

Motor ya servo ni kiini cha utendakazi wa somo hili. Tofauti na motor ya kawaida ya DC inayozunguka kwa kuendelea, motor ya servo imeundwa kuzunguka na kushikilia nafasi maalum ya angular, kwa kawaida kati ya digrii 0 na 180. Hii inafanya kuwa bora kwa kulenga sensor ya ultrasonic kwa usahihi. Ubora wa servo mara nyingi huamuliwa na nyenzo ya gear yake (plastiki dhidi ya chuma) na torque yake, ambayo huamua nguvu na uimara wake.

Jinsi Inavyofanya Kazi

Chati ifuatayo inaeleza jinsi msimbo unavyofanya kazi. 

pi_pico_4WD_follow-hand_flow_chart

Mwongozo wa Uunganishaji

Uunganishaji wa somo hili ni rahisi, kwani unajenga juu ya kit cha gari kilichokusanywa tayari. Uunganishaji muhimu ni motor ya servo, ambayo lazima iunganishwe kwenye pini maalum ya GPIO kwenye Pico.

Katika video, mwalimu anauunganisha servo kwenye pini namba 18 kwenye Raspberry Pi Pico. Sensor ya ultrasonic imewekwa juu ya pembe ya servo, ikiruhusu kuzungushwa kushoto na kulia kuchunguza eneo. Uunganishaji mwingine wa motors, RGB LED, na nguvu unachukuliwa kuwa umeunganishwa tayari kutoka masomo ya awali ya kozi.

Kwa mwongozo wa kina wa kuona, tafadhali rejelea mchoro wa uunganishaji hapa chini.

Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction

Maelezo ya Msimbo

Msimbo wa Python wa somo hili umejengwa kuzunguka maktaba maalum ya pico_4wd, ambayo hurahisisha mwingiliano tata wa vifaa. Sehemu zinazoweza kusanidiwa na mtumiaji ziko juu ya hati na hudhibiti tabia ya gari.

Hapa kuna vigezo muhimu unavyoweza kurekebisha kubinafsisha tabia ya roboti yako ya "kufuata mkono":

  • car.RADAR_REFERENCE = 25: Hii ni umbali wa juu katika sentimita ambao sensor itaona. Kitu chochote zaidi ya umbali huu kinapuuzwa. Unaweza kuongeza hii kufanya gari kuwa nyeti zaidi au kuipunguza kuhitaji kitu kilicho karibu zaidi.
  • car.RADAR_MAX_ANGLE = 45 & car.RADAR_MIN_ANGLE = -45: Hizi zinafafanua pembe za kushoto kabisa (45) na kulia kabisa (-45) ambazo servo itachunguza. Hii inaunda uwanja wa mtazamo wa digrii 90 mbele ya gari.
  • car.RADAR_STEP_ANGLE = 10: Hii ni nyongeza (kwa digrii) ambayo servo hutumia kusonga kati ya pointi za uchunguzi. Hatua ndogo (k.m., 5) inatoa mwonekano bora zaidi lakini inachukua muda mrefu kukamilisha uchunguzi kamili. Hatua kubwa (k.m., 15) inachunguza haraka lakini kwa usahihi wa chini.
  • MOTOR_FORWARD_POWER = 40: Hii inaweka nguvu ya motor (0-100) inayotumiwa wakati gari linasonga mbele kuelekea kitu kilichogunduliwa. Rekebisha hii kubadilisha kasi ya kufuata ya gari.
  • MOTOR_TURNING_POWER = 40: Hii inaweka nguvu ya motor inayotumiwa wakati gari linageuka kukabiliana na kitu. Thamani ya juu itafanya gari kugeuka kwa nguvu zaidi.

Mantiki kuu ya kazi ya main() ni kitanzi cha kuendelea. Kwanza inaita car.radar_scan(), ambayo inarudisha mfuatano wa '1' na '0' unaowakilisha kama kitu kiligunduliwa katika kila pembe ya uchunguzi ('1' inamaanisha kitu kiko ndani ya umbali wa kumbukumbu). Msimbo kisha unachambua mfuatano huu kupata kundi kubwa zaidi la '1' zinazofuatana, ambalo linaonyesha katikati ya kitu kilichogunduliwa. Kulingana na mahali katikati hii ilipo katika uwanja wa uchunguzi, gari linaamriwa kugeuka kushoto, kugeuka kulia, au kusonga mbele kujipanga na kitu na kulifuata.

Maonyesho ya Moja kwa Moja ya Mradi

Video hii inatoa mwongozo wazi wa mradi ukifanya kazi. Mwalimu kwanza anaendesha script ya majaribio kuonyesha jinsi motor ya servo inavyoweza kusongezwa kwa pembe sahihi kama 90, 0, na -90 digrii. Hii ni muhimu kwa kuelewa upeo wa servo na kwa kuweka sensor ya ultrasonic kwa usahihi.

Baada ya kuweka sensor, kipengele cha "kufuata mkono" kinaonyeshwa. Mwalimu anaposogeza mkono wake mbele ya gari, sensor iliyowekwa kwenye servo inachanganua kushoto na kulia. Mantiki ya gari inachakata data ya sensor na kugeuza magurudumu kuielekeza kwenye mkono unaogunduliwa, na hivyo kuufuata kwenye sakafu. Mwongozo huu unaangazia jinsi gari linavyoweza kufuatilia kitu kinaposogea na kurekebisha mwelekeo wake ipasavyo. Mradi wa pili pia unaonyeshwa, ambapo gari limepangwa kukaribia na kusukuma kitu ikiwa kitagunduliwa kati ya sentimita 10 na 20, na kurudi nyuma ikiwa kitu kiko karibu sana (chini ya sentimita 10).

Mambo Muhimu ya Kujifunza

Somo hili ni utangulizi bora wa kutumia motor za servo kuunda tabia za robotiki zinazoingiliana. Kwa kuchanganya servo na sensor ya umbali, unaweza kujenga roboti yenye "hisia ya kuona" inayoweza kufuatilia na kujibu mazingira yake kikamilifu. Uwezo wa kurekebisha vigezo kama pembe za uchanganuzi, ukubwa wa hatua, na nguvu ya motor unaruhusu udhibiti wa kina juu ya tabia ya roboti, ambayo ni ujuzi muhimu kwa mradi wowote wa robotiki.

Sura

  • [00:00] Utangulizi wa Motor ya Servo na Kufuata Kitu
  • [01:48] Vipengele na Uwezo wa Seti ya Kozi
  • [03:08] Kuelewa Uendeshaji wa Motor ya Servo
  • [06:08] Kujaribu Motor ya Servo kwa Msimbo wa Python
  • [09:59] Kuelezea Kipengele cha "Kufuata Mkono"
  • [10:49] Kuonyesha Utendaji wa "Kufuata Mkono"
  • [15:37] Mradi: Kusukuma Kitu na Kurudi Nyuma
  • [18:40] Mwongozo wa Mradi wa Kusukuma Kitu
  • [19:25] Hitimisho na Hatua Zinazofuata

Bilder

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
Språk: 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()

Resurser och referenser

Inga resurser än.

Filer📁

Inga filer tillgängliga.