Електроника и Електротехника | Electronics and Electrical Engineering > Аналогово управление | Analog Control
Arduino за стрелки
pach:
Митко, коригирал съм се почти веднага в следващи пост и точно
това съм написал в него, намира се под този който коментираш ти.
Не знам защо не си го прочел!?
mitko0888:
Ами може пък и да съм го прочел. И да съм го разбрал двусмислено. Кое е серво, кое е ардуино, кой кого управлява, кое е цифрово, кое пък толкова "фино да е настроено отвън". Видях че пишеш и за някакви честоти и т.н. И понеже някои неща не са така, ако искаш - смятай го че съм повторил - но не всичко, а това което смятам че е вярното.
pavel75:
Не е нужно да стигаме до разправии. Предлагам ако нещо не е пълно просто да се допълваме.
В събота сигурно ще взема нещата от Емо и ще видя как ще се "запознаем" с Ардуиното. Че може да не си допаднем, знае ли човек.
pavel75:
--- Цитат на: emilchaushev link=topic=4987.msg108517#msg108517 date=1501167644 ---Сега ще сложа един малко по- сложен код за управление на сервото между 90 и 110 градуса, като в кода се вижда, че с декларирането и атачването се заема положение"Право" на стрелката.
Опитната постановка е за упраление с един бутон, свързан към пин 8 и серво на пин 9, като на пин 8 имаме оново резистор, който да държи масата. Всяко натискане на бутона води до превключване в противоположното положние на стрелката.
(Image removed from quote.)
================
КОД:
#include <Servo.h>
// константни променливи използвани за ъглите на сервото в градуси
const int straight = 90;
const int divergent = 110;
// Константни променлилви за пиновете, които се използват
const int buttonpin = 8;
const int servopin = 9;
// константа със стойност за забавяне на движението на сервото в милисекунди
const int step_delay = 70;
// декларираме сервото
Servo myservo;
// глобални променливи за запомняне позицията на сервото
int pos = straight; // current
int old_pos = pos; // previous
void setup()
{
// деклариране на пина за бутона
pinMode(buttonpin, INPUT);
// ето тук казваме директно след атачването да се обърне в права позиция сервото
myservo.attach(servopin); // attach to the servo on pin 9
myservo.write(pos); // set the initial servo position
}
void loop()
{
// всяка итерация започва с промяна на състоянието на бутона
// при натиснат бутон (reads HIGH), се премества сервото
int button_state = digitalRead(buttonpin);
if(button_state == HIGH){
old_pos = pos; // запазва текущата позиция
// променя позицията в обратното състояние
pos = pos == straight ? divergent: straight;
// премества сервото до новата позиция
if(old_pos < pos){ // ако новия ъгъл е по- голям
// завърта (увеличава) серво позицията от старото до новото състояние
for(int i = old_pos + 1; i <= pos; i++){
myservo.write(i); // записва следващата позиция на сервото
delay(step_delay); // пауза
}
} else { // обратно новия ъгъл е по- малък и ли равен
// завърта (намалява) серво позицията
for(int i = old_pos - 1; i >= pos; i--){
myservo.write(i); // записва следващата позиция на сервото
delay(step_delay); // пауза
}
}
}
}// край на цикъла
--- Край на цитат ---
Някой може ли да ми разясни потъмнения код?
pach:
Щом казваш Митко... :scratch_ones_head:
Щом взеха да се виждат разправии на останалите, аз спирам до тук. :hi:
Павка, най-добре пробвай - не е сложно.
Ето ти едно възможно решение с "липсващите" честоти.
Впрочем драйверната платка е много приятно допълнение и е
за 16 канала. В кода е даден елементарен принцип на действие.
Ти ( вие) го обвържете с бутоните за всеки канал ( както по-горе
сте го описали). Под клипа има линкове и към библиотеката с
премерния код. Дори започва именно с инициалиализация на
честотите за различните ъгли в рамките на 50-те херца
( виж горния ми пост диаграмата - периода е от тези 50 херца,
а коефициента на запълване дава трите основни честоти за ъглите).
Цената е " съвместима" с цената на платките с процесорчето и
драйвера.
Драйвера на платката има и други възможни функции
като например управление на стъпков двигател ( на мястото на
двата ДС мотора), а от него до управление на обръщателно кръг
са вече броени на пръсти оставащите стъпки.
Демонстрацията е с по-малък брой сервомашинки ( цифрови)
за това ползват адаптера. Бих препоръчал по-хубаво захранване за 16 машинки (SG90):
https://youtu.be/QjX4JKU_I9M
От тук нататък и аз като останалите очаквам да споделите
резултатите от пробите. Така е по-лесно явно.... :hi:
Успех!!!
Навигация
[0] Списък на темите
Премини на пълна версия