Освещение лестницы с ардуино

Освещение лестницы с ардуино

Дельта принтеры крайне требовательны к точности изготовления комплектующих (геометрия рамы, длины диагоналей, люфтам соединения диагоналей, эффектора и кареток) и всей геометрии принтера. Так же, если концевые выключатели (EndStop) расположены на разной высоте (или разный момент срабатывания в случае контактных концевиков), то высота по каждой из осей оказывается разная и мы получаем наклонную плоскость не совпадающая с плоскостью рабочего столика(стекла). Данные неточности могут быть исправлены либо механически (путем регулировки концевых выключателей по высоте), либо программно. Мы используем программный способ калибровки.
Далее будут рассмотрены основные настройки дельта принтера.
Для управления и настройки принтера мы используем программу Pronterface.
Калибровка принтера делится на три этапа:

1 Этап. Корректируем плоскость по трем точкам

Выставление в одну плоскость трех точек — A, B, C (расположенных рядом с тремя направляющими). По сути необходимо уточнить высоту от плоскости до концевых выключателей для каждой из осей.
Большинство (если не все) платы для управления трехмерным принтером (В нашем случае RAMPS 1.4) работают в декартовой системе координат, другими словами есть привод на оси: X, Y, Z.
В дельта принтере необходимо перейти от декартовых координат к полярным. Поэтому условимся, что подключенные к двигателям X, Y, Z соответствует осям A, B, C.(Против часовой стрелки начиная с любого двигателя, в нашем случае смотря на логотип слева — X-A, справа Y-B, дальний Z-C) Далее при слайсинге, печати и управлении принтером в ручном режиме, мы будем оперировать классической декартовой системой координат, электроника принтера сама будет пересчитывать данные в нужную ей систему. Это условность нам необходима для понятия принципа работы и непосредственной калибровки принтера.

Точки, по которым мы будем производить калибровку назовем аналогично (A, B, C) и позиция этих точек равна A= X-52 Y-30; B= X+52 Y-30; C= X0 Y60.

Читайте также:  Лестницы для дома перила ковка

Алгоритм настройки:

  1. Подключаемся к принтеру. (В случае “крагозяб” в командной строке, необходимо сменить скорость COM порта. В нашем случае с 115200 на 250000 и переподключится)

    После чего мы увидим все настройки принтера.
  2. Обнуляем высоты осей X, Y, Z командой M666 x0 y0 z0.
    И сохраняем изменения командой M500. После каждого изменения настроек необходимо нажать home (или команда g28), для того что бы принтер знал откуда брать отсчет.
  3. Калибровка принтера производится “на горячую”, то есть должен быть включен подогрев стола (если имеется) и нагрев печатающей головки (HotEnd’а) (Стол 60град., сопло 185 град.) Так же нам понадобится щуп, желательно металлический, известных размеров. Для этих задач вполне подойдет шестигранный ключ (самый большой, в нашем случае 8мм, он предоставляется в комплекте с принтерами Prizm Pro и Prizm Mini)
  4. Опускаем печатающую головку на высоту (условно) 9мм (от стола, так, что бы сопло еле касалось нашего щупа, т.к. высота пока что не точно выставлена.) Команда: G1 Z9.
  5. Теперь приступаем непосредственно к настройке наших трех точек.
    Для удобства можно вместо g- команд создать в Pronterface четыре кнопки, для перемещения печатающей головки в точки A, B, C, 0-ноль.
  • Последовательно перемещаясь между тремя точками (созданными ранее кнопками или командами) выясняем какая из них находится ниже всего (визуально) и принимает эту ось за нулевую, относительно нее мы будем менять высоту остальных двух точек.
  • Предположим, что точка A у нас ниже остальных. Перемещаем головку в точку B(Y) и клавишами управления высотой в Pronterface опускаем сопло до касания с нашим щупом, считая величину, на которую мы опустили сопло (в лоб считаем количество нажатий на кнопки +1 и +0.1)
    Далее командой меняем параметры высоты оси Y: M666 Y <посчитанная величина>
    M666 Y0.75
    M500
    G28
  • Ту же операцию проделываем с оставшимися осями. После чего следует опять проверить высоту всех точек, может получится, что разброс высот после первой калибровки уменьшится, но высота все равно будет отличатся, при этом самая низкая точка может изменится. В этом случае повторяем пункты 6-7.
  • 2 Этап. Исправляем линзу

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

    Корректируется этот параметр т.н. дельта радиусом, который подбирается экспериментально.

    Калибровка:

    1. Отправляем головку на высоту щупа в любую из трех точек стола. Например G1 Z9 X-52 Y-30
    2. Сравниваем высоту центральной точки и высоту точек A,B,C. (Если высота точек A, B, C разная, необходимо вернутся к предыдущей калибровки.)
    3. Если высота центральной точки больше остальных, то линза выпуклая и необходимо увеличить значение дельта радиуса. Увеличивать или уменьшать желательно с шагом +-0,2мм, при необходимости уменьшить или увеличить шаг в зависимости от характера и величины искривления (подбирается экспериментально)
    4. Команды:
      G666 R67,7
      M500
      G28
    5. Подгоняем дельта радиус пока наша плоскость не выровняется
    3 Этап. Находим истинную высоту от сопла до столика

    Третьим этапом мы подгоняем высоту печати (от сопла до нижней плоскости — столика) Так как мы считали, что общая высота заведомо не правильная, необходимо ее откорректировать, после всех настроек высот осей. Можно пойти двумя путями решения данной проблемы:
    1 Способ:
    Подогнав вручную наше сопло под щуп, так что бы оно свободно под ним проходило, но при этом не было ощутимого люфта,

    • Командой M114 выводим на экран значение фактической высоты нашего HotEnd’а
    • Командой M666 L получаем полное значение высоты (Параметр H)
    • После чего вычитаем из полной высоты фактическую высоту.
    • Получившееся значение вычитаем из высоты щупа.

    Таким образом мы получаем величину недохода сопла до нижней плоскости, которое необходимо прибавить к полному значению высоты и и записать в память принтера командами:
    G666 H 235.2
    M500
    G28

    2 Способ:
    Второй способ прост как валенок. С “потолка”, “на глаз” прибавляем значение высоты (после каждого изменение не забываем “уходить” в home), добиваясь необходимого значения высоты, но есть шанс переборщить со значениями и ваше сопло с хрустом шмякнется об стекло.

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

    Источник

    Как сделать автоматическую подсветку лестницы на Arduino

    • 27-12-2018 •
    Быстрые ссылки на Aliexpress

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

    Подумал что это может быть полезным для многих, по этому решил написать целую статью на эту тему.

    Что я использовал

    1. Arduino uno 1шт.
    2. HC-SR 04 2шт.
    3. M5450B7 1шт
    4. Провода

    Как это выглядит на схеме:

    Так выглядит схема для простых светодиодов, где 5в достаточно для тестов. Но скорей всего для подсветки лестницы вы будете использовать диодную ленту, а тут уже потребуется 12 вольт. Для этого нам понадобиться регулятор напряжения: L78M05. Он нужен для того, чтобы снизить с 12в. до 5в., чтобы питать ардуино.

    Примерно так будет выглядеть вариант для 12в.:

    Как это выглядит на фотографии:

    Как это выглядит на видео:

    Скетч

    В скетче, вначале вы можете задать время горения диодов, а также скорость зажигания. Все практически прокомментировал, так что должно быть понятно. Конечно, самый большой вопрос остается с проводами. Так как проводов нужно очень много, а как их аккуратно спрятать возле лестницы.. Так что для меня, этот вопрос остался открытым. Если кто реализовывал подсветку лестницы на ардуино, делитесь опытом в комментариях!

    5 thoughts on “ Как сделать автоматическую подсветку лестницы на Arduino ”

    Пытался сделать, тоже уперся в проблему проводов.
    Сейчас думаю:
    — об адресной светодиодной ленте, но не уверен что получится избежать наводок;
    — и о нескольких сдвиговых регистрах.

    Кстати, не смотрел саму библиотеку, там есть фильтр ложных срабатываний? а то датчики раз, через пять, показывают ерунду от 4 см до 4 км ))

    используйте или витую пару как удлениетль проводов, или развяжите сенсоры по безпроводу

    Подскажите пожалуйста, на сколько ступеней возможно реализовать эту схему?

    Источник

    Автоматическая подсветка лестницы с помощью Arduino

    Добрый день! В этом посте хочу поделится с интернет сообществом о том, как мне довелось сделать автоматическое освещение лестницы в своем двухэтажном коттедже. Около четырех месяцев назад, возвращаясь с работы в полной темноте, я не удачно подскользнулся и сломал две плюсниевых кости (пальца) на левой ступне. Целый месяц пришлось провалятся в постеле, так как наступать на ногу было невероятно больно. Потом еще пол месяца хромал без гипса (у кого были переломы меня сразу поймут). После этой печальной истории я начал задумываться об автоматизации освещения ступенек лестницы. Немного поиграв с поисковыми запросами, нашел для себя очень простое решение в этом блоге, как раз на основе моего любимого микроконтроллера Arduino. Схема не вызвала каких то трудностей, но отпугивало количество и длина проводов, которые мне предстояло смонтировать. До этого ничего подобного не делал. Покупать готовые решения или нанимать кого-то — накладно. В течении месяца заказал нужные комплектующие и не торопясь смонтировал за несколько дней на свою лестницу. Всем кому интересно, что из этого получилось, добро пожаловать под кат!

    Компоненты

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

    Arduino Pro Mini 300 р
    Ultrasonic Module HC-SR04 Distance Sensor — 2 шт 230 р
    Драйвер светодиодов M5450 88 р
    Регулятор напряжения L78M05CV 26 р
    Фоторезистор ФР-764 16 р
    Кабель-канал 20×10 мм — 10 М 100 р
    Провод 2×0,12 — 100 М (с запасом для лент) 190 р
    Провод 4×0,12 — 20 М (для сенсоров) 60 р
    Светодиодная лента LSP0603W15 White — 17 шт по 30 см 1020 р
    Мелочевка: текстолит 15×15 см, хлорное железо, сверло 0,9 мм, штыревые соединители типа PLS, разъемы на плату BLS, термоусадочная трубка, конденсаторы и резисторы 200 р
    Блок питания 12В (он же корпус) от сигнализации «Парус 4» Бесплатно
    Итого 2230 р

    Прототип

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

    Схема

    С помощью небезызвестной среды для проектирования Eagle CAD была доработана схема автора и печатная плата. Здесь я добавил регулятор напряжения на 5 В, изменил датчики с 3х контактных дорогих Ping на четырех контактные дешевые HC-SR04. Для того, что бы подсветка лестницы срабатывала только в темное время суток, в схему добавлен советский фоторезистор ФР-764 (можно использовать и другой).

    Скетч

    В скетче используется свободно распространяемая библиотека для работы со светодиодным драйвером M5450, а также библиотека для работы с ультразвуковым дальномером HC-SR04.

    #include «lightuino3.h»
    #include «Ultrasonic.h»

    //Устанавливаем контакты для первого датчика
    #define TRIG_PIN 12
    #define ECHO_PIN 13
    //Устанавливаем контакты для второго датчика
    #define TRIG2_PIN 10
    #define ECHO2_PIN 11
    //Определяем первый датчик
    Ultrasonic OurModuleUp(TRIG_PIN, ECHO_PIN);
    //Определяем второй датчик
    Ultrasonic OurModuleDown(TRIG2_PIN, ECHO2_PIN);
    // pins 0, 1 used by Serial
    const unsigned char DataPin = 6;
    const unsigned char clockPin = 7;

    // задержка между ступеньками
    const long lightSpacing = 280;
    //задержка свечения всей лестницы
    const long lightHold = 10000;
    //задержка выстрела сенсоров
    const long pingReadDelay = 50;

    // Диапазон при котором сработает сенсор
    const float minBottomIn = 33.0f;
    const float minTopIn = minBottomIn;

    LightuinoSink sinks(clockPin, DataPin, 100, 4);

    boolean bClimbStarted = false;
    boolean bDescentStarted = false;

    int val;
    void setup() <
    Serial.begin(9600);
    pinMode(DataPin, OUTPUT);
    pinMode(clockPin, OUTPUT);
    delay(1000);
    sinks.set(0,0,0);
    >

    void loop() <
    val = analogRead(0);
    //Проверяем освещенность в помещении
    if (val>=1020)<

    UltrasonicDownFire();//Выстрел нижнего датчика
    if(bClimbStarted) <
    bClimbStarted = false;
    bDescentStarted = false;
    climbLightSequence();
    >
    else <
    // Выстрел верхнего датчика
    UltrasonicUpFire();
    if(bDescentStarted) <
    bClimbStarted = false;
    bDescentStarted = false;
    descentLightSequence();
    >
    >
    delay(pingReadDelay);
    >
    >

    //Обработка верхнего датчика
    void UltrasonicUpFire() <

    if((OurModuleUp.Ranging(INC) 0))
    <
    Serial.println(«Top sensor tripped.»);
    bDescentStarted = true;
    >
    >

    //Обработка нижнего датчика]
    void UltrasonicDownFire() <

    if((OurModuleDown.Ranging(INC) 0)) <
    Serial.println(«Bottom sensor tripped.»);
    bClimbStarted = true;
    >
    >

    void climbLightSequence() <
    LedsOnDown();
    >
    void LedsOnDown() <
    //Обнуляем
    byte ledState[9];
    for (int j=0;j=0;k—)
    <
    for (int j=8;j>=1;j—)
    <
    ledState[k] = (ledState[k] >> 1) + 128;
    sinks.set(ledState);
    delay(lightSpacing);
    >
    >
    //Задержка
    delay(lightHold);
    //Гасим
    for (int k=1;k>=0;k—)
    <
    for (int j=8;j>=1;j—)
    <
    ledState[k] = (ledState[k] >> 1);
    sinks.set(ledState);
    delay(lightSpacing);
    >
    >
    delay(pingReadDelay);
    >

    void descentLightSequence() <
    LedsOnUp();
    >

    void LedsOnUp() <
    //Обнуляем
    byte ledState[9];
    for (int j=0;j ledState[j] = B00000000;
    >
    //Зажигаем
    for (int k=0;k <
    for (int j=0;j <
    ledState[k]=(ledState[k] [download >[/stextbox]

    95 комментариев к “Автоматическая подсветка лестницы с помощью Arduino”

    Arduino: 1.8.9 (Windows 7), Плата:»Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)»

    In file included from d:\Documents\Arduino\libraries\lightuino5/lightuino3.h:28:0,

    d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:158:31: error: ‘prog_uchar’ has not been declared

    AniPattern(Lightuino& shld, prog_uchar* anim,prog_uint16_t* delayLst, int total_frames): shield(shld)

    d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:158:48: error: ‘prog_uint16_t’ has not been declared

    AniPattern(Lightuino& shld, prog_uchar* anim,prog_uint16_t* delayLst, int total_frames): shield(shld)

    d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:166:3: error: ‘prog_uchar’ does not name a type

    d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:167:3: error: ‘prog_uint16_t’ does not name a type

    d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h: In constructor ‘AniPattern::AniPattern(Lightuino&, int*, int*, int)’:

    d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:158:115: error: ‘delays’ was not declared in this scope

    AniPattern(Lightuino& shld, prog_uchar* anim,prog_uint16_t* delayLst, int total_frames): shield(shld)

    d:\Documents\Arduino\libraries\lightuino5/lightuinoSink.h:158:132: error: ‘ani’ was not declared in this scope

    AniPattern(Lightuino& shld, prog_uchar* anim,prog_uint16_t* delayLst, int total_frames): shield(shld)

    D:\Documents\Arduino\________\________.ino: In function ‘void LedsOnDown()’:

    ________:92:20: error: ‘k’ was not declared in this scope

    D:\Documents\Arduino\________\________.ino: In function ‘void LedsOnUp()’:

    ________:123:21: error: expected ‘;’ before ‘ledState’

    for (int j=0;j ledState[j] = B00000000;

    ________:123:44: error: expected ‘)’ before ‘;’ token

    for (int j=0;j ledState[j] = B00000000;

    D:\Documents\Arduino\________\________.ino: At global scope:

    ________:126:3: error: expected unqualified-id before ‘for’

    ________:126:16: error: ‘k’ does not name a type

    ________:132:8: error: expected constructor, destructor, or type conversion before ‘(‘ token

    ________:133:3: error: expected unqualified-id before ‘for’

    ________:133:16: error: ‘k’ does not name a type

    ________:140:7: error: expected constructor, destructor, or type conversion before ‘(‘ token

    ________:141:1: error: expected declaration before ‘>’ token

    exit status 1
    ‘k’ was not declared in this scope

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    «Показать подробный вывод во время компиляции»

    Оставьте комментарий Отменить ответ

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

    Источник

    Оцените статью