Краткая предыстория - у друга дом, курить ходит в комнату где бассейн и парилка с душевой кабинкой, там и так была вытяжка не важная, решили с Порфирием сделать подарок - заменить филенку со старым вентилятором на новую с тремя путЁвыми (из сервера, nidec, 7 кубов в минуту каждый). Пошли модным нынче путем - использовали ардуино, датчик дыма (реагирует еще на кучу всего). С датчика mq-2 смотрит данные и при превышении пищит динамик и включает вентиляторы последовательно с интервалом 5 сек (чтобы пиковым током не грузить блок питания) на минуту, потом процесс или продолжается или становится в минимальный с ШИМ равным 0% (при этом эти вентиляторы делают 1500 об/мин) что является плюсом, так как создается минимальная тяга к датчику и не летит всякая живость в дом )))
PS Еще прицепили микрофон, хотелось включать по двум хлопкам, а не только когда что-то "покажется" датчику, но увы, пока не сделано, да и так хорошо работает )))
Разметка:

Сборка электронной части:

Готовое изделие:

Код проекта:
Код: Выделить всё
const int analogInPin = A0;
const int led1 = 10;
const int led2 = 11;
const int mic = 9;
int sensorValue = 0;
int fanCtrlPin = 3;
int fanCtrlPin1 = 5;
int fanCtrlPin2 = 6;
void setup() {
Serial.begin(9600);
Serial.println("CG312 MQ2 Test" );
TCCR2B = (TCCR2B & 0xF8) | 0x01;
pinMode(fanCtrlPin, OUTPUT);
pinMode(fanCtrlPin1, OUTPUT);
pinMode(fanCtrlPin2, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
}
void loop() {
sensorValue = analogRead(analogInPin);
if (sensorValue >= 18)
{
analogWrite(mic,7000);
delay(1000);
analogWrite(mic,12000);
delay(1000);
analogWrite(mic,13000);
delay(1000);
analogWrite(mic,14000);
delay(1000);
analogWrite(mic,0);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
analogWrite(fanCtrlPin, 180);
delay(5000);
analogWrite(fanCtrlPin1, 180);
delay(5000);
analogWrite(fanCtrlPin2, 180);
delay(15000);
}
else
{
analogWrite(fanCtrlPin, 0);
delay(5000);
analogWrite(fanCtrlPin1, 0);
delay(5000);
analogWrite(fanCtrlPin2, 0);
delay(500);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
}
Serial.print("CG312 MQ2 value= " );
Serial.println(sensorValue);
delay(100);
}