Насчет цен чуть-чуть поправлю. ESP-12 стоит 2.5$, блока питания достаточно простейшего за 0.4$, к нему нужен регулятор напряжения на 3.3В за 0.10$ (если паять) или за 0.4$, если модулем. А на сэкономленные деньги я бы предложил взять плату nodemcu для удобной отладки. :-)
Можно добавить микросхему 74HC595N, чтобы ценой трех пинов получить еще 8 (а при желании — 16, 24… и т.д.).
Можно добавить в схему еще один Arduino Nano или Arduino Nano Pro, который будет связан с Uno через два пина .Uno + E.Shield будут заниматься коммуникацией, а Nano — всем остальным. Чуть дороже, чем первый вариант, зато возможностей больше.
Можно вместо ethernet-shield поставить wifi-mcu ESP8266, который тоже отлично связывается с Arduino через два пина (и стоит в 10 раз меньше). Бонус — «непосредственная близость» физически обеспечивается зоной работы Wi-Fi.
Можно обойтись двумя ESP, один из которых будет работать как точка доступа, а второй — общаться с сервером, чтобы таким образом не пускать в домашнюю Wi-Fi сеть всяких левых. GPIO на них хватит для управления хоть тремя замками.
Я сделал себе регулировку яркости подсветки рабочего стола (в смысле, реального стола) как раз на таком датчике.
Просто провести рукой, думал я. Что там сложного, думал я…
Выяснилось, что ультразвуковой датчик несет в себе боль и ужас.
Ужас, от неточных измерений, сбоев самого датчика, случайных срабатываниях и невысокой скорости распространения звука.
Боль от осознания, что нужно делать много измерений и брать медианное, да еще и подбирать паузу между измерениями так, чтобы эхо не издевалось. Больше измерений — выше защита от случайностей, но и больше время на один замер.
После долгих экспериментов и нескольких недель эксплуатации я подобрал более-менее рабочие значения и пороги.
1. Библиотека NewPing умеет делать ping_median указанное количество раз. Сперва я использовал рекомендованные пять измерений, но через некоторое время перешел на семь. Причина — намного выше стабильность измерений.
2. Если пять секунд сигнала нет (или он за допустимыми пределами), то переходим в режим ожидания. Выход из режима ожидания — наличие сигнала в допустимых пределах в течение полусекунды. Это помогло отфильтровать редкие случайные срабатывания.
3. Максимальная дистанция была выбрана аж два метра (при рабочих значениях 5-70 см). Этот параметр указывает библиотеке сколько ждать возврата сигнала. При маленьких значениях датчик успевает вернуть 0, а на следующем запросе поймать отражение своего первого сигнала.
4. Пришлось научиться правильно убирать руку. Потому как при небольших расстояниях угловое смещение на 10см. заметно влияет на расстояние.
Я имел в виду нечто иное. Частичный отказ от sudo — это хорошо, но у вас, к примеру, у пользователя есть рутовый chown, а значит, по сути, есть и полный рутовый доступ. Я же предлагаю разрешить в sudoers запускать от рута только определенный скрипт, в котором вы пропишете все необходимые действия и который, разумеется, не будет доступен для редактирования пользователю asterix.
А почему бы не дать право за запуск от рута конкретного скрипта, а в нем уже понижать права там, где это зачем-то нужно?
Тогда ему можно будет с чистой совестью выставить права типа 700. По-моему, это будет безопаснее, чем выдавать рутовые права на chmod, chown и rm.
СС3200 — очень интересная штука. Спасибо, что познакомили с ней. Но конкретно в данном случае ее использование непонятно — выполняющая те же задачи связка esp8266 + arduino раз в двадцать дешевле и меньше, чем представленный выше вариант. Отдельно отмечу, что есть реализации SSL и на esp8266 (включая популярную nodemcu) — не такой уж там и слабый процессор.
Расскажите чуть подробнее о брелке, пожалуйста. С виду — он самая уязвимая часть. Почему именно такое решение?
Я пользовался. Gentoo. Сборка gcc заняла неделю. После этого разобрался с cross-compile и qemu — все стало чуть повеселее. Даже удалось собрать XFCE, какую-то версию FF и tigerVNC. Увы, все равно слабоват камень для хотя бы минимально комфортной работы. А вот как многозадачная «ардуина» с графическим интерфейсом — вполне подошла.
В некоторых планшетах есть usb-host, а значит с добавлением двухдолларового Arduino Nano — есть I2C и куча GPIO. Но при этом же сразу есть батарея, wi-fi, экран, камера, встроенная память, пачка разных датчиков, более мощный процессор и все это в нормальном корпусе. Ethernet тоже подключается через usb.
У меня этим же занимается AMS1117-3.3 с танталовым конденсатором на 22мкФ, но я сетовал на то, что нет вменяемых готовых миниатюрных решений. Приходится расковыривать блоки питания на 5В (например). А мне бы очень пригодился уже готовый дешевый и компактный блок питания на 3.3В, способный выдавать хотя бы 10 ватт. Вам такие не попадались?
Не уверен насчет вреда, но низкочастотный ШИМ меня раздражает тем, что при взгляде мельком объект оставляет, как бы, шлейф из своих копий. У ESP что-то среднее — частота ШИМ примерно килогерц, так что выше 30% duty мерцание незаметно. А вот если поставить, скажем, 1% яркости, то шлейф становится сильно заметен.
В принципе, это можно решить добавлением конденсаторов. Что-то порядка 1000мкФ @10В на каждый канал сгладят все где-то до 5% яркости. А можно сразу добавить Arduino Pro Mini у которой частота ШИМ около 63 килогерц. Этот вариант мне нравится еще тем, что серьезно все упрощает — выводов для ШИМ куча и нормальный I2C для датчиков.
Что же до схемы с включением-отключением, то у ESP катастрофически мало пинов. А добавлять в схему минимум три микросхемы для сдвига регистра, имхо, обойдется дороже по деньгам и месту, чем один китайский Arduino.
Можно добавить микросхему 74HC595N, чтобы ценой трех пинов получить еще 8 (а при желании — 16, 24… и т.д.).
Можно добавить в схему еще один Arduino Nano или Arduino Nano Pro, который будет связан с Uno через два пина .Uno + E.Shield будут заниматься коммуникацией, а Nano — всем остальным. Чуть дороже, чем первый вариант, зато возможностей больше.
Можно вместо ethernet-shield поставить wifi-mcu ESP8266, который тоже отлично связывается с Arduino через два пина (и стоит в 10 раз меньше). Бонус — «непосредственная близость» физически обеспечивается зоной работы Wi-Fi.
Можно обойтись двумя ESP, один из которых будет работать как точка доступа, а второй — общаться с сервером, чтобы таким образом не пускать в домашнюю Wi-Fi сеть всяких левых. GPIO на них хватит для управления хоть тремя замками.
Просто провести рукой, думал я. Что там сложного, думал я…
Выяснилось, что ультразвуковой датчик несет в себе боль и ужас.
Ужас, от неточных измерений, сбоев самого датчика, случайных срабатываниях и невысокой скорости распространения звука.
Боль от осознания, что нужно делать много измерений и брать медианное, да еще и подбирать паузу между измерениями так, чтобы эхо не издевалось. Больше измерений — выше защита от случайностей, но и больше время на один замер.
После долгих экспериментов и нескольких недель эксплуатации я подобрал более-менее рабочие значения и пороги.
1. Библиотека NewPing умеет делать ping_median указанное количество раз. Сперва я использовал рекомендованные пять измерений, но через некоторое время перешел на семь. Причина — намного выше стабильность измерений.
2. Если пять секунд сигнала нет (или он за допустимыми пределами), то переходим в режим ожидания. Выход из режима ожидания — наличие сигнала в допустимых пределах в течение полусекунды. Это помогло отфильтровать редкие случайные срабатывания.
3. Максимальная дистанция была выбрана аж два метра (при рабочих значениях 5-70 см). Этот параметр указывает библиотеке сколько ждать возврата сигнала. При маленьких значениях датчик успевает вернуть 0, а на следующем запросе поймать отражение своего первого сигнала.
4. Пришлось научиться правильно убирать руку. Потому как при небольших расстояниях угловое смещение на 10см. заметно влияет на расстояние.
Тогда ему можно будет с чистой совестью выставить права типа 700. По-моему, это будет безопаснее, чем выдавать рутовые права на chmod, chown и rm.
Расскажите чуть подробнее о брелке, пожалуйста. С виду — он самая уязвимая часть. Почему именно такое решение?
А простые размеры можно настроить с помощью слайсеров или программы-обертки для них. Например, Repetier-host.
Выставляется в nodemcu она так: uart.setup(0,921600,8,0,1,0)
1. Коннектится по WiFi к сети, запрашивает страницу с адресом esp[nodeIP].lua с 192.168.1.1
init.lua
2. Закачанный скрипт, собственно.
192.168.1.33.lua
Дальше чип обрабатывает запросы вида http://192.168.1.33?led=1000,1000,1000
Писал быстро, поэтому комментарии минимальны или отсутствуют. Собственно, кода там тоже немного.
В принципе, это можно решить добавлением конденсаторов. Что-то порядка 1000мкФ @10В на каждый канал сгладят все где-то до 5% яркости. А можно сразу добавить Arduino Pro Mini у которой частота ШИМ около 63 килогерц. Этот вариант мне нравится еще тем, что серьезно все упрощает — выводов для ШИМ куча и нормальный I2C для датчиков.
Что же до схемы с включением-отключением, то у ESP катастрофически мало пинов. А добавлять в схему минимум три микросхемы для сдвига регистра, имхо, обойдется дороже по деньгам и месту, чем один китайский Arduino.