Лазерный дальномер для arduino

Тема в разделе "Посоветуйте детальки", создана пользователем Roman Koff, 6 июн 2017.

  1. Roman Koff

    Roman Koff Нерд

    Возможно ответ в этой картинке: [​IMG]
    После соединения с платой отправляй на нее соотв. команда и получай ответ.
     
  2. Roman Koff

    Roman Koff Нерд

    Прикольный девайс. Как получится, отпишись, как в работе. Может тоже прикуплю для изучения.
     
  3. sslobodyan

    sslobodyan Гик

    Какая точка? От луча? Наверняка вы не успеете моргнуть за время включения-выключения лазера ;)
    И зачем там библиотеки? Подключитесь любым терминалом и посмотрите что он шлет в порт. По рисункам похоже что идет поток с расстоянием и температурой.
     
  4. Вот бы знать что на неё отправлять!
    Завтра вечерком буду опять пытать паяльник и мозг!
     
  5. Roman Koff

    Roman Koff Нерд

    Видимо имеется ввиду лазерный целеуказатель (в некоторых дальномерах есть точка для ориентира). Посылаешь заглавную O — включаешь, C — выключаешь, D — запрос дистанции, S — температуры.

    Там написано по аглицки.
     
  6. Вот бы знать что на неё отправлять!
    Завтра вечерком буду опять пытать паяльник и мозг!
    договорились!
     
  7. Roman Koff

    Roman Koff Нерд

    Здесь эти операции делаются с помощью монитора COM-порта:

    [​IMG]
     
    Сергей Ф нравится это.
  8. sslobodyan

    sslobodyan Гик

    Сергей Ф нравится это.
  9. На видео выглядит круто.
    Но мне надо к ардуинке прикрутить, т.к. Лазер по задумке ездить вместе с ней должен и определять положение в пространстве манипулятора.
    И исходя из положения говорить едем влево или вправо.
     
  10. sslobodyan

    sslobodyan Гик

    Напишите что вы поняли из видео как эта штука работает, что делаете и что не получается - поможем.
     
  11. Я понял, что можно подключиться к ноуту, выбрать ком порт, задать скорость 19200 и готовая програмулина будет выдавать данные.
    Не понял, какой скетч надо написать для ардуины,чтоб при подключении к ней лазера напрямую она выводила данные.
     
  12. Завтра попробую ещё разок, по результатам отпишусь. Спасибо!
     
  13. sslobodyan

    sslobodyan Гик

    Низачет ;) Смотрите еще раз.
     
  14. Roman Koff

    Roman Koff Нерд

    Это не готовая программулина, это обычный монитор com-порта для компа. Через com-соединение подаются управляющие символы (O, C, D, S) и в ответ устройство возвращает данные. Программулина просто отображает данные передаваемые от кома на устройство и обратно. Это же можно делать используя ардуину, но, возможно будут нюансы с тем, что там не классический com-порт а TTL (а может и не будут).

    Скетч для ардуино может быть простой. Обычный обмен данными через com-порт. Посылаем команду, получаем ответ и анализируем.
     
    Последнее редактирование: 7 фев 2018
  15. Здравствуйте мужчины.
    С вашей помощью через ком порт подключить удалось.
    На рабочем месте расстояния больше 17 м не нашлось.

    теперь надо скетч для ардуины написать и понять что куда втыкать!

     
  16. #include <SoftwareSerial.h>

    SoftwareSerial mySerial(0, 1);

    void setup() {

    Serial.begin(19200);
    while (!Serial) {
    }

    Serial.write("D");



    }

    void loop() {
    if (mySerial.available()) {
    Serial.write(mySerial.read());
    }
    if (Serial.available()) {
    mySerial.write(Serial.read());
    }

    }

    а в ответ ошибка.

    Скетч использует 2874 байт (8%) памяти устройства. Всего доступно 32256 байт.
    Глобальные переменные используют 303 байт (14%) динамической памяти, оставляя 1745 байт для локальных переменных. Максимум: 2048 байт.
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x00
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x00
    Произошла ошибка при загрузке скетча

    подключил в rx и tx разъемы.
     
  17. Roman Koff

    Roman Koff Нерд

    Ошибка при загрузке скетча. Видимо ардуинке неправильно подключена (порт и скорость!)
    И еще, к mySerial кто подключен? Если дальномер, то при чем тут Serial.begin(19200)?

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

    Ну и на всякий случай, RX на TX, а TX на RX. Скорость и пины нужно для нестандартного порта выставлять (дальномер).
     

  18. Ошибка была не совсем в этом.
    Просто при подключении через tx и rx ардуину уно прошить просто нельзя.
    Поэтому я вначале прошиваю, а потом включаю лазер.
    Данные отправить удалось, пищалка заработала, лазер загорелся.
    Но в порт выводит непонятные данные.

    Вот скетч:
    Код (Text):


    #include <SoftwareSerial.h>

    SoftwareSerial mySerial(0, 1); // RX, TX

    void setup() {
     
      // Open serial communications and wait for port to open:
      Serial.begin(19200);
      while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
      }
      Serial.println("O");

      // set the data rate for the SoftwareSerial port
    }

    void loop()
    {

    if (mySerial.available()) {
      Serial.write(mySerial.read());
      }
      if (Serial.available()) {
      mySerial.write(Serial.read());
      }
     
      Serial.println("F"); //отправляем F для включения лазера
      Serial.flush();   //ждем
      delay(2000);   //еще ждем
      float x = 0;
    x = Serial.read();       //считываем что ответила
      Serial.flush();
      delay(2000);
     
      Serial.println(x, DEC);  // выводим что ответила
      delay(2000);
    }
     

    Только выводит что то не то:

    70.0000000000
    F
    70.0000000000
    F
    70.0000000000
    F
    70.0000000000
    F
    70.0000000000
    F
    70.0000000000

    и.т.д.

    Как корректно прочитать, что приходит?
    Подскажите пожалуйста!
     
  19. CYITEP_BAC9I

    CYITEP_BAC9I Гик

    таки дико извиняюсь, если не прав. Но по моему вы сначала очищаете serial а потом пытаетесь от туда что то считать. не мой взгляд после отправки
    Код (C++):
    Serial.println("F");
    нужно слушать что выдаст Serial
    Код (C++):
    if (mySerial.available())
    кстати зачем вам SoftwareSerial если вы работаете через "железный" сериал.
    только учусь, все выше сказаное только предположение.
     
  20. Roman Koff

    Roman Koff Нерд

    Нужно одновременно подключить два com-порта. Один на дальномер (со скоростью 19200), а другой на стандартный com-порт уны. При этом сделать пересылку данных с одного порта на другой и обратно. Тогда можно будет с монитора порта IDE послать команды на дальномер и получить их обратно в монитор. После этого можно уже и логику писать в ардуине.

    Не могу найти пример, на разных машинах затерялся, но такая задача точно разбирается в стандартных примерах. Гуглите, Шура, гуглите...