Привет и добро пожаловать! Сегодня мы создадим алкотестер (breathalyzer), используя датчик паров спирта MQ-3, дисплей на органических светодиодах OLED и платформу Arduino.
Breathalyzer (анализатор дыхания) — общее торговое название устройств для определения концентрации алкоголя в крови по выдыхаемому воздуху. Это значит, что устройство может определить по дыханию сколько вы употребили алкоголя. Оно весьма полезно в различных ситуациях, когда вы имеете дело с происшествиями из‑за вождения в нетрезвом состоянии.
С этим устройством вы легко сможете предупредить водителя если он слишком пьян, чтобы сесть за руль автомобиля. Важно заметить, что устройство из этого проекта недостаточно точное для замены стандартных алкотестеров.
В проекте мы будем использовать датчик алкоголя MQ-3. Это недорогой полупроводниковый датчик, фиксирующий наличие алкоголя в воздухе при концентрации от 0,05 мг/л до 10 мг/л. Датчик использует химическую реакцию для определения уровня алкоголя, а первичным чувствительным элементом является датчик SnO2 — у него низкая электропроводность при чистом воздухе, повышающаяся при росте концентрации паров алкоголя.
Датчик обладает высокой чувствительностью к алкоголю и хорошей устойчивостью к помехам и шумам от, например, дыма и бензина.






4 комментария. Оставить новый
Здравствуйте. Повторил ваш проект. На дисплее не видно нижней шкалы после warming up, дисплей на ssd1306, 0.96” 128×64. Плата ардуино нано. И вообще как им пользоваться? Заранее спасибо за ответ.
Здравствуйте! Не имея на руках макета, сложно точно сказать, в чём может быть причина проблемы. Что касается использования — просто подышите на датчик, и он покажет содержание паров спирта в выдыхаемом воздухе.
Прикольная программа. Спасибо!
Адаптировал для дисплея ssd1306, 0.96” 128×32, привожу фрагмент кода:
…
int TIME_UNTIL_WARMUP = 10; //900
unsigned long time;
int analogPin = 0;
int val = 0;
Adafruit_SSD1306 display(OLED_RESET);
// ============================
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setRotation(2); // поворачиваем изображение на дисплее на 180 градусов
}
// ============================
void loop() {
delay(100);
val = readAlcohol();
printTitle();
//printWarming();
time = millis()/1000;
if(time<=TIME_UNTIL_WARMUP)
{
time = map(time, 0, TIME_UNTIL_WARMUP, 0, 100);
display.drawRect(10, 15, 110, 16, WHITE); //Empty Bar пустой прямоугольник xy и xy
display.fillRect(10, 15, time,16,WHITE);
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(13,20);
display.println("1 2 3 4 5 6 7 8 9");
}else
{
//printTitle();
printAlcohol(val);
printAlcoholLevel(val);
}
display.display();
}
void printTitle()
{
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(22,0);
display.println("Breath Analyzer");
}
void printWarming()
{
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,10);
display.println("Warming up");
}
void printAlcohol(int value)
{
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(45,10);
display.println(val);
}
void printAlcoholLevel(int value)
{
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10,25);
if(value<200)
…
Забыл добавить: ватную палочку намочить спиртом и плавно поднести к датчику, наблюдая за изменениями значений и оценками степени трезвости )) (это после прогрева датчика в течении 900 сенкунд)