Простейшая схема с нагревательным элементом и охладителем.
Мосфеты используются IRFZ44N, для их открытия нужно 5в..
На ПИНе Д2 все норм и обдув включается. На ПИНе Д3 только 0,5в.
Заменил 2 ардуинке, а проблема таже.
Отключал из цепи резисторы следующие за пином Д3 чтоб исключить кз и ошибку в маркировке резисторов.
У знакомого все получилось с первого раза. Пробовал его и свою прошивку - все тоже самое .
Может дело в шим сигнале или использовал не ту библиотеку!?
При компиляции IDE выдал только одну ошибку "отсутствие" библиотеки. Установил библиотеку как на скрине ниже
Мосфеты используются IRFZ44N, для их открытия нужно 5в..
На ПИНе Д2 все норм и обдув включается. На ПИНе Д3 только 0,5в.
Заменил 2 ардуинке, а проблема таже.
Отключал из цепи резисторы следующие за пином Д3 чтоб исключить кз и ошибку в маркировке резисторов.
У знакомого все получилось с первого раза. Пробовал его и свою прошивку - все тоже самое .
Может дело в шим сигнале или использовал не ту библиотеку!?
При компиляции IDE выдал только одну ошибку "отсутствие" библиотеки. Установил библиотеку как на скрине ниже
C++:
#include <EncButton.h>
#define switchPin 10 // Пин кнопки
#define mosfetPin 3 // Пин нагревателя. Обязательно должен быть с ШИМ
#define fanPin 2 // Пин вентилятора
#define redPin 8 // Пин красного светодиода
#define greenPin 6 // Пин зелёного светодиода
Button btn(switchPin);
enum
{
waitMode,
heatingMode,
warmingMode,
coolingMode
} workMode;
void setup()
{
Serial.begin(115200);
// pinMode(LED_BUILTIN, OUTPUT);
// digitalWrite(LED_BUILTIN, LOW);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(fanPin, OUTPUT);
digitalWrite(greenPin, HIGH);
pinMode(switchPin, INPUT_PULLUP);
workMode = waitMode;
switch2Wait();
}
bool fanOn = false;
unsigned long workTimer, blinkTimer;
#define heatingPeriod 20000 // Время разогрева
#define warmingPeriod 5000 // Время поддержания температуры
#define coolingPeriod 20000 // Время охлаждения
#define fanPeriod 30000 // Время работы вентилятора после охлаждения
#define warmingBlinkPeriod 200 // Период моргания красного светодиода
#define coolingBlinkPeriod 500 // Период моргания зелёного светодиода
#define warmValue 18 // Значение ШИМ при поддержании температуры
// int LED = 0;
void blinkLED(int blinkPin, int blinkPeriod)
{
int static LED = 0;
if (millis() - blinkTimer >= blinkPeriod)
{
LED = !LED;
if (LED)
{
digitalWrite(blinkPin, HIGH);
}
else
{
digitalWrite(blinkPin, LOW);
}
blinkTimer = millis();
}
}
void switch2Heating()
{
Serial.println("Heating");
workMode = heatingMode;
workTimer = millis();
digitalWrite(fanPin, LOW);
analogWrite(mosfetPin, 36);
digitalWrite(greenPin, LOW);
digitalWrite(redPin, HIGH);
}
void switch2Warming()
{
Serial.println("Warming");
workMode = warmingMode;
digitalWrite(redPin, LOW);
blinkTimer = millis();
workTimer = millis();
}
void switch2Cooling()
{
Serial.println("Cooling");
workMode = coolingMode;
analogWrite(mosfetPin, 0);
digitalWrite(fanPin, HIGH);
digitalWrite(redPin, LOW);
blinkTimer = millis();
workTimer = millis();
}
void switch2Wait()
{
Serial.println("Wait");
workMode = waitMode;
analogWrite(mosfetPin, 0);
digitalWrite(fanPin, HIGH);
digitalWrite(redPin, LOW);
digitalWrite(greenPin, HIGH);
workTimer = millis();
fanOn = true;
}
void loop()
{
btn.tick();
if (btn.click())
{
if (workMode == waitMode)
{
switch2Heating();
}
else
{
switch2Wait();
}
}
if (workMode == heatingMode)
{
// Serial.println(millis() - workTimer);
if (millis() - workTimer >= heatingPeriod)
{
switch2Warming();
}
}
if (workMode == warmingMode)
{
if (millis() - workTimer >= warmingPeriod)
{
switch2Cooling();
}
else
{
analogWrite(mosfetPin, warmValue);
blinkLED(redPin, warmingBlinkPeriod);
}
}
if (workMode == coolingMode)
{
if (millis() - workTimer >= coolingPeriod)
{
switch2Wait();
}
else
{
blinkLED(greenPin, coolingBlinkPeriod);
}
}
if (workMode == waitMode)
{
if (fanOn && (millis() - workTimer >= fanPeriod))
{
fanOn = false;
digitalWrite(fanPin, LOW);
Serial.println("Fan off");
}
}
}