Для чего нужен ОрбиКрафт
Подсистемы конструктора
Инструкции по работе с ОрбиКрафт
Уроки
Лабораторная оснастка
Знакомство с Arduino
Полезная нагрузка на базе Arduino
Обратная связь
Новости
Для чего нужен ОрбиКрафт
Подсистемы конструктора
Инструкции по работе с ОрбиКрафт
Уроки
Лабораторная оснастка
Знакомство с Arduino
Полезная нагрузка на базе Arduino
Обратная связь
Новости
Сервомотор - это мотор, положением вала которого можно управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал. Сервоприводы используются для моделирования различных механических движений роботов. Различают 2 вида сервомоторов:
Внутри сервомотор выглядит следующим образом: основной элемент - мотор постоянного тока, далее шестерни редуктора, которые уменьшают скорость вращения вала, выходной вал - элемент, куда устанавливается сервонасадка (она и будет перемещаться в заданную позицию). Возможность задавать позицию сервомотора дает потенциометр и печатная плата с управляющей электроникой.
Вот так выглядят сервомоторы в Tinkercad.
У сервомотора есть 3 вывода: она окрашены в разные цвета.
Для работы Arduino с сервомотором нужно использовать библиотеку. Библиотека - это отдельный файл с набором команд для какого-то элемента. Бываю библиотеки для сервомоторов, для датчиков, для дисплеев и т.д.
Для подключения библиотеки нужно в режиме кода нажать на значок “Библиотеки”, затем в списке выбрать нужную библиотеку. Нам нужна библиотека Servo. Нажимаем “включить” и в программе появится строка #include <Servo.h>, означающая, что теперь можно использовать команды данной библиотеки в своей программе.
Для начала работы с сервомотором его нужно объявить: Servo пробел и название сервомотора. В примере название myservo. Объявление сервомотора должно быть до процедуры void setup().
Далее для подачи команд на сервомотор используется его имя. Основные команды для работы с сервомотором:
#include <Servo.h> //подключаем библиотеку для работы с сервомотором Servo myservo; //объявляем сервомотор void setup(){ myservo.attach(7); //настраиваем пин 7 как управляющий пин сервомотора } void loop(){ myservo.write(0); //задаем позицию 0 delay(2000); //ждем 2 секунды myservo.write(90); //задаем позицию 90 delay(2000); //ждем 2 секунды myservo.write(180); //задаем позицию 180 delay(2000); //ждем 2 секунды }
#include <Servo.h> //подключаем библиотеку для работы с сервомотором Servo myservo; //объявляем сервомотор void setup(){ myservo.attach(7); //настраиваем пин 7 как управляющий пин сервомотора } void loop(){ for(int i=0; i<=180; i++){ //в цикле увеличиваем позицию сервомотора от 0 до 180, myservo.write(i); delay(50); //задерживаясь в каждой позиции на 50 миллисекунд } }
#include <Servo.h> //подключаем библиотеку для работы с сервомотором Servo myservo; //объявляем сервомотор void setup(){ myservo.attach(7); //настраиваем пин 7 как управляющий пин сервомотора } void loop(){ for(int i=0; i<=180; i++){ //в цикле увеличиваем позицию сервомотора от 0 до 180, myservo.write(i); delay(50); //задерживаясь в каждой позиции на 50 миллисекунд } for(int i=180; i>=0; i--){ //в цикле уменьшаем позицию сервомотора от 180 до 0, myservo.write(i); delay(50); //задерживаясь в каждой позиции на 50 миллисекунд } }
#include <Servo.h> //подключаем библиотеку для работы с сервомотором #define potenciometr A0 //создаем переменную для потенциометра Servo myservo; //объявляем сервомотор int potValue; //создаем переменную для хранения показаний потенциометра void setup(){ myservo.attach(7); //настраиваем пин 7 как управляющий пин сервомотора pinMode(potenciometr, INPUT); //настраиваем пин, к которому подключен потенциометр, как вход Serial.begin(9600); //настраиваем работу с монитором порта } void loop(){ potValue = analogRead(potenciometr); //считываем показания потенциометра и сохраняем в переменную potValue potValue = map(potValue, 0, 1023, 0, 180); //преобразуем диапазон значений 0-1023 в новый диапазон 0-180 Serial.println(potValue); //выводим в монитор порта значение переменной potValue myservo.write(potValue); //задаем позицию сервомотора равно значению переменной potValue }
#include <Servo.h> //подключаем библиотеку для работы с сервомотором Servo myservo; //объявляем сервомотор int position; //создаем переменную для хранения значения позиции для сервомотора char data; //создаем переменную для хранения введенных в монитор последовательного интерфейса команд void setup(){ myservo.attach(7); //настраиваем пин 7 как управляющий пин сервомотора Serial.begin(9600); //настраиваем работу с монитором порта } void loop(){ myservo.write(position); //задаем позицию сервомотора равной значению переменной position if(Serial.available()>0){ //проверяем поступили ли команды в монитор порта data = Serial.read(); //считываем полученные команды Serial.println(data); //выводим в монитор порта полученную команду if(data == '+'){ //если полученная команда была '+', то переменная position увеличивается на 10, position = position + 10; } else if(data == '-'){ // а если '-', то переменная position уменьшается на 10 position = position - 10; } myservo.write(position); //задаем позицию сервомотора равной значению переменной position Serial.println(position); //выводим в монитор порта значение переменной position } }
Подробнее о цикле for можно почитать здесь http://arduino.ru/Reference/For
1. Сделайте аналоговые часы. Соберите схему из платы Arduino и сервомотора. Запрограммируйте Arduino чтобы вал сервомотора вращался как секундная стрелка - на 6 градусов в секунду.
2. Соберите схему из платы Arduino, сервомотора и потенциометра. Запрограммируйте Arduino так, чтобы при нахождении потенциометра в центральном положении вал сервомотора также находился бы в центральном положении. При повороте ручки потенциометра влево до конца вал сервомотора должен повернуться на -90 градусов, а при повороте ручки вправо на 90 градусов.