Мазмұны:
- 1 -қадам: Қажетті компоненттер
- 2 -қадам: Жолдар мен ортаны орнату
- 3 -қадам: GiggleBot орнату
- 4 -қадам: Тюнерді орнату (қашықтан басқару)
- 5 -қадам: GiggleBot -ты реттеу
- 6 -қадам: GiggleBot NeoPixels өшірілген кезде жұмыс істеу
- 7 -қадам: GiggleBot неопиксель қосылған күйде жүгіру
Бейне: GiggleBot желісінің ізбасарын реттеу - Жетілдірілген: 7 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
Бұл өте қысқа нұсқаулықтарда сіз өзіңіздің GiggleBot -ты қара сызықпен жүруге реттейсіз. Бұл басқа GiggleBot Line Follower оқулығында біз осы сценарий бойынша жұмыс істеу үшін баптау мәндерін қатаң кодтадық. Сіз басқа пайда табу арқылы оны жақсы ұстауды қалауыңыз мүмкін.
Бұл оқулықта біз сізге BBC -дің әр түрлі микро: биттеріне жүктеуге болатын 2 сценарийді көрсетеміз, осылайша олардың біреуі GiggleBot -қа қойылады, ал екіншісімен мәзірден өтіп, әр түрлі күйге келтіру үшін 2 түйме қолданылады. параметрлер. Бұл жаңартылған параметрлерді жіберу радио арқылы жүзеге асады.
1 -қадам: Қажетті компоненттер
Сізге мыналар қажет болады:
- Микро: битке арналған GiggleBot роботы.
- x3 AA батареялары
- x2 BBC микро: биттері - біреуі GiggleBot үшін, екіншісі параметрлерді реттеу үшін пульт ретінде әрекет етеді.
- BBC micro: bit үшін батарея - BBC micro: bit пакетіндегі батарея сияқты.
BBC micro: bit үшін GiggleBot роботын алыңыз
2 -қадам: Жолдар мен ортаны орнату
Сіз сондай -ақ тректерді құрастыруыңыз керек (плиткаларды жүктеу, басып шығару, қиып алу және таспалау), содан кейін ортаны орнату (IDE және жұмыс уақыты).
Бұл оқулық GiggleBot Line Follower деп аталатын басқа оқулықпен өте байланысты болғандықтан, сол жерге барып, 2 және 3 -қадамдарды орындап, содан кейін осында оралыңыз.
IDE -ге келетін болсақ, сіз Mu редакторын қолдана аласыз және жұмыс уақыты үшін сізге GiggleBot MicroPython жұмыс уақытын жүктеу қажет. Жұмыс уақытын оның құжаттамасынан мына жерден жүктеуге болады. Құжаттардың «Жұмысты бастау» тарауына өтіңіз және ортаны орнату бойынша нұсқауларды орындаңыз. Осы сәтте жұмыс уақытының v0.4.0 нұсқасы қолданылады.
3 -қадам: GiggleBot орнату
GiggleBot жұмыс уақытын жыпылықтамас бұрын, GiggleBot үшін қажетті жылдамдық пен жаңарту жылдамдығын таңдағаныңызға көз жеткізіңіз: әдепкі бойынша жылдамдық 100 (base_speed айнымалысы) және жаңарту жиілігі 70 (update_rate айнымалысы) болып орнатылады.
Ағымдағы іске асыруды ескере отырып, қол жеткізуге болатын жаңартудың ең жоғары жылдамдығы - 70, ал егер run_neopixels True мәніне орнатылса, онда тек 50 -ге қол жеткізуге болады. Осылайша, сіз әдепкі жаңарту жылдамдығы BBC micro: bit жасай алатын нәрсенің шетінде деп айта аласыз.
Жазу үшін, жолды бақылайтын сенсор жаңартуларды секундына 100 рет қайтара алады.
Ескерту: Келесі сценарийде бос орындар болмауы мүмкін және бұл GitHub Gists көрсетудегі кейбір мәселелерге байланысты. Сізді GitHub бетіне апару үшін түйінді басыңыз, онда кодты көшіріп қоюға болады.
GiggleBot PID Line Follower Tuner (реттеу үшін қашықтан басқару пульті қажет) - xjfls23
микробит импортынан* |
gigglebot импортынан* |
Уақыт бойынша sleep_ms, ticks_us импорттау |
радио импорттау |
импорттық құрылыс |
# радио мен ГБ неопиксельдерін инициализациялау |
radio.on () |
нео = init () |
# уақыт |
update_rate = 70 |
# әдепкі кіріс мәндері |
Кп = 0,0 |
Ки = 0,0 |
Kd = 0,0 |
белгіленген нүкте = 0,5 |
trigger_point = 0,0 |
min_speed_percent = 0,2 |
базалық_жылдамдық = 100 |
last_position = белгіленген нүкте |
интеграл = 0,0 |
run_neopixels = жалған |
center_pixel = 5# мұнда күлімсіреудің орталық пиксельі ГБ -да орналасқан |
# көгілдір = корпус (карта (lambda x: int (x / 5), (64, 224, 208)))) # қате неопиксельдермен сурет салу үшін қолданылатын түс |
# көгілдір = (12, 44, 41) # дәл жоғарыда көрсетілген көгілдір осыны түсіндірді |
error_width_per_pixel = 0.5/3# максималды қате әр неопиксель арасындағы сегменттер санына бөлінеді |
defupper_bound_linear_speed_reducer (абс -қате, іске қосу нүктесі, жоғарғы_байланысты, ең кіші_қозғалтқыш_күші, ең жоғары_қозғалтқыш_қуаты): |
жаһандық базалық_жылдамдық |
егер abs_error> = trigger_point: |
# x0 = 0,0 |
# y0 = 0,0 |
# x1 = жоғарғы_байланыс - триггер_ нүктесі |
# y1 = 1.0 |
# x = abs_error - іске қосу нүктесі |
# y = y0 + (x - x0) * (y1 - y0) / (x1 - x0) |
# сияқты |
y = (abs_error - іске қосу нүктесі) / (жоғарғы_байланысты - іске қосу_ нүктесі) |
мотор қуаты = негізгі жылдамдық * (ең кіші_қозғалтқыш + (1- у) * (ең жоғарғы_моторлықуат - ең кіші_моторлықуат)) |
моторлық қуатты қайтару |
басқа: |
жылдамдықтың жоғарғы жылдамдығын қайтару * ең жоғары_моторлы күш |
іске қосу = жалған |
алдыңғы_қате = 0 |
total_time = 0,0 |
total_counts = 0 |
whileTrue: |
# егер а түймесі басылса, орындауды бастаңыз |
егер button_a.is_pressed (): |
run = True |
# бірақ егер b түймесі басылса, жолды жалғастырушыны тоқтатыңыз |
егер button_b.is_pressed (): |
іске қосу = жалған |
интеграл = 0,0 |
алдыңғы_қате = 0,0 |
display.scroll ('{} - {}'. форматы (total_time, total_counts), кідіріс = 100, күту = жалған) |
total_time = 0,0 |
total_counts = 0 |
pixel_off () |
Тоқта() |
ұйқы (500) |
егер іске қосу isTrue: |
# сызық сенсорларын оқу |
start_time = ticks_us () |
# қашықтан басқару пультімен Kp/Kd табыстарын жаңартқанымызды тексеріңіз |
тырысу: |
Kp, Ki, Kd, trigger_point, min_speed_percent = ustruct.unpack ('fffff', radio.receive_bytes ()) |
set_eyes () |
exceptTypeError: |
өту |
оң, сол = оқу_сенсоры (LINE_SENSOR, BOTH) |
позиция <0,5 болғанда # сызық сол жақта |
позиция> 0,5 болғанда # сызық оң жақта |
позиция = 0,5 болғанда # жол ортасында болады |
# бұл орташа арифметикалық орташа мән |
тырысу: |
позиция = оңға /қалқуға (солға + оңға) |
ZeroDivisionError қоспағанда: |
позиция = 0,5 |
егер позиция == 0: позиция = 0,001 |
егер позиция == 1: позиция = 0,999 |
# PD контроллерін қолданыңыз |
қате = позиция - белгіленген нүкте |
интеграл += қате |
түзету = Kp * қате + Ki * интеграл + Kd * (қате - алдыңғы_қате) |
previous_error = қате |
# қозғалтқыш жылдамдығын есептеңіз |
motor_speed = жоғарғы_байланысты_сызықтық_редуктор (абс (қате), белгіленген нүкте * триггер_ нүктесі, белгіленген нүкте, мин_жылдамдық_файыз, 1,0) |
leftMotorSpeed = motor_speed + түзету |
rightMotorSpeed = motor_speed - түзету |
# GiggleBot қай бағытта жүру керектігін көрсету үшін неопиксельдерді жарықтандырыңыз |
егер run_neopixels isTrueand total_counts %3 == 0 болса: |
i inb '\ x00 / x01 / x02 / x03 / x04 / x05 / x06 / x07 / x08' үшін: |
нео = (0, 0, 0) |
i inb '\ x00 / x01 / x02 / x03' үшін: |
ifabs (қате)> error_width_per_pixel * i: |
егер қате <0: |
нео [center_pixel + i] = (12, 44, 41) |
басқа: |
нео [center_pixel - i] = (12, 44, 41) |
басқа: |
пайыз = 1- (error_width_per_pixel * i -abs (error)) / error_width_per_pixel |
# ағымдағы пиксельді жарықтандырыңыз |
егер қате <0: |
# нео [center_pixel + i] = кортеж (карта (lambda x: int (x * пайыз), көгілдір)) |
нео [center_pixel + i] = (int (12* пайыз), int (44* пайыз), int (41* пайыз)) |
басқа: |
# нео [center_pixel - i] = кортеж (карта (lambda x: int (x * пайыз), көгілдір))) |
нео [center_pixel - i] = (int (12* пайыз), int (44* пайыз), int (41* пайыз)) |
үзіліс |
neo.show () |
тырысу: |
# қозғалтқыштарды қысыңыз |
leftMotorSpeed> 100 болса: |
leftMotorSpeed = 100 |
rightMotorSpeed = rightMotorSpeed - leftMotorSpeed +100 |
rightMotorSpeed> 100 болса: |
rightMotorSpeed = 100 |
leftMotorSpeed = leftMotorSpeed - rightMotorSpeed +100 |
Егер leftMotorSpeed <-100: |
leftMotorSpeed = -100 |
егер rightMotorSpeed <-100: |
rightMotorSpeed = -100 |
# қозғалтқышты іске қосыңыз |
set_speed (leftMotorSpeed, rightMotorSpeed) |
жүргізу () |
# басып шығару ((қате, мотор жылдамдығы)) |
қоспағанда: |
# біз шешілмейтін мәселеге тап болған жағдайда |
өту |
# және цикл жиілігін сақтаңыз |
end_time = ticks_us () |
delay_diff = (end_time - start_time) /1000 |
total_time += кешігу_айырмасы |
Total_counts += 1 |
if1.0/ update_rate - delay_diff> 0: |
ұйқы (1.0/ update_rate - delay_diff) |
rawgigglebot_line_follower_tuner.py файлын GitHub ұсынған ❤ арқылы қараңыз
4 -қадам: Тюнерді орнату (қашықтан басқару)
Келесі нәрсе - жұмыс уақыты + сценарийін BBC -дің 2 -ші микро: битіне жіберу. Бұл екінші micro: bit келесі параметрлерді реттеу үшін қолданылатын GiggleBot қашықтан басқару құралы ретінде әрекет етеді:
- Kp = PID контроллері үшін пропорционалды пайда.
- Ki = PID контроллері үшін интегралды пайда.
- Kd = PID контроллері үшін туынды кіріс.
- trigger_point = GiggleBot -тың минималды және максималды жылдамдықтарының арасындағы пайызбен көрсетілген нүкте, онда жылдамдық ең төменгі жылдамдыққа жеткенше сызықтық түрде төмендей бастайды.
- min_speed_percent = максималды жылдамдықтың пайызбен көрсетілген ең төменгі жылдамдық.
Реттеуге болатын қалған 2 айнымалылар GiggleBot -та орналасқан сценарийде тікелей қатаң кодталған: update_rate және base_speed, ол максималды жылдамдықты білдіреді. Құжаттамада сипатталғандай, GiggleBot үшін орнатылатын максималды жылдамдық 100, бұл біздің GiggleBot үшін әдепкі мән болып табылады.
Ескерту: Келесі сценарийде бос орындар болмауы мүмкін және бұл GitHub Gists көрсетудегі кейбір мәселелерге байланысты. Сізді GitHub бетіне апару үшін түйінді басыңыз, онда кодты көшіріп қоюға болады.
GiggleBot қашықтағы PID желісінің ізбасары тюнері (басқа бөлікті қажет етеді) - xjfls23
микробит импортынан* |
sleep_ms импорттау уақытынан |
радио импорттау |
импорттық құрылыс |
# 1 -ші элемент - Kp өсімі |
# 2 -ші элемент - бұл Ki ұтысы |
№3 элемент - Kd өсімі |
# 4 -ші элемент -қозғалтқыштардың жылдамдықты төмендететін триггер_ нүктесі (0 -> 1) |
№5 элемент -пайызбен көрсетілген қозғалтқыштардың минималды жылдамдығы (0 -> 1) |
табыс = [0.0, 0.0, 0.0, 1.0, 0.0] |
stepSize = 0.1 |
1 -ші элемент үшін # 0 және 1 |
2 -ші элемент үшін №2 және 3 |
currentSetting = 0 |
defshowMenu (): |
display.scroll ('{} - {}'. форматы (currentSetting, пайда [int (currentSetting /2)])), кешігу = 100, күту = Жалған) |
radio.on () |
showMenu () |
whileTrue: |
жаңартылған = жалған |
егер button_a.is_pressed (): |
currentSetting = (currentSetting +1) % (2*5) |
жаңартылған = Дұрыс |
егер button_b.is_pressed (): |
егер currentSetting %2 == 0: |
ағымдағы параметр 0 немесе 2 немесе.. болған кезде # пайданың жоғарылауы. |
ifint (currentSetting /2) [0, 2] ішінде: |
пайда [int (currentSetting /2)] += 10* stepSize |
басқа: |
пайда [int (currentSetting /2)] += stepSize |
басқа: |
ағымдағы параметр 1 немесе 3 немесе.. болған кезде # пайданың жоғарылауы. |
ifint (currentSetting /2) [0, 2] ішінде: |
пайда [int (currentSetting /2)] -= 10* stepSize |
басқа: |
пайда [int (currentSetting /2)] -= stepSize |
radio.send_bytes (ustruct.pack ('fffff', *пайда)) |
жаңартылған = Дұрыс |
жаңартылған жағдайда: |
showMenu () |
ұйқы (200) |
rawgigglebot_line_follower_configurator.py файлын GitHub ❤ арқылы орналастыруды қарау
5 -қадам: GiggleBot -ты реттеу
GiggleBot -ты жолға қойыңыз, қосыңыз және іске қосыңыз. Бұл арада сіз оны үнемі жолға қойып, басқа BBC микро: битінде қолда бар параметрлерді реттеуге тура келеді.
GiggleBot -ты іске қосу үшін GiggleBot -тың BBC микро: А түймесін басыңыз және оны тоқтатыңыз, осылайша күйін қалпына келтіріңіз, В түймесін басыңыз.
Қашықтағы BBC микро: битінде А түймешігін басу сізге мәзірдегі барлық опцияларды көрсетеді және В түймесі сәйкес мәнді жоғарылатады/төмендетеді. Бұл сағатты ескі көліктің бақылау тақтасына орнату сияқты. Опциялар келесідей:
- 0-1 нұсқалары Kp өсуіне арналған.
- Ки алу үшін 2-3 нұсқа бар.
- Kd жоғарылауы үшін 4-5 нұсқа бар.
- Қозғалтқыштар баяулай бастайтын уақытқа белгіленген нүктені орнатудың 6-7 нұсқасы бар.
- 8-9 опциялар ең төменгі жылдамдықты орнатуға арналған.
Есіңізде болсын, мәзірдегі жұп сандар сәйкес мәндерді көбейтуге арналған, ал тақ сандар үшін керісінше.
Сондай -ақ, GiggleBot -тың BBC микро: битіндегі B түймесін басқанда, сіз оның неопикселден жасалған экранында соңғы қалпына келтіруден кейінгі миллисекундтардың санын және робот өткен циклдердің санын көресіз - осы 2 көмегімен есептеуге болады роботтың жаңартылу жылдамдығы.
Соңында және ең бастысы, мен GiggleBot үшін 2 тюнинг ойлап таптым. Олардың біреуі неопиксельді светодиодтар өшірілген кезде, екіншісі басқаша. Неопиксельді жарық диодтары қатенің қай бағытта жинақталғанын көрсету үшін қолданылады.
Параметрлерді баптаудың бірінші жиынтығы (NeoPixel светодиодтары өшірілгенде)
- Кп = 32.0
- Ки = 0,5
- Kd = 80.0
- trigger_setpoint = 0.3 (бұл 30%)
- min_speed_percent = 0,2 (бұл 20%)
- base_speed = 100 (максималды жылдамдық)
- update_rate = 70 (70Гц жұмыс істейді)
Параметрлерді баптаудың екінші жиынтығы (NeoPixel жарық диодтары қосулы)
- Кп = 25.0
- Ки = 0,5
- Кд = 35.0
- trigger_setpoint = 0.3 (бұл 30%)
- min_speed_percent = 0.3 (бұл 30%)
- base_speed = 70 (максималды жылдамдық)
- update_rate = 50 (50Гц жұмыс істейді)
- Сонымен қатар, run_neopixels айнымалы мәнін GiggleBot -тың BBC микро: битіне жүктелетін сценарийде True деп орнату керек. Бұл NeoPixel светодиодтарын жыпылықтайды, олар қатенің қай бағытта жиналатынын көрсетеді.
6 -қадам: GiggleBot NeoPixels өшірілген кезде жұмыс істеу
Бұл GiggleBot -ты алдыңғы қадамда табылған 1 -баптау параметрлерімен іске қосудың мысалы. Бұл мысалда NeoPixel жарық диодтары өшірілген.
7 -қадам: GiggleBot неопиксель қосылған күйде жүгіру
Бұл 5 -қадамда табылған баптау параметрлерінің 2 -ші жиынтығымен GiggleBot -ті іске қосудың мысалы. Бұл мысалда NeoPixel жарық диодтары қосылған.
Назар аударыңыз, бұл мысалда GiggleBot сызықты ұстану қиынға соғады - себебі неопиксельді жарық диодтары BBC micro: bit процессорының уақытын «жейді». Сондықтан жаңарту жылдамдығын 70 -тен 50 -ге дейін төмендетуге тура келді.
Ұсынылған:
Телефонмен басқарылатын батпырауық желісінің парабирі: 11 қадам
Телефонмен басқарылатын батпырауық желісінің парабеарлы тамшысы: Кіріспе Бұл нұсқаулықта батпырауық желісінен үш парабирге дейін түсіретін құрылғыны құру әдісі сипатталған. Құрылғы телефонға немесе планшетке веб -бетті жеткізетін сымсыз кіру нүктесі қызметін атқарады. Бұл парабеардың түсуін басқаруға мүмкіндік береді
Android телефонының зарядтағышына арналған электр желісінің сүзгісін құру және құру: 5 қадам
Android телефонының зарядтағышына арналған электр желісінің сүзгісін құру және құру: Бұл нұсқаулықта мен стандартты USB -ді шағын USB сымына қалай алу керектігін көрсетемін, оны ортасынан ажыратып, шамадан тыс шуды төмендететін сүзгі тізбегін енгіземін. әдеттегі андроид қуат көзімен шығарылатын хэш. Менде портативті м бар
Телефон желісінің қарапайым декодерін DTMF қалай жасауға болады: 3 қадам
Қарапайым DTMF телефондық декодерін қалай жасауға болады: бұл DTMF сигналдарын кез келген телефон желісінде декодтауға мүмкіндік беретін қарапайым жоба. Бұл оқулықта біз MT8870D декодерін қолданамыз. Біз алдын ала орнатылған тон декодерін қолданамыз, себебі, сеніңіз, мұны
Үй желісінің температура сенсоры: 7 қадам
Үй желісінің температура сенсоры: Бұл жобаны орындау үшін сіз нені білуіңіз керек: Сіз білуіңіз керек: - Электрониканың кейбір дағдылары (дәнекерлеу) - Linux - Arduino IDE (сізге IDE -де қосымша тақталарды жаңарту қажет болады: http: // arduino.esp8266.com/stable/package_esp8266 …) - жаңартылған
Arduino көмегімен жол ізбасарын қалай жасауға болады: 8 қадам (суреттермен)
Arduino көмегімен желілік ізбасарды қалай құруға болады: Егер сіз робототехниканы қолдана бастасаңыз, жаңадан бастаған алғашқы жобаның бірі желі ізбасарын қамтиды. Әдетте қара түсті және фонға қарама -қарсы сызық бойымен жүруге болатын арнайы ойыншық машина. Жұлдызды алайық