|
Алкотестер своими руками на Arduino
Используйте датчик алкоголя MQ-3 в качестве алкотестера и отобразите BAC пользователя.
Датчик MQ-3 - это датчик оксида олова, который может обнаруживать частицы алкоголя (питьевого типа) в воздухе. Мы можем использовать Arduino для расчета содержания алкоголя в крови пользователя (BAC) и отображения его на 7-сегментном дисплее. Хотя это может быть изящный трюк для вечеринки, он также полезен для того, чтобы сообщить людям, следует ли им ехать домой.
Отказ от ответственности: используемый датчик алкоголя не был откалиброван (см. Техническое описание ) и не очень точен. Я не несу ответственности за его отключение. Он не заменяет алкотестер полицейского.
Вам понадобится Arduino, 7-сегментный дисплей, датчик алкоголя, макетная плата, резистор, провод и USB-кабель. См. Компоненты в разделе «Оборудование», чтобы узнать, что купить.
Припаяйте 7-сегментный дисплей к OpenSegment Shield . Припаяйте штабелируемые заголовки к OpenSegment Shield.
Припаяйте датчик спирта к монтажной плате датчика газа . Не имеет значения, в какую сторону входит датчик (A1, B1, H1 и GND можно повернуть на 180 °). Просто убедитесь, что маркировка шелкографии направлена вниз, в сторону от датчика (т. Е. Вы все еще можете прочитать их, когда датчик припаян к плате).
Припаяйте резистор 4,7 кОм от B1 к GND.
Припаяйте A1 и H1 вместе.
См. Схему для получения дополнительной информации.
Присоедините OpenSegment Shield к Arduino. Подключите датчик алкоголя к Arduino следующим образом:
A1 и H1 (датчик) → 5 В (Arduino)
B1 (датчик) → A1 (Arduino)
GND (датчик) → GND (Arduino)
Шаг 5: питание и код загрузки
Подключите USB-кабель от вашего компьютера к Arduino. Загрузите код из репозитория GitHub ниже. Подождите 5-10 минут, прежде чем снимать показания, так как датчик должен нагреться. Некоторые люди рекомендуют дать датчику «прожечь» (оставить его включенным) в течение 48 часов, прежде чем снимать показания.
Используйте устойчивый 5-секундный «свисток» (как если бы вы задували свечи на день рождения) прямо в датчик, так чтобы ваше лицо находилось примерно в 2 дюймах от датчика. Похоже, это дает наиболее точные показания.
Приклейте / прибейте / скрепите дисплей к стене на следующем мероприятии и повесьте шпаргалку рядом с ним (возможно, вам придется изменить его, чтобы он отражал правовые ограничения вашего штата / страны).
Алкотестер своими руками
Как оказалось, нет простого способа вычислить BAC по датчику алкоголя. Если мы посмотрим на 5-ю страницу таблицы данных MQ-3 , мы увидим кривую, которая отображает доли на миллион (PPM) спирта в напряжение на B1 (при условии, что резистор 4,7 кОм от B1 к GND).
Мы использовали инструмент полиномиальной регрессии (например, этот ), чтобы подогнать полином 5-го порядка к нескольким точкам, взятым из кривой (читать вручную - много возможностей для ошибки). В результате мы получили это уравнение (v - напряжение):
PPM = 150.4351049*v^5 - 2244.75988*v^4 + 13308.5139*v^3 -39136.08594*v^2 + 57082.6258*v - 32982.05333
Мы использовали Excel для создания списка значений АЦП (в Arduino, который находится в диапазоне от 0 до 1023) и связанных с ними напряжений (0-5 В). В следующем столбце мы вычислили PPM по напряжениям.
Наконец, мы можем преобразовать PPM в BAC с помощью
BAC = PPM / 2600
благодаря таблице на 2-й странице этого технического описания (от BAC до PPM).
К сожалению, это создает множество отрицательных и невероятно высоких значений BAC. Поскольку MQ-3 не может обрабатывать PPM ниже 70 и выше примерно 500, мы просто говорим, что все, что ниже 70 PPM, является BAC = 0,000, а все, что превышает 500 PPM, является ОШИБКОЙ.
Все допустимые значения BAC были скопированы в справочную таблицу (BAC_Lookup.h) в коде Arduino. Любое аналого-цифровое (АЦП) значение на выводе A1 более 410 (напряжение 2,004 В) вычитается из него 410, и его соответствующее значение отображается в таблице. Любое значение АЦП выше 859 (напряжение 4,198 В) просто отображает «E.EEE», чтобы показать, что датчик находится за пределами рабочего диапазона.
Таблицу Excel можно найти здесь:
https://hacksterio.s3.amazonaws.com/uploads/document/file/79166/BAC_Lookup_Table.xls
Код
https://github.com/ShawnHymel/DIY_Breathalyzer