Небольшенький "простенький" алкоТестер

Thorn
Offline
Зарегистрирован: 07.11.2014

Здраствуйте господа.

Закончил я свою тепличную АВТОНОМНУЮ поливалку-измерялку и решил сделать небольшую приблуду, поволяющую измерять содержание некоторых углеводородов в организме.

идея возникла вследствии "неожиданных" проверок сотрудников (цеховых рабочих) на предприятии на предмет употребления. Руководство лояльное но "до поры". Имеется какйото очень дорогой прибор (что то под штуку зелени) но сами понимаете мундштуки, время замера на кадого минимум до 2-3 минут. Решил я попробовать для этих целей датчик MQ3 - он может всякие ацетоны, газы и прочее показывать.

идея всем понравилась, дунул в него - есть показания превышающие расчётные - дуй в атестованный прибор и получай листок с распечаткой (со всеми вытекающими), непоказало - садись в автобус :)

Вот нашёл пробный запуск подобного http://arduino.ru/forum/programmirovanie/mq-3-alcohol-gas-sensor-vyvod-pokazanii, всё вполне, добавлю мелкий tft в 1,4" к нему, светики. Пока едут некотрые детальки с Ali мониторю в serial.

Вот такого  совета прошу, визуальную сигнализацию и вывод я понемногу пишу. А вот звуковую... пока затык. Скажите можно-ли описать время и изменение тональности пищалки в зависимсоти от содержания переменной?

К примеру если val меняется от 0 до 10 как мне описать изменение tone(BeepPin, от 1000 до 3040, и длительности от 1000 до 200);

Тоетсь увеличение val увеличивает частоту и длительность писка :) Через map незнаю как описать.

Araris
Offline
Зарегистрирован: 09.11.2012

Здесь: http://arduino.ru/Reference/Map почитайте.

Thorn
Offline
Зарегистрирован: 07.11.2014

Прочитал несколько раз, много думал:) однако непонял как приравнять "карту" с одним значением к ДВУМ "абсолютно" другим:

val = map(val, 0, 1023, 0, 255); где 0, 255 это к примеру ЧАСТОТА или ИНТЕРВАЛ бля зуммера, а как все вместе? так:

val = map(val, 0, 1023, 0, 255, 0, 255);???

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

В "Электросиле" китайский алкотестер стоит несколько долларов...

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Thorn пишет:

Прочитал несколько раз, много думал:) однако непонял как приравнять "карту" с одним значением к ДВУМ "абсолютно" другим:
val = map(val, 0, 1023, 0, 255); где 0, 255 это к примеру ЧАСТОТА или ИНТЕРВАЛ бля зуммера, а как все вместе?

два map() на одну tone()

Thorn
Offline
Зарегистрирован: 07.11.2014

Тов. Gippopotam ..... Про готовый знаю всякий китайски знаю. И видимо вы нечитали мой "опус" с техпараметрамми. В него ненужен мундштук, на него нужно просто "дыхнуть" :) и тут-же записчит и замигает+цифорки какие ниесть НО показания. Далее стандартно..

Я прсото сильно заморочился больше с заделом на будущее, хочу научится с map работать, как в свое время с millis осваивал за то теперь везде почти могу :)

На самом деле хватает двух индикаций и ОДНОГО звука, вся эта "мар-карта" только усложнит визуализацию, но пусть будет пока....

Ув. SU-27-16 .... Счас попробую попробую как вы подсказали

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Thorn пишет:

Тов. Gippopotam ..... Про готовый знаю всякий китайски знаю. И видимо вы нечитали мой "опус" с техпараметрамми. В него ненужен мундштук, на него нужно просто "дыхнуть" :) и тут-же записчит и замигает+цифорки какие ниесть НО показания. Далее стандартно..

Я прсото сильно заморочился больше с заделом на будущее, хочу научится с map работать, как в свое время с millis осваивал за то теперь везде почти могу :)

На самом деле хватает двух индикаций и ОДНОГО звука, вся эта "мар-карта" только усложнит визуализацию, но пусть будет пока....

Ув. SU-27-16 .... Счас попробую попробую как вы подсказали

Если так - то конечно.

Thorn
Offline
Зарегистрирован: 07.11.2014

Раз уж будет 1,4" tft - приделал и меню :) с установкой верхнего и нижнего значений содержания паров C2H5OH 

от 0,05 мг./л (0,1%) до 1 мг/л. (2%) соответственно :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

идея всем понравилась, дунул в него .......
и сколько же литров будет выделено на испытание и юстировку прибора ? :)-

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

Thorn пишет:

Раз уж будет 1,4" tft - приделал и меню :) с установкой верхнего и нижнего значений содержания паров C2H5OH 

Ловить надо - ацетальдегид, а не этанол. :) Если рабочий с утра приходит, а из него еще этанол летит - то страшно подумать, сколько он выпил с вечера.

http://alcopedia.ru/hangover/info/transformation/

Thorn
Offline
Зарегистрирован: 07.11.2014

упс ... про то как то неподумал, пробовал разные жидкости :) и внутрь (прямо на раб.месте) чуток совсем после праздника :) и просто ваткой и над датчиком. ОТЛИЧНО показывает газ (зажигалок) шикарно ВСЕ растворители и спирты (включая борный и тп) а также лёгкий перегар.

Вот почему приборчик и нужен "проходящий" чтобы непарится с точными молями, промилями и тп. Поверьте проверить более 200 человек после дневной смены !!!!! занимает иногда час и более, рабочие сами ждут этой приблуды. Так что главное чтобы НЕПОКАЗАЛ, а если показал - эти единичные случаи пусть разбирает служба охраны и безопасности. В понедельник покажу чего наваял в коде, и может в коробочку уже воткну что. :)

Счас заморочился с датчиком "ветра" чтобы измерение наступало с момента вращения вентилятора (с видеокарточки снял), тоетсь чтобы ТОЧНО знать что испытуемый дунул а не прсото потсоял. 

Ещё у детей есть такая "электронная свеча", там светик мерцает, и если дунуть в корпус где светик на донышке то он тухнет, вот думаю его снять, он тоже сгодится. хотя вентилятор прощще откалибровать на ДОСТАТОЧНОЕ количество оборотов а значит и на проходящий поток воздуха.

bwn
Offline
Зарегистрирован: 25.08.2014

Самое неприятное, что эти датчики прет и от табачного дыма.  А сублимация табака пока разрешена)))). Для доказательства употребления, только анализ крови. Все остальное профанация.

Thorn
Offline
Зарегистрирован: 07.11.2014

Товарищи у меня печалька. Тот датчик за который  я принял его (в светодиодной свечке, дунеш на неё и она гаснет) на деле оказался конденсаторным микрофоном (может помните его любили монстырить во все мафоны ранее двухкасетники и прочее), попробовал его в аналоговому входу - результат неудовлетворительный, чт ос подятжкой что без - неменяются показатели, нужен видимо хоть какойто предварительный усилитель на паре транзисторов к нему. Сопротивление высокое входное 1,7кОм. 

Вентилятор - самый простой способ но маленьких нет под рукой, да и размер тестера невелик (я под него использую бракованный корпус от  Извещатель пожарный дымовой) размер классный, кнопку совместил со светиками, экранчик 1,4" влазит и даже место под 9В "крону" :).

Замерил ток, потребляемый самым нагруженным элементом, датчиком MQ3 - он более 130мА !!!! немало, как думаете потянет его Nano (точнее её стабилизатор, что выдает 5В). Если нет придётся питать тестер от 4-х ААА или АА батареек а это уже побольше места :((.

Госопода, подскажите, первое:-по микрофончику, самый прсотой вариант получить сигнал для аналога из "дуновения" :)

и второе, по току для датчика.

Рад опыту любому....

Araris
Offline
Зарегистрирован: 09.11.2012

Почитайте даташит на MQ3, там есть некоторые нюансы с питанием и с выдержкой (разогревом) перед началом измерений. Я бы питание от батарей не делал, не напасетесь.

Thorn
Offline
Зарегистрирован: 07.11.2014

Мде.... этот чудо датчик работать должен при 20град, а я то его планировал КРУГЛОГОДИЧНО на открытом воздухе.

далее предварительный разогрев 2 дня !!! это уже полный ец...

Вобщем буду как и предполагал исключительно для "обнаружения" :)

Thorn
Offline
Зарегистрирован: 07.11.2014

Господа, микрофон всеже приделал. Итак я теперь имею map из значений от 23 до 73 положим :) Сначала калибровка микрофона к уровню шума, получаем "откалиброванное" = 56 :),  далее замер (кстати даже постукивание по микрофону невызывает отклонения более чем на +-1...2 ед.)

Так вот, как мне описать if для присвоения флага (что датчик турбопотока исправен и готово измерние датчиком mq3). Когда turboAO меньше "откалиброванного" поднимаем, когда больше - кладём (опускаем рука неподнимается написать :)).  Тоесть как мне описать прощще такое:

  if (turboAO>58) {twind=1;}
  else if (turboAO<53) {twind=0;

После я в коде проверяю, поднялся-ли флаг twind и если да, то может замерять и визуально на дисплейчик, ледики и буззер - оповещать :)

Thorn
Offline
Зарегистрирован: 07.11.2014

Попробовал через "или" ||, так:

  Serial.print("Turbo = ");
  Serial.println(turboAO);
    if (turboAO<54 || turboAO>58) {twind=1;}
    else if (turboAO>54 || turboAO<58) {twind=0;}
//  if (59>turboAO>53) {twind=1;}
//  else if (turboAO<53) {twind=0;}
  Serial.print("Wind = ");
  Serial.println(twind);

всё вроде нормуль :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

54 и 58 не участвуют...
else if (turboAO>=54 || turboAO<=58) {twind=0;}