Продолжаю изучать основы программирования микроконтроллеров. Кто-то скажет что Arduino для школьников, но тут все очень наглядно и понятно, а трудности все же возникают. Простота реализации проектов впечатляет. Можно сделать прототип устройства, потом для удешевления конструкции зашить код в другой микроконтроллер будь то tiny13 либо Mega8. Кстати в эти микроконтроллеры можно загрузить код Arduino. Но об этом немного не сейчас. Сейчас же я покажу как подключить датчик углеводородных газов (пропан, метан, бутан), спирта и дыма MQ-2. Можно таким образом подключить любой из серии MQ. При этом в мониторе последовательного порта (Ctrl+Shift+M) который находиться в Инструментах программы будут выводиться значения с датчика. Можно на свой вкус настроить его работу если не устраивает мой вариант.
Для начала схема подключения светодиодов и динамика. Можно использовать резисторы даже 220 Ом. Так они не будут слишком тусклые. Динамик подойдет любой без внутреннего генератора.
А вот так подключаем сам датчик к Arduino.
Код
*/
Скетч для работы с сенсором газа
Источник: https:
*/
int sensorPin = 0;
int redled = 2;
int yelowled = 3;
int greenled = 4;
int gas = 0;
void setup() {
pinMode(greenled, OUTPUT);
pinMode(yelowled, OUTPUT);
pinMode(redled, OUTPUT);
Serial.begin(9600);
digitalWrite(greenled, HIGH);
delay(1000);
digitalWrite(yelowled, HIGH);
delay(1000);
digitalWrite(redled, HIGH);
delay(1000);
digitalWrite(greenled, LOW);
delay(1000);
digitalWrite(yelowled, LOW);
delay(1000);
digitalWrite(redled, LOW);
delay(1000);
digitalWrite(greenled, HIGH);
delay(1000);
digitalWrite(yelowled, HIGH);
delay(1000);
digitalWrite(redled, HIGH);
delay(1000);
digitalWrite(greenled, LOW);
delay(1000);
digitalWrite(yelowled, LOW);
delay(1000);
digitalWrite(redled, LOW);
delay(1000);
digitalWrite(greenled, HIGH);
delay(1000);
digitalWrite(yelowled, HIGH);
delay(1000);
digitalWrite(redled, HIGH);
delay(1000);
digitalWrite(greenled, LOW);
delay(1000);
digitalWrite(yelowled, LOW);
delay(1000);
digitalWrite(redled, LOW);
delay(1000);
digitalWrite(greenled, HIGH);
delay(500);
digitalWrite(yelowled, HIGH);
delay(500);
digitalWrite(redled, HIGH);
delay(500);
digitalWrite(greenled, LOW);
digitalWrite(yelowled, LOW);
digitalWrite(redled, LOW);
}
void loop() {
gas = analogRead(sensorPin);
if (gas > 200, gas < 300)
{
digitalWrite(greenled, HIGH);
digitalWrite(yelowled, LOW);
digitalWrite(redled, LOW);
}
else if (gas > 300, gas < 350)
{
tone(10, 900, 200);
digitalWrite(greenled, LOW);
digitalWrite(yelowled, HIGH);
digitalWrite(redled, LOW);
}
else if (gas > 350)
{
tone(10, 740, 200);
digitalWrite(greenled, LOW);
digitalWrite(yelowled, LOW);
digitalWrite(redled, HIGH);
}
Serial.println(gas);
delay(400);
}
Пояснения в коде буду стараться всегда указывать, так будет понятно что какая функция выполняет. Будут вопросы, пишите в комментариях и на форуме.