понедельник, 25 февраля 2019 г.

Реле SRD-05VDC-SL-C описание, характеристики

Речь пойдет о низковольтном реле SRD-05VDC-SL-C китайского производства. Очень часто приходится коммутировать напряжение 220 v, в большинстве случаев самый идеальный вариант - это реле. Данное реле отличается тем, что им можно управлять с помощью 5-ти вольт, то есть в случае питания логики или микроконтроллера от 5-ти вольт, для реле не нужно городить дополнительную линию питания 12 или 24 вольта.



Поискав на реле srd-5vdc-sl-c datasheet я понял, что есть целая серия реле SRD с различным напряжением управления. Давайте расшифруем буквенно-цифровое обозначение реле и посмотрим, с чем имеем дело.
SRD -это серия реле.
05VDC - это Nominal coil voltage, дословно номинальное напряжение катушки, то есть напряжение управления реле, или то напряжение, которое надо подать на катушку реле, чтоб реле сработало и переключилось.
SL - первая бука S это Sealed type, реле закрытого типа. Вторая, L, Coil sensitivity, из даташита видим 0.36W, то есть мощность, которую необходимо подать на катушку - проще говоря, сколько катушка потребляет.
C - Contact form, тип схемы контактов реле, когда в нормальном состоянии (без подачи на обмотку напряжения) первый контакт замкнут со вторым, при подаче питания на катушку и срабатывании реле - первый контакт размыкается со вторым и замыкается с третьим.

Теперь разберемся с контактами реле и посмотрим как правильно подключить.



Как видим, распиновка реле SRD-05VDC-SL-C проста: с той стороны, где три вывода, крайние два - это катушка, на них надо подавать управляющие 5 вольт. Средний - это тот, к которому мы подводим коммутируемое напряжение, 220 вольт, например. И с противоположной стороны мы можем снимать напряжение, с одного вывода при отсутствии управляющего напряжения, или со второго при срабатывании реле (при подаче напряжения на обмотку). На картинке все нарисовано, поэтому я думаю у вас не возникнет вопроса как подключить SRD-05VDC-SL-C.

Перейдем к потреблению катушки реле. В даташите сказано 0.36 ватт, делим на 5 вольт, должно получится 72 миллиампера. Но поскольку это из графы "чувствительность катушки", то я предполагаю, что это минимум, при котором реле сработает. Давайте померяем и посмотрим сколько тока надо для реле SRD-05VDC-SL-C. Просто подадим на обмотку 5 вольт и посмотрим амперметром. В качестве источника питания - зарядное от телефона. Амперметр показал 72 миллиампера, что вполне соответствует указанным в даташите параметрам.
С таким потреблением реле нельзя подключать напрямую к ногам Arduino или микроконтроллера, так как можно запросто сжечь порт. Поэтому надо подключать через транзистор в режиме ключа.

Посмотрим, какой ток выдерживает это реле. В даташите есть таблица CONTACT RATING.



Из таблицы мы видим, что при резистивной нагрузке (лампа накаливания, например, или нагревательный элемент) максимальный ток составит 7 ампер, при индуктивной нагрузке (двигатель, например) - всего 3 ампера. Не стоит забывать, что это не номинальные, а максимальные значения.
Последняя строчка из этой таблицы говорит нам из чего сделаны контакты реле - это серебро с кадмием. Сколько содержится серебра в китайском реле, я сказать не берусь, но надеюсь, что оно там есть.

На базе этого реле есть готовые модули для Arduino - про них ничего сказать не могу, в руки не попадали. Само же реле SRD-05VDC-SL-C имеет немного нестандартное расстояние между выводами, в беспаечную макетную плату его не поставить. Да и на обычной макетной плате тоже проблемы - я решал их немного подгибая выводы реле и рассверливая посадочные отверстия в плате. Но если разводить и травить свою плату - то данное реле хорошо тем, что может работать от одного с ардуино источника питания. При этом не стоит забывать, что если блок питания слабенький, то напряжение будет проседать в момент срабатывания реле и микроконтроллер будет перезагружаться либо зависать. Решается использованием более мощного БП.
Так что если ищете какое реле выбрать для Arduino или микроконтроллера Attiny или Atmega - то с уверенностью советую использовать SRD-05VDC-SL-C, вполне достойное и с большинством задач справиться.

суббота, 23 февраля 2019 г.

Как пользоваться мультиметром DT-838

Многие начинающие электронщики, да и просто купившие мультиметр автолюбители, часто задаются вопросом как же пользоваться этим измерительным прибором. Иногда при покупке в комплекте нету инструкции. Либо же человек раньше пользовался стрелочным тестером и не знает как пользоваться цифровым мультиметром.
Я хочу немножко прояснить вопрос как пользоваться одним из самых популярных и недорогих мультиметров - dt838. Из всей серии dt83X этот выделяеться наличием возможности измерения температуры с помощью термопары. Поэтому, при покупке в комплекте, помимо щупов, так же идет и термопара. На фото ниже можно посмотреть, что входит в комплект.



Что ж, начнем с самого верхнего положения селектора (селектор - это крутилка, с помощью которой вы выбираете режим измерения). Тут все просто - надпись OFF означает, что мультиметр выключен.



Крутим ручку селектора на одно деление вправо, попадаем на режим измерения переменного напряжения. Он подписан ACV, в этом положении мы можем измерить напряжение максимум до 750 вольт. Можно замерить, сколько вольт в розетке, например. Щупы при этом ставим следующим образом: черный пихаем в самый нижний разъем мультиметра, который подписан COM - это "земля", или минус при постоянном напряжении. Красный щуп в отверстие, расположенное рядом. На фото ниже показано положение щупов в мультиметре - в таком положении следует выполнять все измерения, кроме одного, до него мы скоро доберемся. Итак, щупы в мультиметр вставили, вторые концы щупов смело суем в розетку и смотрим на дисплей - там вы увидите показатели напряжения.
Следующее положение селектора в зоне ACV - до 200 вольт, отличается большей избирательностью, точность измерения повышается до десятичного знака после запятой. Но больше 200 вольт измерять нельзя - мультиметр выйдет из строя.



Следуящая зона DCA - это режим измерения постоянного тока. Первое положение позволяет измерять постоянный ток с точностью до микроампера, но при максимальном токе до 2 миллиампер. В быту используется очень редко.
Следующее положение - 20m, позволяет измерять ток максимум до 20-ти миллиампер, с точностью до десятков микроампер, использую для замера потребления микросхем и прочих малопотребляющих деталей.
Следующее - 200m, как вы уже догадались, можно замерять ток до 200 миллиампер.
10A - вот на этом положении остановимся подробнее. В этом положении можно замерять ток до 10-ти ампер, вот только положение щупов надо поменять. Если этого не сделать и померять сколько потребляет тока жесткий диск компьютера, например, то мультиметр сгорит. Щупы ставим так, как на фото ниже.



Следующее положение hFE служит для измерения hFE биполярных транзисторов. Что такое hFE - это коэффициент усиления по току, показывает во сколько раз ток коллектора транзистора больше тока базы. Для замера hFE предусмотрено посадочное место для транзисторов PNP и NPN проводимости, удобно для транзисторов в корпусе TO-92 - синее круглое гнездо внизу слева. Тут важно не просто сориентировать правильно выводы транзистора, но и достать ножками до контактных площадок, которые расположены довольно глубоко. Эта глубина создает некоторые неудобства для проверки выпаянных транзисторов, если ножки короткие - приходится допаивать кусочки проводов. То же самое и для транзисторов, которые не в корпусе TO-92 - TO-220 или smd.
Использую в основном для подбора комплиментарных пар.

Теперь добрались до режима измерения температуры, подписанного TEMP. Для измерения температуры служит термопара, её следует подключить вместо щупов. Сразу же увидите температуру окружающего воздуха.



Для того, чтоб померять температуру какого-то предмета, термопару следует плотно к нему прижать. Давайте интереса ради измерим температуру жала паяльника. Включаем паяльник, ждем, пока нагреется, после чего прижимаем термопару к жалу и смотрим показатели на дисплее. Видим, что температура жала 343 градуса.



Следующий режим - это прозвонка. Снимаем термопару, ставим на место щупы, черный в нижний разъем, красный в средний. Если коснемся щупами друг друга, проще говоря замкнем цепь, мультиметр запищит, подавая сигнал о том, что между щупами есть контакт. Очень удобно для отслеживания на платах шин или для поиска обрывов в проводах.

Дальше идет режим измерения сопротивления. Тут сектор разделен на несколько диапазонов, каждый отличается избирательностью и максимальным измеряемым сопротивлением. Помимо измерения сопротивления тут есть режим проверки диодов, который совмещен с режимом измерения сопротивления до 2 килоОм. Отличается этот режим тем, что в этом режиме на щупы подается ток 1.2 мА напряжением 2.8 вольт. В режиме на 200 Ом при напряжении 2.8 вольта ток немного больше - 2 мА, в остальных режимах напряжение составляет 0.5 вольт при токе 20 мкА - этого недостаточно, чтоб PN-переход диода открылся. Итак, давайте подробней рассмотрим процесс проверки диодов и узнаем, как мультиметром проверить светодиод, например.
В режиме измерения сопротивлений до 2 килоОм или до 200 Ом касаемся красным щупом анода, черным - катода, светодиод при этом должен засветится. Таким же образом с помощью мультиметра можно узнать, где у светодиода анод, а где катод - если не светится, переворачиваем светодиод относительно щупов, засветился - значит на красном щупе анод. Тот же принцип работает и для обычных диодов, только ориентируемся по показаниям дисплея.
В этом же режиме можно мультиметром проверить биполярный транзистор на пробой или на обрыв - проверяем PN-переходы. Как проверить полевой транзистор, можно посмотреть в статье Как мультиметром проверить MOSFET

Добрались до последнего режима, это режим измерения постоянного напряжения, подписан DCV. В этом режиме можно мультиметром померять напряжение аккумуляторной батареи, автомобильной бортовой электросети или же узнать, достаточно ли вольт выдает зарядка для телефона. При всех замерах следует помнить про выбор диапазона измерения дабы сжечь мультиметр. Максимум что можно на него подать - это 1000 вольт постоянного тока. Так же не стоит в этом режиме пытаться замерить напряжения в розетке.

В заключение скажу, что мультиметр не имеет автоматического выключателя, посему после работы следует перевести селектор в положение OFF, дабы батарея не села. Если такое уж случится, и батарея сядет, на дисплее высветится знак батареи - её следует заменить.
Как заменить батарейку на мультиметре? Да очень просто. Питается мультиметр от батареи типа КРОНА, напряжением 9 вольт. Покупаем батарейку, сзади на мультиметре есть один или два винта или шурупа (зависит от производителя), откручиваем их и меняем батарейку.

Вот такая вот получилась инструкция к мультиметру dt 838, изначально задумывалась как коротенькая заметка, описание dt-838. Пользуйтесь, учитесь и следите за тем, в каком режиме и что вы собираетесь измерять, дабы не угробить мультиметр.
Так же при работе с высоким напряжением соблюдайте технику безопасности и постоянно помните, что электрический ток при высоком напряжении имеет дурную привычку убивать.

понедельник, 18 февраля 2019 г.

Arduino IDE или C/C++?

В этой статье я хочу сравнить среды и средства разработки, выявить их положительные и отрицательные стороны, а так же разобраться, с чего лучше начинать изучать микроконтроллеры.
Многие из тех, кто хочет познакомиться с микроконтроллерами, не знают с чего начать. Какой микроконтроллер выбрать начинающему, какой язык программирования, какую среду разработки? У каждого выбора есть свои плюсы и минусы. Разобраться во всем и сразу невозможно. Чем же руководствоваться при выборе? В первую очередь целью. Достаточно задать себе вопрос "Зачем мне это надо?". Итак, давайте сравним среду разработки Arduino с написанием прошивки для микроконтроллера на C/C++ в Atmel Studio, например.

Неоспоримый плюс Arduino IDE в легкости освоения. Для того, чтоб сделать первый шаг и моргнуть светодиодом, не нужно изучать язык программирования, не нужно изучать архитектуру микроконтроллера и заниматься его инициализацией. Но в этом кроется основной на мой взгляд минус Arduino IDE - нет понимания как работает микроконтроллер, для программиста он остается таким себе "черным ящиком". Столкнувшись с тем, что в реальном времени необходимо работать с большим массивом информации с внешних датчиков и управлять несколькими двигателями, программисту будет трудно написать код так, чтоб все работало точно и безотказно. Например, использовать прерывания по таймеру вместо ардуиновского delay.

В этом есть неоспоримый плюс написания прошивок на C/C++ - понимание работы микроконтроллера, его особенностей и периферии. Это дает возможность использовать микроконтроллер рационально, в большинстве случаев дает прирост производительности, что в свою очередь дает экономию на разрабатываемом приборе. Минус - время на изучение. Чтоб освоить с нуля язык, необходимо время, плюс изучение микроконтроллера. При переходе на другой микроконтроллер - надо изучать новый микроконтроллер, его регистры, периферию. При переходе на другую архитектуру - еще больше времени. С приходом опыта этот минус немного нивелируется и времени на освоение нового уходит все меньше и меньше, ибо ты уже как минимум с половиной из того, что надо изучить, сталкивался в предыдущих микроконтроллерах, но все же требуется некоторый мозговой штурм для изучения нового.

Еще один минус Arduino IDE - это то, как эта среда использует ресурсы микроконтроллера. Если необходимо много всего впихнуть в микроконтроллер или работать в режиме реального времени - то появляются трудности. Проблема решается выбором более мощного контроллера, что в свою очередь несет общее удорожание разрабатываемого прибора. Например, там, где можно было бы обойтись Attiny4313, придется ставить Atmega238. На C/C++ подобная проблема изначально отсутствует, так как среда разработки не добавляет в код то, чего туда не пишет программист, что в свою очередь позволяет более рационально использовать ресурсы микроконтроллера.

Один из плюсов C/C++ - нет фактически никаких ограничений по алгоритмам и кодам, кроме накладываемых ограничений самого микроконтроллера. Из-за этого в среде Arduino IDE очень часто встречаются вставки кода на C, когда гибкости Arduino language попросту не хватает.

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

Это основные плюсы и минусы двух разных подходов. Что касается того, стоит ли полностью отказываться от одного в пользу другого - однозначно нет. Для нормального изучения микроконтроллеров однозначно использовать C/C++, а вот для того, чтоб быстро запустить или проверить новое устройство - Arduino IDE.
В заключение хочу сказать о том, что выбор среды разработки в первую очередь должен давать ответ на вопрос "зачем мне это надо?". Например, что должен знать начинающий программист-микроконтроллерщик? Правильно, микроконтроллеры. С Arduino IDE вряд ли удастся добиться полного знания и понимания с чем работаешь. Но если нужно очень быстро создать прототип устройства, которое в дальнейшем можно будет легко воспроизвести кем угодно - то тут лучше взять ардуино.

Сам же я начинал писать на C/C++, активно пишу и сейчас, и не менее активно использую Arduino IDE. Для примера приведу микроконтроллер Attiny13a - код, написанный для него в Atmel Studio, будет занимать гораздо меньше места, чем тот же код написанный в Arduino IDE. В то же время когда мне пришли с алиекспресс датчики BMP280, для проверки их на работоспособность я использовал Arduino IDE с уже готовой библиотекой для этих датчиков - я потратил гораздо меньше времени, нежели потратил бы разрабатывая свои библиотеки на C в Atmel Studio. Потому я никогда не поддерживал и не буду поддерживать холиваров на тему "что лучше: Arduino language или C/C++?", у каждого способа и метода есть свой неповторимый функционал и назначение. Используя в равной мере оба способа там, где это надо, либо выбирая наиболее подходящий для конкретного случая - можно добиться гораздо лучших результатов, нежели ограничивая себя чем-то одним.

пятница, 15 февраля 2019 г.

Netis WF2411E Восстановление

Попался мне в руки Netis wf2411e, на котором горят только pwr и wps, реагирует на кабель. Что значит сие, я не знал, предположил что слетел загрузчик. После разборки роутера и изучения внутренностей я выяснил, что есть возможность подключиться и восстановить по UART.
Сам роутер построен на процессоре RTL8196E, посмотрев datasheet на него я отследил линии TX и RT. На самой плате имеется отладочный разъем, на который выведен и UART. Вот фото как подключиться к роутеру по UART.


Земля там представлена двумя контактными площадками. В качестве переходника - дешевый китайский USB-UART переходник. На всякий случай подключил его к роутеру через резисторы по 470 килоом, можно и без них - я просто перестраховался. Подключил RX переходника на TX на плате и, соответственно, TX переходника на RX на плате.
Программное обеспечение - Putty. И тут я столкнулся с тем, что не знал какая скорость COM-порта должна быть у RTL3411E. Методом перебора выяснил, что скорость UART роутера 38400. После подключения по UART и включения питания роутера он мне сыпонул в консоль вот такую вот вещь:

no sys signature at 00010000!
no sys signature at 00020000!
no rootfs signature at 000E0000!
no rootfs signature at 000F0000!
no rootfs signature at 00130000!
no rootfs signature at 000D0000!
no rootfs signature at 000D1000!
no rootfs signature at 000D2000!
no rootfs signature at 000D3000!
no rootfs signature at 000D4000!
no rootfs signature at 000D5000!
no rootfs signature at 000D6000!

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


Из всего этого нас интересует только IPCONFIG. Команда IPCONFIG нужна для того, чтоб установить адрес роутера, по умолчанию это 192.168.1.6. На этот адрес мы будем заливать прошивку по tftp.
Для начала нам нужна сама прошивка, идем на официальный сайт netis - netis-systems.com. У меня этот сайт почему-то не открылся, потому я пошел на его украинский вариант netis.ua


Самая новая прошивка была с пометкой "обновление только через веб-интерфейс", поэтому я использовал прошивку от 17.03.2017. Скачал, распаковал, создал на диске С папку с коротким циферным названием, чтоб долго не прописывать путь и скопировал бинарный файл прошивки в эту папку. Сам файл я так же переименовал для удобства.

Теперь посмотрим, как включить TFTP-сервер в Windows. Для этого нам понадобиться всего одна команда:
dism /online /Enable-Feature /FeatureName:TFTP
Прошивать роутер можно напрямую подключив кабель в сетевую карту ПК, но я шью с ноутбука с нерабочей картой, потому шить буду по wi-fi. Для этого присваиваю роутеру IP из подсети, в которой нахожусь, командой ipconfig



Так же необходимо включить автозапись прошивки в постоянную память, для этого есть команда autoburn



Теперь подключим наш Netis к рабочему роутеру (или к ПК, если будете шить с компьютера). Подключаем кабель к 4-тому порту нетиса, именно LAN4, с другими портами ничего не выйдет. Если шьем напрямую с пк, то присвойте сетевой карте пк статический адрес из той же сети, что и адрес на нетисе (если на нетисе стандартный 192.168.1.6, то у компьютера дорлжен быть 192.168.1.2, например).
После подключения с командной строки переходим в папку с прошивкой командой cd, после чего запускаем отдачу файла прошивки по TFTP командой
tftp -i 192.168.88.100 put netis.bin
netis.bin - имя прошивки, я уже писал, что переименовал ее, дабы в командной строке было меньше писанины - меньше шансов ошибиться.
Запускаем команду и ждем, пока прошивка загрузится на роутер. После успешной загрузки увидим сообщение об успешной передаче



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



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



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

четверг, 14 февраля 2019 г.

Усилитель звука на lm358

Пришла мне в голову идея собрать на lm358 усилитель для наушников. Идея вызвана тем, что мне срочно понадобился прибор для проверки операционных усилителей, а поскольку осциллографа у меня на данный момент нет, то решил собрать такой прибор своими руками. В качестве прибора будет выступать унч на lm358, так как именно этот ОУ мне надо проверить.


Для начала посмотрим характеристики LM358. Для этого найдем даташит на этот ОУ и обратим внимания на вот эту таблицу.



Из таблицы мы видим, каким напряжением можно питать lm358, это от 3 вольт до 30 при однополярном питании. Мой выбор остановился на 5 вольтах, так как это напряжение можно взять откуда угодно - хоть с порта USB, хоть с павербанка.
Дальше надо определится со схемой, это будет классическая схема усилителя на ОУ с отрицательной обратной связью. За основу возьмем схему из даташита и немного ее доработаем.



Резисторы RG и RF отвечают за глубину обратной связи, регулируя коэффициент усиления. Резистор RIN ограничивает входной сигнал. Перед RIN поставим конденсатор, дабы отсечь постоянный ток, а RG можно сделать переменным, чтоб регулировать громкость. По питанию в обязательном порядке поставим электролитический конденсатор для того, чтоб не было краткосрочных просадок напряжения питания.

После сборки тестового образца звук был настолько ужасным, что схему пришлось существенно переделать. В итоге от того примера, что в datasheet, пришлось немного отступить. Путем вычислений а так же проб и ошибок сформировалась вот такая вот схема. Получился полноценный усилитель, который я нагрузил не наушниками, а 15-ти ваттными колонками сопротивлением 4 Ома. Усилитель конечно же не выдаст подобной мощности, просто эти колонки были в наличии.

Схема усилителя на LM358


Давайте разберем эту схему по порядку, что и зачем тут стоит. Первым делом начнем с конденсаторов C1 и C2. Изначально планировалось поставить керамические конденсаторы небольшой емкости, но практика показала, что лучше всего подошли конденсаторы большой емкости. Сначала поставил на 1 mF неполярный и это привело к громадным искажениям, при попытке подать сигнал в обход конденсатора искажения пропадали. Пробовал различные конденсаторы, в итоге лучше всего звучат электролитические конденсаторы, которые покупались мной для материнской платы. Возможно дело в ESR или в коэффициенте гармоник, которые напрямую зависят от качества конденсаторов и эти просто оказались более качественными, нежели остальные имеющиеся. К сожалению, замерить ESR или коэффициент вносимых гармоник не представляется возможным из-за отсутствия соответствующей измерительной аппаратуры.

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

Резисторы R3, R4, R5 и R6 формируют отрицательную обратную связь. Изменяя значения резисторов R3 и R4 можно регулировать громкость, поэтому вместо них можно поставить один переменный сдвоенный резистор. Я предпочел поставить постоянный и регулировать громкость на телефоне, к которому подключал данный усилитель.

Конденсаторы C3 и C4 емкостью 0,47 микрофарад выступают фильтрами, без них очень сильные искажения на высоких частотах. Это электролитические конденсаторы китайского производства и я подозреваю, что именно из-за своего качества (ESR и высокий коэффициент вносимых гармоник) они делают звук качественнее. Это как раз тот случай, когда плохое качество деталей улучшает схему. Хотя может быть я ошибаюсь и они просто выступают в роли фильтра.
Если поставить параллельно R5 и C3 переменный резистор номиналом 10-50 кОм и конденсатор 47 нанофарад, можно получить фильтр высоких частот. Получится усилитель с регулятором баса, но для этого такое же изменения надо внести и во второй канал.

Переходим к конденсаторам C5 и C6. Они отфильтровывают постоянный ток на выходе усилителя, и с ними та же ситуация, что и с конденсаторами на входе. Поставил те, которые предназначались для установки на материнскую плату компьютера, с другими попросту растут искажения. И это даже учитывая то, что данные электролиты я покупал лет 7-10 назад и за период хранения их характеристики должны были бы ухудшиться.

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

В качестве нагрузки выступают советские колонки 15 ватт - то, что было в наличии. Звук вполне приличный, на максимуме громкости телефона есть искажения, но уже на 70-80 процентах их нет. Вместо колонок можно смело подключать наушники, только изменить номинал резисторов на выходе до 5-10 Ом, например. Хотя можно и не изменять, дабы не сжечь наушники или не оглохнуть самому.

Микросхема LM358P китайского производства, заказана с али.
Усилитель собран на макетной плате, вот что получилось в итоге.



На схеме не указан конденсатор, который я поставил между плюсом и минусом питания, это электролит на 470 микрофарад. Питал сей девайс от обычной телефонной зарядки 5 V 750 mA, замеры показали, что просадок напряжения нет и потребления тока совсем смехотворное - 10-15 mA. С оглядкой на то, что в схеме на входе и выходе стоят конденсаторы на 10 вольт, я все же рискнул подать питание 12 вольт, дабы посмотреть как изменится звук. Усилитель выдержал данное испытание более чем достойно, увеличив немного громкость звучания и при этом не внося искажений в звук. Потребление по току увеличилось до 20 mA.

В заключение скажу, что если вам нужен стенд для проверки операционных усилителей, то этот усилитель звука с однополярным питанием вполне подходящий вариант. С учетом того, что схема собрана на макетной плате, то для проверки большого количества LM358 просто вытаскиваем одну микросхему и ставим вместо нее другую. Если выполнить все на печатной плате - то надо ставить dip-панельку для удобства замены микросхем.
Что касается сложности - то собрать своими руками на коленке за 20 минут при наличии необходимых деталей даже ребенок сможет.

среда, 6 февраля 2019 г.

Датчик газа MQ-2 подключение к Arduino nano

В этой статье я расскажу как подключить датчик газа MQ-2 к Arduino nano.
Описание датчика MQ-2.



Датчик пришел в виде готового модуля, имеет четыре вывода, которые подписаны AO, DO, GND и Vcc. Назначение выводов: AO - это аналоговый выход, DO - это цифровой выход, GND - это земля (минус питания) и Vcc - это +5 вольт. Распиновка проста, но есть одно НО! - цифровой вывод имеет только два состояния - 0 и 1, никаких данных об концентрации регистрируемых датчиком газов с него не получить.
Так же на плате модуля присутствует подстроечный резистор для регулировки чувствительности датчика в случае получения данных с цифрового вывода, вернее порог срабатывания. Для этой цели тут стоит компаратор LM393.
В интернете рекомендуют прогреть новый только что купленный датчик на протяжении 24-рех часов, после чего время его прогрева будет около минуты с моменте включения. В даташите же я нашел Preheat time, время разогрева, и там указано больше 48 часов. Думаю, для домашнего использования вполне достаточно будет и 24-рех часов.

Итак, для начала давайте все же подключим его к ардуине дабы посмотреть что же он нам скажет в не прогретом состоянии. Для получения информации воспользуемся аналоговым выходом датчика, подключив его на аналоговый вход Arduino nano, соединив AO датчика с A0 ардуины. Разведем питание и напишем небольшой скетч, задача которого считывать показания с АЦП ножки A0 и отправки его по UART. Монтаж я сделал на макетной плате, должно получится как-то вот так.



Пример кода



После прошивки ардуины открываем монитор последовательного порта. Данные, что мы получаем, это вовсе не значение газа в PPM, это всего лишь содержание регистра АЦП микроконтроллера. Тем не мене, по этим данным уже можно о чем-то судить. Подождав около получаса и дождавшись, когда датчик немного прогреется, видим, что напряжение уже довольно сильно просело. Берем зажигалку и, не зажигая ее, пускаем газ в датчик. Видим, что датчик работает, так как показания сразу же изменяются. Таким образом можно проверить датчик MQ-2.
Теперь проведем несложный расчет для того, чтоб получить значение сопротивления нашего датчика. Для начала сырые данные АЦП переведем в вольты. Для этого замерим опорное напряжение, которым у нас выступает напряжение питания. У меня мультиметр показал 4,9 вольт. Ацп 10-ти битный, это значит что у него всего 1024 значения, тоесть при 4,9 вольтах он нам даст значение 1023. Делим 4,9 на 1024 и получаем 0,0047 вольта с округлением. Добавляем в наш код переменную float Vdat, равную 0.0047. Дальше попросту значение ацп умножаем на эту переменную и получаем напряжение на ноге A0 в вольтах. Переходим к сопротивлению датчика. На плате модуля у нас есть резистор, который подтягивает наш аналоговый выход на землю, номиналом 5 Ом. По сути весь модуль - это некий делитель напряжения. Прямо в даташите видим формулу:
Resistance of sensor(Rs): Rs=(Vc/VRL-1)×RL
Смотрим схему и таблицу в даташите, разбираем что к чему.



Подставляем то, что нам надо и получаем следующее:
Rs = (4.9/Vdat-1)*5
Займемся формулой расчета ppm. Для этого снова смотрим datasheet на MQ-2.



Из данного куска даташита можно сделать несколько выводов. Первый - с разными газами при одних и тех же показаниях датчика будет разная концентрация газа. Это переводит наш датчик из разряда "измерительный прибор" в разряд "показометр". Максимум, что можно посмотреть - это загрязненность воздуха. Для бытовых нужд этого вполне достаточно, но для чего-то серьезного - нет. Второй вывод: дабы получить точное значение в ppm, датчик нужно откалибровать на чистом воздухе. Это не проблема, открываем окно, суем на улицу датчик, делаем вид, что за окном чистый воздух и сохраняем показатели в переменную Rs_air.
Теперь можем высчитать R0, которое есть в соотношении Rs/R0. На чистом воздухе в графике Rs/R0 составляет примерно 9.5. Делим Rs_air на 9.5, получаем R0.
Вешаем прерывание на ногу микроконтроллера, цепляем туда тактовую кнопку и с помощью этого прерывания вызываем функцию калибровки
int calibr()
{
R0 = Rs_air/9.5;
}
Дальше упираемся в нелинейную функцию. Решать сию задачку для показометра мне влом, потому я попросту разобью данный график на несколько составляющих, в которых прослеживается хоть какая-то линейность. Например, с 200 до 500, с 500 до 1000, с 1000 до 2000, с 2000 до 5000, с 5000 до 10000. Упираемся в то, что это таки показометр, а значит для CO и для, например, пропана показатели будут совершенно разными. Для кого из них строить формулу? Для примера сделаем расчет для CO.
Для начала высчитаем первый угловой коэффициент. Первая точка - это 200 ppm с соотношением Rs/R0 примерно 5.1, вторая - 500 ppm с соотношением 4. Получаем уравнение
K = (4-5.1)/(500-200)= -0.003666

Высчитываем остальные коэффициенты и приступаем к формуле расчета, которая имеет вид y=kx+b, где b - это смещение прямой по оси Y. Для начала рассчитаем для первого отрезка b.
4=-0.003666*500+b
b = 5.8335
После чего высчитываем b для остальных отрезков и приступаем к формированию нашего кода для ардуино. Для каждого кусочка нам необходимы будут разные значения двух одних и тех же переменных. Например, b для первого кусочка и b для второго кусочка - это разные числовые значения. Будем передавать их через переменные в виде аргументов.
Получился вот такой кусок кода

int ppm_co(float k, float b)
{
float pp = 0;
pp = Rs_R0 - b;
ppm = pp/k;
Serial.println(ppm);
}


Rs_R0 = Rs/R0;
if (Rs_R0 > 5.1)
{
Serial.println("<100");
}
else if (4 < Rs_R0 < 5.1)
{
ppm_co(-0.003667, 5.8335);
}
else if (3.1 < Rs_R0 < 4)
{
ppm_co(-0.0018, 4.9);
}
else if (2.1 < Rs_R0 < 3.1)
{
ppm_co(-0.0005, 3.6);
}
else if (1.9 < Rs_R0 < 2.1)
{
ppm_co(-0.0001, 2.4);
}
else if (1.5 < Rs_R0 < 1.9)
{
ppm_co(-0.00008, 2.3);
}
else
{
Serial.println("you died");
}

Теперь несколько советов. Сенсор MQ-2 чувствителен к питанию, потому при отладке помните, что USB порт ПК может давать заниженное питание, мне пришлось использовать питание внешнее. Так же не стоит забывать о времени на прогрев - холодный датчик MQ-2 выдаст абракадабру вместо вменяемых данных. Ну и сам процесс калибровки должен быть в условиях с чистым воздухом. В коде используйте тип переменных, который способен вместить в себя большое число, ибо от этого зависит результат вычислений. Я использовал float для всех чисел, кроме данных с ацп - там мне хватило integer)
Данный код приведен как пример, кода вполне достаточно, дабы регистрировать уровень загрязненности воздуха и включать-выключать вытяжку на кухне, для более серьезных вещей надо считать все не для СО, а для LPG, чтоб добиться более низких порогов срабатывания. Так же из кода можно выкинуть калибровку, замерив и прописав как константу показатель датчика на чистом воздухе.
В интернете гуляет библиотека для датчика MQ-2, у меня чет с ней не сложилось, она просто-напросто отказалась выдавать какие-либо данные. Потому писал свой скетч. Вышеприведенный код написан на C, потому его с легкостью можно использовать на любом микроконтроллере, хоть STM32, хоть PIC, лишь бы был ацп. Выкинуть с него только Serial.print, ибо это ардуиновская библиотека Wire и в других средах разработки ее нет.
P.S. Если кто-то напишет код поинтересней - пишите в комментарии к статье, с радостью почитаю)))