Внешний вид Drawing Robot

Как то концепт надо изменить. Текущий имеет недостаток - не видно как робот рисует, движение пера маркера. Да и тяжеловат на внешний вид.


ИИ правильно ассоциацию уловил :slight_smile:

1 лайк

А чё, круто! Мне нравится!

Чтобы было видно - базу увеличить придётся и электронику разнести по сторонам.
Как вариант - прозрачную ардуину приобрести.

0
Типа такой технологии? :slight_smile:


Видоизменить, наверное.

тележки культ фаллический судьба сведёт на нет (по Т.Шаову (с))

Есть у меня опасения, что вынесенное от центра колёсной пары рисовало крайне усложнит алгоритм формирования результата. Сможет ли тележка изменить направление движения на 90 градусов, не меняя положения пера?

Нет, маркер строго на оси колёс, между. В этом изюминка проекта автора. А замена уплотнительных колец, фиксированного диаметра на отрезок скакалки в качестве покрышек позволяет чётко определять номинал шага движения в 0,25 мм и 0,5 градуса к примеру. На нижней картинке мой вариант - “вывернутые” моторы.
У Кена вообще процесс рисования не виден.

глянь личку

https://playgroundai.com/create
Вот здесь балуюсь, на предмет улучшения исходника не пробовал.

Вот исходник поглубже, округлости смотрятся гораздо симпатичнее и полусфера…
F60MB3OHWIBTTY3

вот так и сдают информацию, откуда десятина пошла )))


Решил пробовать нижний вариант компоновки шасси. Опыты показали, что 2 аккумулятора сильно разогревают моторы (у автора 5 солевых батареек по 1,5В), поставил понижающий преобразователь до 5 В. Ничего в работе не изменилось, нагрев существенно ослаб. Далее запитал робота одним аккумулятором, не снимая второй. Робот рисует медленнее, но без искажений.
Шар-опора не работает. Шарик не вращается, а волочится (особенно по стеклу). Хотя ход у него мягкий и свободный.
FC1ON1GIG6ROMG0
Чем заменить? Кроме шипа ничего не придумывается. Второй вариант хочется сделать легче, компактнее, изящнее. Упирается в моторы, есть варианты аналогичные чуть меньше, легче? Так то УНО на нано, платки драйверов на одну с ULN 2803 в смд исполнении, маркер на фломастер.

Ты шарик от мыши видел ?
Вот чем то таким и замени

не пойдёт, площади контактных поверхностей сильно неадекватные

Шарик от мыши - ни разу не опора.

Пока в ожидании комплектующих, думаю просто заменить качение (которого нет) на скольжение - распечатанная опора-полусфера.
Сейчас пробую ик управление с пульта в трёх уровнях: рисование на глазок (кнопочная навигация), точное построение отрезков и дуг по набору числовых значений через пульт, отображение готовых рисунков-шаблонов выбором с пульта. Каждый способ имеет свои недостатки и достоинства. Но в целом проблема одна - нужно уметь переводить линии картинки в длины отрезков-дуг и градусы поворотов.
Где можно искать готовое ПО по данной тематике?

Нет ничего, особенно если не знать чего хочешь. Пока придумался вариант натягивания дуг на каркас мысленно рисуемой ломаной.
проба
Математика кривоваста, даже с калькулятором в желаемое точно не попасть. Если использовать для вычислений Ардуино будет наверное ещё хуже. Конечно графический редактор для робота не помешал бы.


А пока цветик семицветик :slight_smile:


Решил не ждать покупных шаговиков, воспользовался от принтеров б\у. По расчётам, с концептом автора шаг по прямой - 2 мм, угловой 2 градуса (у шаговиков минимальный 7,5 градусов). Но с концептом автора получается 30. Т.е. вот эти “маски” совсем не оптимальны.

int fwd_mask[][4] =  {{1, 0, 1, 0},
                      {0, 1, 1, 0},
                      {0, 1, 0, 1},
                      {1, 0, 0, 1}};

int rev_mask[][4] =  {{1, 0, 0, 1},
                      {0, 1, 0, 1},
                      {0, 1, 1, 0},
                      {1, 0, 1, 0}};

Надо уменьшать шаг в 4 раза, сводя до 0,5 мм и градуса. С точки зрения программирования надо хранить последние поданные значения на каждую фазу каждого мотора. То есть отказаться от использования массивов-масок и переделать, но как (попроще)?
Вот базовый скетч автора (если кто понимает)

// Download and install Trinket Pro drivers from
// https://learn.adafruit.com/introducing-pro-trinket/starting-the-bootloader

// [Tools] -> [Programmer] -> "USBtinyISP"
// [Tools] -> [Board] -> "Pro Trinket 3V/12 Mhz (USB)"


#include <Servo.h>

// setup servo
int servoPin = 8;
int PEN_DOWN = 170; // angle of servo when pen is down
int PEN_UP = 80;   // angle of servo when pen is up
Servo penServo;

int wheel_dia=66.25; //      # mm (increase = spiral out)
int wheel_base=112; //,    # mm (increase = spiral in) 
int steps_rev=128; //,     # 512 for 64x gearbox, 128 for 16x gearbox
int delay_time=6; //            # time between steps in ms

// Stepper sequence org->pink->blue->yel
int L_stepper_pins[] = {10, 12, 13, 11};
int R_stepper_pins[] = {3, 5, 6, 4};

int fwd_mask[][4] =  {{1, 0, 1, 0},
                      {0, 1, 1, 0},
                      {0, 1, 0, 1},
                      {1, 0, 0, 1}};

int rev_mask[][4] =  {{1, 0, 0, 1},
                      {0, 1, 0, 1},
                      {0, 1, 1, 0},
                      {1, 0, 1, 0}};


void setup() {
  randomSeed(analogRead(1)); 
  // put your setup code here, to run once:
  Serial.begin(9600);
  for(int pin=0; pin<4; pin++){
    pinMode(L_stepper_pins[pin], OUTPUT);
    digitalWrite(L_stepper_pins[pin], LOW);
    pinMode(R_stepper_pins[pin], OUTPUT);
    digitalWrite(R_stepper_pins[pin], LOW);
  }
  penServo.attach(servoPin);
  Serial.println("setup");
}


void loop(){ // draw a calibration box 4 times
  pendown();
  for(int x=0; x<12; x++){
    forward(100);
    left(90);
  }
  penup();
  done();      // releases stepper motor
  while(1);    // wait for reset
}


// ----- HELPER FUNCTIONS -----------
int step(float distance){
  int steps = distance * steps_rev / (wheel_dia * 3.1412); //24.61
  /*
  Serial.print(distance);
  Serial.print(" ");
  Serial.print(steps_rev);
  Serial.print(" ");  
  Serial.print(wheel_dia);
  Serial.print(" ");  
  Serial.println(steps);
  delay(1000);*/
  return steps;  
}


void forward(float distance){
  int steps = step(distance);
  Serial.println(steps);
  for(int step=0; step<steps; step++){
    for(int mask=0; mask<4; mask++){
      for(int pin=0; pin<4; pin++){
        digitalWrite(L_stepper_pins[pin], rev_mask[mask][pin]);
        digitalWrite(R_stepper_pins[pin], fwd_mask[mask][pin]);
      }
      delay(delay_time);
    } 
  }
}


void backward(float distance){
  int steps = step(distance);
  for(int step=0; step<steps; step++){
    for(int mask=0; mask<4; mask++){
      for(int pin=0; pin<4; pin++){
        digitalWrite(L_stepper_pins[pin], fwd_mask[mask][pin]);
        digitalWrite(R_stepper_pins[pin], rev_mask[mask][pin]);
      }
      delay(delay_time);
    } 
  }
}


void right(float degrees){
  float rotation = degrees / 360.0;
  float distance = wheel_base * 3.1412 * rotation;
  int steps = step(distance);
  for(int step=0; step<steps; step++){
    for(int mask=0; mask<4; mask++){
      for(int pin=0; pin<4; pin++){
        digitalWrite(R_stepper_pins[pin], rev_mask[mask][pin]);
        digitalWrite(L_stepper_pins[pin], rev_mask[mask][pin]);
      }
      delay(delay_time);
    } 
  }   
}


void left(float degrees){
  float rotation = degrees / 360.0;
  float distance = wheel_base * 3.1412 * rotation;
  int steps = step(distance);
  for(int step=0; step<steps; step++){
    for(int mask=0; mask<4; mask++){
      for(int pin=0; pin<4; pin++){
        digitalWrite(R_stepper_pins[pin], fwd_mask[mask][pin]);
        digitalWrite(L_stepper_pins[pin], fwd_mask[mask][pin]);
      }
      delay(delay_time);
    } 
  }   
}


void done(){ // unlock stepper to save battery
  for(int mask=0; mask<4; mask++){
    for(int pin=0; pin<4; pin++){
      digitalWrite(R_stepper_pins[pin], LOW);
      digitalWrite(L_stepper_pins[pin], LOW);
    }
    delay(delay_time);
  }
}


void penup(){
  delay(250);
  Serial.println("PEN_UP()");
  penServo.write(PEN_UP);
  delay(250);
}


void pendown(){
  delay(250);  
  Serial.println("PEN_DOWN()");
  penServo.write(PEN_DOWN);
  delay(250);
}


Удалось совершить очередной прорыв в нанотехнологиях - создал на “процессенге” ПО (строк 20-30) для генерации кода роботу-рисовальщику.


Пока только отрезками, математика для дуг подводит или меня или процессинг. Зато сетки можно менять для удобства рисования. Есть ещё какие экзотические под графику?

Вместо сеток можно использовать шаблоны. И тогда, после обводки, делаем шаг конём.
трафарет — копия (2) — копия