Как подключить потенциометр к моторчику
Перейти к содержимому

Как подключить потенциометр к моторчику

  • автор:

Как подключить потенциометр к моторчику

Коротко о том с чего все началось. Однажды появилась потребность в демонстрационном столике или как еще его называют вращающийся столик. Покупать готовый не стал в связи с тем что жалко портить новый, да и к тому же столики имеющиеся в продаже по некоторым характеристикам не подходят для моих целей. Для этой цели решил использовать Arduino и шаговый двигатель в связи с тем что он может вращаться на низких скоростях что и требуется для этой цели.

Если у вас возникнут вопросы по данной теме то вы можете их задать в комментариях под видео в YouTube перейдя по этой ссылке www.youtube.com/Мастер Колотушкин

1 шаг. Что понадобится для проекта:

Arduino UNO 1 штука.

USB кабель для подключения Arduino UNO к компьютеру 1 штука и конечно же сам компьютер с установленным приложением Arduino IDE

Униполярный шаговый двигатель 28BYJ-48 5V на 5 вольт и драйвер к нему на базе микросхемы ULN2003 который обычно идет в комплекте с шаговым двигателем, 1 комплект.

Соединительные провода мама мама для подключения линий питания 2 штуки.

Соединительные провода папа мама для подключения управляющих электрических цепей 4 штуки.

Потенциометр с сопротивлением от 3 до 50 киллоом 1 штука, с заранее припаяными проводами типа папа. Зеленый подпаян к средней ноге потенциометра!

2 шаг. Подключить Arduino UNO к компьютеру с помощью кабеля.

3 шаг. Запустить приложение Arduino IDE (подойдет любая версия).

4 шаг. Открыть скетч (прошивка для Arduino) Файл/ Примеры/ Stepper/ stepper_speedControl.

Если у вас по какой-то причине отсутствует данный скетч то вы можете его скопировать с окна ниже и вставить в чистое поле приложения ArduinoIDE. После чего можно приступать к 5 шагу.

//Начало скетча stepper_speedControl 1 Копировать этот код

//Конец скетча stepper_speedControl 1

А если у вас не оказалось библиотеки Stepper, то можете воспользоваться скетчем ниже, который работает без библиотек.

//Начало скетча stepper_speedControl 2 Копировать этот код

//Конец скетча stepper_speedControl 2

5 шаг. Если вы как и я решили использовать плату Arduino UNO то во вкладке Инструменты/Плата: выберите пункт Arduino/Genuino Uno который обведен красным на фото ниже.

6 шаг. Во вкладке Инструменты выбрать порт к которому подключена плата Arduino в моем случае это COM11 у вас может быть другой, то есть у меня галочка должна стоять на против COM11.

В нижнем правом углу должно быть Arduino/Genuino на COM(номер ком порта к которому подключена плата) если все верно то переходим к следующему шагу.

7 шаг. Загружаем скетч нажав кнопку Загрузки со стрелочкой.

Если вы используете скетч с этой страницы то приложение при загрузке предложит сохранить его. После чего загрузка продолжится

Через 5-45 секунд скетч загрузится и появится уведомление Загрузка завершена.

8 шаг. Отключаем Arduino от компьютера и подключаем потенциометр.

Зеленый провод который подпаян к средней ноге потенциометра подключаем контакту A0, остальные два к питанию GND (минус) и +5V (5 вольт) полярность на ваше усмотрение.

В моем случае если вращать потенциометр по часовой стрелке то скорость вращения шагового двигателя увеличивается, а если поменять местами серый с красным проводом то при вращении потенциометра так же по часовой стрелке скорость вращения шагового двигателя будет уменьшаться.

9 шаг. С помощью соединительных проводов папа мама подключаем драйвер шагового двигателя к Arduino UNO.

Линия 1N1 к 8 контакту, линия 1N2 к 9 контакту, линия 1N3 к 10 контакту и линия 1N4 к 11 контакту.

10 шаг. Проводами мама мама соединяем линии питания.

Такой способ подключения допустим лишь при использовании маломощных шаговых двигателей! При использовании нескольких, или более мощных шаговых двигателей следует использовать отдельный источник питания! При этом у Ардуино и драйвера шагового двигателя должна быть общая земля!

11 шаг. Должно все получиться как на фото ниже! Если это так то подключаем Arduino к компьютеру или к павербанку и пробуем крутить потенциометр.

Доработка демонстрационного столика для которого была применена данная схема

Творческая мастерская Мастер Колотушкин 2023

Проекты на базе Arduino для начинающих, электронные самоделки своими руками.

Управление DC-мотором при помощи Arduino и потенциометра

Данный пример демонстрирует как управлять двигателем постоянного тока с помощью Arduino и потенциометром. Код примера демонстрирует управление скоростью вращения двигателя постоянного тока с помощью потенциометра. В зависимости от положения ручки потенциометра, двигатель будет «разгонятся», либо замедляться.

Необходимое оборудование

ArduinoUno R3 Front.jpg

  • Провода перемычки
  • Макетная плата
  • DC-мотор
  • Резистор 1 кОм
  • Транзистор PN2222
  • Керамический конденсатор 1мкФ
  • Диод 1N4004
  • Потенциометр
  • Дополнительный источник питания(например крона )

При сборке схемы обратите внимание на распиновку транзистора — эмитор соединяется с минусом, база через резистор на 1кОм соединяется с 9 выходом Arduino, а коллектор с одним из выводов двигателя, другой вывод двигателя соединяется с плюсом источника питания на . Параллельно двигателю подключаетсякерамический конденсатор(для фильтрации помех от работы двигателя) и диод(для защиты блока питания от обратного напряжения при выключении двигателя). Крайний левый контакт потенциометра соединяется с шиной Arduino, крайний правый с GND Arduino, средний контакт идет на 0-ой аналоговый вход Arduino. Не забудьте объединить минус источника питания и GND Arduino.

Arduino uno and dc motor and pot.png

Двигатели постоянного тока, потребляют ток больше чем может выдать Arduino. Также они создают опасные выбросы напряжения. Для этого необходимо изолировать двигатель постоянного тока от платы Arduino и запитывать его через отдельный источник питания. Использование транзистора позволит безопасно управлять двигателем используя ШИМ. Транзистор работает как простой электрически управляемый переключатель. Каждый биполярный транзистор имеет три контакта: эмиттер, база, коллектор. Между коллектором и эмиттером течет большой ток, при малом токе базы. Изменяя ток базы, мы будем регулировать ток через коллектор-эмиттер и менять скорость вращения двигателя. Т.к. двигатель обладает инерцией, быстрое переключения транзистора с помощью ШИМ приведет к регулировке скорости вращения.

Pn2222 1.jpg

См.также

Внешние ссылки

    ; — Интернет-магазин компьютеров(Промо код 5 Евро на первую покупку:FWWC3ZKQ);
    ;
  • setup()‎ • loop()
  • if • if. else • for • switch case • while • do. while • break • continue • return • goto
  • ; (точка с запятой) • () (фигурные скобки) • // (однострочный комментарий) • /* */ (многострочный комментарий) • #define • #include
  • = (оператор присваивания) • + (оператор сложения) • — (оператор вычитания) • * (оператор умножения) • / (оператор деления) • % (оператор деления по модулю)
  • == (оператор равенства) • != (оператор неравенства) • < (оператор меньше) • > (оператор больше) • Arduino:Справочник языка Arduino/Операторы сравнения/оператор меньше или равно • Arduino:Справочник языка Arduino/Операторы сравнения/оператор больше или равно
  • && (И) • ИЛИ • ! (Отрицание)
  • * (оператор разыменования) • & (оператор ссылки)
  • ++ (инкремент) • — (декремент) • += (сложение с присваиванием) • -= (вычитание с присваиванием) • *= (умножение с присваиванием) • /= (деление с присваиванием) • &= (побитовый оператор AND, совмещенный с присваиванием) • [1]
  • Константы • HIGH • LOW • INPUT • OUTPUT • INPUT_PULLUP • LED_BUILTIN • true • false • Целочисленные константы • Константы с плавающей запятой
  • boolean • char • byte • int • unsigned int • word • long • unsigned long • float • double • string • String • array • void
  • char() • byte() • int() • word() • long() • float()
  • Область видимости • static • volatile • const
  • sizeof() • PROGMEM
  • pinMode() • digitalWrite() • digitalRead()
  • analogRead() • analogReference() • analogWrite()
  • analogReadResolution() • analogWriteResolution()
  • tone() • noTone() • shiftOut() • shiftIn() • pulseIn()
  • millis() • micros() • delay() • delayMicroseconds()
  • min() • max() • abs() • constrain() • map() • pow() • sq() • sqrt()
  • sin() • cos() • tan()
  • isAlphaNumeric() • isAlpha() • isAscii() • isWhitespace() • isControl() • isDigit() • isGraph() • isLowerCase() • isPrintable() • isPunct() • isSpace() • isUpperCase() • isHexadecimalDigit()
  • randomSeed() • random()
  • lowByte() • highByte() • bitRead() • bitWrite() • bitSet() • bitClear() • bit()
  • attachInterrupt() • detachInterrupt()
  • interrupts() • noInterrupts()
  • Serial: if (Serial) • available() • availableForWrite() • begin() • end() • find() • findUntil() • flush() • parseFloat() • parseInt() • peek() • print() • println() • read() • readBytes() • readBytesUntil() • readString() • readStringUntil() • setTimeout() • write() • serialEvent()
  • Stream: available() • read() • flush() • find() • findUntil() • peek() • readBytes() • readBytesUntil() • readString() • readStringUntil() • parseInt() • parsefloat() • setTimeout()
  • Keyboard • Mouse
  • read() • write() • update() • get() • put() • EEPROM[]
  • Класс Ethernet: begin() • localIP() • maintain()
  • Класс IPAddress: IPAddress()
  • Класс Server: Класс Server • EthernetServer() • begin() • available() • write() • print() • println()
  • Класс Client: Класс Client • EthernetClient() • if (EthernetClient) • connected() • connect() • write() • print() • println() • available() • read() • flush() • stop()
  • Класс EthernetUDP: begin() • read() • write() • beginPacket() • endPacket() • parsePacket() • available() • stop() • remoteIP() • remotePort()
  • Класс GSM:Класс GSM • begin() • shutdown()
  • Класс GSMVoiceCall:Класс GSMVoiceCall • getVoiceCallStatus() • ready() • voiceCall() • answerCall() • hangCall() • retrieveCallingNumber()
  • Класс GSM SMS:Класс GSM_SMS • beginSMS() • ready() • endSMS() • available() • remoteNumber() • read() • write() • print() • peek() • flush()
  • Класс GPRS:Класс GPRS • attachGPRS()
  • Класс GSMClient:Класс GSMClient • ready() • connect() • beginWrite() • write() • endWrite() • connected() • read() • available() • peek() • flush() • stop()
  • Класс GSMServer:Класс GSMServer • ready() • beginWrite() • write() • endWrite() • read() • available() • stop()
  • Класс GSMModem:Класс GSMModem • begin() • getIMEI()
  • Класс GSMScanner:Класс GSMScanner • begin() • getCurrentCarrier() • getSignalStrength() • readNetworks()
  • Класс GSMPIN:Класс GSMPIN • begin() • isPIN() • checkPIN() • checkPUK() • changePIN() • switchPIN() • checkReg() • getPINUsed() • setPINUsed()
  • Класс GSMBand:Класс GSMBand • begin() • getBand() • setBand()
  • LiquidCrystal() • begin() • clear() • home() • setCursor() • write() • print() • cursor() • noCursor() • blink() • noBlink() • display() • noDisplay() • scrollDisplayLeft() • scrollDisplayRight() • autoscroll() • noAutoscroll() • leftToRight() • rightToLeft() • createChar()
  • Класс SD:begin() • exists() • mkdir() • open() • remove() • rmdir()
  • Класс File:available() • close() • flush() • peek() • position() • print() • println() • seek() • size() • read() • write() • isDirectory() • openNextFile() • rewindDirectory()
  • attach() • write() • writeMicroseconds() • read() • attached() • detach()
  • Класс SPISettings • begin() • end() • beginTransaction() • endTransaction() • setBitOrder() • setClockDivider() • setDataMode() • transfer() • usingInterrupt() • Расширенное использование шины SPI на Due
  • Класс SoftwareSerial • available() • begin() • isListening() • overflow() • peek() • read() • print() • println() • listen() • write()
  • Stepper(steps, pin1, pin2) • Stepper(steps, pin1, pin2, pin3, pin4) • setSpeed(rpm) • step(steps)
  • Класс TFT • Класс EsploraTFT • begin() • background() • stroke() • noStroke() • fill() • noFill() • text() • setTextSize() • point() • line() • rect() • width() • height() • circle() • image() • loadImage() • Класс PImage • PImage.height() • PImage.width() • PImage.isValid()
  • Класс WiFi: • begin() • disconnect() • config() • setDNS() • SSID() • BSSID() • RSSI() • encryptionType() • scanNetworks() • status() • getSocket() • macAddress()
  • Класс IPAddress: • localIP() • subnetMask() • gatewayIP()
  • Класс WiFiServer: • Класс WiFiServer • WiFiServer() • begin() • available() • write() • print() • println()
  • Класс WiFiClient: • Класс WiFiClient • WiFiClient() • connected() • connect() • write() • print() • println() • available() • read() • flush() • stop()
  • Класс UDP: • Класс WiFiUDP • begin() • available() • beginPacket() • endPacket() • write() • parsePacket() • peek() • read() • flush() • stop() • remoteIP() • remotePort()
  • begin() • requestFrom() • beginTransmission() • endTransmission() • write() • available() • read() • onReceive() • onRequest()
  • BLEPeripheral: • Класс BLEPeripheral • begin() • poll() • end() • setAdvertisedServiceUuid() • setLocalName() • setDeviceName() • setAppearance() • setEventHandler() • addAttribute() • disconnect() • central() • connected()
  • BLEDescriptor: • Класс BLEDescriptor
  • BLECentral: • Класс BLECentral • connected() • address() • disconnect() • poll()
  • BLECharacteristic: • Класс BLECharacteristic
  • BLEService: • Класс BLEService
  • begin() • getGyroRate() • setGyroRate() • getAccelerometerRate() • setAccelerometerRate() • getGyroRange() • setGyroRange() • getAccelerometerRange() • setAccelerometerRange() • autoCalibrateGyroOffset() • autoCalibrateAccelerometerOffset() • noGyroOffset() • noAccelerometerOffset() • gyroOffsetEnabled() • accelerometerOffsetEnabled() • getGyroOffset() • getAccelerometerOffset() • setGyroOffset() • setAccelerometerOffset() • getDetectionThreshold() • setDetectionThreshold() • getDetectionDuration() • setDetectionDuration() • interrupts() • noInterrupts() • interruptEnabled() • getInterruptStatus() • getStepDetectionMode() • setStepDetectionMode() • readMotionSensor() • readAccelerometer() • readGyro() • readTemperature() • shockDetected() • motionDetected() • tapDetected() • stepsDetected() • attachInterrupt() • detachInterrupt()
  • start() • restart() • kill() • attachInterrupt() • detachInterrupt() • readTickCount() • rdRstTickCount() • pause() • resume() • pwmStart() • pwmStop()
  • begin() • prepare() • write()
  • startLoop() • yield()
  • Класс MouseController:Класс MouseController • mouseMoved() • mouseDragged() • mousePressed() • mouseReleased() • getXChange() • getYChange() • getButton()
  • Класс KeyboardController:Класс KeyboardController • keyPressed() • keyReleased() • getModifiers() • getKey() • getOemKey()
  • begin() • end() • setClippingPin() • checkClipping() • setAmplitudeThreshold() • setTimerTolerance() • setSlopeTolerance() • setBandwidth() • getFrequency()
  • begin() • play() • end()
  • begin() • setHours() • setMinutes() • setSeconds() • setTime() • setYear() • setMonth() • setDay() • setDate() • getHours() • getMinutes() • getSeconds() • getYear() • getMonth() • getDay() • setAlarmHours() • setAlarmMinutes() • setAlarmSeconds() • setAlarmTime() • setAlarmYear() • setAlarmMonth() • setAlarmDay() • setAlarmDate() • enableAlarm() • disableAlarm() • attachInterrupt() • detachInterrupt() • standbyMode()
  • Класс WiFi: • begin() • disconnect() • config() • setDNS() • SSID() • BSSID() • RSSI() • encryptionType() • scanNetworks() • status() • macAddress()
  • Класс IPAddress: • localIP() • subnetMask() • gatewayIP()
  • Класс WiFiServer: • Класс WiFiServer • WiFiServer() • begin() • available() • write() • print() • println()
  • Класс WiFiClient: • Класс WiFiClient • WiFiClient() • Класс WiFiSSLClient • connected() • connect() • connectSSL() • write() • print() • println() • available() • read() • flush() • stop()
  • Класс WiFiUDP: • Класс WiFiUDP • begin() • available() • beginPacket() • endPacket() • write() • parsePacket() • peek() • read() • flush() • stop() • remoteIP() • remotePort()
  • RobotControl: • Класс Robot • begin() • setMode() • pauseMode() • isActionDone() • lineFollowConfig() • digitalRead() • digitalWrite() • analogRead() • analogWrite() • updateIR() • knobRead() • compassRead() • keyboardRead() • waitContinue() • motorsWrite() • motorsStop() • turn() • pointTo() • beginSpeaker() • playMelody() • beep() • playFile() • tuneWrite() • tempoWrite() • beginTFT() • text() • drawBMP() • debugPrint() • clearScreen() • displayLogos() • drawCompass() • beginSD() • userNameRead() • userNameWrite() • robotNameRead() • robotNameWrite() • cityNameRead() • cityNameWrite() • countryNameRead() • countryNameWrite()
  • RobotMotor: • Класс RobotMotor • begin() • process() • parseCommand() • motorsWrite() • IRread()
  • Класс Bridge : begin() • put() • get() • transfer()
  • Класс Process : begin() • addParameter() • run() • runAsynchronously() • running() • exitValue() • close() • runShellCommand() • runShellCommandAsynchronously() • available() • read() • write() • peek() • flush()
  • Класс Console : begin() • end() • buffer() • noBuffer() • connected() • available() • read() • write() • peek() • flush()
  • Класс FileIO :
    • Класс FileSystem : begin() • open() • exists() • mkdir() • rmdir() • remove() • Класс File • close() • rewindDirectory() • openNextFile() • seek() • position() • size() • available() • read() • write() • peek() • flush()
    • Класс YunClient : stop() • connect() • connected() • available() • read() • write() • peek() • flush()
    • Класс YunServer : begin() • listenOnLocalhost() • noListenOnLocoalhost() • write()
    • begin() • end() • press() • print() • println() • release() • releaseAll() • write()
    • begin() • click() • end() • move() • press() • release() • isPressed()
    • BareMinimum — Допустимый минимум кода для начала работы.
    • Blink — Включаем и отключаем светодиод .
    • DigitalReadSerial — Считывание последовательной передачи данных через цифровой контакт.
    • AnalogReadSerial — Считывание последовательной передачи данных через аналоговый контакт.
    • Fade — Затухание-загорание светодиод а с помощью Arduino .
    • ReadAnalogVoltage — Считывание напряжения, проходящего через аналоговый контакт.
    • BlinkWithoutDelay — Мигание без команды Delay
    • Button — Управление светодиод ом при помощи кнопки
    • Debounce — Антидребезг
    • Debounce2 — Антидребезг2
    • ButtonStateChange — Определение изменения состояния кнопки
    • InputPullupSerial — Отслеживание состояния кнопки с помощью встроенного подтягивающего резистора
    • Tone — Проигрывание мелодии с помощью функции Tone
    • Pitch follower — Звук, реагирующий на изменяющуюся информацию
    • Simple keyboard — Простая клавиатура при помощи функции Tone
    • Tone4 — Проигрывание нот на разных динамиках с помощью функции Tone
    • AnalogInPotSerial — Чтение данных от потенциометр а и вывод через последовательный порт
    • AnalogInOutSerial — «Сырые» данные на входе, преобразованные на выходе, вывод результата на Serial Monitor
    • AnalogInput — Управление миганием светодиод а при помощи потенциометр а.
    • AnalogWriteMega — Затухание/загорание (один за одним) 12 светодиод ов. Используется плата Arduino Mega .
    • Calibration — Определение максимума и минимума для данных от аналогового датчика.
    • Fading — Использование выходного аналогового контакта ( ШИМ ) для затухания/загорания светодиод а.
    • Smoothing — Сглаживание серии данных, считанных с входного аналогового контакта.
    • ReadASCIIString — Анализ строки, состоящей из разделенных запятыми int-значений, и их последующее использование для управления RGB-светодиодом.
    • ASCII Table — Демонстрирует продвинутые способы вывода данных на Serial Monitor.
    • Dimmer — Изменение яркости светодиода при помощи движения мышкой.
    • Graph — Отправка данных на компьютер и их графическое отображение в скетче Processing.
    • Physical Pixel — Включение/выключение светодиода путем отправки данных со скетча Processing (или Max/MSP) на Arduino.
    • Virtual Color Mixer — Отправка с Arduino на компьютер сразу нескольких значений, а затем их считывание при помощи скетча для Processing или Max/MSP.
    • Serial Call Response — Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»).
    • Serial Call Response ASCII — Многобайтная передача данных при помощи метода вызова и ответа (метода «рукопожатия»). До передачи данные зашифровываются в ASCII.
    • SerialEvent — Демонстрирует использование SerialEvent().
    • Serial input (Switch (case) Statement) — Как совершать различные действия, беря за основу символы, присланные через последовательный порт.
    • MIDI — Передача через последовательный порт сообщений с MIDI-нотами.
    • MultiSerialMega — Использование двух последовательных портов на Arduino Mega.
    • If Statement — Как использовать оператор «if» для создания условий, опирающихся на входные аналоговые данные, при которых светодиод будет либо включаться, либо оставаться выключенным.
    • For Loop — Управление несколькими светодиодами, чтобы они мигали, как LED-полоска у автомобиля Китт из сериала «Рыцарь дорог».
    • Array — Вариация примера «For Loop», но с использованием массива.
    • While Loop — Использование цикла while() для калибровки датчика. Калибровка включается при нажатии на кнопку.
    • Switch Case — Как совершать какие-либо действия в зависимости от значений, полученных от датчика. Эквивалент примера «If Statement», но если бы условий было не два, а четыре. Этот пример демонстрирует, как дробить диапазон данных от датчика на четыре «суб-диапазона», а затем в зависимости от полученных результатов совершать одно из четырех действий.
    • Switch Case 2 — Второй пример, демонстрирующий использование оператора switch. Показывает, как совершать различные действия в зависимости от определенных символов, полученных через последовательный порт.
    • ADXL3xx — Считывание данных с акселерометра ADXL3xx.
    • Knock — Определение стука при помощи пьезоэлемента.
    • Memsic2125 — Считывание данных с 2-осевого акселерометра Memsic2125.
    • Ping — Определение объектов при помощи ультразвукового дальномера.

    Примеры, объясняющие основы управления дисплеем:

    • LED Bar Graph — Как сделать светодиодную шкалу.
    • Row Column Scanning — Как управлять матрицей светодиодов 8×8.
    • StringAdditionOperator — Добавление строк друг к другу различными способами
    • StringAppendOperator — Прибавление данных к строкам.
    • StringCaseChanges — Смена регистра в строках.
    • StringCharacters — Как задать/сосчитать значение определенного символа в строке.
    • StringComparisonOperators — Алфавитное сравнение строк.
    • StringConstructors — Как инициализировать строковые объекты.
    • StringIndexOf — Поиск символов в строке по принципу «столько-то позиций от начала» или «столько-то позиций от конца»
    • StringLength & StringLengthTrim — Как определить длину строки и обрезать ее.
    • StringReplace — Замена отдельных символов в строке.
    • StringStartsWithEndsWith — Как проверить, какими символами/подстроками начинается или заканчивается строка.
    • StringSubstring — Поиск в строке определенных «фраз».

    В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.

    Подключение потенциометра к Ардуино

    Как подключить потенциометр к Ардуино

    Потенциометр Ардуино (переменный резистор) служит для регулировки или настройки различных параметров в электрической цепи — мощности, напряжения, громкости звука и т.д. Рассмотрим, как подключить переменный резистор к Ардуино правильно, и представим несколько примеров программ для регулировки яркости светодиода и угла поворота сервомотора подключенных к микроконтроллеру Arduino.

    Потенциометр Ардуино — что это такое

    Переменный резистор в электрической цепи с платой Arduino Uno или Nano используется в качестве делителя напряжения. На выводы потенциометра подается напряжение (5V и GND), а средний вывод радиоэлемента является подвижным контактом. При вращении ручки потенциометра, напряжение сигнала на среднем выводе будет меняться от своего максимального значения (5 Вольт) до нуля.

    Со средней ножки потенциометра снимают напряжение

    Подстроечный и переменный резистор (потенциометр)

    Потенциометры бывают разных типов. По характеру изменения сопротивления они делятся на: линейные (сопротивление меняется в прямой зависимости), логарифмические и экспоненциальные (сопротивление меняется с разной интенсивностью). По типу корпуса бывают: однооборотные, многооборотные, ползунковые и т.д. По назначению: переменные и подстроечные резисторы.

    Как подключить потенциометр к Arduino

    Для этого занятия потребуется:

    • Arduino Uno / Arduino Nano / Arduino Mega;
    • потенциометр (переменный резистор);
    • беспаечная макетная плата;
    • один светодиод и резистор;
    • сервопривод;
    • провода «папа-папа», «папа-мама».

    Крайние ножки переменного резистора подключаются к портам питания (5V и GND). Средний контакт имеет подвижный контакт, на котором меняется напряжение вследствие изменения сопротивления при вращении ручки. Полярность подключения «+» и «-» роли не играет, при этом будет происходить только инверсия сигнала потенциометра. Соберите следующую схему и загрузите приведенный код в плату.

    Скетч. Подключение потенциометра к Ардуино

    Пояснения к коду:
    1. при необходимости подключения нескольких потенциометров к Arduino Nano, следует их подключать к другим аналоговым входам.

    Как подключить к Ардуино потенциометр и светодиод

    Схема подключения потенциометра и светодиода к Ардуино

    Схема подключения переменного резистора и светодиода к Ардуино

    Для регулировки яркости светодиода с помощью переменного резистора, следует считывать данные с данного радиоэлемента, подключив его к аналоговому входу. В зависимости от поворота ручки потенциометра необходимо в линейной зависимости менять яркость светодиода. Это сделать довольно просто на микроконтроллере, схема подключения переменного резистора с примером кода, размещена далее.

    Скетч. Подключение к Ардуино потенциометра и светодиода

    Пояснения к коду:
    1. светодиод подключается к аналоговому выходу с ШИМ сигналом;
    2. данные с порта A1, которые находятся в диапазоне 0…1023, мы делим на 4 и получаем диапазон от 0 до 255 для изменения яркости светодиода.

    Как подключить к Ардуино потенциометр и сервомотор

    Схема подключения потенциометра и сервомотора к Ардуино

    Схема подключения переменного резистора к Ардуино и серво

    Сервомотор подключается к аналоговым выходам Arduino Nano. В скетче использована функция map, которая пропорционально переносит значение переменной из текущего диапазона значений в новый диапазон. Таким образом, значения с потенциометра в диапазоне 0…1023, мы переводим их в новый диапазон от 0 до 180 (угол поворота сервомотора). Соберите схему и загрузите следующий скетч.

    Скетч. Подключение к Ардуино потенциометра и сервомотора

    Пояснения к коду:
    1. функция map пропорционально переносит значение переменной val из диапазона значений от 0 до 1023 в новый диапазон от 0 до 180;
    2. в самых крайних положениях (0 и 180 градусов) сервомотор может «дергаться».

    Заключение. Ардуино позволяет не только считывать показания с переменного резистора, но и управлять с помощью него различными устройствами. Команда analogRead() считывает положение ручки переменного резистора, который можно увидеть на мониторе порта. Мы предоставили на этой странице примеры управления сервоприводом и светодиодом с помощью потенциометра на Ардуино.

    Управление шаговым двигателем с помощью Arduino и потенциометра

    Шаговые двигатели с каждым годом приобретают все большую популярность в мире электроники поскольку именно они обеспечивают превосходную точность позиционирования различных механизмов. В этой статье мы рассмотрим подключение одного из самых распространенных шаговых двигателей 28-BYJ48 к плате Arduino при помощи модуля ULN2003 и управление им с помощью потенциометра.

    Управление шаговым двигателем с помощью Arduino и потенциометра: внешний вид конструкции

    В нашей предыдущей статье про подключение шагового двигателя к плате Arduino мы управляли углом его поворота из она монитора последовательной связи, в этом же проекте мы будем управлять поворотом шагового двигателя вращая ручку потенциометра. Если мы будем вращать ручку потенциометра по часовой стрелке, то и шаговый двигатель будет поворачиваться по часовой стрелке, а если мы ручку потенциометра будем поворачивать против часовой стрелки – то и шаговый двигатель будет вращаться против часовой стрелки.

    Общие принципы работы шаговых двигателей

    Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:

    Внешний вид шагового двигателя 28-BYJ48

    Первый вопрос, который напрашивается при взгляде на этот рисунок – почему в отличие от обычного двигателя из этого шагового двигателя выходят 5 проводов различных цветов? Чтобы понять это давайте сначала разберемся с принципами работы шагового двигателя.

    Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

    Внутрення схема шагового двигателя

    Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.

    Так почему же этот двигатель называется 28-BYJ48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

    Технические характеристики шагового двигателя 28-BYJ48

    На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.

    Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).

    Расчет шагов на оборот для шагового двигателя

    Важно знать, как рассчитать количество шагов за один оборот для вашего шагового двигателя, потому что только тогда вы можете эффективно его запрограммировать.

    В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).

    Справедлива следующая формула:

    Количество шагов за оборот = 360 / угол шага.

    В нашем случае 360/11.25 = 32 шага за оборот.

    Зачем нужен драйвер мотора для управления шаговым двигателем

    Большинство шаговых двигателей будут работать только с помощью модуля драйвера мотора. Это связано с тем, что микроконтроллер (в нашем случае плата Arduino) не может обеспечить достаточный ток на своих контактах ввода/вывода для работы двигателя. Поэтому мы будем использовать внешний драйвер мотора для управления нашим шаговым двигателем — модуль ULN2003 (купить на AliExpress). В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.

    Работа схемы

    Схема устройства представлена на следующем рисунке.

    Схема для управления шаговым двигателем с помощью Arduino и потенциометра

    Чтобы подавать питание на соответствующие катушки шагового двигателя мы будем использовать цифровые контакты 8, 9, 10 и 11 платы Arduino, к которым подключены соответствующие контакты драйвера двигателей ULN2003. Потенциометр, с помощью которого мы будем управлять вращением шагового двигателя, подключен к аналоговому контакту A0 платы Arduino.

    Драйвер мотора запитывается от контакта 5V платы Arduino. Но если вы будете подсоединять какую-нибудь нагрузку к шаговому двигателю, то вам потребуется внешний источник питания для драйвера мотора. Мы в нашем примере эксплуатируем шаговый двигатель без нагрузки, поэтому нам хватило питания от платы Arduino. И не забудьте соединить землю платы Arduino с землей драйвера мотора.

    Объяснение программы для платы Arduino

    Перед тем как начать писать программу для платы Arduino давайте разберемся что должно происходить внутри этой программы. Как мы уже говорили ранее, мы будем использовать метод 4-шаговой последовательности, то есть нам нужно будет сделать 4 шага чтобы выполнить один полный оборот двигателя.

    Номер шага Контакты, на которое подается питание Катушки, на которое подается питание
    Шаг 1 8 и 9 A и B
    Шаг 2 9 и 10 B и C
    Шаг 3 10 и 11 C и D
    Шаг 4 11 и 8 D и A

    На драйвере мотора есть 4 светодиода, по свечению которых можно судить о том, на какую катушку подается питание в конкретный момент. Более подробно все эти процессы можно посмотреть в видео, приведенном в конце статьи.

    Мы напишем программу, в которой необходимое количество шагов для двигателя мы будем вводить в мониторе последовательного порта (serial monitor) платы Arduino. Полный текст программы приведен в конце статьи, здесь же мы рассмотрим наиболее важные его фрагменты.

    Как мы рассчитали ранее, полное число шагов для полного оборота нашего шагового двигателя, равно 32, пропишем это в следующей строчке кода:

    #define STEPS 32

    Далее мы должны сказать плате Arduino через какие ее контакты мы будем управлять шаговым двигателем (то есть к каким ее контактам подключен драйвер мотора).

    Stepper stepper (STEPS, 8, 10, 9, 11);

    Примечание: последовательность номеров контактов, указанная в приведенной команде (8,10,9,11) – специально упорядочена таким образом чтобы подавать питание на катушки шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, то вы соответствующим образом должны их упорядочить для подачи в приведенную команду.

    Мы будем использовать специальную библиотеку для работы с шаговыми двигателями, поэтому для задания скорости вращения шагового двигателя мы можем использовать команду вида:

    Для двигателя 28-BYJ48 скорость вращения можно установить в диапазоне от 0 до 200.

    Теперь, чтобы двигатель сделал один шаг, мы можем использовать следующую команду:

    Количество шагов, которое должен сделать двигатель, определяется переменной “val”. Поскольку мы имеем 32 шага (для оборота) и передаточное число 64 мы должны сделать 2048 (32*64=2048) “шагов” в этой команде для совершения одного полного оборота двигателя.

    Соответственно, чтобы шаговый двигатель сделал один шаг по часовой стрелке, необходимо использовать команду:

    А один шаг против часовой стрелки:

    В нашей программе мы будем считывать значение на аналоговом контакте A0 платы Arduino и сравнивать его с предыдущим значением (Pval). Если оно увеличилось, то мы будем делать 5 шагов двигателем по часовой стрелке, а если уменьшилось – то 5 шагов двигателем против часовой стрелки.

    potVal = map(analogRead(A0),0,1024,0,500);
    if (potVal>Pval)
    stepper.step(5);
    if (potVal<Pval)
    stepper.step(-5);
    Pval = potVal;

    Работа проекта

    Когда вы сделаете все необходимые соединения в схеме данного проекта у вас должна получиться примерно следующая конструкция:

    Внешний вид собранной конструкции для этого проекта

    После этого загрузите программу в плату Arduino и откройте окно монитора последовательной связи (serial monitor). После этого вы можете вращать ручку потенциометра и наблюдать как в соответствии с ее поворотами шаговый двигатель будет вращаться по часовой и против часовой стрелки.

    Исходный код программы

    Код программы достаточно простой, я надеюсь у вас не вызовет никаких затруднений реализация данного проекта.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *