В интернете много примеров, как можно управлять углом поворота сервомотора с помощью потенциометра.
На плате Multi-function Shield есть потенциометр, дисплей и разъем для подключения сервопривода. Посмотрим, как отправить угол поворота сервомотора на дисплей Многофункционального шилда с использованием потенциометра.

НАМ ПОНАДОБИТСЯ

  • Плата Arduino Uno
  • Multi-function Shield
  • Сервомотор

Servo_potentiometr2017-12-25 00.01.00

Подключение серво к multifunction shield

Сервомотор подключен к D9 пину нашего шилда.   См. фото:sg90

 

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

Он подключен к пину А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

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

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

Навигация по записям