Лекција 88: Контролирање на серво мотор со користење на два притисни копчиња
Овој проект демонстрира како да контролирате серво мотор користејќи две копчиња со Arduino. Наместо да се потпирате на потенциометар или сериска команда, можете да користите едноставни тактилни прекинувачи за рачно поместување на серво моторот лево или десно. Ова е исклучително корисно за апликации каде што ви е потребна директна, физичка контрола над механизам, како што се изградба на роботска рака, прилагодување на камера гимбал, или создавање на далечински управуван систем за пан-тилт. Копчињата ви овозможуваат постепено прилагодување на аголот на серво моторот, со можност да го држите копчето за да го движите низ целиот опсег на движење.
Еве неколку практични проекти што можете да ги изградите со оваа поставка:
- Изградба на рачен контролен панел за роботска рака или грабач.
- Создавање на далечински управувана камера лизгалка или пан-тилт глава.
- Развивање на физички контролен интерфејс за кормило на модел на авион или брод.
- Правење на едноставен „teach pendant“ за снимање позиции за CNC машина или 3D печатач.

Хардвер и компоненти
Овој проект бара само неколку основни компоненти, што го прави одлична почетна точка за учење за влезни и излезни уреди со Arduino.
- Arduino плоча (Uno, Nano, Mega, итн.)
- Серво мотор (на пр., SG90 или MG995)
- Две моментални копчиња
- Жици за поврзување
- Breadboard (опционално, но препорачано)
Водич за поврзување
Во видеото, поврзувањето е едноставно. Сигналниот пин на серво моторот е поврзан со PWM-способен пин на Arduino, што е пин 9 во овој пример. Напојувањето и заземјувањето за серво моторот се поврзани со 5V и GND пиновите на Arduino. Двете копчиња се поврзани на сличен начин едно со друго. Едната нога на секое копче е поврзана со заземјување, а другата нога е поврзана со дигитален влезен пин на Arduino (пин 2 за „лево“ копче и пин 3 за „десно“ копче). Кодот користи внатрешни pull-up отпорници, така што не се потребни надворешни отпорници за копчињата. (во видео на 00:57)

Објаснување на кодот
Кодот е дизајниран да биде лесно конфигуриран. Клучните делови што корисникот може да ги прилагоди се на врвот на скицата. Еве преглед на важните променливи и дефиниции што можеби ќе сакате да ги прилагодите за вашиот проект.
#include <Servo.h>
Servo myservo; // создај серво објект за контрола на серво
int servoPin = 9;// овој пин мора да биде еден од оние со PWM ~
int angle =90; // почетен агол за серво
int angleStep =5;
#define LEFT 2 // пин 2 е поврзан со лево копче
#define RIGHT 3 // пин 3 е поврзан со десно копче
servoPin: Оваа променлива го дефинира Arduino пинот на кој е поврзана сигналната жица на серво моторот. Клучно е да користите пин што поддржува Pulse Width Modulation (PWM), обично означен со~симбол на плочата.angle: Ова го поставува почетниот агол на серво моторот кога Arduino стартува. Стандардната вредност е 90 степени, што обично го центрира серво моторот.angleStep: Ова е чекорот со кој аголот на серво моторот се менува секој пат кога ќе се притисне копче. Вредност од 5 значи дека секое притискање ќе го помести серво моторот за 5 степени. Можете да ја зголемите оваа вредност за побрзо движење или да ја намалите за пофина контрола.LEFTиRIGHT: Овие#defineдирективи ги доделуваат дигиталните пинови на кои се поврзани копчињата. Ако ги поврзете копчињата на различни пинови, мора да ги промените овие вредности за да одговараат на вашата поставка.
Основната логика во loop() функцијата проверува дали копче е притиснато (со читање на LOW сигнал поради pull-up конфигурацијата). Ако „десно“ копче е притиснато, ја намалува angle променливата за angleStep. Ако „лево“ копче е притиснато, ја зголемува angle. Кодот вклучува проверки на граници за да осигури дека аголот останува во опсегот од 0 до 180 степени. Функцијата myservo.write(angle) потоа се користи за да му нареди на серво моторот да се движи до новата позиција.
Демонстрација на живиот проект
Во видео демонстрацијата, функционалноста е јасно прикажана. Притискањето и држењето на „лево“ копче предизвикува серво моторот непречено да се движи налево, со зголемување на аголот за 5 степени во исто време, додека не достигне 180 степени и запре. Слично, притискањето и држењето на „десно“ копче го прави серво моторот да се движи надесно, намалувајќи го аголот додека не достигне 0 степени. Тековниот агол се печати на Serial Monitor, што ви овозможува да ја видите точната позиција на серво моторот во реално време. (во видео на 05:20)
Видео поглавја
- [00:00] Вовед во контрола на серво со копчиња
- [00:57] Водич за поврзување на серво и копчиња
- [02:12] Објаснување на кодот, дел 1: Поставување и конфигурација
- [03:25] Објаснување на кодот, дел 2: Главната логика на циклусот
- [05:20] Демонстрација на живиот проект
- [06:23] Заклучок и потенцијални апликации
/*
* S05-05 Servo control with 2 push buttons
* Download and resource page https://robojax.com/RJT764
Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
*
* Written by Ahmad Shamshiri for Robojax.com
* on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
/*
Controlling a servo with two Push buttons with Arduino
when Left push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
when Right push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90; // initial angle for servo
int angleStep =5;
#define LEFT 2 // pin 2 is connected to left button
#define RIGHT 3 // pin 3 is connected to right button
void setup() {
// Servo button demo by Robojax.com
Serial.begin(9600); // setup serial
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
pinMode(LEFT,INPUT_PULLUP); // assign pin 12 ass input for Left button
pinMode(RIGHT,INPUT_PULLUP);// assing pin 2 as input for right button
myservo.write(angle);// send servo to the middle at 90 degrees
Serial.println("Robojax Servo 2 Buttons ");
}
void loop() {
// Servo button demo by Robojax.com
while(digitalRead(RIGHT) == LOW){
if (angle > 0 && angle <= 180) {
angle = angle - angleStep;
if(angle < 0){
angle = 0;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}// while
// Servo button demo by Robojax.com
while(digitalRead(LEFT) == LOW){
// Servo button demo by Robojax.com
if (angle >= 0 && angle <= 180) {
angle = angle + angleStep;
if(angle >180){
angle =180;
}else{
myservo.write(angle); // move the servo to desired angle
Serial.print("Moved to: ");
Serial.print(angle); // print the angle
Serial.println(" degree");
}
}
delay(100); // waits for the servo to get there
}//
}
Работи што можеби ќе ви требаат
-
Amazon
-
Amazon
-
Amazon
-
AmazonServo motor on Amazonamzn.to
-
eBay
Ресурси и референци
Датотеки📁
Други датотеки
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB