Официальный сайт компании Arduino по адресу arduino.cc
Управление двумя кулерами
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Вс, 16/04/2017 - 18:55
Доброго дня суток и с Праздником.
Собрал я усилитель класса А, этот класс безбожно греется ,собрать то было не тяжело ,а вот в програмированиии я не силен ,нашел скетч в инете ,все работает как надо ,но он на один куллек и датчик,а хотелось бы два независимых карлсона. Помогите пожалуйста допилить код под два независимых датчика и два куллера . и в идеале еще реализовать отключение при перегреве. Спасибо
#include <OneWire.h> // OneWire DS18S20, DS18B20, DS1822 Temperature Example // // http://www.pjrc.com/teensy/td_libs_OneWire.html // // The DallasTemperature library can do all this work for you! // http://milesburton.com/Dallas_Temperature_Control_Library OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) float current_temp; int FAN = 5; // PIN int FAN_pwm; // PWM 0..255 void setup(void) { TCCR0B = TCCR0B & B11111000 | B00000001; pinMode(FAN, OUTPUT); Serial.begin(9600); } void loop(void) { current_temp = get_temp(); if(current_temp > 45) FAN_pwm = 255; else if(current_temp > 40) FAN_pwm = 200; else if(current_temp > 35) FAN_pwm = 150; else if(current_temp > 30) FAN_pwm = 100; else if(current_temp > 25) FAN_pwm = 50; else FAN_pwm = 0; analogWrite(FAN, FAN_pwm); delay(5000); } float get_temp() { byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; float celsius, fahrenheit; if ( !ds.search(addr)) { Serial.println("No more addresses."); Serial.println(); //ds.reset_search(); //delay(250); //return; } Serial.print("ROM ="); for( i = 0; i < 8; i++) { Serial.write(' '); Serial.print(addr[i], HEX); } if (OneWire::crc8(addr, 7) != addr[7]) { Serial.println("CRC is not valid!"); //return; } Serial.println(); // the first ROM byte indicates which chip switch (addr[0]) { case 0x10: Serial.println(" Chip = DS18S20"); // or old DS1820 type_s = 1; break; case 0x28: Serial.println(" Chip = DS18B20"); type_s = 0; break; case 0x22: Serial.println(" Chip = DS1822"); type_s = 0; break; default: Serial.println("Device is not a DS18x20 family device."); //return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad Serial.print(" Data = "); Serial.print(present, HEX); Serial.print(" "); for ( i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); Serial.print(data[i], HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; fahrenheit = celsius * 1.8 + 32.0; Serial.print(" Temperature = "); Serial.print(celsius); Serial.print(" Celsius, "); Serial.print(fahrenheit); Serial.println(" Fahrenheit"); return celsius; }
Нашел рабочее решение ,то что надо для двух пропеллеров, не ступенчетое управление карлсонами как в первом скетче ,а плавное.
Усилки собирать умеешь, а регулятор оборотов для кулера на lm358 сделать проблема.
PS: http://cxema.my1.ru/publ/vse_dlja_quot_kulera_quot_ventiljatora/termoreguljator_s_kulerom/89-1-0-6069
У меня нано штук 5 вяляются без дела и даласов горсть ,делаю из того что есть . Да и хотелось плавное регулирование кулеров по шим ,ну и за одно и аварийное отключение при перегреве . Также через ардуино по ИК будет управление селектром и мотором резистора громкости,и вывод температуры на lcd с уровнем сигнала . Все скетчи есть ,в кучу как бы их собрать. Вообще планирую в усилок поставить два Нано, первый будет отвечать за вывод инфы на экран и терморегулятор, второе нано за управлением селектора входов и мотором резистора громкости.С управлением ИК разобрался ,все работает пока на макетке .
По коду не понял, но на своём опыте могу сказать, недавно крутил процессорыный кулер с 4мя пинами, так вот 4й пин, который шим, расчитан на 25 кГц, обычный analogWrite его практически не регулирует.
Делаю на IRF630 которых у меня куча... NTC резистор на 10к стоит 5 руб...
http://avtosxema.com/shema/410-termoregulyator-dlya-ventilyatora.html
так вот 4й пин, который шим, расчитан на 25 кГц, обычный analogWrite его практически не регулирует.
Все работает без проблем,что первый скетч ,что второй.Подвывание от шим на малых оборотах немного были,разрулил кондеем.https://www.youtube.com/watch?v=VYAdsooPao8
P.S выписка из мануала "На большинстве плат Arduino (на базе микроконтроллера ATmega168 или ATmega328) ШИМ поддерживают порты 3, 5, 6, 9, 10 и 11, на плате Arduino Mega порты с 2 по 13. На более ранних версиях плат Arduino analogWrite() работал только на портах 9, 10 и 11.
Если работает, как того хотели, то отлично )
Я руководствовался этим. Мне данная информация помогла добиться того, что мне было нужно, возможна будет полезна еще кому.
Уважаемые помогите пожалуйста ,не могу соединить два скетча ,ошибок не выдает ,но не работает , хотел в скетч кулеров воткнуть скетч управление ик, скетч управления по ик
Я вот как я их пытаюсь обьединить,
Термостат работает нормальо ,а вот ик никак не хочет . Спасибо
Я конечно ничего не понял, и поэтому хочу спросить автора темы: Вы что хотите получить?
1. Включать вентилятор для охлаждения радиатора с датчиком температуры?
2. Есть несколько Arduino и хочется куда-нибудь их поставить?
Если вы хотите охлаждать радиатор- то поставьте термореле типа такого. Там всего 2 провода. И будет все работать без кода.
https://ru.aliexpress.com/item/1pcs-KSD9700-40-120-oC-250V-60-Degree-Celsius-N-O-Thermostat-Kit-Temperature-Switch-normal/32746868242.html?spm=2114.03010208.3.2.nUEYoh&ws_ab_test=searchweb0_0,searchweb201602_3_10152_10065_10151_10068_10136_10137_10060_10138_10155_10062_10156_10154_10056_10055_10054_10059_10099_10103_10102_10096_10148_10169_10147_10052_10053_10142_10107_10050_10051_10084_10083_10119_10080_10082_10081_10110_10111_10112_10113_10114_10181_10037_10032_10078_10079_10077_10073_10070_10123_10120_10127_10124_10125-10120,searchweb201603_10,afswitch_1_afChannel,ppcSwitch_5&btsid=1d56eac8-c87c-4621-80d7-13c0d60a532b&algo_expid=c1ff4794-aa6f-4ff2-8244-38390a331d11-0&algo_pvid=c1ff4794-aa6f-4ff2-8244-38390a331d11
Уважаемый мне необходима плавная регулировка оборотов в зависимости от температуры нагрева ,тобишь тупо воткнуть термопару и навсю раскрутить обороты , это конечно и без кода можно . Дело в том что любой карлсон издаёт шум ,в моём случае в 50% оборотов которых достаточно для охлаждения, чтоб услышать шум это нужно постараться .От нагрева выходных транзисторов меняется Ток покоя усилителя , значимо мне необходима одинаковая температура без скачков термопары .Резкие перепады от термопары и плохо влияют на кристалы выходных транзисторов которые стоят в разы дороже ардуино. Опять же необходимо аварийное отключение при перегреве ,усилители класса -А имеют свойство черезмерно выделять тепло по причине своей прожорливости. Ну и ко всему прочему ваш датчиук сможет вывести уровень сигнала на экран и прочую инфу ,а также покрутить мото/резюк ALPS с ИК пульта. Вы код хотябу гляньте . И ардуино не такой ценный экспонат чтоб его ставить на тумбочку обложив венками, он должен работать по назначению нашим прихотям.
Вот теперь понятно.
По поводу температуры усилка А. (Он как я помню работает при постоянном токе покоя через транзисторы.) При установившемся режиме она выйдет на определенный уровень и будет постоянна. Вопрос другой. До какой температуры вы хотите нагреть транзисторы и радиатор. Я например нагревал радиатор до 120 град. Правда усилок был класса АВ. А если от нагрева меняется ток покоя выходных транзисторов, да тем более в классе А. - то у вас плохая схема термостабилизации выходных транзисторов. У меня при изменении температуры радиатора от 20 до 120 град ток покоя выходного каскада менялся от 180 до 160 ма и при этом понижался.
Поспрашайте лучше автора Усилителя по ссылке: По крайней мере если напишите в личку все должен обьяснить, как и что делать для класса А. И про температуру усилка тоже. Да и выложите ссылку хотябы на усилок. Может вопрос решится просто.
http://forum.vegalab.ru/showthread.php?t=1433
Вот теперь понятно.
По поводу температуры усилка А. (Он как я помню работает при постоянном токе покоя через транзисторы.) При установившемся режиме она выйдет на определенный уровень и будет постоянна. Вопрос другой. До какой температуры вы хотите нагреть транзисторы и радиатор. Я например нагревал радиатор до 120 град. Правда усилок был класса АВ. А если от нагрева меняется ток покоя выходных транзисторов, да тем более в классе А. - то у вас плохая схема термостабилизации выходных транзисторов. У меня при изменении температуры радиатора от 20 до 120 град ток покоя выходного каскада менялся от 180 до 160 ма и при этом понижался.
Поспрашайте лучше автора Усилителя по ссылке: По крайней мере если напишите в личку все должен обьяснить, как и что делать для класса А. И про температуру усилка тоже. Да и выложите ссылку хотябы на усилок. Может вопрос решится просто.
http://forum.vegalab.ru/showthread.php?t=1433