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

Примеры использования датчика расстояния

Давайте рассмотрим пример простого проекта с платой Arduino Uno и датчиком расстояния HC SR04. В скетче мы будем получать значение расстояния до предметов и выводить их в монитор порта в среде Arduino IDE. Вы сможете легко изменить скетч и схему подключения, чтобы датчик сигнализировал о приближении или отдалении предмета.

Подключение датчика к ардуино

При написании скетча использовалась следующий вариант распиновки подключения датчика:

  • VCC: +5V
  • Trig – 12 пин
  • Echo – 11 пин
  • Земля (GND) – Земля (GND)

Пример скетча

Начнем работу с датчиком сразу с относительного сложного варианта – без использования внешних библиотек.

В данном скетче мы выполняем такую последовательность действий:

  • Коротким импульсом (2-5 микросекунды) переводим датчик расстояния в режим эхолокации, при котором в окружающее пространство высылаются ультразвуковые волны с частотой 40 КГц.
  • Ждем, пока датчик проанализирует отраженные сигналы и по задержке определит расстояние.
  • Получаем значение расстояния. Для этого ждем, пока HC SR04 выдаст на входе ECHO импульс, пропорциональный расстоянию. Мы определяем длительность импульса с помощью функции pulseIn, которая вернет нам время, прошедшее до изменения уровня сигнала (в нашем случае, до появления обратного фронта импульса).
  • Получив время, мы переводим его в расстояние в сантиметрах путем деления значения на константу (для датчика SR04 это 29.1 для сигнала «туда», столько же для сигнала «обратно», что в сумме даст 58.2).

Если датчик расстояния не выполняет считывание сигнала, то преобразование выходного сигнала никогда не примет значения короткого импульса – LOW. Так как у некоторых датчиков время задержки варьируется в зависимости от производителя, рекомендуется при использовании указанных скетчей выставлять его значение вручную (мы это делаем в начале цикла).

Если расстояние составляет более 3 метров, при котором HC SR04 начинает плохо работать, время задержки лучше выставлять более 20 мс, т.е. 25 или 30 мс.

Скетч с использованием библиотеки NewPing

Теперь давайте рассмотрим вариант скетча с использованием библиотеки NewPing. Код существенно упростится, т.к. все описанные ранее действия спрятаны внутри библиотеки. Все, что нам нужно сделать –  создать объект класса NewPing, указав пины, с помощью которых мы подключаем датчик расстояния и использовать методы объекта. В нашем примере для получения расстояния в сантиметрах нужно использовать ping_cm().

Пример подключения ультразвукового дальномера HC SR04 с одним пином

Подключение HC-SR04  к Arduino может быть выполнено посредством использования одного пина. Такой вариант пригодится, если вы работаете с большим проектом и вам не хватает свободных пинов. Для подключения вам нужно просто установить между контактами TRIGи ECHO резистор номиналом 2.2K и подключить к ардуино контакт TRIG.

Подключение сервоприводов к Arduino

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

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

Используемые компоненты (купить в Китае):

• Управляющая плата

Arduino UNO 16U2, либо более дешевая Arduino UNO CH340G,

Arduino Nano CH340G, либо Arduino MEGA 16U2, либо более дешевая Arduino MEGA CH340G,

• Сервоприводы

Сервопривод SG90

Сервопривод MG995

Сервопривод MG996

• Соединительные провода

Соединительные провода папа-папа

Полезная вещь для проверки сервориводов

Тестер сервоприводов

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

Управляющий сигнал представляет из себя импульсы с нужной нам шириной, которые посылаются с определенной частотой. Для рассматриваемых нами сервоприводов частота посылания импульса почти всегда будет около 50 Гц (это примерно 1 раз в 20мс), а ширина импульса будет лежать в пределе от 544мкс до 2400мкс.

Как видно из картинке, импульс шириной в 544мкс выставит выводной вал в положение 0°, 1520мск соответствует углу в 90°, а 2400мкс соответствует 180°.

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

Для подключения к контроллеру от сервопривода тянется 3 провода обжатых стандартным 3 пиновым разъемом с шагом 2.54мм . Цвета проводов могут варьироваться. Коричневый или черный — земля (GND), красный — плюс источника питания (VTG), оранжевый или белый — управляющий сигнал (SIG).

У старых Ардуин, укомплектованных мегой 8, имеется всего три ШИМ вывода (digital 9,10,11), у Ардуин укомплектованных мегой 168 или 328 их 6 (digital 3,5,6,9,10,11). Семейство Arduino MEGA имеет на своем борту целых 14 ШИМ выводов.

Один 9G сервопривод, потребляющий слабый ток, еще можно подключить напрямую к Arduino.

GND на любой из GND пинов­­­ ардуино

VTG на + 5 вольт на ардуино

SIG на ШИМ (PWM) вывод ардуино

Подключение пары сервоприводов 9G либо одного мощного сервоприводов, к примеру MG995, может вызвать большую просадку напряжения и контроллеру не хватит питания, мега8 очень привередлива и из-за этого контроллеру не хватит напряжения и он отключится. Так же на плате Arduino установлен маломощный стабилизатор не рассчитанный на потребление большого тока и чрезмерное потребление может перегреть его и повредить плату. Во избежание этого, при использовании мощных серв, либо больше одной слабой, рекомендуем подавать питание на сервопривод отдельно.

• ​ Вариант 1

Можно приобрести блок питания на 5 или 6 вольт, в зависимости от напряжения питания вашего сервопривода и питать сервопривод от него.

В случае, если под рукой нет стабилизированного источника питания на 5Вольт, но имеется любой другой источник питания (блок, аккумулятор, сборка из батареек) с напряжением 6-12В, то из него можно легко получить требуемое напряжение для сервопривода. Поможет нам в этом стабилизатор. Рассмотрим самый простой L7805/L7806, требующий минимум деталей внешней обвязки.

Стабилизатор имеет 3 ноги:

1 — Вход. На него подается напряжение от 6 или 7(в зависимости от модели) до 12Вольт

2 — Общий минус

3 — Выход 5 или 6 вольт (в зависимости от модели)

7805 отечественный аналог КР142ЕН5А — выходное напряжение 5Вольт.

7806 отечественный аналог КР142ЕН5Б — выходное напряжение 6Вольт.

Как видно из рисунка необходима установка конденсаторов, можно и без них, но выходное напряжение будет не стабильным. Рекомендуемые номиналы конденсаторов: на входе 0.33 мкФ, на выходе 0.1 мкФ. Я всегда ставлю два электорлита по 100мкФ. Чем больше — тем лучше.

Как управлять Ардуино с клавиатуры

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • светодиод и резистор 220 Ом;
  • сервопривод;
  • провода «папа-папа» и «папа-мама».


Управление светодиодом на Arduino UNO с компьютера

Остальные исполнительные устройства для Arduino UNO вы можете взять на свое усмотрение и самостоятельно попробовать управлять ими через компьютер с помощью USB кабеля. Соберите на макетной плате схему с одним светодиодом из первого занятия Что такое Ардуино и как им пользоваться, а после сборки схемы со светодиодом загрузите следующий скетч в микроконтроллер.

Скетч. Взаимодействие Ардуино и компьютера

int val; // освобождаем память в контроллере для переменой

void setup() {
   Serial.begin(9600); // подключаем последовательный порт
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
}

void loop() {
    // проверяем, поступают ли какие-то команды
   if (Serial.available()) {

       val = Serial.read(); // переменная val равна полученной команде

       if (val == '1') {digitalWrite(13, HIGH);} // при 1 включаем светодиод
       if (val == '0') {digitalWrite(13, LOW);} // при 0 выключаем светодиод

   }
}
  1. функция проверяет поступление команд с компьютера;
  2. функция читает данные, поступившие в Serial monitor.
  3. в условном операторе стоит знак двойное равенство «соответствие», а в скобках необходимо использовать одинарные кавычки.


Управление сервоприводом на Arduino UNO с компьютера

После сборки схемы загрузите следующий скетч в плату

Скетч. Управление сервоприводом с компьютера

#include <Servo.h> // подключаем библиотеку для сервопривода
Servo servo; // объявляем переменную servo типа "servo"
int val; // освобождаем память в контроллере для переменой

void setup() {
   Serial.begin(9600); // подключаем последовательный порт
   servo.attach(11); // привязываем сервопривод к выходу 11
}

void loop() {
   // проверяем, поступают ли какие-то команды
   if (Serial.available()) {

       val = Serial.read(); // переменная val равна полученной команде

       if (val == '1') { servo.write(10); } // при 1 поворачиваем серво на 10
       if (val == '2') { servo.write(45); } // при 2 поворачиваем серво на 45
       if (val == '3') { servo.write(90); } // при 3 поворачиваем серво на 90

   }
}

Перейдём к практике

В наборе, который мы с вами распаковывали ранее мне достался сервопривод Tower Pro SG90 — это одна из популярнейших моделей для хобби, поэтому китайцы кладут их во все подобные наборы. Отдельно он стоит 3-4 доллара.

Севропривод SG90

При всей своей миниатюрности, SG90 достаточно «сильный» и момент на валу аж 1.8 кг/см.

В комплекте с ним есть набор креплений для соединения с механизмами: четырёхсторонний (в виде +), двухсторонний (в виде —) один односторонний, что вы можете наблюдать на фото выше. Кроме них в комплект всегда кладут крепежные винтики. На валу есть шлицы для крепления оснастки, чтобы она не проворачивалась.

Сегодня нам понадобится:

Сервопривод SG90 — 1 штука;
Плата Arduino, любая, у меня есть UNO — 1 штука;
Перемычки или провода для содинения — 5-10 штук;
Потенциометр, например, на 10К (на самом деле его сопротивление не слишком важно) — 1 штука.

Если вы будете питать серву напрямую от платы, то подключайте её к пинам 5V красным проводом, GND – коричневым (черным) проводом, а жёлтый провод — это сигнал, его можно к любому пину, хоть цифровому, хоть аналоговому, хоть с ШИМ, хоть без него.

Я же заблаговременно собрал схему на макетной плате и подключил к ней потенциометр, которым мы далее будем задавать положение вала. Средний вывод потенциометра я подключил к аналоговому пину A0 ардуино, а сигнальный провод сервопривода – к 9 пину. Схему приведу ниже.

Проверяем работоспособность сервопривода, для этого заходим в Arduino IDE, открываем пример из стандартного набора под названием «Servo→Sweep»

По умолчанию в этом примере выставлено, что сигнальный провод подключается к 9-му пину, если вы подключили к другому – исправьте вот это значение в коде:

Код несложный, привожу его ниже с русскими комментариями.

// Можно создать до 12 таких объектов и подключить столько же приводов

//для объекта myservo подключен к 9 пину

// чтобы привод повернулся на угол, указанный в pos

В результате сервопривод вращается от одного крайнего положения до другого. Скорость перемещения можно изменять либо путем изменения задержки между шагами (delay), либо путем изменения шага, а именно правкой последнего значения в аргументах цикла — for (pos = 180; pos >= 0; pos -= 1). На видео я показал примеры с разными значениями задержки.

Дальше мы откроем другой из стандартных примеров — knob. Здесь-то нам и понадобится потенциометр. Ниже приведена схема подключения для этого примера.

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

Разберем код. Первая его часть, где подключается библиотека и назначается пин, к которому подключен управляющий провод сервопривода не изменилась, и её я комментировать не буду.

// к которому подключено потенциометр (пин А0)

// подробнее мы рассматривали этот вопрос в этой статье —

// до необходимых нам градусов — от 0 до 180

// значениями, полученными с аналогового входа

Библиотека Servo.h по умолчанию встроена в Arduino IDE, разберем основные её команды:

Servo myservo – вместо «myservo» может быть любое слово, это название вашего сервопривода.

attach() — привязать переменную, объявленную предыдущей командой к пину. Пример использования ИмяПривода.attach(9) – расшифровывается так: «сервопривод с названием «ИмяПривода» подключен к пину 9”.

Если у вашего привода длины управляющих импульсов отличаются от стандартных 544 и 2400 мкс, то их можно задать через запятую после номера пина, вот так servo.attach(pin, min, max), где servo – имя привода (имя переменной типа Servo), min – длина сигнала для минимального угла поворота (0°) в микросекундах, max – ширина импульса управляющего сигнала для максимального угла поворота (180°) в микросекундах.

write() — передаём приводу угол поворота в градусах (пример: ИмяПривода.write(180))

writeMicroseconds() — тоже самое, только указывает на длину сигнала в микросекундах.

read() — определяет текущее положение вала;

attached() — Проверяет подключена ли переменная типа Servo к пину с сервоприводом. Синтаксис — Servo.attached().

detach() — отмена команды attach, то есть отсоединяет определенный переменной типа Servo сервопривод от выхода.

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

Для занятия нам понадобятся следующие детали:

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

Перед выбором способа управления двигателем от Arduino Uno r3, уточните на какое напряжение рассчитан ваш моторчик. Если питание требуется более 5 Вольт, то следует использовать транзистор или драйвер. Распиновка транзисторов может отличаться от приведенного примера (следует уточнить распиновку для своего типа). Драйвер L298N позволит не только включать мотор, но и изменять направление вращения.

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


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

Подключение мотора к Ардуино напрямую — самый простой вариант включения вентилятора на Arduino или машинки. Команда для включения двигателя не отличается, от команды при подключении светодиода к микроконтроллеру. Функция digitalWrite включает/выключает подачу напряжения на цифровой порт, к которому подключен двигатель постоянного тока. Соберите схему и загрузите программу.

void setup() {
   pinMode(12, OUTPUT); // объявляем пин 12 как выход
}

void loop() {
   digitalWrite(12, HIGH); // включаем мотор

   delay(1000); // ждем 1 секунду

   digitalWrite(12, LOW); // выключаем мотор

   delay(1000); // ждем 1 секунду
}
  1. для подключения мотора без драйвера можно использовать любой порт;
  2. если двигатель не включается, то, возможно, не хватает силы тока на цифровом выходе, подключите двигатель через транзистор к порту 3,3V или 5V.

Скетч. Подключение мотора через транзистор

Подключение мотора через транзистор к Ардуино потребуется, если двигатель никак не хочет включаться от платы напрямую, то следует использовать порт 5 Вольт на микроконтроллере или внешний источник питания. Транзистор будет играть роль ключа, замыкая/размыкая электрическую цепь. Сам транзистор управляется цифровым портом. Соберите схему, как на картинке и загрузите программу.


Подключение FA-130 мотора постоянного тока — Motor DC Arduino

void setup() {
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
}

void loop() {
   digitalWrite(13, HIGH); // включаем мотор

   delay(1000); // ждем 1 секунду

   digitalWrite(13, LOW); // выключаем мотор

   delay(1000); // ждем 1 секунду
}
  1. при необходимости можно подключить два мотора FA-130 к Ардуино;
  2. в зависимости от характеристик, двигатель подключается к 3,3 или 5 Вольтам.

Скетч. Подключение мотора через драйвер


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

Подключение мотора к Ардуино через драйвер L298N или Motor Shield L293D позволит менять направление вращения ротора. Но для использования данных модулей потребуется установить соответствующие библиотеки для Ардуино. В примере мы использовали схему подключения двигателя с помощью модуля L298N. Соберите схему, как на картинке ниже и загрузите следующий скетч с использованием.

// задаем имена для портов
#define IN1 3
#define IN2 4
#define IN3 5
#define IN4 6

void setup() {
   pinMode(IN1, OUTPUT);
   pinMode(IN2, OUTPUT);
   pinMode(IN3, OUTPUT);
   pinMode(IN4, OUTPUT);
}

void loop() {

   // вращаем моторчики в одну сторону
   digitalWrite(IN1, HIGH);
   digitalWrite(IN2, LOW);
   digitalWrite(IN3, HIGH);
   digitalWrite(IN4, LOW);

   delay(2000); // ждем 2 секунды

   digitalWrite(IN1, LOW);
   digitalWrite(IN2, LOW);
   digitalWrite(IN3, LOW);
   digitalWrite(IN4, LOW);

   delay(1000); // выключаем на 1 секунду

   // вращаем моторчики в обратную сторону
   digitalWrite(IN1, LOW);
   digitalWrite(IN2, HIGH);
   digitalWrite(IN3, LOW);
   digitalWrite(IN4, HIGH);

   delay(2000); // ждем 2 секунды

   digitalWrite(IN1, LOW);
   digitalWrite(IN2, LOW);
   digitalWrite(IN3, LOW);
   digitalWrite(IN4, LOW);

   delay(1000); // выключаем на 1 секунду
}

Управление двигателем на Ардуино

Коллекторный моторчик может быть рассчитан на разное напряжения питания. Если двигатель работает от 3-5 Вольт, то можно моторчик подключать напрямую к плате Ардуино. Моторы для машинки с блютуз управлением, которые идут в комплекте с редукторами и колесами рассчитаны уже на 6 Вольт и более, поэтому ими следует управлять через полевой (биполярный) транзистор или через драйвер L298N.


Принцип работы и устройство мотора постоянного тока

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

Устройство

Рисунок 2. Устройство сервопривода

Сервопривод включает в свой состав такие элементы как:

  • Приводной механизм – к примеру, это может быть электромотор. Благодаря ему становится возможным управление скоростью нужного диапазона в определённый временной момент;
  • Датчики – осуществляют контроль над необходимыми параметрами. Могут быть предназначены для отслеживания положения, усилия, поворота угла или скорости вращения объекта;
  • Блок управления – немало важный элемент, так как именно благодаря ему происходит поддержание требуемых параметров в автоматическом режиме;
  • Блок питания – питает данный механизм.

Интересно, что самый простой управляющий блок чаще всего создаётся с использованием схемы сравнений значений на датчике и необходимых значений при подаче напряжения определённой полярности на привод.

Дополнительные возможности

Управление сервоприводами на Ардуино очень простое и мы можем использовать еще несколько интересных фишек.

Контроль точного времени импульса

Ардуино имеет встроенную функцию servo.write(градусы), которая упрощает управление сервомоторами. Однако не все сервоприводы соблюдают одинаковые тайминги для всех позиций. Обычно 1 миллисекунда означает 0 градусов, 1,5 миллисекунды — 90 градусов, и, конечно, 2 миллисекунды означают 180 градусов. Некоторые сервоприводы имеют меньший или больший диапазон.

Для лучшего контроля мы можем использовать функцию servo.writeMicroseconds(микросекунды), которая в качестве параметра принимает точное количество микросекунд. Помните, 1 миллисекунда равна 1000 мкс.

Несколько сервоприводов

Чтобы использовать более одного сервопривода в Ардуино нам нужно объявить несколько серво-объектов, прикрепить разные контакты к каждому из них и обратиться к каждому индивидуально. Итак, нам нужно объявить объекты — столько сколько нам нужно:

// Создаем объекты Servo Servo1, Servo2, Servo3;

Затем нам нужно прикрепить каждый объект к сервомотору. Помните, что каждый сервопривод использует отдельный пин:

Servo1.attach(servoPin1); Servo2.attach(servoPin2); Servo3.attach(servoPin3);

В конце концов, мы должны обращаться к каждому объекту индивидуально:

Servo1.write(0); // Задать для Servo 1 позицию в 0 градусов Servo2.write(90); // Задать для Servo 2 позицию в 90 градусов

Подключение. Земля сервоприводов идёт на GND Arduino, питание на 5В или VIN (в зависимости от входа). И, в конце концов, каждый привод должен быть подключен к отдельному цифровому выводу.

Вопреки распространенному мнению, сервоприводами не нужно управлять через пины PWM — любой цифровой пин подойдет и будет работать.

Управление мышью

Чтобы управлять серво с помощью мыши, вот простой код:

/** * Servocontrol (derived from processing Mouse 1D example.) * * Updated 24 November 2007 */ // Use the included processing code serial library import processing.serial.*; int gx = 15; int gy = 35; int spos=90; float leftColor = 0.0; float rightColor = 0.0; Serial port; // The serial port void setup() { size(720, 720); colorMode(RGB, 1.0); noStroke(); rectMode(CENTER); frameRate(100); println(Serial.list()); // List COM-ports //select second com-port from the list port = new Serial(this, Serial.list(), 19200); } void draw() { background(0.0); update(mouseX); fill(mouseX/4); rect(150, 320, gx*2, gx*2); fill(180 — (mouseX/4)); rect(450, 320, gy*2, gy*2); } void update(int x) { //Calculate servo postion from mouseX spos= x/4; //Output the servo position ( from 0 to 180) port.write(«s»+spos); // Just some graphics leftColor = -0.002 * x/2 + 0.06; rightColor = 0.002 * x/2 + 0.06; gx = x/2; gy = 100-x/2; }

Вам не обязательно использовать этот код, вы также можете отправлять команды на плату arduino с серийного монитора Arduino IDE. Позиция сервопривода от 0 до 180 — это команды 0 и 180 сек соответственно.

В основном этот код берет позицию mouseX (от 0 до 720) и делит на 4, чтобы получить угол для сервопривода (0-180). Наконец, значение выводится на последовательный порт с префиксом ‘s’.

Примечание: «s» на самом деле должен быть суффиксом, но поскольку это повторяется, это не имеет значения для результата.

Не забудьте сначала проверить с помощью println(Serial.list ()) COM-порт, который следует использовать.

Сервоприводы с непрерывным вращением

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

Например, функция Servo1.write(0) заставит сервомотор вращаться против часовой стрелки на полной скорости. Функция Servo1.write(90) остановит двигатель, а Servo1.write(180) будет вращать вал по часовой стрелке на полной скорости.

Таким сервоприводам нашли несколько применений, но нужно понимать, что они достаточно медленные. Один из вариантов — микроволновая печь, когда есть необходимость в двигателе для вращения продуктов питания. Но будьте осторожны, микроволны — опасное дело!

Скачать библиотеку Servo.h

Данная библиотека автоматически устанавливается вместе с Arduino IDE. Но вы можете отдельно Для установки библиотеки просто распакуйте zip архив в папку «C:\Program Files (x86)\Arduino\libraries» или в то место, где у васт установлена среда разработки Arduin IDE. Если у вас запущена программа Arduino IDE, то для работы с новой библиотекой её необходимо перезапустить.

После того как вы скачали библиотеку Servo и установили ее, вы можете подключать библиотеку в свои скетчи и вам будут доступны примеры использования данной библиотеки.

Для использование библиотеки Servo необходимо подключить ее в свой скетч и создать переменную типа servo. Сделать это очень просто:

1 2 3 4 5 6 7 8 9 10 11 #include <Servo.h> Servo myservo; void setup() { // CODE… } void loop() { // CODE… }

attach()

Указывает вывод к которому подключен сервопривод.

Синтаксис, параметры, возвращаемые значения, пример

Параметры

pin — Обязательный параметр. Цифровой пин к которому подключен сигнальный провод сервопривода.min — Необязательный параметр. Ширина импульса в микросекундах, соответствующая минимальному (угол 0 градусов) положению сервопривода. (по умолчанию 544)max — Необязательный параметр. Ширина импульса в микросекундах, соответствующая максимальному (угол 180 градусов) положению сервопривода.

Возвращаемые значения

Нет

1 2 3 4 5 6 7 8 9 10 11 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); } void loop() { // CODE… }

write()

Поворачивает сервопривод на заданный угол. Для сервоприводов постоянного вращения устанавливает скорость и направление вращения.

Синтаксис, параметры, возвращаемые значения, пример

servo.write(angle);

angle — Обязательный параметр. Устанавливает угол от 0 до 180 градусов. При использовании сервопривода постоянного вращения значение 90 используется для неподвижного состояния. Значение 0 для максимальной скорости кручения в одну сторону, а 180 для максимальной скорости кручения в другую сторону.

Нет

1 2 3 4 5 6 7 8 9 10 11 12 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.write(90); // Поворачивает сервопривод на среднее положение } void loop() { // CODE… }

writeMicroseconds()

Поворачивает сервопривод на угол заданный в микросекундах. С сервоприводами постоянного вращения работает по таком же принципу как и функция write().

Синтаксис, параметры, возвращаемые значения, пример

servo.writeMicroseconds(ms);

ms — Обязательный параметр. Значение в микросекундах

Нет

1 2 3 4 5 6 7 8 9 10 11 12 #include <Servo.h> Servo myservo; void setup() { myservo.attach(9); myservo.writeMicroseconds(1500); // Поворачивает сервопривод на среднее положение } void loop() { // CODE… }

read()

Возвращает текущее положение сервопривода.

Синтаксис, параметры, возвращаемые значения, пример

servo.read();

Нет

Int от 0 до 180.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); // Открываем последовательный порт myservo.attach(9); int position = myservo.read(); // Считываем положение сервопривода Serial.print(«Текущее положение сервопривода: «); Serial.println(position); // Отправляем значение угла на запись в последовательный порт } void loop() { // CODE… }

attached()

Проверяет, указан ли управляющий пин для экземпляра класса Servo.

Синтаксис, параметры, возвращаемые значения, пример

servo.attached();

Нет

boolean true — если пин был указан и false — если нет

1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); // Открываем последовательный порт if(!myservo.attached()) { myservo.attach(9); // Указываем пин если этого не было сделано раньше } } void loop() { // CODE… }

detach()

Отсоединяет экземпляр класса от пина. При отсоединения всех сервоприводов, заблокированные ШИМ выводу снова станут доступны.

Синтаксис, параметры, возвращаемые значения, пример

Servo.detach()

Нет

Нет

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); // Открываем последовательный порт myservo.attach(9); // Указываем пин если этого не было сделано раньше int position = myservo.read(); // Считываем положение сервопривода Serial.print(«Текущее положение сервопривода: «); Serial.println(position); // Отправляем значение угла на запись в последовательный порт myservo.detach(); // Освобождаем пин, к которому был подключен сервопривод } void loop() { // CODE… }

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

Корпуса инфракрасных приемников содержат оптический фильтр для защиты прибора от внешних электромагнитных полей, изготавливаются они специальной формы для фокусировки принимаемого излучения на фотодиоде. Для подключения IR приемника к Arduino UNO используют три ножки, которые соединяют с — GND, 5V и A0. Советуем для начала использовать 3,3 Вольта, чтобы не сжечь ИК датчик при настройке.

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • IR приемник;
  • пульт ДУ;
  • 1 светодиод и резистор 220 Ом;
  • провода «папа-папа» и «папа-мама».


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

Скетч для ИК приемника Arduino со светодиодом

#include <IRremote.h> // подключаем библиотеку для IR приемника

IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник
decode_results results;

void setup() {
   irrecv.enableIRIn();  // запускаем прием инфракрасного сигнала
   Serial.begin(9600); // подключаем монитор порта

   pinMode(12, OUTPUT); // пин 12 будет выходом (англ. «output»)
   pinMode(A0, INPUT); // пин A0 будет входом (англ. «intput»)
  
}

void loop() {
   if (irrecv.decode(&results)) // если данные пришли выполняем команды
   {
      Serial.println(results.value); // отправляем полученные данные на порт
    
      // включаем и выключаем светодиод, в зависимости от полученного сигнала  
      if (results.value == 16718055) { 
      digitalWrite(12, HIGH);
   }
      if (results.value == 16724175) { 
      digitalWrite(12, LOW);
   }
      irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
   }
}
  1. библиотека содержит набор команд и позволяет упростить скетч;
  2. оператор  присваивает получаемым сигналам от пульта дистанционного управления имя переменной .

ИК датчик можно применять во многих устройствах на микроконтроллере Ардуино, в том числе, можно сделать дистанционное управление сервоприводом на Ардуино от ИК приемника. При настройке следует включить монитор порта Arduino IDE и узнать какой сигнал отправляет та или иная кнопка на пульте ДУ. Полученные коды следует использовать в скетче после знака двойного равенства в условиях .

Скетч для ИК приемника Ардуино и серовомотора

#include <IRremote.h> // подключаем библиотеку для IR приемника
IRrecv irrecv(A0);         // указываем пин, к которому подключен IR приемник
decode_results results;

#include <Servo.h> // подключаем библиотеку для серво
Servo myservo;       // создаем объект для управления серво

void setup() {
   irrecv.enableIRIn();  // запускаем прием инфракрасного сигнала
   Serial.begin(9600); // подключаем монитор порта

   myservo.attach(9); // указываем пин для подключения серво
}

void loop() {
   if (irrecv.decode(&results)) // если данные пришли выполняем команды
   {
      Serial.println(results.value); // отправляем полученные данные на порт
    
      // поворачиваем серво, в зависимости от ИК сигнала
      if (results.value == 16718055) { 
      myservo.write(0);
   }
      if (results.value == 16724175) { 
      myservo.write(90);
   }
     irrecv.resume(); // принимаем следующий сигнал на ИК приемнике
  }
}

Подключение кнопки к Ардуино

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • макетная плата;
  • 1 светодиод;
  • резисторы на 220 Ом и 10 кОм;
  • 1 тактовая кнопка;
  • провода «папа-папа» и «папа-мама».


Принципиальная схема. Подключение кнопки к Ардуино Уно

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

Обратите внимание, что при отпущенной кнопке на Pin2 поступает логический «0». С помощью кнопки будем выключать и включать встроенный светодиод, подключенный к цифровому 13 порту на плате микроконтроллера Ардуино

Скетч подключение кнопки к цифровому входу

void setup() {
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
   pinMode(2, INPUT); // объявляем пин 2 как вход
}

void loop() {
   if (digitalRead(2) == HIGH) // когда на пин 2 поступает высокий сигнал
   {
      digitalWrite(13, HIGH); // зажигаем светодиод
   }

   if (digitalRead(2) == LOW) // когда на пин 2 поступает низкий сигнал
   {
      digitalWrite(13, LOW); // выключаем светодиод
   }
}

Пояснения к коду:

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

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

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

void {
   pinMode(13, OUTPUT); // объявляем пин 13 как выход
   pinMode(A1, INPUT); // объявляем пин A1 как вход
}

void loop() {
   if (analogRead(A1) > 300) // когда аналоговая кнопка нажата
   {
      digitalWrite(13, HIGH); // зажигаем светодиод
   }

   if (analogRead(A1) < 300) // когда аналоговая кнопка отпущена
   {
      digitalWrite(13, LOW); // выключаем светодиод
   }
}

Пояснения к коду:

  1. в данном скетче мы используем функцию для считывания значений с аналогового входа , при этом порт можно использовать, как цифровой;
  2. значения на аналоговом входе могут отличаться (все зависит от сопротивления резистора в схеме) и могут принимать значения в диапазоне от 0 до 1023.
Оцените статью:
Оставить комментарий
Adblock
detector