Київський клуб аматорів астрономії "Астрополіс"

astromagazin.net
* *
Ласкаво просимо, Гість. Будь ласка, увійдіть або зареєструйтеся.
29 Березня 2024, 03:07:07

Увійти

google


Автор Тема: Астро-комбайн  (Прочитано 1195 раз)

0 Користувачів і 1 Гість дивляться цю тему.

kellkinel

  • Клуб Астрополіс
  • Offline Offline
  • Повідомлень: 217
  • Подяк: 45
  • Дмитрий
Астро-комбайн
« : 11 Жовтня 2015, 14:47:07 »
. - .

Давно я зрею идей посадить электрофокусер и колесо фильтров на единый контролер.
И вот найдя единомышленников- решился.

Описание устройств:
Колесо фильтров (по чертежам Ивана Ионова)
http://qhy.narod.ru/FWF/index.htm

Электрофокусер, само крепление нет смысла пока описывать.

Электроника:

0.  arduino ATmega32U4 ЕСТЬ 1 ШТ
http://ru.aliexpress.com/item/1pcs-lot-Pro-Micro-for-arduino-ATmega32U4-5V-16MHz-Module-with-2-row-pin-header-For/32340783798.html?adminSeq=205957859&shopNumber=731260
1. Nema17  0.4A  ЕСТЬ 1 ШТ
http://ru.aliexpress.com/item/Free-shipping-1set-Hybrid-Nema17-bipolar-step-stepper-motor-0-4A-34mm-length-26Ncm-4-leads/32268465289.html?adminSeq=221040763&shopNumber=1294847
2. Драйвер ШД ЕСТЬ 1 ШТ
http://ru.aliexpress.com/item/Free-shipping-1pcs-lot-3D-Printer-StepStick-DRV8825-Stepper-Motor-Drive-Carrier-Reprap-4-layer-PCB/32340815037.html?adminSeq=205957859&shopNumber=731260
3. 4-фазный шаговый двигатель 5  В + ULN2003 (правда он немного люфтит) ЕСТЬ 2 ШТ
http://ru.aliexpress.com/item/FREE-SHIPPING-1LOT-5V-4-phase-Stepper-Motor-Driver-Board-ULN2003-1-x-Stepper-motor-1x/1409952132.html?adminSeq=201112132&shopNumber=110055
4. Датчики температуры (пока не знаю какие)
5. Датчики позиционирования (также не знаю какие)
6. Бипер. Польза самого бипера может быть к примеру когда меняется положения колеса фильтров, или при резком скачке температуры   ЕСТЬ 4 ШТ
7. Прочее (подшипники, провода, муфты) Все есть

Алгоритм работы v0.1:
Нужен скрипт, с помощью которого будет происходить управление данным "комбайном".

Параметры управления со скрипта:
1. Указывать параметры съемки (временные)
2. Указывать фильтры, участвующие в данной сессии.
3. Указывать параметры дризлинга, для текущих кадров.
4. Коэффициент люфта моторов
5. Показывать значения с датчиков температуры и влажности.
6. Термокомпенсация
7. Alert - настраиваемые (резкие скачки температуры, переходы между фильтрами, конец сессии и т.п.)
8. Прочее надстройки.

Вот пока вся информация, прошу советов/рекомендаций.

Убедительная просьба, всех тех, кому безразличен данный проект - пожалуйста не разводите флуд в теме.
Спасибо за понимание :)!
« Останнє редагування: 11 Жовтня 2015, 14:55:01 від kellkinel »
Записаний

M_M

  • Клуб Астрополіс
  • Offline Offline
  • Повідомлень: 5068
  • Подяк: 1094
Re: Астро-комбайн
« Відповідь #1 : 11 Жовтня 2015, 17:06:52 »
. - .

Идея собрать "под одной крышей" электрофокусер и колесо фильтров логична и технически исполнима.
Но... может возникнуть конфликт между устройствами, использующими один ком-порт. Стандартное применение устройств - одно устройство - один ком-порт. Два устройства - два ком-порта. Если на одном порту два устройства - нужно писать свой драйвер, и общаться с устройствами только через драйвер.

В связи с дешевизной, возможно, стоит рассмотреть наличие двух ардуин под одной крышей. Это убережет от возможных конфликтов.

В таком случае можно воспользоваться готовыми драйверами, если повторить известный протокол работы. Например, для колеса фильтров - драйвер от Optec. Протокол описан тут: http://www.optecinc.com/astronomy/catalog/ifw/resources/ifw_technical_manual.pdf

Записаний

kellkinel

  • Клуб Астрополіс
  • Offline Offline
  • Повідомлень: 217
  • Подяк: 45
  • Дмитрий
Re: Астро-комбайн
« Відповідь #2 : 12 Жовтня 2015, 19:23:30 »
. - .

Итак, потихоньку движемся с Николаем (M_M).
Сегодня набросали первый скетч, в котором реализовано управление одним ШД с помощью кнопок.

Железо:

  • Arduino UNO R3
    LCD1602 с кнопками
    5V 4-phase Stepper Motor+ Driver Board ULN2003

Скетч:

Код: [Select]
#include <Wire.h> // добавляем необходимые библиотеки
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7 );
char pinSM1 = 0;// пины драйвера ШД
char pinSM2 = 1;
char pinSM3 = 2;
char pinSM4 = 3;
char phase = 0; //переменная, в которой мы храним текущую фазу мотора
// Нажатые кнопки
int led = 13;
int button;
const int BUTTON_NONE   = 0;
const int BUTTON_RIGHT  = 1;
const int BUTTON_UP     = 2;
const int BUTTON_DOWN   = 3;
const int BUTTON_LEFT   = 4;
const int BUTTON_SELECT = 5;

char CurrentPhase = 0;// с помощью кнопок сотворим смену фаз.
void fnButtonUp()//шаг в одну сторону
{
   if (phase <7)
      phase = phase+1;
   else
      phase = 0;
      setMotorPhase(phase);
}
void fnButtonDown()//шаг в обратную сторону
{
   if (phase >0)
      phase--;
   else
      phase = 7;
   setMotorPhase(phase);
}
void setMotorPhase (char phase)//функция установка фаз мотора от 0 до 7
//вращаем в одну сторону - фаза меняется 0 1 2 3 4 5 6 7 0 1 2 ...
//вращаем в другую - фаза меняется 0 7 6 5 4 ...
{
      lcd.setCursor(0, 1);
      lcd.print((int)phase);//
      delay(500);
      switch (phase)
  {
    case 0:
      digitalWrite (pinSM1, 1);
      digitalWrite (pinSM2, 0);
      digitalWrite (pinSM3, 0);
      digitalWrite (pinSM4, 0);
      break;
    case 1:
      digitalWrite (pinSM1, 1);
      digitalWrite (pinSM2, 1);
      digitalWrite (pinSM3, 0);
      digitalWrite (pinSM4, 0);
      break;
      case 2:
      digitalWrite (pinSM1, 0);
      digitalWrite (pinSM2, 1);
      digitalWrite (pinSM3, 0);
      digitalWrite (pinSM4, 0);
      break;
      case 3:
      digitalWrite (pinSM1, 0);
      digitalWrite (pinSM2, 1);
      digitalWrite (pinSM3, 1);
      digitalWrite (pinSM4, 0);
      break;
      case 4:
      digitalWrite (pinSM1, 0);
      digitalWrite (pinSM2, 0);
      digitalWrite (pinSM3, 1);
      digitalWrite (pinSM4, 0);
      break;
      case 5:
      digitalWrite (pinSM1, 0);
      digitalWrite (pinSM2, 0);
      digitalWrite (pinSM3, 1);
      digitalWrite (pinSM4, 1);
      break;
      case 6:
      digitalWrite (pinSM1, 0);
      digitalWrite (pinSM2, 0);
      digitalWrite (pinSM3, 0);
      digitalWrite (pinSM4, 1);
      break;
      case 7:
      digitalWrite (pinSM1, 1);
      digitalWrite (pinSM2, 0);
      digitalWrite (pinSM3, 0);
      digitalWrite (pinSM4, 1);
      break;
  }
}
void TurnLedOn()// функция вкл светодиода
{
      digitalWrite(led, 1);
}
void TurnLedOff()
{
      digitalWrite(led, 0);
}



int getPressedButton()
{
  int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0)
  if (buttonValue < 100) {
    return BUTTON_RIGHT; 
  }
  else if (buttonValue < 200) {
    return BUTTON_UP;
  }
  else if (buttonValue < 400){
    return BUTTON_DOWN;
  }
  else if (buttonValue < 600){
    return BUTTON_LEFT;
  }
  else if (buttonValue < 800){
    return BUTTON_SELECT;
  }
  return BUTTON_NONE;
}

void setup()
{
  pinMode(13, OUTPUT); // говорим об использовании 13 светодиода
  lcd.begin(16, 2);             
  lcd.print("kellkinel");   
  pinMode(led, OUTPUT);
  pinMode(pinSM1, OUTPUT);//подключаем драйвер ШД
  pinMode(pinSM2, OUTPUT);//подключаем драйвер ШД
  pinMode(pinSM3, OUTPUT);//подключаем драйвер ШД
  pinMode(pinSM4, OUTPUT);//подключаем драйвер ШД 
}

void loop()


{
  button = getPressedButton();
  switch (button)
  {
    case BUTTON_RIGHT: // при нажатии кнопки выводим следующий текст
       lcd.setCursor(0, 0);
       lcd.print("BUTTON: RIGHT");
       lcd.setCursor(0, 1);
       lcd.print("RIGHT");
       break;
    case BUTTON_LEFT:
       lcd.setCursor(0, 0);
       lcd.print("                   ");
       lcd.setCursor(0, 0);
       lcd.print("BUTTON: LEFT");
       break;
    case BUTTON_UP:// функция вкл светодиода
      fnButtonUp();
      break;
    case BUTTON_DOWN:
      fnButtonDown();
      break;
    case BUTTON_SELECT:
       lcd.setCursor(0, 0);
       lcd.print("                 ");
       lcd.setCursor(0, 0);
       lcd.print("BUTTON: SELECT");
       break;
     
       

 
}}
Записаний

Буйный астроном

  • Offline Offline
  • Повідомлень: 819
  • Подяк: 196
  • My observatory
Re: Астро-комбайн
« Відповідь #3 : 26 Жовтня 2015, 12:42:08 »
. - .

Для ардуино есть замечательная библиотека AccelStepper, которая упростит этот код на порядок. Ещё рекомендую использовать библиотеку для устранения дребезга кнопок.  ;)
Записаний