roboforum.ru

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

Вопросы новичка.

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Вопросы новичка.

Сообщение dimamichev » 12 авг 2018, 16:52

Мой день 800, я в отпуске...
Везде есть ключи в разном количестве, проще заказать конечно готовое, пока придут - отдохнуть. Сервы дают наивность в рисовании в отличии от шаговиков.
Вложения
IMG.jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 12 авг 2018, 16:59

dimamichev писал(а):Мой день 800, я в отпуске...

А цена монтажной платы? А цена ключей? Вот тебе прям выгоднее потратить день на пайку плат, чем потратить 110р x2 ? НЕ ВЕРЮ! :)

dimamichev писал(а): Сервы дают наивность в рисовании в отличии от шаговиков.

Функция random сделает любую наивность с точной механикой. Наоборот - нет :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение ilalexey » 12 авг 2018, 17:01

Dmitry__ писал(а):А вот паять на рассыпухе - это как нужно себя не любить?

Это не вопрос любви. Это дело заинтересованности в данный момент.
Когда едет крыша, тело двигается за ней(с, полицейская академия по моему).
Dmitry__ писал(а):почувствуй разницу, насколько такой драйвер лучше

Я это давно прочувствовал. Тебе ли не знать :)
Пол часа работы(этот проект):
Вложения
03.jpg
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: Вопросы новичка.

Сообщение dimamichev » 12 авг 2018, 17:09

Ну значит надо остановится пока на отрезках, заказать платки, и разбираться с библиотекой. А за одно искать связь между скоростью вращения одного ШД относительно другого и рисуемой в итоге траекторией.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 12 авг 2018, 17:31

dimamichev писал(а):А за одно искать связь между скоростью вращения одного ШД относительно другого и рисуемой в итоге траекторией.

В поисковике: "AccelStepper XY plotter"

https://ngin.pro/arduino/158-kak-sdelat-mini-chpu-2d-plotter-s-ispolzovaniem-dvd-privodov-l293d-motor-shield-i-arduino.html

Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение Scorpio » 12 авг 2018, 18:17

А мне нравится, что dimamichev делает все сам, а не копирует чужие проекты. У него же цель научится. Нарисовать домик можно и рукой или распечатать на принтере. Это не самоцель.
Можем прикрутить генератор надписей красивыми шрифтами. Надо наладить связь с ПК, как в предыдущем проекте. Уметь получать координаты точек x,y для рисования очередного отрезка, выполнять команды "PDWN", "PUP" (опустить/поднять перо) и сообщать ПК "FIN", после окончания каждой операции. Мне понадобится рабочая область и где начало координат.
В будущем, действительно научиться обрабатывать G-коды, чтобы как-то стандартизировать свое устройство.

Добавлено спустя 7 минут 22 секунды:
Вообще, первая рисовалка была интереснее в интерактивном плане. Больше похожа на руку с пером, чем на станок. И робот с мордочкой при ней был. А тут бездушная железяка :)
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение ilalexey » 12 авг 2018, 18:21

Так с самого начала ветер веет в сторону обучения учеников. Толку их учить библам(чужим к тому же).
----
Кстати при пайке драйверов не меньше времени/энергии расходуется чем при пайке улн. УЛН мне показалось быстрей паять. Можно по контактам прикинуть. У драйверов ещё нужно свичи подпаивать, а это дохрена пайки лишних контактов.
Последний раз редактировалось ilalexey 12 авг 2018, 18:52, всего редактировалось 1 раз.
Аватара пользователя
ilalexey
 
Сообщения: 3202
Зарегистрирован: 13 май 2011, 21:37
Откуда: Bb

Re: Вопросы новичка.

Сообщение Dmitry__ » 12 авг 2018, 18:46

Scorpio писал(а):А мне нравится, что dimamichev делает все сам, а не копирует чужие проекты.

Так он топчется на одном месте уже 2-й год. Это просто жесть, столько убить времени. Ардуина и придумана так, чтоб следующая поделка самоделкина была лучше оригинала. :pardon:

Все надо начинать с плана, я не просто так раньше задал вопрос о плане. Так и знал, что с серв все перейдет на плоттер с шаговиками. Эту туеву хучу времени можно было потратить со смыслом, но dimamichev слушает советы только после десятой грабли :)
В плане изучения языка Си - ничего не сделано, все на уровне 2-х летней давности. Как раз из-за того, что не смотрит код других программистов. Все сама, сама :)
Представь, ему сейчас сказать, что в контроллере есть прерывания и без них никуда? :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение Scorpio » 12 авг 2018, 18:55

Это да. Уже бы к ООП перейти. Те же шаговики правильнее оформить в виде классов. А мы опять к глобальным переменным скатываемся.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение Dmitry__ » 12 авг 2018, 20:47

Ооооооо, гляньте что человек сделал. И шаговики, и BLE. Надо его разводить на исходники :crazy:
Мне нужен BLE :)
http://roboforum.ru/forum10/topic18053.html
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение dimamichev » 12 авг 2018, 20:50

Scorpio писал(а):А мне нравится, что dimamichev делает все сам, а не копирует чужие проекты. У него же цель научится. Нарисовать домик можно и рукой или распечатать на принтере. Это не самоцель.
Можем прикрутить генератор надписей красивыми шрифтами. Надо наладить связь с ПК, как в предыдущем проекте. Уметь получать координаты точек x,y для рисования очередного отрезка, выполнять команды "PDWN", "PUP" (опустить/поднять перо) и сообщать ПК "FIN", после окончания каждой операции. Мне понадобится рабочая область и где начало координат.
В будущем, действительно научиться обрабатывать G-коды, чтобы как-то стандартизировать свое устройство.

Добавлено спустя 7 минут 22 секунды:
Вообще, первая рисовалка была интереснее в интерактивном плане. Больше похожа на руку с пером, чем на станок. И робот с мордочкой при ней был. А тут бездушная железяка :)

Рабочая область составляет по - Y 35 мм, по - X 75 мм. Начало координат как таковое отсутствует, шаговики не запоминают своего положения, задаю обратным ходом по отрезку с "минус суммой всех пройденных координат". Эта функция даёт иногда сбой - тогда просто корректирую руками, по меткам фломастера. Если на картинке объёмных фигур, то так. Соответственно, шаги по горизонтали с минусом - вправо, с плюсом - влево, по вертикали вниз и вверх соответственно.
Конечно первая рисовалка интереснее, была мысль крестики - нолики сделать с голосовым общением, без компа, но увлеклись прямоугольной системой и буквами порядка 10мм размера и меньше - отсюда шаговики (таков план, или его отсутствие). Хватит ли моих скудных ресурсов без библиотек, прерываний и переделки схемы для букав ? - возможно.
Вложения
IMG — копия.jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 12 авг 2018, 21:42

dimamichev писал(а): шаговики не запоминают своего положения

Поэтому в 3Д принтерах сначала выполняется установка начального положения по концевикам. Тебе придется это внедрить, иначе так и будешь руками двигать. Я, в любом случае, буду выдавать тебе абсолютные координаты для рисования. Только сначала реализуй, то что я тебе писал выше по протоколу обмена с ПК и отладь на СОМ мониторе.
Dmitry__ писал(а):Мне нужен BLE :)

На ESP32 нормальный BLE. Сам пробовал.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение Scorpio » 13 авг 2018, 03:53

Лови программку
stepper1.jpg

Запуск по аналогии с шашками. Коннектится на скорости 19200.
Для начала попробуй перемещать на точку GO (можно задавать кликом на поле). Посмотреть надпись после выбора шрифта - SHOW, очистить экран - CLR, WRITE дает задание на отрисовку. Если рисовалка при этом не подключена выведет массив точек в окошко под кнопкой CONNECT. Таким способом можно нагенерить библиотеку букв для дуины. Чем мельче и витееватей шрифт, тем больше отрезков. Т.к. максимальное разрешение 1мм, при мелком шрифте будет топтаться на месте. Попробуй для начала шрифт по умолчанию, как на картинке.
Не забудь, что после каждого отрезка ждет подтверждения "FIN". И, что координаты конца отрезка абсолютные.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 13 авг 2018, 07:30

Спасибо, буду переделывать скетч на монитор и координаты конца, схему с концевиками делать.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение dimamichev » 13 авг 2018, 11:31

Скетч подправил, программа находит СОМ3, арда на СОМ 5- в IDE переставляю на 3 - ничего не происходит.
Код: Выделить всёРазвернуть
///////////// СТАНОК ДЛЯ РИСОВАНИЯ //////////////////////////////
#include <Servo.h>

#define motor_Y_f1 8
#define motor_Y_f2 9
#define motor_Y_f3 10
#define motor_Y_f4 11

#define motor_X_f1 4
#define motor_X_f2 5
#define motor_X_f3 6
#define motor_X_f4 7
String inputString = ""; 
byte a0=140;byte a=a0;// угол исходного положения пера - поднято
int n=10;//переменная единицы временного интервала
int i=0;// счётчик
int i1=0;// счётчик
float X=0;float Y=0;//переменные учёта положения пера относительно начала координат

byte tablY[16]={0,1,1,1,
                1,1,0,1,
                1,0,1,1,
                1,1,1,0};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (биполярный)
byte tablX[16]={1,0,0,0,
                0,1,0,0,
                0,0,1,0,
                0,0,0,1};// ТАКТЫ ВКЛЮЧЕНИЯ - полношаговый режим в одну обмотку питанием (униполярный)
                           

Servo servo1;



void setup() {
Serial.begin(19200);
servo1.attach(12);
servo1.write(a0);delay(10*n);servo1.write(a0-5);//начальный подъём пера
pinMode(motor_Y_f1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(motor_Y_f2, OUTPUT);
pinMode(motor_Y_f3, OUTPUT);
pinMode(motor_Y_f4, OUTPUT);
digitalWrite(motor_Y_f1, HIGH); digitalWrite(motor_Y_f2, HIGH); digitalWrite(motor_Y_f3, HIGH); digitalWrite(motor_Y_f4, HIGH);// исходное состояние  - обмотки обесточены 
pinMode(motor_X_f1, OUTPUT);   //  определение вывода как ВЫХОД
pinMode(motor_X_f2, OUTPUT);
pinMode(motor_X_f3, OUTPUT);
pinMode(motor_X_f4, OUTPUT);
digitalWrite(motor_X_f1, LOW); digitalWrite(motor_X_f2, LOW); digitalWrite(motor_X_f3, LOW); digitalWrite(motor_X_f4, LOW);// исходное состояние  - обмотки обесточены 
}

void loop()
    {
     CheckSerial(); 
    }
/////////////////////////////////////////////////////////////
//////// функция постановки пера в точку с координатами 1 четверти для рабочего поля
////////////////////////////////////////////////////////////
void  Toschka (int x, int y)
{
  Otrezok((x-X),(y-Y));
  }   
/////////////////////////////////////////////////////////////
////// функция рисования отрезка длиной d под углом a
////////////////////////////////////////////////////////////
void Vektor(float d,int a)
{
  float x=d*cos(PI*a/180); float y=d*sin(PI*a/180);
   Otrezok(x,y);
  }
////////////////////////////////////////////////////////////////
////функция рисования отрезка по конечным координатам x и y
////////////////////////////////////////////////////////////////
void Otrezok(float x, float y)
{
  int nx;
  int ny=10;//принимаем как постоянную для задания скорости
  if (x!=0&&y!=0){nx=ny*2.35*abs(y)/abs(x);if (nx<3){nx=5;}}else {nx=50;}// вычисляем вторую постоянную для отрезка с учётом крайних недопустимых значений - 0 и бесконечность
  long tx=millis();long ty=millis();
  Y=Y+y;//текущий учёт положения пера относительно начала отсчёта
  y=4.7*y;//переводной множитель из миллиметров в число шагов двигателя
  X=X+x;//текущий учёт положения пера относительно начала отсчёта
  x=2*x;//переводной множитель из миллиметров в число шагов двигателя
  int j1=0;int k1;if (y>=0){k1=1;}else {k1=-1;}
  int j2=0;int k2;if (x>=0){k2=1;}else {k2=-1;}
  while ((j1<=(int)abs(y)-1)||(j2<=(int)abs(x)-1))
  {
  if(j1!=(int)abs(y)&&(millis()-ty>ny))//условие совершения шага
  {ty=millis();
  if(i<0){i=12;}if(i>12){i=0;}////условия зацикливания тактов по кругу
  digitalWrite(motor_Y_f1, tablY[i]);digitalWrite(motor_Y_f2, tablY[i+1]);digitalWrite(motor_Y_f3, tablY[i+2]);digitalWrite(motor_Y_f4, tablY[i+3]);
  i=i+4*k1;j1=j1+1;//условия перехода на следующий такт
  }
  if(j2!=(int)abs(x)&&(millis()-tx>nx))//условие совершения шага
  {tx=millis();
  if(i1<0){i1=12;}if(i1>12){i1=0;}//условия зацикливания тактов по кругу
  digitalWrite(motor_X_f1, tablX[i1]);digitalWrite(motor_X_f2, tablX[i1+1]);digitalWrite(motor_X_f3, tablX[i1+2]);digitalWrite(motor_X_f4, tablX[i1+3]);
  i1=i1+4*k2;j2=j2+1;//условия перехода на следующий такт
  } 
  }
  digitalWrite(motor_Y_f1, HIGH); digitalWrite(motor_Y_f2, HIGH); digitalWrite(motor_Y_f3, HIGH); digitalWrite(motor_Y_f4, HIGH);// исходное состояние  - обмотки обесточены
  digitalWrite(motor_X_f1, LOW); digitalWrite(motor_X_f2, LOW); digitalWrite(motor_X_f3, LOW); digitalWrite(motor_X_f4, LOW);// исходное состояние  - обмотки обесточены     
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////функция возврата пера в исходное положение на начало отсчёта
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void VozvratPera ()
{
  up_down_pen(false);
  Otrezok (-X,-Y);
  X=0;Y=0;

  }
  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////функция поднимания-опускания пера (значения аргумента false и true  соответственно)/////
void  up_down_pen(boolean  k)
{
  while (a>87&&k==1)
  {servo1.write(a);a=a-1;delay(n);}if(k== true ){a=87;}
   while (a<a0&&k==0)
  {servo1.write(a);a=a+1;delay(n);}if (k==false){a=a0;delay(10*n);servo1.write(a0-5);}
  }
  /////////////////////////////////////////////////////////////////////////////////////////////////
  void CheckSerial()
{
//////////////////////////////////////////////////////////////////////////////
  while (Serial.available())//считываем строку данных пока они поступают
  {
    char inChar = (char)Serial.read();
    if (inChar == '\n')     //если окончание строки
    {
      MakeCmd();//обрабатываем её данной функцией
      break;
    }
    else inputString += inChar;// иначе удлиняем строку на один символ
  }
}
/////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
void MakeCmd()
{
    int s=inputString.length();// присваиваем переменной у число символов в строке
    if (s<3||s>6)return;//если их меньше 3 или больше 6, выходим из функции
    String cmd=inputString;// передаём строку другой переменной
    inputString = "";//"обнуляем переменную"
/////////////////////////////////////////   
if (cmd=="PDWN"){up_down_pen(true);}//
if (cmd=="PUP"){up_down_pen(false);}//   
  int k=cmd.indexOf(',');
  if(k>0)//получены координаты точки
  {
    int x=cmd.substring(0,k).toInt();
    int y=cmd.substring(++k).toInt();
    x=constrain(x, 0, 75);
    y=constrain(y, 0, 35);
    Toschka (-x,y);SendMail("FIN");
  }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////
void SendMail(String mail)                  // ОТПРАВКА СООБЩЕНИЙ
{
  Serial.println(mail);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Пред.След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron