Подключение к одному каналу 8-ми и более NTC-резисторов используя PCF8574
- Войдите на сайт для отправки комментариев
Может кому полезно будет
Цель: создение многоканального терморегулятора за минимальные деньги, условие - не требуется супер точность,
и учитывая что DS18B20 стоит от 35 руб/шт. (впрок не затаришься)
Потребуется:
NTC 10к - можно купить по 2 руб/шт. оптом кучку
PCF8574 - примерно за 20 руб/шт. оптом
полевые транзисторы типа PNP с низким сопротивлением перехода встречаются нечасто, ну например A3401, можно реверсировать схему и переделать на NPN - которых полно везде, но придется переворачивать формулы, что при желании можно осуществить.
A3401 - по несколько рублей оптом кучкой
резисторы, возможно конденсаторы и стабилизаторы не считаю
Суть: поочередно подключается соответствующий NTC к одному аналоговому каналу,
подключением управляет PCF8574 с полевиками
схемка отработана на макетке на 4 канала
как будут влиять длинные провода пока неизвесно

// не забываем устновить перемычки на PCF8574 A0, A1, A2 к VCC или GND и резисторы на SCL и SDA, без них работать не будет #include <math.h> #include <PCF8574.h> PCF8574 expander1; // порты вывода управляют базами полевиков PNP float led=0; //состояние светодиода для наблюдения что программа работает unsigned long ThermoTime=0; // счетчик времени измерения темпеартуры unsigned long PrintTime=0; // счетчик времени вывода int i=0; //счетчик int temp_ch = 0; // канал опроса NTC double temp_val; // текущая темпертаура float PCF_out[8] = {0,1,1,1,1,1,1,1}; // начальные значения выходов, включен первый канал для PNP double temp[8] = {-11,-11,-11,-11,-11,-11,-11,-11}; // значения температур, начальные для контроля void setup() { pinMode(13, OUTPUT); pinMode(0, INPUT); expander1.begin(0x20); // порты вывода, перемычки (GND,GND,GND) i=0; while (i<8) { expander1.pinMode(i, OUTPUT); // порт задаем как вывод expander1.digitalWrite(i, PCF_out[i]); // задаем текущие значения выходов i++; } PCF_sw(); Serial.begin(9600); // открываем COM-порт } void loop() { if (millis()-ThermoTime >= 200) { // выполнение с интервалом времени - указанное милисек PCF_sw(); in_temp(); ch_sw(); if (led==0) led=1; else led=0; digitalWrite(13, led); ThermoTime=millis(); } if (millis()-PrintTime >= 5000) { // выполнение с интервалом времени - указанное милисек print_temp(); PrintTime= millis(); } } //----------------процедуры //------------------------- void ch_sw(){ // переключение текущего канала вправо в массиве i=7; while (i>=0) { if (PCF_out[i]==0) { PCF_out[i]=1; if (i<7) {PCF_out[i+1]=0;} else {PCF_out[0]=0;} } i=i-1; } } //------------------------- void PCF_sw(){ // переключение выхода микросхемы 8574 i=0; while (i<8) { expander1.digitalWrite(i, PCF_out[i]); // задаем текущие значения выходов i++; } } //------------------------- void in_temp(){ // измерение температуры текущего канала i=0; while (i<8) { if (PCF_out[i]==0) { temp_val=analogRead(temp_ch); //пока значение резистора NTC temp_val = log(((10240000/temp_val) - 10000)); temp_val = 1 / (0.001129148 + (0.000234125 * temp_val) + (0.0000000876741 * temp_val * temp_val * temp_val)); temp_val = temp_val - 273.15; temp[i] = temp_val; } i++; } } //------------------------- void print_temp(){ // вывод в COM-порт i=0; while (i<8) { Serial.print(i); Serial.print(":"); Serial.print(PCF_out[i],0); Serial.print(":"); Serial.print(temp[i]); Serial.print("; "); i++; } Serial.println(); } //-------------------------Выдача на COM-порт с подключенных 4-х резисторов, при их сопротивлении 10к, 5.1к, 3к, 1.6к:
чувствуются скачки стабилизатора напряжения
0:1:24.82; 1:1:39.55; 2:1:54.76; 3:0:72.73; 4:1:-273.15; 5:1:-273.15; 6:1:-273.15; 7:1:-273.15;
0:1:24.82; 1:1:39.55; 2:1:55.21; 3:1:72.73; 4:1:-273.15; 5:1:-273.15; 6:1:-273.15; 7:0:-273.15;
Выдача на COM-порт с подключенных 4-х NTP-резисторов, расположенных на растоянии 1 см друг от друга, номинальным сопротивлением 10к:
0:1:17.79; 1:1:17.53; 2:1:17.44; 3:1:17.53; 4:0:-273.15; 5:1:-273.15; 6:1:-273.15; 7:1:-273.15;
ТАЛАНТИЩЕ!!!
Если есть свободные цифровые пины и нет аналоговых, то верхние выводы NTC можно подключить к ним, и по очереди коммутировать и читать одним аналоговым входом. Учитывать выходное сопротивление пина порядка 20 Ом.
Это к тому, что лично мне очень не нравится паять лишние детали.
примите немного критики:
1) точность получается оооочень не интересная.
2) заморочки с калибровкой
3) самое главное - пайка кучи элементов на россыпи.
это справедливо для большого количества датчиков, 2-3 можно просто на ноги зацепить
примите немного критики:
1) точность получается оооочень не интересная.
2) заморочки с калибровкой
3) самое главное - пайка кучи элементов на россыпи.
это справедливо для большого количества датчиков, 2-3 можно просто на ноги зацепить
1. Точность, преимущества и недостатки NTC не тема двнного топика, кого устарвает, тот использует, во множестве бытовых термостатов они прекрасно работают и устраивают для своих задач, со всеми моими задачами NTC вполне бы справился.
2. Калибровка - абсолютно не агитирую за использование NTC и не вижу необходимости обсуждать как и предыдущий пункт, может есть задачи где нужно калибровать, что-ж поделать.
3. Попаять - тоже дело компромиса, иногда проще попаять лишний раз, каждый решает сам
Например, у меня последний проект завис на месяц, т.к. ждал DS18B20, потом на отработке макетки часть умерла, опять чуть все не зависло, а задачи стояли вполне посильные для NTC - его не убить, если бы я тогда догадался как их в кучку подключить, то прекрасно бы NTC справлялись. для меня сотню - две NTC держать в столе не проблема, в отличие от 18b20, а кому-то и 18b20 горку дежать не проблема.
Данная схема по сути превращает цифровую PCF8574 в аналоговый приемник-измеритель или др. задействуя один аналоговый канал
Если есть свободные цифровые пины и нет аналоговых, то верхние выводы NTC можно подключить к ним, и по очереди коммутировать и читать одним аналоговым входом. Учитывать выходное сопротивление пина порядка 20 Ом.
Это к тому, что лично мне очень не нравится паять лишние детали.
чтобы уйти от корректировок этих 20Ом целесообразнее через MOSFET комутировать, у A3401- 0.052 Ом, можно и другими полевиками с сопротивлением перехода 0.0046 Ом (они подороже) затарится для подобных задач.
Вы можете предложить хоть один вариант практического применения вашего решения? По мне -- это куда-то ближе к номинации "Сомнительные решения, крайне неочевидной целесообразности".
Ради чего этот головняк? Ради экономии? Так дешевле 4051 использовать. И по назначению. От подобной экономии падают ракеты , рушаться дома. Кто то вместо газовых кранов поставил водяные и весь подъезд рухнул.
Привыкайте все использовать по назначению. Тогда и экономия будет на ремонтах и на непредвиденных последствиях.
Извините, а где можно затариться впрок 18B20 по 35 руб?
Извините, а где можно затариться впрок 18B20 по 35 руб?
покупал тут когда еще не было доставки, сейчас добавили
Тута еще дешевле
Вы можете предложить хоть один вариант практического применения вашего решения? По мне -- это куда-то ближе к номинации "Сомнительные решения, крайне неочевидной целесообразности".
Сам планирую использовать для измерения температур централизовано из одного места
например частный дом, отапливается конвекторами/теплыми полами, есть подогрев скважины, есть подогрев ливневки и прочей фигни. Есть LAN-сетка по которой можно расключить (4 жилы в ней свободны)
т.е. нужно собрать все температуры по комнатам и др. местам, и где нужно что-то подогреть автоматом включить. при этом чтобы не бегать-контролировать каждое устройство по отдельности а все видеть/включать и регулировать в одном месте
Тута еще дешевле
это же аукцион
Этто да, на пукционе может быть и по рублю.
Хотя нашел купить сейчас - 10шт за 400 руб. Четто ценник понизился . Давно такого не встречал.
плотно юзаю итемы, сейчас у меня сотни две с половиной трудятся в промышленной системе,
Сам планирую использовать для измерения температур централизовано из одного места
например частный дом, отапливается конвекторами/теплыми полами, есть подогрев скважины, есть подогрев ливневки и прочей фигни. Есть LAN-сетка по которой можно расключить (4 жилы в ней свободны)
т.е. нужно собрать все температуры по комнатам и др. местам, и где нужно что-то подогреть автоматом включить. при этом чтобы не бегать-контролировать каждое устройство по отдельности а все видеть/включать и регулировать в одном месте
Ну как раз ваше "изобретение" не для таких расстояний.
Подключал датчик NTC через бухту 3х1.5 - работала
подключил на подогрев скважины на растоянии примерно 25 м. при этом по жиле #3 пришлось пустить нейтраль на подогрев и параллельно идет кабель насоса - глюков не обнаружено
А с витой парой пока не пробовал подружить
случилось мне делать подогрев, да вот беда, как определить, что контакт нормальный (не ослаб, провод не перебили, клеммы не залиты и прочее). Поставил даллас и все стало проще: есть датчик или его нет.
Недавно переделывал мультиварку... почти во всех резистор обжат, а не припаян. Так этот контак со временем ослаб и сопротивление перехода стало значительным + закреплен на подвижной контактной площадке из-за чего сопротивление перехода рандомно менялось. Добавим воздейстие температуры на контакт и получим ...........
в общем я 100 раз подумаю где и как использовать термосопротиления против 18В20. ИМХО
однако каждый волен выбирать свой путь сам...
50 DS18B20 по 30 рублей за штуку с бесплатной доставкой
https://ru.aliexpress.com/item/Free-Shipping-100pcs-DALLAS-DS18B20-18B20-18S20-TO-92-IC-CHIP-Thermometer-Temperature-Sensor/32237096602.html?ws_ab_test=searchweb0_0,searchweb201602_4_10152_10065_10151_10344_10068_10345_10342_10343_10340_10341_10543_10541_10562_10084_10083_10307_10301_5680015_10060_10155_10154_10056_10055_10539_10537_10312_10059_10536_10313_10314_10534_10533_100031_10211_10103_10128_10073_10102_10129_10557_10169_10142_10107_10125,searchweb201603_25,ppcSwitch_0&btsid=eb6bf3ba-9478-418c-8e17-4a19266d2396&algo_expid=5825a74c-a5f6-4226-9d68-866d013d3228-44&algo_pvid=5825a74c-a5f6-4226-9d68-866d013d3228