Search Code

Контрола на сервомотор со Arduino користејќи потенциометар

Контрола на сервомотор со Arduino користејќи потенциометар

Во оваа туторијал, ќе истражуваме како да контролираме сервомотор користејќи потенциометар со Arduino. Целта е да создадеме едноставен круг каде што позицијата на сервото се прилагодува врз основа на ротацијата на потенциометарот. До крајот на овој проект, ќе имате работен модел кој мазно варира под аголот на сервото од 0 до 180 степени додека го вртење потенциометарот. Ова е одличен начин да се разберат основите на аналогниот влез и контрола на сервото во Arduino.

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

Објаснување на хардверот

Во овој проект, главните компоненти се Arduino платката, серво моторот и потенциометарот. Arduino е мозокот на операцијата, обработувајќи влезови и контролирајќи излези. Серво моторот е оној што физички ќе се движи врз основа на командите што ги добива од Arduino. Потенциометарот може да биде од 1k ома до 1M ома и им овозможува на корисниците да обезбедат променлив влез што се преведува во движење на серво.

Серво моторот работи со примање на PWM (Модулација на ширина на пулс) сигнал кој укажува на посакуваната позиција. Потенциометарот, кога ќе се сврти, ја менува својата отпорност, која ја чита Arduino како аналогно напон. Серво моторот работи со 5V. Не работи со 3.3V. Овој напон потоа се мапира на опсегот на движење на серво моторот, овозможувајќи глатко движење од 0 степени до 180 степени.

Технички податоци за SG90 серво мотор

ПроизводителПаралакс
Број на деловиSG90
Логика/IO напон5 V
Напон на напојување4.8-6 V
Излезна струја (по канал)~500 мА
Пиков тековен (по канал)1 А
Упатство за PWM фреквенција50 Hz
Влезни логички прагови0.5 V (ниско), 2.5 V (високо)
Напонска пад / RДС(вкл)/ заситеност0.5 V при 500 mA
Термални ограничувања0°C до 60°C
ПакетСтандард 9г серво
Забелешки / варијантиЧесто се користи во RC апликации

  • Осигурајте дека сервото не ја надминува својата максимална струјна оценка.
  • Користете топлински разменувач ако сервото работи континуирано под високи оптоварувања.
  • Поврзете го потенциометарот на аналоген пин за точни мерења.
  • Внимавајте на времето на PWM сигналот за контрола на сервото.
  • Проверете го опсегот на движење на серво за да избегнете физички пречки.

Инструкции за поврзување

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor

За оваа конфигурација, ќе треба да ги поврзете компонентите на следниов начин:

Поврзете ја средната пин на потенциометарот (брисач) на аналогниот пин на Ардуиното.A0. Другите две игли на потенциометарот треба да бидат поврзани со5VиGNDна Arduino. За серво моторот, поврзете го црвениот жица на5V, црниот жица наGND, и жолтата или белата жица на дигитален пин9на Arduino. Оваа распоредба му овозможува на потенциометарот да обезбеди аналоген влез на Arduino, кој ќе ја контролира позицијата на серво моторот врз основа на тој влез.

Проверете ги сите врски и осигурајте се дека сервото не е блокирано во својот опсег на движење. Ако користите различен модел на Arduino, потврдете дека доделувањето на пиновите за аналогниот влез и излезот на сервото е компатибилно.

Примери на код и водич

Подолу е извадок од кодот кој ја иницира серво моторот и ја чита вредноста на потенциометарот:


#include 

Servo myservo;  // create servo object to control a servo
int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

Во овој код, вклучуваме библиотека Servo и создававме објект на серво нареченmyservo. Серво-то е прикачено на пин9, што ни овозможува да го контролираме користејќи ја оваа игла.


void loop() {
  int sensorValue = analogRead(A0);  // read the potentiometer
  pos = map(sensorValue, 0, 1023, 0, 180);  // map to servo position
  myservo.write(pos);  // move servo to position
  delay(15);  // waits 15ms for the servo to reach the position
}

Во функцијата за петља, го читаме вредноста на потенциометарот од пинA0и да го мапи од неговиот опсег (0-1023) на опсегот на серво моторот (0-180 степени). Тhemyservo.write(pos)командата потоа го поместува серво моторот на посакуваната позиција врз основа на ротацијата на потенциометарот.

Демонстрација / Што да очекувате

Кога ќе го стартувате овој програм, треба да видите како серво моторот глатко се движи од 0 до 180 степени додека го вртење потенциометарот. Ако серво моторот не се движи како што се очекува, проверете ја жичената инсталација и осигурајте се дека потенциометарот функционира правилно. Дополнително, осигурајте се дека Ардуиното е правилно напојувано и дека кодот е пренесен без грешки. Можете да очекувате да видите како серво моторот ја одразува позицијата на потенциометарот во реално време (во видеото на 02:00).

Видеозаписи

  • 00:00- Вовед во проектот
  • 01:30- Објаснување за поставување на хардверот
  • 03:45- Упатства за жици
  • 05:00- Процес на преглед на кодот
  • 07:30- Демонстрација на завршениот проект

Images

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor
11-Controlling a servo position using a potentiometer using Arduino
Language: C++
/**
*Original source: Arduino IDE
* Arduino Project: Controlling the servo position
* This code is used with a video tutorial for Robojax.com
* Published on April 24, 2017, from Ajax, ON, Canada.
* Written/Edited by Ahmad Shamshiri
* Watch the video on YouTube: https://youtu.be/kZ9b31gVemc
* View tutorial page for this code https://robojax.com/RJT8
* Controlling a servo position using a potentiometer (variable resistor)
*/



#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

Resources & references

No resources yet.

Files📁

Datasheet (pdf)