Електроника и Електротехника | Electronics and Electrical Engineering > Аналогово управление | Analog Control

Arduino за стрелки

<< < (10/38) > >>

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] Списък на темите

[#] Следваща страница

[*] Предходна страница

Премини на пълна версия