Пребарување код

Лекција 18/31: Користење на серво мотор со Arduino SunFounder-овиот Arduino комплет

Лекција 18/31: Користење на серво мотор со Arduino SunFounder-овиот Arduino комплет

Серво моторите се работни коњи на безброј роботика и проекти со далечинско управување, обезбедувајќи прецизна аголна контрола за сè, од механизми за управување до роботски раце. Овој водич, заснован на Лекција 18 од курсот SunFounder Arduino Kit, ќе ве прошета низ основите на користење серво мотор со Arduino. Ќе научите како да ги поврзете хардверот и да ја контролирате позицијата на моторот користејќи два различни методи: едноставно движење на бришење и позиција контролирана со копче. Знаењето што ќе го стекнете овде е високо практично и може да се примени на широк опсег на проекти, вклучувајќи:

  • Изградба на роботска рака што може да фаќа и движи предмети со прецизност.
  • Креирање автомобил или брод со далечинско управување со серво за управување.
  • Развивање соларен тракер што го следи сонцето за да ја максимизира колекцијата на енергија.
  • Конструирање панорама-наклон камера држач за надзор или фотографија.
  • Автоматизирање на контролните површини на модел авион, како кормилото или елероните.

Преглед на хардвер

Пред да нурнете во кодот, важно е да го разберете самиот серво мотор. Како што е демонстрирано во видеото, серво моторот не се врти континуирано како стандарден DC мотор. Наместо тоа, тој ротира до специфична аголна позиција, обично помеѓу 0 и 180 степени. Ова го прави идеален за апликации што бараат прецизно движење. Видеото истакнува неколку примери, од управување со RC автомобил до контролирање на сложените зглобови на роботска рака (во видео на 00:06).

Серво моторите доаѓаат во различни големини, при што физичката големина и оценката на вртежниот момент ја одредуваат нивната цена и примена. Мал микро серво е совршен за лесни модели, додека поголем, помоќен серво е потребен за потешки задачи како управување со „многу моќен или дебел автомобил“ (во видео на 01:59).

Повеќето хоби серво имаат три жици сместени во стандарден конектор. Видеото објаснува паметен дизајн избор: средната жица е секогаш жицата за напојување (VCC), обично 5V. Ова е безбедносна карактеристика што го штити уредот од неточна поларизација ако конекторот е приклучен наназад (во видео на 03:27). Другите две жици се за земја (GND) и контролниот сигнал.

Водич за жици

Servo-wiring_bb
Servo-pot_wiring

Поврзувањето на сервото со вашиот Arduino е едноставно. Видеото обезбедува јасна демонстрација на врските (во видео на 04:48). Трите пина на серво конекторот се поврзани со Arduino на следниов начин:

  • Сигнална жица (често портокалова или жолта): Поврзете ја оваа на дигитален PWM пин на Arduino. Примерот користи пин 9.
  • Жица за напојување (често црвена): Поврзете ја оваа на 5V пинот на Arduino.
  • Жица за земја (често кафеава или црна): Поврзете ја оваа на еден од GND пиновите на Arduino.

Во видеото, презентерот користи машки-на-машки DuPont скокачки жици за да го поврзе женскиот конектор на сервото со пиновите на Arduino (во видео на 05:23).

Програма 1: Контролирање на серво мотор (Sweep)

Оваа прва програма е класичниот пример „sweep“. Таа е дизајнирана да го демонстрира целосниот опсег на движење на сервото со движење напред и назад помеѓу 0 и 180 степени. Ова е одличен начин да потврдите дека вашите жици се точни и да го видите вашето серво во акција. Видеото демонстрира поставување на овој код и гледање на сервото како се движи напред и назад (во видео на 09:21).

За да го контролирате сервото, кодот прво ја вклучува вградената библиотека Servo.h, што го поедноставува процесот на генерирање на потребните контролни сигнали. Потоа креирате серво објект и му давате име, како myservo. Во функцијата setup(), го прикачувате овој објект на специфичен пин користејќи myservo.attach(9), кажувајќи му на Arduino дека сигналната жица на сервото е поврзана на пин 9.

Магијата се случува во функцијата loop(), што користи две for јамки за движење на сервото. Првата јамка ја зголемува променливата за позиција pos од 0 до 180, движејќи го сервото еден степен истовремено. Втората јамка го прави спротивното, намалувајќи го pos од 180 назад до 0. Клучниот дел е delay(15) на крајот од секоја итерација на јамката. Оваа пауза му дава на сервото доволно време физички да се движи до новата позиција пред да се испрати следната команда. Без оваа пауза, сервото не би можело да биде во чекор и би заглавило или треперело (во видео на 12:31).

Овој пример е совршен за учење, но во реална апликација, веројатно ќе сакате да го поставите сервото на специфичен агол. Како што е прикажано во видеото, можете да го модифицирате кодот со замена на for јамките со една команда како myservo.write(90) за да го движите сервото на 90 степени и да го држите таму (во видео на 10:09).

Програма 2: Контролирање на серво мотор (Knob)

Оваа втора програма ја зема контролата на сервото чекор понатаму со воведување потенциометар (копче) за да обезбеди контрола во реално време, рачна контрола над позицијата на сервото. Ова е фантастичен начин да разберете како аналогниот влез може да се преведе во прецизно физичко движење.

Оваа програма се надоврзува на претходната со додавање потенциометар. Потенциометарот е променлив отпорник кој делува како аналоген разделувач на напон. Кога ја вртите рачката, тој ја менува вредноста на напонот на неговиот излезен пин. Arduino го чита овој напон користејќи аналогно-дигитален конвертор (ADC) на еден од неговите аналогни пинови, претворајќи го во вредност помеѓу 0 и 1023.

Клучот за оваа програма е функцијата map(). Оваа функција ја скалира вредноста од еден опсег во друг. Во овој случај, се користи за претворање на суровата вредност на потенциометарот (0 до 1023) во вредност соодветна за сервото (0 до 180 степени). Кодот ја чита вредноста на потенциометарот со analogRead(potpin), ја скалира со map(val, 0, 1023, 0, 180), а потоа ја испраќа таа скалирана вредност до сервото со myservo.write(val). Ова создава директна врска каде што вртењето на рачката до нејзината средна точка ќе го позиционира сервото на 90 степени, и така натаму.

Овој метод на контрола е многу интуитивен и е основа за многу интерфејси помеѓу човек и машина, од едноставни далечински управувачи до сложени роботски контролери.

Демонстрација на проектот во живо

Видеото обезбедува демонстрација во живо на двете програми во акција. За програмата за движење (sweep), можете да видите како рачката на сервото се движи непречено од 0 до 180 степени и назад. Водителот исто така покажува како прилагодувањето на големината на чекорот во for јамката (на пример, од 1 степен на 20 степени) и времето на пауза ја менуваат однесувањето на сервото, правејќи го движењето побрзо, но помалку непречено (во видеото на 11:19).

За програмата со рачката, демонстрацијата покажува како вртењето на потенциометарот директно ја контролира позицијата на сервото во реално време. Оваа визуелна повратна информација е одлична за разбирање на врската помеѓу аналогниот влез и физичкиот излез.

Поглавја

  • [00:00] Вовед во серво мотори
  • [01:07] Примени на серво мотори
  • [02:57] Анатомија на серво мотор
  • [04:48] Поврзување на сервото со Arduino
  • [06:06] Истражување на примерокот код за движење (Sweep)
  • [09:21] Демонстрација на програмата за движење
  • [10:04] Поставување прилагоден агол на сервото
  • [11:19] Модифицирање на брзината и големината на чекорот на движењето
  • [13:15] Пример за друг серво мотор

Слики

SG90_servo_motor-1
SG90_servo_motor-1
SG90 servo
SG90 servo
Servo-pot_wiring
Servo-pot_wiring
Servo-wiring_bb
Servo-wiring_bb
914-Lesson 18/31: Controlling servo motor (sweep)
Јазик: C++
This code has not been parsed yet. Please return to the admin panel to parse it.
915-Lesson 18/31: Controlling servo motor (knob)
Јазик: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

Ресурси и референци

Датотеки📁

Arduino библиотеки (zip)