roboforum.ru

Технический форум по робототехнике.

Простая аниматроника на Ардуино

Re: Простая аниматроника на Ардуино

dimamichev » 01 фев 2020, 21:48

:crazy: Дошло до меня, серва с 4 проводом это не исполнительный механизм, это устройство ввода-вывода информации...
Заморочился "умным переключателем"- выставляем желаемую последовательность программ, а он сам эту последовательность перещёлкивает. Для опыта взял светодиод на 13 выводе (каждой программе - своя частота миганий).
Вложения
умный переключатель.jpg

Re: Простая аниматроника на Ардуино

dimamichev » 03 фев 2020, 21:36

Написал скетч для двух серв в режиме "ручное программирование". Движения в ролике повторяют хождение робозавра (картинку прилагаю).
В принципе теперь можно аниматроника руками шевелить для оживления.
Вложения
IMG_7259.JPG

Re: Простая аниматроника на Ардуино

Scorpio » 03 фев 2020, 23:36

Забавно. Похвально, что исследовательский запал еще не погас.

Re: Простая аниматроника на Ардуино

dimamichev » 14 фев 2020, 21:17

Код: Выделить всёРазвернуть
#include <Servo.h>
#define kolvoKAD 20//количество кадров-тактов
#define kolvoSV 2//количество сервоприводов (1-6 штук)
//сервоприводы подключаются Arduino UNO: сигнальный провод - со 2 вывода до 7, обратной связи с 14 по 19 (А0-А5)
Servo servo[kolvoSV];

byte ugolServ [kolvoKAD][kolvoSV];//массив-таблица хранения значений углов серв по кадрам
int tabl_da[kolvoSV];//массив переменных приращения углов серв
int tabl_ga[kolvoSV];//массив переменных длительностей между переключениями серв
long tabl_Ya[kolvoSV];//массив переменных хранения моментов времени
int tabl_poprFor[kolvoSV];//массив хранения поправок к формуле для каждой сервы

int n=500;//длительность общая шага-цикла в мс
int i=0;//счётчик элементов массивов
int j=0;//счётчик элементов массивов

boolean fl_A=false;//флаг состояний
boolean fl_B=false;//флаг состояний
boolean fl_C=false;//флаг состояний

void setup() {
   Serial.begin(9600);
   pinMode(13,OUTPUT);//вывод канала индикации
   digitalWrite(13, LOW);
   pinMode(10,INPUT);//вывод кнопки записи-воспроизведения движений серв
  for(i=0;i<kolvoSV;i++){servo[i].attach(i+2);servo[i].write(90);delay(500); servo[i].detach();}//начальные установки углов 90 градусов (подкл. на выводы начиная со 2 по возр.) 

///////////////// вносим данные поправок для каждой сервы ///////////////
tabl_poprFor[0]=0;
tabl_poprFor[1]=-4;
/////////////////////////////////////////////////////////////////////////
}
void loop() {
if(digitalRead(10)==LOW) {delay(300);//временная пауза для преодоления дребезга контактов кнопки

if(digitalRead(10)==HIGH){//если происходит краткое нажатие кнопки
zapis();}//функция на запись выставленных положений качалок для одного кадра

if(digitalRead(10)==LOW){//если происходит долгое нажатие кнопки
ispol_();}//функция на исполнение записанных в массив кадров
}
}
void ispol_()
{
  digitalWrite(13, HIGH);//включаем светодиод постоянно - пошло исполнение записанного
  for(i=0;i<kolvoSV;i++){servo[i].attach(i+2);servo[i].write((analogRead(14+i) - 75+tabl_poprFor[i]) / 3);}
 
  while(true)//запускается бесконечный цикл ходьбы
  {
     for (j=0;j<kolvoKAD;j++)//проверяем все углы по кадрам-тактам
   
   {
      if( fl_C==false) {Serial.println(" ");}//печатаем "пустую строку" между каждым кадром-тактом
       
       for(i=0;i<kolvoSV;i++){if(ugolServ [j][i]!=0){fl_A=true;break;}}
       if(fl_A==true)//если хоть один элемент кадра-такта не 0
     
     {
      fl_A=false;//взведение флага
      ///////////////////
       for(i=0;i<kolvoSV;i++)
       {
        if( fl_C==false){Serial.print("КАДР ");Serial.print(j);Serial.print(" СЕРВОПРИВОД ");
        Serial.print(i);Serial.print(" УГОЛ ");Serial.println(ugolServ [j][i]);}//печать в монитор выставленных углов по приводам и кадрам при первом проходе массива
       
        if(ugolServ [j][i]-servo[i].read()>0){tabl_da[i]=1;}//определяем есть ли приращение и его знак
        if(ugolServ [j][i]-servo[i].read()<0){tabl_da[i]=-1;}
        if(ugolServ [j][i]-servo[i].read()==0){tabl_da[i]=0;}
        if(tabl_da[i]!=0){tabl_ga[i]=n/abs(ugolServ [j][i]-servo[i].read());}//определяем временную паузу между приращениями шага
        if(tabl_da[i]==0){tabl_ga[i]=0;}
        }
      /////////////////
      do
       {
        fl_B=true;
            for (i=0; i<kolvoSV ; i++) {
              if (ugolServ [j][i]!=servo[i].read()) {
               fl_B=false;
                break;
                  }
                  }
         for(i=0;i<kolvoSV;i++)
         {
         if(millis()- tabl_Ya[i]>tabl_ga[i]&&ugolServ [j][i]!=servo[i].read()){tabl_Ya[i]=millis(); servo[i].write(servo[i].read()+tabl_da[i]);}
     
         }
      }while(!fl_B); // пока все сервы не придут к табличному углу поворота...
     }
   }
    fl_C=true;//сигнал на прерывание повторной печати в монитор порта
  }
}
/////////////////////////////////////////////////////////////

void zapis()
{
for(i=0;i<kolvoSV;i++){ugolServ [j][i]=(analogRead(14+i) - 75+tabl_poprFor[i]) / 3;}j++;if(j>=kolvoKAD){j=0;}//запись выставленных значений углов в массив
  digitalWrite(13, HIGH);delay(300);digitalWrite(13, LOW);//кратко мигаем светодиодом -запись прошла 
}


Обобщил скетч механического программирования движений качалок сервопривода для 1-6 серв. Максимальное количество ограничивается числом аналоговых входов, это легко изменить с помощью мультиплексоров. А вот как оставить свободные пины после использования 12 серв это вопрос.

Re: Простая аниматроника на Ардуино

dimamichev » 21 фев 2020, 17:10

Задумался попробовать сделать квадропода с механическим программированием (чисто для знания). Моя конструкция с "лобзиковой печатью на секундном клее" явно не выдержит такого. Насмотрел ходовой вариант для печати. Подскажите сколько такой вариант может стоить и где проще заказать?
Вложения
s29406541.jpg
s35818215.jpg
s35818215.jpg (91.83 КиБ) Просмотров: 2406

Re: Простая аниматроника на Ардуино

dimamichev » 23 фев 2020, 14:45

Нашёл как подсчитать, около 1200 рублей удовольствие.

Re: Простая аниматроника на Ардуино

Scorpio » 23 фев 2020, 19:24

Такому самоделкину уже пора свой принтер заиметь.

Re: Простая аниматроника на Ардуино

Dmitry__ » 23 фев 2020, 21:42

Scorpio писал(а):Такому самоделкину уже пора свой принтер заиметь.

И это будет первое полезное устройство в его зоопарке :)
Только лучше собрать...

Re: Простая аниматроника на Ардуино

dimamichev » 24 фев 2020, 13:00

Сама по себе вещь любая бесполезна, вопрос в пользователе:)
Принтер дорогая вещь и сложная. Сначала надо понять как модельки делать, потом как пользоваться принтером, потом научиться отличать средь них хрен от редьки, потом устройство, потом думать о готовых наборах для сборки. А желалки возникли от зависти :) читатель решил повторить квадропода, обратился с просьбой переделать приложение и скетч под свой вариант. А вариант реализован на принтере, плату в Китае заказал, короче красивый вариант, не то что у меня. Так что теперь только механическое программирование и голосовое управление квадроподом меня утешит. А десятки тысяч под устройство пока бесполезное в моих руках это рановато.

Re: Простая аниматроника на Ардуино

dimamichev » 29 фев 2020, 15:28

Распечатали детальки, заказал сервы, саморезы для крепления, нано... пока 2 месяца ждать задумался о создании моделек деталей для своих конструкций. С чего начинать? Какие особенности при разработке элементов корпуса, чтоб проще и дешевле?
Вложения
робозавр.jpg
P1100705.JPG

Re: Простая аниматроника на Ардуино

Scorpio » 29 фев 2020, 18:36

Мне нравится OpenScad.

Re: Простая аниматроника на Ардуино

dimamichev » 29 фев 2020, 18:52

На робозавре своём хочу потренироваться, сначала придумать адекватные для принтера детальки-схему шасси, а уже потом пробовать рисовать в программах. "Опенскад" тяжеловат для далёкого от объёмного моделирования человека? А "Тинкеркад" это слишком примитивно?, размерные элементы с отверстиями и внутренними полостями не нарисовать.

Re: Простая аниматроника на Ардуино

Scorpio » 29 фев 2020, 18:58

"Опенскад" проще пареной репы. Ты, как программист его быстро освоишь. Морду динозавра не нем не нарисуешь, но детали для сборки - в самый раз.

Re: Простая аниматроника на Ардуино

dimamichev » 29 фев 2020, 19:05

Ну если есть обучалки... Это в нём с помощью команд-кода рисуют?

Re: Простая аниматроника на Ардуино

dimamichev » 01 мар 2020, 21:29

Нарисовал первую детальку - основание для крепления серв (без отверстий). Попробовал сохранить изображение в растре - ошибок нет и сохранённого файла в папке (указанной) тоже нет. В формате для печати файл тоже не с первого раза сохранился в указанной папке.
Вложения
первая деталь.jpg


Rambler\'s Top100 Mail.ru counter