Вольтметр, термометр, часы для автомобиля.
- Войдите на сайт для отправки комментариев
Решил сделать такую полезную вещь как вольтметр для авто. Было дело что несколько часов просидел в машине с ноутом, а потом.....не завел.
Комплектующие:
1. Wavgat nano3 (аналог arduino NANO только со своими библиотеками);
2. RTC DS3231
3. OLED display 128x32 SSD1306
4. терморезистор NTC 10k
Особенность использованной платы в том, что тут есть источник опорного напряжения на 4096мВ и аналоговые входы 12 бит это я и использовал. С вольтметром и часами проблем небыло все как задумано, но вот с термометром надо прояснить ситуацию. То ли я школу забыл то ли еще что-то.
Все примеры термометров что мне попались на термисторах базируются на расчете: напряжения питания =1024. У меня же опорное 4.096В а питания около 5В. Я решил использовать дополнительный делитель для расчета сопротивленя термистора, но что-то тут не то. Я грешу на неправильную формулу расчета R_T.
long tablR[]={ 8789000,6175900,4393400,3161800,2300600,1691500,1255500,941430,711720,543080,415050,320140,250110,196910,156180,124740,100000,80800,65690,53720,44235,36610,30393,25359,21283,17942,15183,12901,11002,9418,8090,6972 }; //таблиця опорів Ом х10 byte tablT[]={ 0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155 }; #define R1 100000 int getTemp(byte pin){ int analogT=analogRead(pin); // замір на вході термістора int analogCal=analogRead(cal); // замір на вході опорного дільника long R_T=R1*analogT/(2*analogCal-analogT); //розрахунок опору термістора Serial.println(R_T); if (R_T <= tablR[0]) { int i=0; while (tablR[i]>R_T){ i++; } int result=(float)(R_T-tablR[i])*(tablT[i-1]-tablT[i])/(tablR[i-1]-tablR[i])+tablT[i]; // result -=55; return result; } else return 200;
cal - вход с делителя 10к/10к от питания
R1 - сопротивление нижнего плеча делителя "cal" , Ом*10 (для удобства расчетов)
R1, R2, R3 =10к
термистор подключен в нижнее плечо делителя, в верхнем 10к от питания.
ТС, уж вольметров-часов в любом автоларьке как грязи, начиная буквально от 100 рублей. Купите готовое, сами дешевле все одно не сделаете.
ТС, уж вольметров-часов в любом автоларьке как грязи, начиная буквально от 100 рублей. Купите готовое, сами дешевле все одно не сделаете.
Извините! Я думал тут форум по ардуино, а не трепалка что и где купить
Спасибо за ответ!
Какая разница что это будет? Часы в авто или контроллер для солнечного колектора?
Я думал что я правильно задал вопрос, постараюсь перефразировать: Как мне правильно вычислить сопротивление термистора?
Vin/(R3+RT) = VT/RT = (Vin-VT)/R3 - из неизвестных только RT
Только обычно в интернетовских примерах в эту формулу просто подставляют максимальное значение АЦП и прочитанное значение АЦП. Если автор действительно использует опорное напряжение 4.096В, то ему так делать нельзя. Нужно и Vin в вольтах взять и показания АЦП в вольты перевести.
Vin/(R3+RT) = VT/RT = (Vin-VT)/R3 - из неизвестных только RT
Vin - теоретически тоже неизвесно: 4.8-5.5 а вход примет только до 4,096, ради этого и делаю делитель cal
Ну значит вместо Vin подставить 2*Vcal
получилось одолеть?
Vin - теоретически тоже неизвесно: 4.8-5.5 а вход примет только до 4,096, ради этого и делаю делитель cal
Нет у меня под рукой даташита на этот клон, но, сдается мне, вы путаете мягкое с теплым.
На 100 процентов я уверен, что "вход примет" любое значение до Vref. И на 99% уверен, что Vref можно поставть равным Vcc, то есть 5В. Если же этого нельзя сделать "изнутри", то можно просто соединить Vref c Vcc снаружи. Желательно через индуктивность.
А 4096 это то число которое считывается с регистров АЦП когда Vin = Vref
Начните дело с изучения пина Analog Referenсe.
А вообще, все это глупости, контролировать степень разряда стартерной АБ по наряжению, поскольку и при 80% разряде она будет выдавать 12В.
А вообще, все это глупости, контролировать степень рая пина Analog Referenсe.зряда стартерной АБ по наряжению, поскольку и при 80% разряде она будет выдавать 12В.
Ну почему глупость? Вполне нормальный способ.
Польностью заряженная АКБ дает где-то 12.7В. Если показывает 12В значит осталось точно меньше 50%.
т.е. достаточно 1 компаратора типа LM393, за 8 р. и еще один про запас останется =)
Ну, не совсем. Проценты заряженности батареи и ее способность завести авто - линейно не связаны. Если батарея изношена и\или на улице мороз, то беспокоится надо начинать уже при напряжении ниже,скажем, 12.5В, а летом можно и подольше за ноутом посидеть :)
т.е. предлагаете вернуться к моему первоначальному ответу, что мол глупости ?
или готовы предложить свою кривую степени заряженности под все типы стартерных АБ, что за последнее время наплодили?
Eще раз - степень заряженности по напряжению определяется однозначно.
А вот возможность успешно завести двигатель определяется экспертной оценкой владельца авто, которая базируется на массе факторов и, в том числе, учитывает и степень заряженности.
Поэтому простой компаратор тут не катит.
оно понятно, что тока по этим самым десятым и сотым долям вольта + массе факторов ТС мигом вычислит, заведет его акум авто или не
оно понятно, что тока по этим самым десятым и сотым долям вольта + массе факторов ТС мигом вычислит, заведет его акум авто или не
Точно, конечно, не вычислит. А экспертные оценки т очными и не бывают. А вот вероятность успешно завестись вполне можно оценить.
ясно, ясно. так может ТС стоит применить такой успешный метод к его 4-м резисторам, или там слишком много известных факторов и потому не прокатит?
gorar, есть ли у Вас возможность подключить цепи питания термистора непосредственно к источнику опорного напряжеия? Т.е. обладает ли он достаточно низким для этого выходным сопротивлением?
Если "да" - то так и надо сделать.
А если "нет", то в разных режимах работы нужно использовать разные источникт опорного напряжения:
- для измерения напряжения в бортовой сети - 4.096 В, а для измерения температуры - то же напряжение, которое подается на цепь термистора, например 5 В.
gorar, есть ли у Вас возможность подключить цепи питания термистора непосредственно к источнику опорного напряжеия? Т.е. обладает ли он достаточно низким для этого выходным сопротивлением?
Если "да" - то так и надо сделать.
Нет. А если точнее то у меня еще мало опыта чтобы такое сделать.
А если "нет", то в разных режимах работы нужно использовать разные источникт опорного напряжения:
- для измерения напряжения в бортовой сети - 4.096 В, а для измерения температуры - то же напряжение, которое подается на цепь термистора, например 5 В.
Тоже сначала была такая идея но не придумал как ее реализировать. Если можно оператор analogReference(INTERNAL4V096); использовать в теле цыкла попеременно с analogReference(DEFAULT); то я уже знаю как сделать, надо проверить будет ли оно адекватно работать на конкретном екземпляре.
На 100 процентов я уверен, что "вход примет" любое значение до Vref. И на 99% уверен, что Vref можно поставть равным Vcc, то есть 5В. Если же этого нельзя сделать "изнутри", то можно просто соединить Vref c Vcc снаружи. Желательно через индуктивность.
А 4096 это то число которое считывается с регистров АЦП когда Vin = Vref
мне выдает 30.00 а калькулятор щитает 130675,24 что я неправильно записал?
мне выдает 30.00 а калькулятор щитает 130675,24 что я неправильно записал?
Попробуй вот так
И вообще, float в подобных задачах лучше не использовать.
да, long достаточно будет и, всё, что можно использовать как константное значение надо так и вводить (20000.00 * 100000.00 * 4064.00) к примеру =2147483647
Интересно, почему float при такой записи - 20000 * 100000 * 4064 обрабатывал беззнаковые значения???
С формулами разобрался, с опорными тоже (их можна переключать перед измерением а я затупил). Мой вариант с калибровочним делителем тоже рабочий, но чем больше разница Vin-Vref тем меньше диапазон измерения сопротивления (сверху).
Спасибо за помощь и наводки!
что-то там на счет калибровки ацп в мануале этого проца наверчено, кто-нить детально разбирался?
И как все это себя поведет при переключениях опоры?
И как все это себя поведет при переключениях опоры?
При переключениях опоры ведет себя некрасиво, я сначала обрадовался что так можно, отключил вольтметр, настроил нормально термометр, потом включил и все..... не тут то было.
Результат переключения опорных: при активации опорной один раз за програму - все нормально. А если активируется internal4v096 (отрабатывает нормально) а потом на default - то реальная наверно 1,024В (небыло под рукой чем проверить). При переключении назад на 4,096 снова отрабатывает нормально. Думаю тут проблема не так с самим процом как с библиотекой под ардуино для него, тут http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p про него немножко говорили, думаю если копать глубже то результат будет. Но копать я пока не готов (мало знаний пока).
И сразу вопрос: если на вывод ref подключить Vin то при активации external опорная будет питанием, НО при этом не случится ли чего с входом при переключении на 4,96В ?? Пока жалко проверять на практике, может кто теоретически подтвердит.
После переключения опорного напряжения надо 2 раза померять. Первый результат в помойку.
После переключения опорного напряжения надо 2 раза померять. Первый результат в помойку.
это я знаю (читал гдето тут на форуме ) в этом варианте у меня идет десятки замеров для уменьшения шума, и задержку давал 50-100мс после переключения и первого замера никакой разницы все входы что при 4,096 были минимум 1600 при дефаулт 4064 (не 4095 - особенность то же библиотеки проца для ардуино)
пожет таки особенность самого проца по части калибровки ацп?
пожет таки особенность самого проца по части калибровки ацп?
В теме, помянутой выше, был скетч который выводил все внутрение опорные напряжения на вывод ref. Следовательно они также могут быть опорными при измерениях (на мой взгляд). И еще, с внутренними опорными то работает может просто глюк библиотеки вместо того чтобы переключится на питание его переключает на минимальное опорное?
в первом посте темы http://arduino.ru/forum/apparatnye-voprosy/obzor-klona-megi328-lgt8f328p
есть ссылка на русский мануал вашего проца, см. что там писано по опрникам и ацп