Алкотестер или алкометр – это электронное устройство, которое используется для оценки концентрации алкоголя в образце выдыхаемого воздуха человеком. По этим данным определяется количество алкоголя в крови испытуемого. Этот прибор обычно используется дорожной полицией и медицинским персоналом. Впрочем, он может быть полезен и автолюбителям для адекватной оценки собственного состояния.
Алкотестер можно купить, хотя не везде, да и стоят они не дешево. Поэтому есть смысл сделать алкотестер самостоятельно на основе популярной среди радиолюбителей платы Arduino.
Самодельный алкотестер довольно прост в сборке. Главным образом он состоит из платы Arduino и датчика спирта MQ-3. Для индикация концентрации алкоголя в выдыхаемом человеком воздухе служат светодиоды в количестве десяти штук. К ним последовательно подключены резисторы сопротивлением 220 Ом для ограничения тока. Эти светодиоды с резисторами подключены к цифровому порту Arduino (линии D0-D9). Схема подключения компонентов самодельного алкотестера приведена на рисунке ниже.
Пару слов здесь следует посвятить датчику MQ-3. MQ-3 – это датчик спирта, показанный на изображении ниже. Он используется для оценки количества алкоголя, присутствующего в выдыхаемом воздухе. Этот сенсор специально предназначен для выявления алкоголя, поэтому он очень чувствителен в этом плане и быстро реагирует на алкоголь. Этот датчик также может обнаруживать бензин, но его чувствительность к бензолу очень мала. MQ-3 имеет 6 контактов, из которых два служат для активации нагревателя, и 4 контакта обеспечивают питание и передачу сигналов. Нагреватель обеспечивает необходимое рабочее состояние.
Вывод AD0 модуля датчика MQ-3 подключается к аналоговому входу A0, с которого мы собираемся прочитать информацию о концентрации спирта. Чувствительность сенсора настраивается с помощью переменного резистора, установленного на плате модуля датчика MQ-3.
Ниже приведен код (скетч) для работы самодельного алкотестера на основе Arduino.
const int analogPin = 0; // для считывания данных с датчика MQ-3
const int totalLed = 10; // количество светодиодов для индикации
int ledPins[] = {11,10,9,8,7,6,5,4,3,2}; // подключаемые к светодиодам выводы
void setup() {
for (int currentLed = 0; currentLed < totalLed; currentLed++) {
pinMode(ledPins[currentLed], OUTPUT); // линии для светодиодов работают на выход
}}
void loop() {
int sensorReading = analogRead(analogPin); // считывание данных с датчика
int ledLevel = map(sensorReading, 500, 1023, 0, totalLed);
for (int currentLed = 0; currentLed < totalLed; currentLed++) {
if (currentLed < ledLevel) {
digitalWrite(ledPins[currentLed], HIGH);
}
else {
digitalWrite(ledPins[currentLed], LOW);
}
}
}