В этом проекте используется ИК-датчик для включения и выключения вентилятора и датчик LM35 для управления скоростью вентилятора с помощью ШИМ (PWM, англ. pulse-width modulation, Широтно-импульсная модуляция).
Содержание
Шаг 1. Комплектующие
Для нашего урока по созданию автоматического вентилятора на Ардуино на этот раз потребуется приличное количество деталей и комплектующих. Также ниже мы перечислим основные инструменты для реализации проекта.
Компоненты оборудования:
- ИК-датчик движения × 1
- DFRobot Gravity: аналоговый датчик температуры LM35 для Arduino × 1
- IRF 530 N × 1
- Линейный регулятор (7805) × 1
- Резистор 100 Ом × 1
- Осевой вентилятор, 12 В постоянного тока × 1
- Кастомная печатная плата × 1
- Arduino Uno × 1
Ручные инструменты:
- Паяльник (универсальный)
- Припой, без свинца
- Инструмент для зачистки проводов и резак, провода сечением 18-10 AWG / 0,75-4 мм²
- Ножницы электрика
- Горячий клеевой пистолет (универсальный)
Конечно же нам понадобится программное обеспечение в виде Arduino IDE.
Шаг 2. Как работает вентилятор
Идея состоит в том, чтобы создать эффективный вентилятор, чтобы при его использовании не нужно было вручную устанавливать скорость и включать/выключать его. Также теперь нам не больше нужно бояться перерасхода электричества в случае если мы забыли выключить вентилятор.
Как это работает:
- ИК-датчик в качестве устройства включения/выключения, который обнаруживает движение.
- Датчик LM35 в качестве переключателя вентилятора, который оценивает температуру в помещении и когда температура в помещении становится выше, тогда скорость вентилятора, также повышается, и наоборот.
- Мы также используем транзистор IRF530N, поскольку напряжение питания составляет 12 Вольт.
Шаг 3. Схема соединения
Схема соединения всех комплектующих представлена выше.
Шаг 4. Код проекта
Код проекта вы можете скопировать или скачать в архиве ниже.
#include <avr/io.h> //the time when the sensor outputs a low impulse long unsigned int lowIn; //the amount of milliseconds the sensor has to be low //before we assume all motion has stopped long unsigned int pause = 500; boolean lockLow = true; boolean takeLowTime; const int pSuhu = A0; //inisialisasi pin to control LM35 pin A0 float suhu, outputlm, adc; //tipe data yang memungkinkan memuat angka desimal int pirPin = 12; //digital pin connected to the PIR's output int pirPos = 13; //connects to the PIR's 5V pin int kipas = 3; void setup(){ Serial.begin(9600); //begins serial communication pinMode(pirPin, INPUT); pinMode(pirPos, OUTPUT); pinMode(kipas,OUTPUT); digitalWrite(pirPos, HIGH); pinMode(pSuhu, INPUT); // set pSuhu(LM35) to be INPUT while (digitalRead(pirPin) == HIGH) { delay(500); Serial.print("."); } Serial.println("SENSOR ACTIVE"); } void lm35(){ adc = analogRead(pSuhu); //save nilai from LM35 to variabel nilaiLM35 suhu = adc / 2.0479; outputlm=adc*4.883; if (suhu >= 25) { analogWrite(kipas,50); Serial.println("Kecepatan=50"); } if (suhu >= 30) { analogWrite(kipas,100); Serial.println("Kecepatan=100"); } if (suhu >= 35) { analogWrite(kipas,150); Serial.println("Kecepatan=150"); } if (suhu >= 40) { analogWrite(kipas,200); Serial.println("Kecepatan=200"); } if (suhu >= 45) { analogWrite(kipas,255); Serial.println("Kecepatan=255"); } } void loop(){ if(digitalRead(pirPin) == HIGH){ //if the PIR output is HIGH, turn servo lm35(); if(lockLow){ //makes sure we wait for a transition to LOW before further output is made lockLow = false; Serial.println("---"); Serial.print("motion detected at "); Serial.print(millis()/1000); Serial.println(" sec"); delay(50); } takeLowTime = true; } if(digitalRead(pirPin) == LOW){ digitalWrite(kipas,LOW); if(takeLowTime){ lowIn = millis(); //save the time of the transition from HIGH to LOW takeLowTime = false; //make sure this is only done at the start of a LOW phase } //if the sensor is low for more than the given pause, //we can assume the motion has stopped if(!lockLow && millis() - lowIn > pause){ //makes sure this block of code is only executed again after //a new motion sequence has been detected lockLow = true; Serial.print("motion ended at "); //output Serial.print((millis() - pause)/1000); Serial.println(" sec"); delay(50); } } delay(1000); Serial.print(", Suhu: "); Serial.print(suhu); Serial.println(); //send data ASCII + CR,LF (kode enter) delay(1000); Serial.print(", ADC: "); Serial.print(adc); Serial.println(); //send data ASCII + CR,LF (kode enter) delay(1000); }
Шаг 5. Итоговое видео
На этом всё, наш вентилятор Ардуино готов. Он будет очень актуален к наступающему лету.