ИК клавиатура для тахеометра из смартфона и не только.

Тема в разделе "Сделай Сам", создана пользователем igor kruchkovskiy, 16 ноя 2017.

  1. Philin

    Philin Форумчанин

    Спаял кнопки по схеме и проверил тестером. Проверил на печати выдавленный текст в 3D модели.
    [​IMG]

    Осталось дождаться последнюю деталь, окончательно смоделировать корпус и написать программу для ардуино (прогу не долго писать, на днях начну и закончу).

    PS Много лет искал возможность превращать в AutoCAD обычный текст в объёмный 3D текст. Думал, что это невозможно, нигде информации нет. Оказывается, что решение проблемы было всегда со мной - в лицензионной версии AutoCAD это стандартная, но вручную устанавливаемая функция ;) В пиратских версиях AutoCAD её нет.
    Не уверен в том, что она есть в 2015-2018 и более новых версиях автокад. Функция была настолько малоизвестна, что ей никто не пользовался. Она присутствует отдельно на лицензионных дисках автокад версий 2000-2013.
     
  2. X-Y-H

    X-Y-H Администратор Команда форума

    Philin, в смысле объемный?
     
  3. Philin

    Philin Форумчанин

    В смысле превратить обычный текст в объёмную 3D модель для того чтобы её можно было сложить/вычесть с другой моделью.

    [​IMG]

    Слева простой текст. Справа его копия, но уже выдавленная по оси Z и представляющая собой 3D модель.
     
  4. X-Y-H

    X-Y-H Администратор Команда форума

    взрываешь текст до примитивов - есть в экспресс тулзе и потом выдавливаешь
     
    igor kruchkovskiy нравится это.
  5. Кишит? В каких же таких просторах?
     
  6. igor kruchkovskiy

    igor kruchkovskiy Форумчанин

    Наберите в Гугле ИК пульт из сматфона.
     
  7. Philin

    Philin Форумчанин

    Спаял всю электронику, осталось выключатель припаять и выводы на батарею.
    Теперь займусь написанием прошивки, моделированием и печатью корпуса.



    К зиме успею :)
     
  8. Vladimirych

    Vladimirych Форумчанин


    --- Сообщения объединены, 24 май 2018, Оригинальное время сообщения: 24 май 2018 ---
    А что за паяльник?
     
  9. Philin

    Philin Форумчанин

    Газовый паяльник.

    Удобство в том, что можно паять где угодно, не привязан к розетке. Но если много паять, то баллон газа с собой надо брать, у этого паяльника одна заправка это примерно 45-50 минут работы.

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

    Только газ надо дорогой покупать. Иначе сопло забьётся очень быстро и придётся новый паяльник покупать (сопло не сменное, микронных размеров).
     
    Последнее редактирование: 24 май 2018
    Vladimirych нравится это.
  10. BearDyugin

    BearDyugin Модератор Форумчанин

    Что за чудо функция? Пиратские AutoCAD'ы ни чем не отличаются от лицензии, всё пиратство только в обходе регистрации.
    С давних времен и по настоящий момент, с помощью Express Tools можно делать как показано на видео
     
    igor kruchkovskiy нравится это.
  11. Philin

    Philin Форумчанин

    Оффтоп

    А это видео к чему здесь?

    Ни к ИК, ни к смартфонам, ни к практическому моделированию... вроде отношения не имеет.

    Идея красивая, но не более. А функция в экспресс тулз работает криво. Если бы вы действительно ей пользовались, то узнали бы, что некоторые буквы функция при разрывании превращает в самопересекающиеся полилинии, а такие полилинии невозможно выдавить в объём.

    А так этих способа как минимум два. Один работает с полигонами и сам автоматически их вытягивает на указанное расстояние, НО работает только с латиницей и цифрами. Другие кодировки(языки) не поддерживаются.

    Второй из экспресс тулз, делит на полилинии криво, часть приходится дорабатывать вручную(напильником :)) т.к. могут получаться самопересекающиеся полилинии и при их вытягивании получите ошибку от автокад "невозможно выдавить самопересекающуюся фигуру". Но работает с любым текстом.
     
  12. Philin

    Philin Форумчанин

    Написал код прошивки контроллера частями (модулями) и отладил каждый модуль по отдельности.
    По итогам отладки обнаружилось, что 2 из 18 кнопок клавиатуры не совсем верно работают (возможно перегрел при пайке или флюс внутрь зашёл при промывке в спирте). Заменил кнопки на новые.

    На текущий момент электроника работает и проверена. Прошивка написана отдельными блоками и проверена в работе.
    Осталось объединить блоки прошивки в общую рабочую прошивку, далее прошить прошивку, завершить модель корпуса и собрать ИК пульт.

    К зиме успею ;)

    PS В другой теме собрался сделать приёмник для вечешника при выносе в натуру. Заранее опционально там запроектирую возможность подключения ИК приёмника к базе и передачи команд с этого ИК пульта (или с штатного ИК пульта Sokkia).

    Стрелками ИК пульта команды типа:
    - вверх = дальше
    - вниз = ближе
    - налево = налево
    - направо = направо
    ... далее цифрами число с ИК пульта

    PPS И нашёл ещё одну электросхему клавиатуры на которой можно собрать пульт. Схема раза в 3 проще (без диодов и резисторов), одна прошивка позволит работать с любой из этих схем, НО упрощённая схема может глючить в местах сильных электропомех (из-за наводок). Для себя оставлю сложную, но если кому интересно, то могу выложить простую, хотя, чего тут выкладывать, достаточно посмотреть на схему подключения показанную ранее с ардуино и убрать из неё диоды с резисторами (оставить только 8 проводов от клавиатуры к ардуино).
     
  13. Philin

    Philin Форумчанин

    Упрощённая схема. Собираемая из заводских компонентов.
    Справа ИК светодиод. Слева диод режима NUM.

    [​IMG]

    Плата UNO для примера (в конструкторе нет Nano :) ). Лучше использовать Nano, она раз в 20 меньше. Батарея 9В тоже для примера, у меня будут микробатарейки на 12В (меньше Кроны раз в 5).

    Два резистора в пределах 300 Ом (+-50 Ом).
     
  14. dsprts

    dsprts Форумчанин

    Оффтоп

    я покупал газовый но как то слишком опасно иногда. да и пьезорозжига нет.
    вот юсб и в портативную зарядку воткнул это нормально


     
  15. Philin

    Philin Форумчанин

    Оффтоп

    У меня и машина на газу... не вижу никакой опасности.
    Народ с газовыми зажигалками в кармане ходит - караул! ;)
     
  16. dsprts

    dsprts Форумчанин

    Оффтоп

    да понятно что и лезвия можно сьесть аккуратно и не пораниться.
    Вы пользовались паяльником на жалах хакко т12?
    земля и небо после 900 серии (не про медные речь)
    Я просто как то в машине штаны газовым подпалил. после этого убрал в долгий ящик
     
  17. Philin

    Philin Форумчанин

    Прошивку написал, электроника вся собрана. Работа проверена и отлажена. Со светодиодом состояния NUM похоже переборщил :) он слишком яркий, пока так оставлю, посмотрю на солнце.

    Осталось сделать модель корпуса, распечатать и собрать пульт.
     
  18. Philin

    Philin Форумчанин

    Сделал половину корпуса.
    [​IMG]
    Снизу корпуса щель, во второй половине будет ответный зуб. Верхняя часть крепится двумя винтами М3 (металлические спецгайки в пластике уже стоят).

    Заканчиваю проектирование второй половины.

    К зиме успею :)
     
    2LS нравится это.
  19. Philin

    Philin Форумчанин

    Собрал, работает. К зиме успел (она тут как раз начинается, +6 уже на улице:) ).

    [​IMG]

    Идею формы задней стенки взял с пульта какого-то дорогого музыкального центра, там это для того чтобы пульт из рук не выпадал сделано было.
    От аккумулятора 9В 400мА время автономной работы получилось около 20 часов (или часов 10 на морозе), можно его увеличить в пять раз (отпаяв одну детальку с ардуино, но пока лень).

    Светодиод - ЗВЕРЬ :) Учитывая то, что я его ослабил чуток. На солнце самое то.

    Габариты были указаны ранее, я в них уложился. Пульт легко помещается в карман рубашки.

    Подключение к портам по предыдущему моему сообщению.
    Код прошивки для ардуино (раскрыть)


    Используется стандартная библиотека для работы с ИК датчиком, а также библиотека для клавиатуры от amperka.ru

    Код:
    // подключаем библиотеку работы с ИК диодом(передатчиком)
    #include <IRremote.h> // основная
     
    //  Коды ИК пульта Sokkia, протокол NEC:
    //  F1 : 12700FF
    //  F2 : 127807F
    //  F3 : 12740BF
    //  F4 : 127C03F
    //  FUNC : 12720DF
    //  SFT : 127A05F
    //  ESC : 127609F
    //  BS : 127E01F
    //  MEAS : 127906F
    //  A : 12730CF
    //  B / 7 : 127B04F
    //  C / 8: 127708F
    //  D / 9 : 127F00F
    //  E : 12708F7
    //  F / 4 : 1278877
    //  G / 5: 12748B7
    //  H / 6 : 127C837
    //  I : 12728D7
    //  J / 1 : 127A857
    //  K / 2 : 1276897
    //  L / 3 : 127E817
    //  M : 12718E7
    //  N / 0 : 1279867
    //  O/ . : 12758A7
    //  P / +- : 127D827
    //  Q : 12738C7
    //  R / вверх : 127B847
    //  S : 1277887
    //  ENTER : 127F807
    //  T / налево : 12702FD
    //  U / вниз : 127827D
    //  V / направо : 12742BD
    //  W : 127C23D
    //  X : 12722DD
    //  Y : 127A25D
    //  Z : 127629D
    //  A/N(буквы/цифры) : 127E21D
     
     
    // подключаем библиотеку для работы с матричной клавиатурой
    #include <AmperkaKB.h>
     
    // создаём объект для работы с матричной клавиатурой
    // указывая номера arduino подключенные к шлейфу клавиатуры
    // начиная с первого вывода шлейфа
    AmperkaKB KB(12, 11, 10, 9, 8, 7, 6, 4);
     
    // для работы с ИК диодом
    IRsend irsend;
     
    // состояние режима NUM клавиатуры
    boolean NUM;
     
    void setup() {
     
     
      // указываем тип клавиатуры
      KB.begin(KB4x4);
      // второй необзятельный параметр:
      // время длительного зажатия кнопки
      // по умолчанию 2000, изменим на 5000 мс
      // KB.begin(KB4x4, 5000);
     
      pinMode(13, OUTPUT); // этот блок из 4-х строк не обязателен
                                            // служит только для проверки запуска программы. Один раз моргает светодиод на плате
      digitalWrite(13, HIGH);   // включает светодиод
      delay(100);                  // ждет 0,1 секунду
      digitalWrite(13, LOW);    // выключает светодиод
     
      pinMode(5, OUTPUT);
     
      if (NUM == 1) {
        digitalWrite(5, HIGH);
      }
      if (NUM == 0) {
        digitalWrite(5, LOW);
      }
    }
     
    void loop() {
     
      // считывание данных с клавиатуры
      KB.read();
      // опеределяем клик кнопки
      if (KB.justPressed()) {
     
    // ЗДЕСЬ УСЛОВИЕ NUM диода
        if (NUM == 0){
          if (KB.getNum == 0){
            // вывод пароля прибора на ИК порт
            for (int i = 0; i < 2; i++) {
              irsend.sendNEC(0x127A05F, 32); // SFTх2
              delay(50);
            }
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
            for (int i = 0; i < 2; i++) {
              irsend.sendNEC(0x1276897, 32); // 2 два раза
              delay(50);
            }
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
            irsend.sendNEC(0x127F807, 32); // Enter
            delay(50);
          }else if (KB.getNum == 1){
            irsend.sendNEC(0x127609F, 32); // ESC
            delay(50);
          }else if (KB.getNum == 2){
            irsend.sendNEC(0x127906F, 32); // MEAS
            delay(50);
          }else if (KB.getNum == 3){
            irsend.sendNEC(0x12700FF, 32); // F1
            delay(50);
          }else if (KB.getNum == 4){
            irsend.sendNEC(0x127C03F, 32); // F4
            delay(50);
          }else if (KB.getNum == 5){
            irsend.sendNEC(0x127807F, 32); // F2
            delay(50);
          }else if (KB.getNum == 6){
            irsend.sendNEC(0x127B847, 32); // стрелка вверх
            delay(50);
          }else if (KB.getNum == 7){
            irsend.sendNEC(0x12702FD, 32); // стрелка влево
            delay(50);
          }else if (KB.getNum == 8){
            irsend.sendNEC(0x127827D, 32); // стрелка вниз
            delay(50);
          }else if (KB.getNum == 9){
            irsend.sendNEC(0x12742BD, 32); // стрелка вправо
            delay(50);
          }else if (KB.getNum == 10){
            irsend.sendNEC(0x12740BF, 32); // F3
            delay(50);
          }else if (KB.getNum == 11){
            irsend.sendNEC(0x127F807, 32); // Enter
            delay(50);
          }else if (KB.getNum == 12){
            irsend.sendNEC(0x12720DF, 32); // FUNC
            delay(50);
          }else if (KB.getNum == 13){      // NUM
            if (NUM) {
              NUM=0;
              digitalWrite(5, LOW);
            }else {
              NUM=1;
              digitalWrite(5, HIGH);
            }
            delay(50);
          }else if (KB.getNum == 14){
            irsend.sendNEC(0x127A05F, 32); // SFT
            delay(50);
          }else {                          // (KB.getNum == 15)
            irsend.sendNEC(0x127F807, 32); // Enter
            delay(50);
          }
     
        }else {
          if (KB.getNum == 0){
            // вывод пароля прибора на ИК порт
            for (int i = 0; i < 2; i++) {
              irsend.sendNEC(0x127A05F, 32); // SFTх2
              delay(50);
            }
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
            for (int i = 0; i < 2; i++) {
              irsend.sendNEC(0x1276897, 32); // 2 два раза
              delay(50);
            }
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
            irsend.sendNEC(0x127F807, 32); // Enter
            delay(50);
          }else if (KB.getNum == 1){
            irsend.sendNEC(0x127D827, 32); // +-
            delay(50);
          }else if (KB.getNum == 2){
            irsend.sendNEC(0x127E01F, 32); // BS
            delay(50);
          }else if (KB.getNum == 3){
            irsend.sendNEC(0x127B04F, 32); // 7
            delay(50);
          }else if (KB.getNum == 4){
            irsend.sendNEC(0x127F00F, 32); // 9
            delay(50);
          }else if (KB.getNum == 5){
            irsend.sendNEC(0x1278877, 32); // 4
            delay(50);
          }else if (KB.getNum == 6){
            irsend.sendNEC(0x12748B7, 32); // 5
            delay(50);
          }else if (KB.getNum == 7){
            irsend.sendNEC(0x127A857, 32); // 1
            delay(50);
          }else if (KB.getNum == 8){
            irsend.sendNEC(0x1276897, 32); // 2
            delay(50);
          }else if (KB.getNum == 9){
            irsend.sendNEC(0x127E817, 32); // 3
            delay(50);
          }else if (KB.getNum == 10){
            irsend.sendNEC(0x127708F, 32); // 8
            delay(50);
          }else if (KB.getNum == 11){
            irsend.sendNEC(0x127C837, 32); // 6
            delay(50);
          }else if (KB.getNum == 12){
            irsend.sendNEC(0x1279867, 32); // 0 (ноль)
            delay(50);
          }else if (KB.getNum == 13){      // NUM
            if (NUM) {
              NUM=0;
              digitalWrite(5, LOW);
            }else {
              NUM=1;
              digitalWrite(5, HIGH);
            }
            delay(50);
          }else if (KB.getNum == 14){
            irsend.sendNEC(0x12758A7, 32); // (десятичная точка)
            delay(50);
          }else {                     // (KB.getNum == 15)
            irsend.sendNEC(0x127F807, 32); // Enter
            delay(50);
          }
        }
      }
    }

    --- Сообщения объединены, 2 июн 2018, Оригинальное время сообщения: 2 июн 2018 ---
    Забыл добавить. Кнопку подключил в разрыв плюсового провода аккумулятора и вывел сбоку корпуса (на фото виден). Нечего энергию потреблять когда пульт не используется. Ну и в коде прошивки на кнопку ввода пароля следует заменить пароль на тот, который в вашем приборе :)
     
    Последнее редактирование: 2 июн 2018
    karimov.azat и igor kruchkovskiy нравится это.
  20. igor kruchkovskiy

    igor kruchkovskiy Форумчанин

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