Я подключил к ардуине датчик температуры масла и датчик давления масла в авто. Чет где-то наковырял и температура показывает адекватно. А вот давление скачет прыгает и тд. Датчик давления три провода. Плюс-модкл на 5 вольт, минус-на минус и на третьем меняется напряжение А1 пин. Сделал замеры 0 бара 0.51 вольт 1 - 0.61 2- 1.05 3- 1.45 4- 1.90 5- 2.30 6 2.75 проверял компрессором, больше надуть не смог. Наковырял, наворовал, намудрил кривой скетч, но с давлением все криво. Температура вполне норм /* Подключаем библиотеку для работы с LCD */ #include <LiquidCrystal.h> #include <math.h> /* Создаём объект LCD-дисплея, используя конструктор класса LiquidCrystal * с 6ю аргументами. Библиотека по количеству аргументов сама определит, * что нужно использовать 4-битный интерфейс. * Указываем, к каким пинам Arduino подключены выводы дисплея: * RS, E, DB4, DB5, DB6, DB7 */ LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // к какому аналоговому пину мы подключены #define THERMISTORPIN A0 // сопротивление при 25 градусах по Цельсию #define THERMISTORNOMINAL 1800 // temp. для номинального сопротивления (практически всегда равна 25 C) #define TEMPERATURENOMINAL 25 // сколько показаний используем для определения среднего значения #define NUMSAMPLES 5 // бета коэффициент термистора (обычно 3000-4000) #define BCOEFFICIENT 3950 // сопротивление второго резистора #define SERIESRESISTOR 5750 int samples[NUMSAMPLES]; int analogPin = A1; void setup(void) { Serial.begin(9600); lcd.begin(20, 2); lcd.clear(); lcd.setCursor(0,0); } void loop(void) { uint8_t i; float average; // сводим показания в вектор с небольшой задержкой между снятием показаний for (i=0; i< NUMSAMPLES; i++) { samples = analogRead(THERMISTORPIN); delay(10); } // рассчитываем среднее значение average = 0; for (i=0; i< NUMSAMPLES; i++) { average += samples; } average /= NUMSAMPLES; Serial.print("Average analog reading "); Serial.println(average); // конвертируем значение в сопротивление average = 1023 / average - 1; average = SERIESRESISTOR / average; Serial.print("Thermistor resistance "); Serial.println(average); float steinhart; steinhart = average / THERMISTORNOMINAL; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro) steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // инвертируем steinhart -= 273.15; // конвертируем в градусы по Цельсию lcd.print("Oil Temp"); lcd.setCursor(10,0); lcd.print(steinhart); lcd.println(" *C "); int rawReading = analogRead(analogPin); float bar = rawReading / 204.6 * 2 ; lcd.setCursor(0,1); lcd.print("Oil Press "); lcd.println(bar); lcd.setCursor(16,1); lcd.print("Bar "); delay(200); } еще хочется чтоб темература показывала только целые числа с выводом на дисплей раз 5 сек например а давляк показывал с десятыми и выводился раз в 100-300 мс Показания давления постоянно скачут на пол бара, наверно надо брать несолько и усреднять чтоб глаз не мозолили скачки Помогите кто может за рублики! А может есть добряки и бесплатно)
чой-то тут не так... Код (C++): float average; // сводим показания в вектор с небольшой задержкой между снятием показаний for (i=0; i< NUMSAMPLES; i++) { samples = analogRead(THERMISTORPIN); // <-- здесь N раз измеряем и никуда не сохраняем delay(10); } // рассчитываем среднее значение average = 0; for (i=0; i< NUMSAMPLES; i++) { average += samples; // <-- здесь N раз суммируем последнее (одно и то же!) значение samples } average /= NUMSAMPLES; P.S. важно!
у меня крыша едет от всего этого, этот код стырен из статей, только тут добалено считывание напряжения на а1 канале. Хватило меня на три дня копания со всей этой катавасией) Не могу больше, лучше заплачу кому-нибудь