Помогите разобраться с управлением сверлильным станком

Тема в разделе "Arduino & Shields", создана пользователем Sparkfire, 30 окт 2015.

  1. Sparkfire

    Sparkfire Гик

    Всем привет. Необходимо сделать некий сверлильный станочек на меге2560. С тремя дисплеями( один 16х2, два 4 разрядных семисегментных), с клавиатурой и джойстиками длЯ ручного управления. Микрики и концевики приветствуются.
     
    Последнее редактирование: 7 ноя 2015
  2. Mestniy

    Mestniy Гуру

  3. Sparkfire

    Sparkfire Гик

    Последнее редактирование: 30 окт 2015
  4. Mestniy

    Mestniy Гуру

    Просто работа чере Вконтакте значительно ускорит время. И скажется на качестве...
     
  5. Megakoteyka

    Megakoteyka Оракул Модератор

    Вы это серьезно? :)
     
  6. Mestniy

    Mestniy Гуру

    Да. Мне намного приятнее работать с людьми через Вконтакте! Во всяком случае я привык так работать.
     
  7. Sparkfire

    Sparkfire Гик

    Так. ТЗ готово. Сейчас вышлю тем, кто оставил мне адрес почты.
    Mestniy. извините, не готов общаться ВК.
     
  8. Tomasina

    Tomasina Сушитель лампочек Модератор

    ВК - это туса подростков, а не место для деловых переписок.
     
  9. Mestniy

    Mestniy Гуру

    Tomasina, Вот и тусуйтесь:D:D:D:D:D. А через Вконтакте я выполнил уже 4 проекта. И я считаю, что это место для качественного выполнения работы!
     
    Последнее редактирование: 30 окт 2015
  10. Sparkfire

    Sparkfire Гик

    .
     
    Последнее редактирование: 7 ноя 2015
  11. Mestniy

    Mestniy Гуру

    Я отписался!
     
  12. Sparkfire

    Sparkfire Гик

    Спасибо.
     
  13. Sparkfire

    Sparkfire Гик

    На всякий случай импровизированная логическая схема сборки
     

    Вложения:

    • Схема2.jpg
      Схема2.jpg
      Размер файла:
      435,8 КБ
      Просмотров:
      945
  14. Sparkfire

    Sparkfire Гик

    Поступило предложение о дополнительной кнопке "Пауза" на панели управления.
    Идея здравая
     
    Последнее редактирование: 7 ноя 2015
  15. DrProg

    DrProg Вечный нерд

    Как все остальные только живут и работают без вконтакта? Несчастные.
     
    ИгорьК нравится это.
  16. Mestniy

    Mestniy Гуру

    Sparkfare, вынужден отказаться. Думаю не осилю. Простите за потраченок время...
     
  17. Sparkfire

    Sparkfire Гик

    Mestniy, ничего страшного)) Жду еще предложений)
     
  18. DrProg

    DrProg Вечный нерд

    Я вот пока не понял чем там управлять и что там индицировать? Ну подачу сверла плавную понимаю, без обратной связи (скорее всего). А что еще?
     
  19. Sparkfire

    Sparkfire Гик

    Управлять осью Х программируемо.
    Ось Y всегда ездит только по одному маршруту. Запуск-вперед-назад-выключение.

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


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

    Копал куски кода, вставлял их в скетч, работал над ошибками

    Моторчик тоже запускаю, пока сложнее, только так, как показано в различных примерах.

    Пока ответят еще двое участников моего своеобразного опроса по ценам на требуемый скетч, может и вовсе разберусь.

    С программирование сталкивался только в экселевских макросах, все очень похоже.

    на всякий случай скину то, что получилось, такой франкенштейн из кусков чужих скетчей
    Код (C++):
    int echoPin = 32;
    int trigPin = 38;
    int relayPin = 48;
    int ledPin = 42;

    void ledDigitDisplay(float num, float time)
    {
    unsigned long ltime = millis();
      // Настройки
      // 6, 8, 9, 12 - GND
      int pin[] = {6, 7, 8, 9, 10, 2, 11, 3, 4, 12, 13, 5}; // Пины
      int settingsSegments[] = {pin[10], pin[6], pin[3], pin[1], pin[0], pin[9], pin[4], pin[2]}; // Порядок сегментов
    int segments[] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111, 0b10000000, 0b01000000}; // 1, 2, 3, 4, 5, 6, 7, 8, 9, '.', '-'
      for(int i = 0; i < 12; ++i) pinMode(pin[i], OUTPUT); // Определяем пины как выход
      int floatingPoint = 0, minus = 4;
    if(num > -1000 && num < 0) // Разбираемся с отрицательными числами
      {
        minus--;
        if(num > -100) minus--;
        if(num > -10) minus--;
       num = -num;
    }
    for(int i = 0; num < 1000 && minus == 4; ++i) // Разбираемся с дробными числами
      {
        if(int(num * 10) != int(num)*10)
        {
          floatingPoint++;
          num *= 10;
        }
       else
          break;
      }
      for(int i = 0, temp; millis() - ltime <= time * 1000; i++)
    {
        if(i == 4) i = 0;
       temp = int(num / pow(10, i)) % 10; // Цифра которую передадим индикатору
        if(num >= 10000 || num <= -10000 || minus == i) // Если минус или переполнение, передаем '-'
          temp = 11;
        if(i == 3 && (num >= 1000 || floatingPoint == i || minus == i)) pinMode(pin[11], OUTPUT); else pinMode(pin[11], INPUT); // Работаем с 4 разрядом
       if(i == 2 && (num >= 100 || floatingPoint == i || minus == i)) pinMode(pin[8], OUTPUT); else pinMode(pin[8], INPUT); // Работаем с 3 разрядом
        if(i == 1 && (num >= 10 || floatingPoint == i || minus == i)) pinMode(pin[7], OUTPUT); else pinMode(pin[7], INPUT); // Работаем с 2 разрядом
       if(i == 0) pinMode(pin[5], OUTPUT); else pinMode(pin[5], INPUT); // Работаем с 1 разрядом
       for(int j = 0; j < 8; j++) // Передаем число
         if(segments[temp] & (1 << j))
           digitalWrite(settingsSegments[j], HIGH);
        if(floatingPoint && floatingPoint == i) // Передаем точку
         digitalWrite(settingsSegments[7], HIGH);
        delay(1); // Небольшая пауза, чтобы светодиоды разгорелись
        for(int j = 0; j < 8; j++) digitalWrite(settingsSegments[j], LOW); // Выключаем все светодиоды
    }
    }

    void setup()
    {
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
      pinMode(relayPin, OUTPUT);
    }
    void loop()
    {
      int duration, cm;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(1);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(5);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
      cm = duration / 5.69;
     
      ledDigitDisplay(cm,0.3);

      if( cm >= 200 ) {
        digitalWrite(relayPin, HIGH);
        digitalWrite(ledPin,HIGH);
      }
        else{
          digitalWrite(relayPin, LOW);
          digitalWrite(ledPin , LOW);
        }
      }
     
    Tomasina нравится это.
  20. DrProg

    DrProg Вечный нерд

    Зачем энкодеры если есть ШД? ШД тем и хорош, что у него каждый шаг на четко заданный угол. И зачем УЗ датчик, он для точной работы не годится.
     
    ИгорьК нравится это.