Многие люди курят слишком много, особенно когда увлекаются чем-то и не замечают как курят одну сигарету за другой. Черный ящик курильщика (ЧЯК) не позволяет взять следующую сигарету до тех пор пока не пройдет определенный промежуток времени. В этой статье я уделю внимание некоторым деталям, которые могут быть полезны и для других разработок, особенно это касается не слишком известного Teensy LC контроллера (Arduino family).



Механика

Детали ЧЯКа напечатаны на 3D принтере и после сборки нижней, средней и верхней частей склеены вместе.



Запорный механизм сделан электромеханическим, при этом основные запорные функции реализованы чисто механически, это затрудняет взлом ЧЯК путем манипулирования с зазорами и выниманием батареек.

Запорная система состоит из рейки с зубьями и бистабильной трещотки, которая позволяет двигаться лотку только в направлении закрытия. По достижению заданного промежутка времени серво совершает однократное движение туда-сюда и толкает трещотку, которая устанавливается во второе стабильное состояние “открыто”. ЧЯК остается открытым до тех пор пока пользователь механически не выдвинет лоток. При выдвижении лоток толкает трещотку и переводит ее во взведенное состояние снова.



Загрузчик сделан в виде барабана с 4 углублениями для сигарет. Чтобы избежать попытки достать сигарету через загрузчик, храповой механизм не позволяет движение в обратную сторону, со стороны которой сделаны отбойники.



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

Интерфейс

Для контроля за временем, количеством сигарет в ЧЯКе, и количеством вынутых сигарет следит OLED display. Он выключен почти все время, чтобы не разряжать батарею и включается только по сигналу с центрального емкостного сенсора, срабатывающего при поднесении руки к ЧЯКу или сигнала с кнопки при загрузке сигарет. Еще одна кнопка фиксирует момент закрытия лотка и запускает следующий цикл задержки. Два дополнительных емкостных сенсора расположены на задней стенке и служат для подстройки счетчиков сигарет (необходимых, например, при смене батарей).

Электроника

Микроконтроллер это Teensy LC. Это ардуиноподобное устройство, совместимое с большинством ардуиновских библиотек, было выбрано из-за того, что в нем есть поддержка емкостных сенсоров (touch sense interface (TSI)). Сенсоры настолько чувствительны, что легко чувствуют поднесенную руку на расстоянии сантиметра. Teensy LC имеет так называемый LLWU режим, в этом режиме все модули находятся в спящем режиме, за исключением 1-kHz осциллятора. Из этого спящего режима можно выйти 4 способами a) получить прерывание с емкостного сенсора, b) получить прерывание с пина, с) получить переполнение 1-kHz счетчика (low-power timer, LPTMR), d) получить прерывание от alarm.

Вот тут автора и ожидала неприятность: в первоначальных планах было использовать TSI для вывода из спящего состояния при поднесении руки, а LPTMR для периодических прерываний для подстройки TSI уровней (зависят от окружающих условий) и контроля за временем. Но оказалось, что LPTMR используется для функционирования TSI, и, соответственно, не может быть использован как счетчик времени. (прерывание по переполнению LPTMR есть hardware triggering для TSI, и, конечно, должно быть быстрым, чтобы следить за сенсором. Обычно этот счетчик предустанавливается на минус один, чтобы TSI опрашивался с максимально возможно частотой в 1 kHz).

Другой возможностью было бы использование прерывание RTC alarm, но дело в том, что у Tenncy LC нет real time clock (RTC). Вернее RTC есть в самом процессоре, но нет разводки для RTC кварца на плате. Однако, разработчик процессора оставил некоторую лазейку для пытливых умов. 1кГц осциллятор (который работает в спящем режиме) может быть использован как источник для RTC регистров контроллера. Тогда получается, что RTC может считать не секундные интервалы (как при использовании кварца на 32кГц), а 32-ух секундные, если использовать 1 кГц осциллятор. Этой точности, конечно маловато. Но есть и выход.

Вот как это работает:

Есть RTC Time Prescaler Register (RTC_TPR). Этот 16-битный регистр считает импульсы осциллятора. При его переполнении RTC Time Seconds Register (RTC_TSR) увеличивается на единицу. В классическом режиме это и есть секунды, которые сравниваются с RTC Time Alarm Register (RTC_TAR), при совпадении генерируется alarm interrupt. При использовании обычного 32кГц кварца RTC_TSR не предустанавливается, а каждый раз считается с нуля (32768 до переполнения (секунды)). Но если мы каждый раз будем предустанавливать RTC_TSR с учетом того, что у нас медленный 1кГц осциллятор мы можем получать alarm interrupt вплоть до миллисекундной точности (не учитывая неточность самого осциллятора). Конечно, RTC_TAR тоже должен быть соответственно пересчитан.



Например, если мы хотим установить период в 87 секунд, мы должнв записать 2 в RTC_TSR (2*32768=65536ms=65.536s), 2 в RTC_TAR и 32768-(87*1000-65536)=11304 в RTC_TSR. Тогда до первого переполнения RTC_TPR пройдет 32.768-11.304=21.464 секунды, и к ним добавится два полных цикла 2*32.768=65.536, что составит как раз 21.464+65.536=87 секунд
В общем случае так:

void setAlarm(uint32_t seconds ) {
      RTC_SR = 0; //disable RTC
      RTC_TPR=32768-(seconds*1000%32768);
      RTC_TSR=0; //RTC counter
      RTC_SR = RTC_SR_TCE; //enable RTC
      RTC_TAR = seconds*1000/32768;
	
}

И даже мы можем следить за общем временем (с точностью до погрешности 1kHz осциллятора), например, если в начале программы все RTC регистры были нулевые:

timeEllapsed=(RTC_TSR*32768+RTC_TPR)/1000

Точность 1kHz осциллятора невелика, но для наших целей вполне хватит. Надо учесть, что при запуске нового alarm мы модифицируем регистры RTC, поэтому, если надо следить за временем, до запуска alarm они должны быть запомнены, а после выхода из alarm interrupt пересчитаны снова с учетом времени проведенного в спячке. Подробно я описал это здесь:о RTC для Teency LC

В ЧЯК прерывание каждые 10 минут измеряет и запоминает уровень сигнала с емкостных сенсоров в отсутствии руки. Это сделано для того, чтобы можно было надежно отслеживать изменение сигналов при приближении. При background в ~500 единиц мы используем уровень превышения в ~20 единиц, это дает возможность чувствовать руку на расстоянии 5-10мм. Уровень background зависит от температуры и влажности, поэтому для надежности он должен быть периодически подстраиваем. Вот это, я считаю, есть недоработка разработчиков процессора. Почему они не дали возможности иметь одновременно wake up от TSI и какого-нибудь еще одного low power counter (всего-то надо было добавить еще один регистр), ведь периодическая подстройка уровней TSI практически обязательна, даже если не нужен таймер для других целей!

Теперь про потребляемую энергию. В LLWU спящем режиме Teensy LC при отсутствии обвеса потребляет около 15 uA. Нам надо было подключить еще OLED display и серво. Оба этих устройства имеют большие токи утечки даже в пассивном состоянии.

С OLED все просто, это Adafruit 0.96” Monochrome 128x64 OLED display, он питается от 3.3V, потребляет ток порядка 20 mA во включенном состоянии (зависит от количества задействованных пикселей) и управляется по SPI. То есть достаточно подключить его вход питания к 20 миллиамперному выходу Teensy LC (у Teency есть выходы разных типов) и готово. Когда все спит этот выход просто переводятся в 3-е состояние и ток через дисплей не идет, при wake up выход переводятся в output high state и становится Vcc для дисплея.

С серво немного сложнее. Серво в режиме ожидания потребляет ток около 2 мА, что, конечно, не приемлемо. Поэтому надо его полностью выключать на время сна. В отличие от классических Ардуин, Teensy LC имеет довольно небольшой выбор питаний: это или 1.7-3.3 В включенных прямо, или 2.6-5.5 В (c включенным внутренним voltage regulator). Обычно доступные серво работают как минимум от 1S Lipo, а это 3.3-4.2 В. Поэтому нам надо включить последовательно три стандартные батарейки, чтобы иметь от 3.3 (разряд) до 4.6 В (новые). Для большинства серво 3.3 В на пределе срабатывания, поэтому прямо выходы Teensy использовать нельзя (как для OLED). Да и ток во время вращения порядка 50 мА, что многовато для Teensy LC. Поэтому серво включен через MOSFET:



При таком включении может показаться, что это не безопасно так как при выключенном MOSFET напряжение на PWM ctrl входе превышает 3.3 В, а входы Tennsy LC не 5V tolerant (в отличие от классических Ардуин). Но опасаться этого не стоит, помня о том, что ток PWM сtrl очень мал, и опасаться за ограничивающий диод на входе процессора не надо (причина недопустимости превышения Vcc+0.5 именно в этом диоде), более того, при токах сравнимых с токами закрытого диода он даже не будет находится в открытом состоянии.

в ЧЯК я использую HK282 с порогом 3.3В (просто потому что были у меня). Какие нибудь более низковольтные и маломощные серво, может быть можно питать и напрямую с выходов Teensy, по схеме используемой для OLED.

В результате ток в режиме сна получился в около 50 uA, наверное, можно было еще уменьшить, но я решил, что этого достаточно (если только спит, батарей должно хватить больше чем на 4 года: 2000мАч/0.05мА).

Техническое

Печаталось на Monoprice Ultimate 3D принтер, PLA пластик, 0.4 мм nozzle, слой 0.2 мм. Для деталей запорного механизма слой 0.1 мм для точности. Пружинки тоже напечатаны на 3D принтере. Печатать долго. Например, средняя самая болшая часть (она имеет много внутренних деталей и двойные стенки для электроники и проводов) печаталась 20 часов. Скливалось циан-акрилатным клеем. Если внутри что-нибудь сломается, разобрать нельзя (защита от маньяков-курильщиков), придется разбивать как свинью-копилку и печатать заново (аргумент в пользу 3D принтеров). Чертежи и анимация сделаны в SolidWorks, среда разработки AtmelStudio (да, поддерживаются и AVR (teency) прямо из коробки, как и ардуино, через VisualMicro).
Поделиться с друзьями
-->

Комментарии (48)


  1. AbnormalHead
    04.04.2017 08:46
    +13

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


    1. Abiboss
      04.04.2017 09:28

      Можно использовать несколько таких устройств


      1. Ommonick
        04.04.2017 09:50
        +9

        И всего одну запасную пачку сигарет, что удобно.


    1. Navij
      05.04.2017 14:01

      Зашёл, чтобы написать точно такой же комментарий. Пока сам себя в руках держать не будешь, никакие ящики не помогут. Хотя подобная штука может помочь описать правила игры, которых ты будешь подсознательно придерживаться, если действительно хочешь ужать потребление. Я вот взял за правило — покупать сигареты только на мелочь в карманах. Из дома я выхожу редко, покупки в основном по карте, поэтому мелочи относительно мало на руках. Как результат — курить я натурально стал раза в три меньше. Так что при определённом желании, возможно, и этот ящик может кому-то помочь.


  1. sbnur
    04.04.2017 10:04

    напоминает автопоилки в курятнике


    1. plm
      04.04.2017 11:12
      +4

      Я тут подумал, добавление в конструкцию дозатора чего-нибудь типа Denatonium benzoate сделает все сильно интереснее. Например, сигарета взятая раньше времени становится очень горькой (можно даже часы не показывать).


    1. Hanggard
      04.04.2017 14:40

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


      1. sumanai
        04.04.2017 17:28

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


        1. Hanggard
          04.04.2017 20:29

          матрица получится


      1. NLO
        04.04.2017 21:50

        НЛО прилетело и опубликовало эту надпись здесь


  1. Find_the_truth
    04.04.2017 10:32

    Легче заставить себя сделать такое устройство, чем заставить бросить курить?))


    1. mukizu
      04.04.2017 12:22
      +1

      Разным людям по-разному.
      Например если у человека это просто привычка и сам процесс, а также сопутствующие запахи, вкус итд вызывают неприязнь — бросить проще, чем когда вы получаете от процесса или запаха удовольствие.


      1. andersong
        04.04.2017 17:10

        Я так бросил. Однажды заболел — несколько дней валялся с высокой температурой, а главное, изменился вкус сигарет — стал просто отвратным. Несколько дней курил и давился, с каждым разом выдерживал всё меньше затяжек. Через несколько дней подумал: что-же я мучаюсь, это же отличный повод бросить! Не курю третий год.
        И сейчас чувствую сильное отвращение при малейшем запахе табака, хотя курил 15 лет по пачке в день.


    1. safari2012
      04.04.2017 17:38

      Я вот бросил курить лет 10 назад, а увлекся ардуинами всего 2 года как :)


    1. obelix662000
      04.04.2017 19:00
      +1

      А почему вы считаете, что это устройство должно помогать бросить курить? Я, например, курить люблю и бросать не собираюсь, только не хочу курить слишком много, когда незаметно прикуриваешь одну за другой.


    1. asmrnv777
      04.04.2017 19:16

      Ну, кому-то это приносит удовольствие, но хочется ограничить себя в количестве.


  1. ragesteel
    04.04.2017 10:33
    +6

    А где чёрный ящик обычного человека?


    1. master65
      04.04.2017 11:13
      +1

      Внимание, вопрос. Что в черном ящике?


      1. 123150
        04.04.2017 16:32
        +1

        Отвечает Александр Друзь


        1. TheShestov
          05.04.2017 10:17

          Моментально вспомнилось = )


  1. plm
    04.04.2017 10:43

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


    1. artoym
      04.04.2017 10:53

      Да, возможно был бы удобнее язычок-ручка по центру ящичка. А ещё лоток подачи в приёмник сверху можно.


      1. plm
        04.04.2017 11:08

        Да хотя бы просто чуть приподнять сигарету в конце хода лотка.


    1. Squoworode
      04.04.2017 21:28

      Если уж строить механизм выдачи, то сразу в рот. И с автоподжигом.


      1. sumanai
        04.04.2017 23:12

        Тогда сразу с автовдыханием, чтобы напрямую готовый дым в лёгкие.


  1. Tutanhomon
    04.04.2017 11:13

    Я только не понял, для чего такая потная система загрузки сигарет, или это часть задумки — медитативная загрузка 80 сигарет по одной?


  1. hungry_ewok
    04.04.2017 11:16
    +2

    Всё украдено до нас.
    «5 элемент», начало фильма. Правда там ГГ машинка выдавала сигареты с постепенно укорачивающейся табачной частью — типа постепенное отвыкание. ;)


    1. qlkvg
      04.04.2017 14:36

      А задолго до этого портсигар с таймером был у Брежнева. Странно, что про него нет упоминаний.


  1. Color
    04.04.2017 12:42

    Прикольная штука.


    А вообще, будущее за диспенсерами всего, я считаю. Можно себе так еду выдавать (ну определенную "вредную" еду, например), алкоголь, жвачки, талоны на интернет, печеные картофелины и так далее.


    В рамках одной семьи количество начисляется каждому отдельно, а выдача происходит после активации устройства rfid картой или имплантантом.


    А вообще можно и диспенсеры всего реализовать за реальные деньги, как в black mirror s1e2, только немного на других условиях.
    Например, сегодня можно арендовать не просто квартиру, но и различные услуги по ее обслуживанию вместе с ней, например, уборка, обновление бытовой химии там, стирка. А если посмотреть дальше — то это аренда комплексного жилья, в котором можно приобрести (по факту или заранее) все нужное — бытовая химия, еда/напитки, информационные услуги и прочее.


    Вообще, диспенсеры и торговые автоматы — вот куда нужно стремиться. Заменить злых продавцов добрыми машинами. Да что говорить, и другие профессии можно куда приятнее заменить машинами. И даже небо, и даже Аллах...


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


    P.S.: это не сарказм, диспенсеры реально рулят


    1. Find_the_truth
      04.04.2017 13:17

      Какой-либо сбой, и мы остаемся без содержимого диспенсеров. А «богами» становятся «инкассаторы» диспенсеров. Хотя, можно создать диспенсеры для диспенсеров!


      1. Color
        04.04.2017 13:45

        Да, думаю, диспенсеры диспенсеров все решат
        Ну а на случай сбоя есть аварийные диспенсеры


    1. CrazyRoot
      04.04.2017 17:22

      Диспенсеры говорите…
      Кошачья кормушка для трех кошек.
      Реагирует на RFID метку и запоминает мол этот уже пожрал больше не даем.
      Самый сильный кот начал за шиворот притаскивать слабых, дабы кормушка выдала коту пожрать.
      Дальше слабый отпихивался от кормушки и старшой получал еду. А младшие ходили голодными.

      Женщину вынули, автомат засунули.


      1. safari2012
        04.04.2017 17:41

        А можно ссылку на эту историю (про кошачий автомат)?


        1. CrazyRoot
          05.04.2017 09:37

          Эм… ролик на ютубе посвященный какой то из умных кошачих кормушек. Года 3 -4 назад. Уже и не вспомню как кормушка обзывалась…


  1. dadyjo
    04.04.2017 13:01

    Тем кто курит в общественных местах и отравляет жизнь нормальным людям приготовлено самое жаркое место в Аду!


    1. Ugrum
      04.04.2017 13:23

      Да хорошо, хорошо.
      Только не нервничайте так.


  1. dron41k
    04.04.2017 13:51

    Ну и будешь ждать каждую сигаретку как манну небесную и вообще никогда не бросишь. Карра лучше почитать, там об этом написано.


  1. MTyrz
    04.04.2017 17:24
    +1

    import time
    import os
    timestamp = 3600
    timecurrent = timestamp
    while True:
        time.sleep(1)
        timecurrent -=1
        print('  ' + str(timecurrent))
        if timecurrent == 0:
            print(' Можно курить!\n\n')
            timecurrent = timestamp
            os.system('pause')
    


  1. safari2012
    04.04.2017 17:42

    Вы случайно не выкладывали модель на thingiverse?


    1. obelix662000
      04.04.2017 19:03

      нет, если кому надо могу прислать и исходники и stl


  1. ClearAirTurbulence
    04.04.2017 18:21

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

    Заголовок спойлера
    Вначале сомневался, что это поможет, но, как ни странно, помогает очень сильно. Буквально за пару недель полностью пропало желание курить обычные раковые палочки. Да, электронная сигарета тоже не сахар (дорого, возня с «жижами», сладковатый запах), но по сравнению с классическими сигаретами это просто рай. Плюс можно плавно переходить на безникотиновую смесь, т.к. основные компоненты привычки — сосание воздуха через мундштук и запах — остаются.
    Самое сложное — найти приличный девайс, у которого не придется каждые пять минут менять испарители (т.е. не joyetech), и который удобно заправлять (с откидывающейся вбок крышкой).


    1. asmrnv777
      04.04.2017 19:31

      Я за 2 года активного пользования электронкой нашел для себя только 2 жижи (из, наверное, пары сотен испробованных), от которых не воротит — обе одного производителя и весьма недешевые (1000 р за 30 мл).
      Остальное из испробованных (имхо) по сравнению с нормальным табаком — гадость ужасная.


      1. ClearAirTurbulence
        05.04.2017 01:11

        Нормальный табак — понятие относительное, и он точно не в сигаретах.
        Найти жидкость, хотя бы отдаленно похожую на табак, сложно. Joyetech MLB\MAB более менее, на мой вкус, Red Smokers Captain Black тоже ничего. Но в итоге тупо перешёл на «фруктовые», которые поначалу не очень шли, а потом даже очень хорошо. Процесс шел параллельно со снижением содержания никотина. Результат — теперь запах сигарет воспринимается как отвратительный, курить их не хочется совсем.
        При этом во времена курения сигарет провести хотя бы час без сигареты было мучительно, а сейчас я спокойно могу хоть целый день не парить.
        Осталось плавно отказаться от парения :)


      1. plm
        05.04.2017 10:54
        +1

        Имя, сестра! :)


  1. Mr_Krol
    04.04.2017 18:49

    Где б купить такую?!


    1. ClearAirTurbulence
      05.04.2017 11:14

      Ага, сразу оптом, и расставить в разных местах, чтобы выдавали со сдвигом во времени.


  1. igorp1024
    05.04.2017 09:25

    В «Quitters, Inc.» (by Stephen King) вопрос решали более радикально.


  1. klirichek
    05.04.2017 11:37

    Интересно, как каждый «воюет» со склейкой PLA.
    Я одно время «спаивал» детали обычным паяльником, пользуясь куском филамента как припоем.
    А потом внезапно обнаружил, что он отлично клеится с помощью дихлорэтана. И на этом эксперименты закончились. А тут, вон, «суперклей» в ход пошёл…