В интернете много примеров, как можно управлять углом поворота сервомотора с помощью потенциометра.
На плате Multi-function Shield есть потенциометр, дисплей и разъем для подключения сервопривода. Посмотрим, как отправить угол поворота сервомотора на дисплей Многофункционального шилда с использованием потенциометра.
НАМ ПОНАДОБИТСЯ
- Плата Arduino Uno
- Multi-function Shield
- Сервомотор
Подключение серво к multifunction shield
Сервомотор подключен к D9 пину нашего шилда. См. фото:
Потенциометр — регулируемый делитель электрического напряжения, переменный резистор. Представляет собой, как правило, резистор с подвижным отводным контактом (движком).
Он подключен к пину А0
Описание программы:
1. Подключаем библиотеку MultiFuncShield.h. Она упрощает работу с этим шилдом.
2. Подключаем библиотеку сервомотора SoftwareServo.h (с Servo.h не работает. Не стыкуется с библиотекой MultiFuncShield.h)
3. Присваиваем имя potpin аналоговому выводу А0
5. Считывает и преобразуем значение потенциометра
4. Выводим данные угла поворота непосредственно в дисплей
Скетч:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | //подключаем необходимые библиотеки для работы MultiFuncShield #include <TimerOne.h> #include <Wire.h> #include <MultiFuncShield.h> #include <SoftwareServo.h> //подключаем библиотеку сервомотора SoftwareServo myservo; // создать серво-объект myservo для управления сервоприводом int potpin = 0; // Присваиваем имя potpin аналоговому выводу А0, к которому подключена средняя ножка потенциометра int val; // переменная считывания данных с аналогового входа int ugol; // переменная для хранения угла поворота сервы void setup() { Timer1.initialize(); MFS.initialize(&Timer1); // инициализация multi-function shield library myservo.attach(9); // Подключаем цифровой вывод (pin 9) к сервомотору Serial.begin(9600); } void loop() { val = analogRead(potpin); // считывает значение потенциометра (значение от 0 до 1023) ugol = map(val, 0, 1023, 0, 180);// преобразуем его, чтобы использовать его с серво (значение от 0 до 180) myservo.write(ugol); // устанавливаем положение сервопривода в соответствии с преобразованным значением в угол поворота Serial.println (myservo.read()); //отправляем в порт монитора значение угла поворота с сервомотора MFS.write(myservo.read()); //отправляем значение угла поворота серво на дисплей delay(15); // ждем, когда сервопривод отработает команду SoftwareServo::refresh(); //команда обновления сервопривода, каждые 50 мс. } |
Библиотеки:
MultiFuncShield.h — https://yadi.sk/d/_d1fxqtb3Qwz3B
TimerOne.h — https://github.com/PaulStoffregen/TimerOne
SoftwareServo.h — https://yadi.sk/d/kQMQgXRv3QwzgW