есть датчик температуры, и два параметра tmin и tmax работы вентилатора, допустим 20 и 25 градусов соответственно. пока температура ниже 20 градусов вентилятор работает в штатном режиме со скоростью вращения через ШИМ равной 127. как только температура достигла 20 градусов и продолжает расти до 25 и выше - вентилятор должен пропорционально увеличивать скорость вращения от 127 до 255. для реализации попробывал изпользовать функцию map(), но компилятор ругается. сам разобраться не смог. прощу помощи! Код (C++): #include <OneWire.h> #include <DallasTemperature.h> int tempPin= A1; // пин с подключенными датчиками температуры int coolerPin=6; //пин вентилятора int tcurentin; //переменная хранящая текущее значение температуры // переменные хранящие верхний и нижний порог температуры int tfanmin; int tfanmax; void setup(){ pinMode(coolerPin, OUTPUT); ds.begin(); } void loop() { ds.requestTemperatures(); // считываем температуру с датчиков tcurentin = ds.getTempC(sensor1);//присваивыаем значение температуры переменной // РЕЖИМ РАБОТЫ ВЕНТИЛЯТОРА fanspeed= map ( tcurentin, tfanmin, tfanmax, 127, 255) ; fanspeed= constrain ( fanspeed , 127, 255); analogWrite= (coolerPin, fanspeed); } ругается : error: assignment of function 'void analogWrite(uint8_t, int)' error: cannot convert 'int' to 'void(uint8_t, int) {aka void(unsigned char, int)}' in assignment assignment of function 'void analogWrite(uint8_t, int)' я так понимаю что не нравятся тип переменных которые я передаю. с датчика приходят дробные значения, например Т=25,65 С полагаю что нужно перевести их но как не знаю. можете подсказать?
Предпоследняя строчка: Знак присвоения -- '=' -- после имени функции 'analogWrite', наверное, лишний. Вы таким образом пытаетесь присвоить указателю на функцию 'analogWrite' значение 'int', на что компилятор ругается. И дело не в типе переменных 'coolerPin' или 'fanspeed'. Попробуйте исправить на: Код (C++): analogWrite(coolerPin, fanspeed);
да спасибо оргромное. не заметил все работает, вот только вопрос. вентилятор пищит при работе чере шим в зависимости от температуры с разной частотой. если паралельно вентилятору поставить конденсатор для сглаживания импульсов, то писк пропадает , но вентилятор начинает быстрее вращаться и при изменении значений шим от 127 до 255 скорочть практически не меняеться- постоянно почти максимальная. как еще можно избавится от писка на вентиляторе при использовании ШИМ?
Скажем так -- "конденсатор увеличивает напряжение" -- т.е., сглаживая колебания, конденсатор увеличивает активную мощность (это, если коротко объяснять). Причем все зависит от емкости конденсатора и частоты ШИМ. Выше емкость + ниже частота == ниже емкость + выше частота. Вполне вероятно, что емкость конденсатора, применяемого Вами, "достаточна для компенсирования/устранения скважности" ШИМ при значениях от 127 до 255. Поэтому:
а как все же сделать так чтоб разница на всем диапазоне изменения шим была видна и при этом устранить писк вентилятора? а то получаеться избавляюсь от писка- получаю плохо контролируемые обороты, и наоборот.
Импульсы -- это главный источник шумов в радиоэлектронике (большинство станций РЭБ -- радиоэлектронной борьбы и поставления шумов -- излучают импульсы, т.к. они захватывают большой спектр радиочастот). Вам следует определится -- либо ШИМ, либо отсутствие писка. Или применять более сложные схемы управления вентилятором. Можно попробовать поколдовать с частотой ШИМ и емкостью конденсатора, но если это устройство предстоит использовать дома (там где Вы живёте), я бы постарался устранить всякое излучение от ~25kHz до ~1MHz -- на мозг давит сильно. ШИМ примерно в этом диапазоне работает. В своё время внедряли рацпредложение (рациональное предложение) -- для получения красных дипломов одним из условий было наличие удостоверения о внедрении рацпредложения -- испытывали "отпугиватель крыс" для продовольственных складов, который излучал переменный ультразвук выше 25 kHz. Так вот, в помещении, где мы своё устройтво испытывали, люди больше 10 минут находится не могли -- начинались головные боли. Но мощность была не малая. А при малых мощностях -- оно вроде как не чувствуется, но дискомфорт есть и сон плохой.
Возможно, у вашего вентилятора нелинейная зависимость частоты вращения от напряжения или схема управления дает нелинейную зависимость. Поэтому, чтобы пропорционально увеличить обороты нужно промерить напряжения и подобрать значения.