Для подключения сервопривода SG90 к Arduino, нам нужно:
- Плата Arduino. x1
- Компьютер(для написания и загрузке кода, а так же мы будем брать с него электричество). x1
- Провод для соединения компьютера и платы. x1
- Сервопривод. x1
- Провода. x3-4
- Есть схемы с внешним источником питания, но можно взять питание и с платы.
Схемы подключения:
Для данной схемы рассмотрим стандартный скетч:
Файл -> Примеры ->Servo->Sweep
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 |
/* Sweep by BARRAGAN <http://barraganstudio.com> This example code is in the public domain. modified 8 Nov 2013 by Scott Fitzgerald http://www.arduino.cc/en/Tutorial/Sweep */ #include <Servo.h> Servo myservo; // create servo object to control a servo // twelve servo objects can be created on most boards int pos = 0; // variable to store the servo position void setup() { myservo.attach(9); // attaches the servo on pin 9 to the servo object } void loop() { for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } } |
Как всегда убираем комментарии и ещё я изменил начальную позицию на 1 (int pos = 1;), так как на позиции 0 мой сервопривод начинает противно пищать и явно ему не комфортно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <Servo.h> Servo myservo; int pos = 1; void setup() { myservo.attach(9); } void loop() { for (pos = 1; pos <= 180; pos += 1) { myservo.write(pos); delay(15); } for (pos = 180; pos >= 1; pos -= 1) { myservo.write(pos); delay(15); } } |
Данный скетч заставляет двигаться сервопривод SG90 в свои крайние позиции туда-обратно.
И так разберём, что происходит в скетче:
1 |
#include <Servo.h> |
В самом начале мы подключаем библиотеку «Servo.h». Свои стандартные библиотеки Arduino хранит в папке с IDE Arduino\libraries\, свои библиотеки туда докладывать не стоит, для этого есть специальные места в домашней директории. Но взглянуть на уже имеющиеся может быть интересно.
1 2 |
Servo myservo; int pos = 1; |
Здесь мы объявляем переменную-объект myservo, типа Servo, который появился после объявления библиотеки Servo.h. И объявляется переменная pos в которой будет содержаться текущая позиция сервопривода.
В блоке setup у нас выполняется команда:
1 |
myservo.attach(9); |
Данная команда назначает 9 ножку на плате Arduino, под дата кабель сервопривода. Это тоже функция библиотеки Servo.h объекта типа Servo.
Переходим к блоку loop:
1 2 3 4 5 6 7 8 9 10 |
void loop() { for (pos = 1; pos <= 180; pos += 1) { myservo.write(pos); delay(15); } for (pos = 180; pos >= 1; pos -= 1) { myservo.write(pos); delay(15); } } |
здесь у нас два цикла for первый будет увеличивать позицию(pos) сервопривода от 1 до 180, второй цикл уменьшает позицию(pos) от 180 до 1. И серво привод будет перемещаться влево в право. Хотелось бы сказать на 180 градусов, но серво привод SG90 где то на pos=177 прекращает своё движение и поэтому полных 180 градусов не получается, опять же для измерения углов я бы этот инструмент не использовал.
Рассмотрим первых цикл for:
1 2 3 4 |
for (pos = 1; pos <= 180; pos += 1) { myservo.write(pos); delay(15); } |
сама конструкция for (действие перед началом цикла;условие пока выполняется цикл работает; действие на каждом шаге){блок кода выполняется на каждом шаге}. В нашем случае: for(в начале цикла pos приравнивается 1(pos=1); цикл будет продолжаться пока pos меньше или равно 180(pos <= 180); каждый шаг pos прибавит 1(pos+=1)). Каждый шаг этого цикла будет выполнятся следующий блок кода:
1 2 |
myservo.write(pos); delay(15); |
1 |
myservo.write(pos); |
Функция write(pos) изменяет позицию сервопривода myservo на позицию-pos.
Потом присходит задержка в 15 милисекунд функцией:
1 |
delay(15); |
Так как позиция pos при каждом шаге цикла for будет увеличиваться на 1, то каждые 15 милисекунд сервопривод будет двигаться на 1 (почти градус).
Второй цикл:
1 2 3 4 |
for (pos = 180; pos >= 1; pos -= 1) { myservo.write(pos); delay(15); } |
Делает тоже самое, но мы каждый шаг отнимаем из позиции pos 1 (pos -= 1).
поэтому серво привод будет двигаться в обратном направлении.
Блок loop будет повторятся постоянно.
Скетч закончился.
Видео процесса:
Продолжение статьи: Arduino. Взаимодействие с компьютером через USB порт.
Другие статьи по программированию плат Arduino можно посмотреть здесь.
Комментарии: