Электро вентилятор охлаждения ДВС

Всем доброго времени суток) очень нужна помощь для подключения вентилятора системы охлаждения двс по шим сигналу…
Что имеем : Arduino Nano v3, датчик температуры ds18b20 и вентилятор мощностью 850 ватт… работающий от шим сигнала с частотой 10Гц (10%).
2 повода ± на АКБ и 2 на блок управления +12 вольт и провод шим сигнала) задача чтоб вентилятор вращался быстрее в зависимости от возрастания температуры…
Имею следующий скетч , который был успешно залит … но ничего не работает ((((
PS (скетч был залит с просторов интернета)

#include <PWM.h>

#include <OneWire.h>

const int oneWirePin = 5; // Создаем объект OneWire для шины 1-Wire, с помощью которого будет осуществляться работа с датчиком / пин сигнала с датчика

int temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20

long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика

const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок

const int buttonPin = 7; // пин подключенный к кондиционеру

int A_C = 0; // переменная для хранения состояния кондея

#define FANrelay 9 // пин сигнала ШИМ

byte FANspeed = 0;

byte lastFANspeed = FANspeed;

void setup() {

InitTimersSafe();

SetPinFrequencySafe(FANrelay, 10);

pwmWrite (FANrelay, 230);

pinMode(buttonPin, INPUT);

digitalWrite(buttonPin, HIGH);

}

void loop() {

A_C = digitalRead(buttonPin);

detectTemperature();

if (temperature > 90 && temperature <= 100)

{

FANspeed = map (temperature, 91, 100, 10, 90);

}

else if ( temperature > 100) FANspeed = 100;

if (temperature <= 90 && A_C != LOW) {

FANspeed = 0;

}

if (A_C == LOW && FANspeed < 50) {

FANspeed = 50;

}

if (lastFANspeed != FANspeed) {

byte pwm = map (FANspeed, 0, 100, 0, 90);

pwm = constrain (pwm, 0, 90);

pwmWrite (FANrelay, 230-(pwm*230/100));

lastFANspeed = FANspeed;

}

}

void detectTemperature() {

byte data[2];

ds.reset();

ds.write(0xCC);

ds.write(0x44);

if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)

{

lastUpdateTime = millis();

ds.reset();

ds.write(0xCC);

ds.write(0xBE);

data[0] = ds.read();

data[1] = ds.read();

// Формируем значение

temperature = (data[1] << 8) + data[0]; temperature = temperature >> 4;

}

}

Подключение пинов ардуины:
5 пин — датчик температуры (не забываем повесить подтягивающий резистор на 4.7к)
7 пин — включение режима работы кондиционера ( при замыкании релюшки, вентилятор включается на 50% мощности)
9 пин — шим сигнал на вентилятор

Какая?

запустить =) после заливки скетча и подключения , в тестовом режиме вообще ничего не происходит… от слова совсем… В начале ругался на библиотеки, и ошибки в скетче… Но с этим вроде разобрался…

ты сначала код выложи по правилам форума

2 лайка

Вы доверяете авторам кода? Если да, откуда в нем могли быть ошибки?

Я бы начал с проверки, поддерживает ли указанная библиотека частоту ШИМ 10 гц
Потом добавить в код печать в сериал температуры и значений шим и посмотреть, вычисляется ли хоть что-то.

ещё один троль, в выложенном коде нет инициализации датчика, а на картинке есть, 5-я строка )))

Пора банить, сразу на неделю

#include <PWM.h>

#include <OneWire.h>

OneWire ds(5); // Создаем объект OneWire для шины 1-Wire, с помощью которого будет осуществляться работа с датчиком / пин сигнала с датчика
int temperature = 0; // Глобальная переменная для хранения значение температуры с датчика DS18B20
long lastUpdateTime = 0; // Переменная для хранения времени последнего считывания с датчика
const int TEMP_UPDATE_TIME = 1000; // Определяем периодичность проверок
const int buttonPin = 7; // пин подключенный к кондиционеру
int A_C = 0; // переменная для хранения состояния кондея
#define FANrelay 9 // пин сигнала ШИМ
byte FANspeed = 0;
byte lastFANspeed = FANspeed;
void setup() {

InitTimersSafe();
SetPinFrequencySafe(FANrelay, 10);
pwmWrite (FANrelay, 230);

pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);

}

void loop() {

A_C = digitalRead(buttonPin);
detectTemperature();
if (temperature > 90 && temperature <= 100)
{
FANspeed = map (temperature, 91, 100, 10, 90);
}
else if ( temperature > 100) FANspeed = 100;
if (temperature <= 90 && A_C != LOW) {
FANspeed = 0;
}
if (A_C == LOW && FANspeed < 50) {
FANspeed = 50;
}

if (lastFANspeed != FANspeed) {
byte pwm = map (FANspeed, 0, 100, 0, 90);
pwm = constrain (pwm, 0, 90);
pwmWrite (FANrelay, 230-(pwm*230/100));
lastFANspeed = FANspeed;

}

}

void detectTemperature() {
byte data[2];
ds.reset();
ds.write(0xCC);
ds.write(0x44);
if (millis() - lastUpdateTime > TEMP_UPDATE_TIME)
{
lastUpdateTime = millis();
ds.reset();
ds.write(0xCC);
ds.write(0xBE);
data[0] = ds.read();
data[1] = ds.read();
// Формируем значение
temperature = (data[1] << 8) + data[0]; temperature = temperature >> 4;

}
}

это хорошо когда с 5 лет радиотехникой увлекаешься, можно сидеть и стебать людей которые не сильны в этом от слова “совсем”… Я обратился за помощью. Так как есть серьезная потребность, если вы не можете дать подсказку, то спасибо и на том, что зашли и прочитали =) Хорошего дня

какой шим сигнал требует блок управления, приведи параметры

это тут при чем? ты выкладываешь кривой код, а компилируешь другой и просишь помощи, ты где взял код, что выложил, выкладывать надо всегда ИМЕННО ТОТ КОД что компилируешь

ты уверен, что ШИМ формируемый этим кодом подходит для твоего блока управления???

если вы не увлекаетесь, зачем вы в это полезли? Машину не жалко?
Перегреете, не дай бог еще блок поведет. Или пожар устроите.
Такими вещами должен заниматься автоэлектрик, а не чайник с ардуинкой

на случай , что бы не перегреть есть еще 2 штатных вентилятора , которые срабатывают в аварийном режиме при достижении температуры 105 градусов=) Насчет автоэлектриков скажу следующее - Что даже при наличии оригинального диагностического оборудования ( у нас их всего 4-5 в городе ), ни один не смог решить данный вопрос, что бы подключить эту функцию в штатном режиме (а она есть) =) Вот по этому и заморочился данной темой

какая здесь функция штатная? - я вижу самопальный генератор шима на ардуине и все. По-моему чистый “колхоз”.

Кстати, ваше мнение о том, что “ничего не работает” - на чем основано? Вы выход ардуины осциллографом смотрели? Есть там сигнал или нет?
Может у вас уже контроллер вентилятора в машине сдох и на ШИМ не реагирует, а вы на ардуину пеняете…

Данный автомобиль оснащался как вискомуфтой , так и электрическим вентилятором. При изменении настроек в инженерном меню в блоке управления двс можно выбрать электрический вентилятор =) вот пример с форума

Контроллер не живой… В аварийном режиме все включается, но дует как Канзаский торнадо=)

Ну так что с диагностикой программы? - сигнал есть или нет? Температура измеряется?

и чего вы от него хотите тогда? как он будет сигнал от ардуино принимать?

Прошу прощения=))) Запятую не поставил=))) Живой Контроллер

температуру вообще не показывает… пробовал на другом скетче(самый банальный нашел) все ОК…

этот гвоздь скетч не в ту стену? на 10 герцах скорость может управляться только шириной импульса, возьми от стандартных 1000 - 2000 микросекунд, для этого возьми пример от библиотеки servo.h, там правда 50 герц период обновления ну а вдруг заработает, есть примеры с регулировкой оборотов потенциометром

1 лайк