Мой дневник

10.01.2018

SMS to Telegram and Google Doc

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

Screenshot_20180110-112508Сначала была симка.
Номер существовал давно, и была заведена на него куча всяких сервисов. Особенно подтверждения всяких финансовых операций.
Но тут появился новый провайдер, тарифный план и т.п., к тому же при поездках за границу не всегда удобно ловить смс-ки в роуминге. В общем, созрела мысль:
– оставлять нечто с сим-картой дома
– при поступлении смс перенаправлять их в интернет, в мессенджер.
Выбор мессенджера определялся его открытостью, тут telegram вне конкуренции. Однако, хотелось гибкости, поэтому решил ввести еще один “слой”. Есть такая система, IFTTT. Так что смс сначала идет в это облако, а уже там обрабатывается. Причем обработчиков можно создать несколько, например, отправлять в telegram и сохранять в google-документах.

ifttt

Кстати, тут уже можно остановиться: есть готовое приложение ifttt, оно наверное может ловить смс на оставшемся дома старом телефоне и отправлять его в сеть. Но на тот момент свободной сотки под рукой не оказалось, и я решил собрать свое устройство.

m590eНа алиэкспрессе приобрел модуль gsm, m590e. Хитрые китайцы продают “набор diy”, на деле же они где-то навыдирали б/у модулей и просто прикладывают к ним примитивную плату и пяток деталек. Выходит дешево, но паять smd-компоненты нужно хорошее увеличение. Тем не менее модуль запускается, в сети регистрируется. Будьте внимательны с питанием, при gsm-операциях потребление резко возрастает, я допаял еще конденсатор на 2000мкФ.

Первые опыты с модулем делал на компьютере, через usb-serial кабель. Только питания не хватает. Если решить вопрос, можно также написать скрипт и повесить сервисом на компьютере. Возможно, когда-нибудь я так и сделаю.

d1_mini_v2.3.0_1_16x9Но я пошел дальше. В качестве сервера взял модуль esp8266. Wifi в нем есть, serial как раз 3.3V, а поскольку взял модуль nodemcu, то получил micro-usb вход для питания и 5V вывод для подключения gsm-модуля.

Все бы хорошо, но serial порт в esp8266 всего один. По нему надо и программировать, и отлаживать, и работать с gsm… Весьма неудобно. В Arduino IDE есть библиотека SoftwareSerial, можно использовать ее, но при малейшей модификации кода нужно пересобирать и перезаливать всю прошивку. В общем, посмотрел я многие варианты, и остановился на Cesanta Mongoose OS с примитивной javascript-машиной.

Большим плюсом является возможность заливать только js-файлы, не пересобирая прошивку. Также имеется встроенный web и rpc – сервисы. А это значит, что программировать модуль можно не через usb/serial, а прямо по wifi сети!

mos

O Mongoose OS от Cesanta. Это не первый мой проект под этой системой. В целом мне нравится ее гибкость и функционал. Однако, хочу все же влить пару ложек дегтя в эту бочку меда. Вся система развивается, и части меняются полностью, так что через полгода приходится заново скачивать и изучать систему. Отсюда возникают проблемы с недостатком документации. И к большому сожалению, новая версия javascript-машины, mJS, настолько “оптимизирована”, что функционала явно не хватает. Например, не осталось функций работы со строками, типа indexOf или escape, что почти убивает возможности программирования на javascript. Форкнуть что ли проект пока не поздно… По крайней мере, прошивку и IDE точно надо сохранить.

IMG_20180110_103734Но вернемся к проекту. Подключил я модуль к RX,TX,Gnd и 5V, для запуска модема подключил пин модема Boot к выводу nodemcu D2… и нифига модем не запускается! Для начала оказалось, что D2 это вовсе не 2, а GPIO5 (а сначала на тестер грешил ))) читаем даташиты!). Затем, оказалось, что логического 3V мало, поэтому подтянул вывод boot на +5V через резистор 15K, а вывод D2 перевожу в режим INPUT, тогда и получаем достаточный для старта уровень.

Затем, оказалось, что передача данных в модем работает, а прием от модема – никак. Долго измерал уровни, подтягивал резистором… а оказалось, что нужно отключить обработчик rpc-комманд от порта. Прописал в conf0.conf uart: -1 и дело пошло на лад. Но времени потратил изрядно.

Затем, нужно дождаться от модема строки +PBREADY, и лишь после этого инициализировать его серией AT-команд для того чтобы он передавал по serial номер звонящего и текст смс. Однако в новой mJS нет нормальных функций задержки! delay просто затормаживает весь модуль. Выполнение javascript внутри обработчиков событий тоже имеет свои особенности. Словом, пришлось городить функцию, в которой внутренний счетчик определяет который раз она вызвана, и в зависимости от этого выполняет набор инструкций, а сама функция вызывается по таймеру. Ну и вообще пришлось поломать голову, так что “не ругайте программиста”… Код постараюсь выложить на github.

Для отладки и некоторых тестов в программу включил также примитивный telnet. Ведь консоль занята gsm-модемом. Вывод всей консольной информации туда все же не доходит, так что если в javascript ошибка, получаем “кирпичик”, который впрочем можно поднять через wifi rpc.

Добавил мониторинг модема. Теперь программа временами отправляет на модем “AT”, а обработчик ответа выставляет таймстамп последнего “ОК”. Если ответа нет, происходит повторное дерганье пина BOOT.

Много возни с кириллицей. Переключился на формат UCS2, получаю много цифр, перевести это в url-кодированный utf8 было непросто. Тем более что часть сообщения приходит в ascii, а функционал javascript в mjs обрезан до слез.

telneДобавил конфигурацию через веб-интерфейс. Фактически, взял готовый пример и добавил в него всего один параметр – ключ ifttt. По дизайну системы, просто так добавить поле в параметры нельзя. Нужно пересобрать всю прошивку, перегуглить кучу страниц, понять как правильно добавить поле… выкинуть все нафиг и записать ключ в неиспользуемый параметр.

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

Теперь я понимаю как Толстой писал вайнуимир.

Но в конце все более-менее получилось. Код выложу на github, однако есть несколько тонкостей в настройке модуля, так что повторение может быть не столь тривиальным…

Advertisements

05.04.2017

Самый простой термометр на arduino

Filed under: электроника — sae762 @ 10:25
Tags:

В ряде случаев необходимо хотя бы примерно измерять температуру, например нагрев радиатора транзисторов. Можно конечно использовать специальные модули и датчики. Но если под рукой их нет, то можно сделать датчик из любого диода или транзистора.
Теория гласит, что падение напряжения на p-n переходе составляет порядка 600mV при комнатной температуре и изменяется почти линейно с коэфициентом -2mV/C. То есть, если например при +25 600mV, то при +35 уже 580mV.

pic1

Как измерить такие величины?
У arduino есть аналоговый компаратор, который позволяет измерать входное напряжение от 0 до некоторого “эталонного” напряжения. В качестве эталона можно использовать как внешний источник, так и внутренний, номиналом 1.1 вольт. Последний вполне подходит. Задаем analogReference(INTERNAL) и получаем analogRead(A7) значение от 0 до 1023 что примерно соответствует милливольтам.
Обычно для измерения падения напряжения схема состоит из последовательно соединенных диода и резистора. Резистор подключается к 3.3V можно и к 5V, диод к GND, а с точки соединения снимается прямое напряжение на p-n переходе.
Схему можно собрать и не транзисторе, превратив его в диод, соединив коллектор и базу. Эмиттер транзистора npn подключем к земле, а коллектор с базой – к резистору.

pic2
Где-то на форуме прочитал, что можно еще упростить схему, используя внутренний подтягивающий резистор arduino. То есть подключаем эмиттер npn транзистора к земле, базу с коллектором, к примеру, к A7. Затем “подключаем внутренний резистор командой digitalWrite(A7, INPUT_PULLUP);”.

НЕ РАБОТАЕТ! Мало того что команда должна быть pinMode(A7, INPUT_PULLUP), но похоже резистор слишком велик, и падение напряжения получается нестабильным.

ВОТ ТАК НЕ РАБОТАЕТ:pic3
В качестве бонуса привожу код, получающий аналоговое значение без задержек. В регистры устанавливаем параметры для считывания, запускаем процесс, а результат опрашиваем когда нам удобно. Можно также сделать по прерыванию.

int t;

void setup() {
Serial.begin(115200);
//pinMode(A7,INPUT_PULLUP);
//first measure
ADMUX=0b11000111;//ref 1.1v, input A7
ADCSRA |= 0b01000000;//start bit
delay(300);
}

void loop() {
if ((ADCSRA & 0b01000000) == 0) { //if bit ADSC cleared
t=ADCL; //read it first, to lock adch
t|=(ADCH<<8);//read it last to unlock
}
Serial.println(t);
//start new conversion
ADCSRA |= 0b01000000;//start bit
delay(1000);
}

Обратите внимание на порядок считывания значения ADCL и ADCH

 

10.05.2016

tle5205 – осторожно!

Filed under: электроника — sae762 @ 17:00

Собирал схему с arduino + tle5205 и сразу же испортил последний чип. Вывод in2 пробился на землю. Возможно, нужно ставить резисторы по входам. Гугление проблемы ничего не дало, лишь одно упоминание на форуме (

https://www.infineonforums.com/threads/2040-TLE5205-breakdown

08.02.2016

Портативная зарядка АКБ

Filed under: arduino,автомобиль,электроника — sae762 @ 09:35

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

panel

Прибор подзаряжает импульсами частотой 1 кГц, следит за напряжением на выходе (сейчас стоит 15 вольт), также следит за напряжением на входе (откл при <10 вольт), в процессе подзарядки делает паузы, и следит за мощностью импульсов (силовая часть собрана по схеме flyback)

inside

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

Доп плюс – девайс также проводит десульфатацию, хотя не всегда помогает.

Минус – flyback очень не любит переполюсовку на выходе, сгорает диод. Также не любит обрыв выхода – может сгореть mosfet, он всего на 30 вольт у меня, надо бы 60, но под рукой не было.

Для тех кто сомневается в накачке от маленького аккумулятора:

5 Ампер-часов = 300 Ампер-минут =)

25.12.2015

Brushless windings

Filed under: электроника — sae762 @ 15:40

Типы обмоток brushless моторов (для ebike например)

Такую схему долго искал…

ebike-windings

29.09.2015

Мосты h-bridge mosfet L6201 и похожие

мост miniIBT сделан на основе L6201 – интегрального контроллера с мосфетами внутри:

miniibt

datasheet: http://www.alldatasheet.com/datasheet-pdf/pdf/529767/STMICROELECTRONICS/L6201.html

диаграмма:

L6201

мосты wangxin IMS-2C и прочие, на дискретный мосфетах, имеют аналогичные входы управления, следовательно скорее всего выполнены по такой же схеме. Однако нужно проверять.

– V +               Power Input +
– GND              Power Input
– IN1               Forward PWM input, high active
– IN2               Reverse PWM input, active high
– EN                Driver Enable, high enable, low off
– CT                Current signal output,analog signal
– VT                Voltage signal output, analog signal

ims-2

Как видно из схемы, в принципе возможно управление каждым плечом по отдельности, если это нужно.

Другие мосты на дискретных мосфетах имеют входы только направления и pwm, видимо на входе есть дополнительный инвертор, разделяющий сигналы на правую и левую стороны.

Dual-Motor-Driver-Module-board-H-bridge-DC-MOSFET-IRF3205-3-36V-10A-Peak-30A

02.06.2015

Bafang BBS-02 motor pinout

Для программирования мотора BBS-02 определил следующие выходы:

GND – понятно, земля

P1/P2 – питание, контроллер включается замыканием этих контактов. это не силовые провода.

RX/TX – понятно сигналы com-порта, 1200 бод. не стал заморачиваться, если нет сигнала нужно просто поменять местами RX и TX )

 bafang-pins

Для себя показалось удобно вывести тонкие провода (только RX, TX и GND) и соединить разъем с дисплеем. Теперь можно всегда подключить ком-порт, а кнопкой дисплея можно включать контроллер. При работе с контроллером через ком-порт дисплей выдает ошибку, а софт нормально работает.

09.02.2015

Измерение емкости и индуктивности на arduino

Filed under: схемы,электроника — sae762 @ 11:44

Изучил тему в интернете, нашел следующие проекты:

– измеритель емкости в arduino tutorial: http://arduino.cc/en/Tutorial/CapacitanceMeter
– ультра-простой измеритель емкости: http://wordpress.codewrite.co.uk/pic/2014/01/21/cap-meter-with-arduino-uno/
– измеритель LC на компараторе: http://reibot.org/2011/07/19/measuring-inductance/, http://www.engineersgarage.com/contribution/inductance-meter-using-arduino
– модификация программы: http://codinglab.blogspot.com/2013/02/measuring-inductances-using-arduino.html

Измерить емкость действительно несложно, а вот индуктивность – в случае с LR требует солидных токов, либо очень короткое время, поэтому решил измерять LC-колебания. Решил вместо внешнего использовать внутренний компаратор ардуино. И это таки удалось! Упрощение схемы привело к тому, что требуется всего один резистор 0.5-1К. Фото измерителя:

arduino-lc

Все скетчи от проектов находятся тут:
https://github.com/sae/Arduino-LCQmeter

дальше работаю над развитием темы генератора…

13.05.2014

Зарядка от солнечных панелек

Недавно озадачился этой проблемой: вроде бы есть солнечная панель, 5В 200мА, но при подключении сотового телефона к такой панели сотка не заряжается, а наоборот, ускоренно разряжается. Аналогичная проблема с зарядным устройством от USB…

Поразмыслив, пришел к выводу: сотка видит подключение внешнего источника, и подключает свои системы на полную мощность (процессор, wifi итп), в результате ток потребляется значительно больше 200мА и происходит разряд. Аналогично с умным зарядником – он сам ест порядка 150мА…

Вывод: от небольших солнечных панелек нужно заряжать _аккумулятор_, по возможности подключив его напрямую. Практика показала что в этом случае заряд идет хорошо. Литиевый аккумулятор в свою очередь имеет схему защиты, которая не даст ему зарядиться более 4.2В. 

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

17.01.2014

Прибор лечебный Ультратон

Filed under: медицина,схемы — sae762 @ 14:47

Вчера посмотрел в работе сей чудный девайс. В качестве рабочего тела – старый газоразрядный индикатор ИН-12. Ионизирует воздух очень сильно. Можно прикладывать к воспалениям кожным и внутренним, можно вдыхать озон при ОРЗ, можно просто озонировать воздух. Полезный девайс.

Сегодня вспомнил, погуглил. Нашел неплохую статейку: http://www.qrz.ru/schemes/contribute/constr/ultraton.shtml

На случай если страница пропадет, скопипастил пару схем и немного текста.

  • оригинал схемы взят из: М.Шустов “Аппараты для ультратоновой терапии” Минск,”Радиолюбитель” №7, 1998г.
  • МТХ-90 тоже пойдет, пойдет и неонка, все электроды вместе.
  • трансформатор строчный от ТВ ТВС-90ПЦ10,  автор ставит ТВС-110ПЦ15
  • автор рекомендует вместо коронного разряда – жесткий искровой, но со скважностью 5 и частотой 10Гц (вторая схема)

Image – классика

Image – искровой со скважностью 5

не болейте )

ЗЫ В качестве дополнения прочитал на http://biorezonans.3bb.ru/viewtopic.php?id=260, что даже простое свечение тиратрона (MTX-90 как обычно) дает лечебный эффект при солнечных ожогах, кожных болезнях и гайморите. Простая схема оттуда (модуляция НЧ на 555, спорный эффект, простого свечения часто достаточно):

7045-2

 

———-

Next Page »