Термометр с помощью arduino и датчиков LM35 и DS18B20
Я писал недавно статью, где подключал к arduino 4-разрядный 7-сегментный индикатор hs420561k-32, тогда упоминал, что хочу сделать градусник с выводом температуры на этот индикатор, только проблема была в отсутствии датчиков.
И вот наконец-то приехала посылка с недостающими запчастями и можно продолжить проект. Температурных датчиков у меня три штуки – dht11, LM35 и DS18B20.
Но использовать буду только LM35 и DS18B20, поскольку dht11 очень неточный, в даташите написано, что отклонения от реальной температуры составляют плюс-минус два градуса, а так же он работает только с положительной температурой.
Температурный датчик LM35. Подключение к arduino
Первый датчик, который будем использовать – это LM35, использовать его очень просто, тут даже дополнительные библиотеки не требуются, достаточно подключить к нему питание и считать данные на выходе с помощью аналогового пина arduino. LM35 работает с температурами от -55 до 150 градусов Цельсия и если верить даташиту, то погрешность составляет всего плюс-минус 0,25 градуса.
Хоть датчик и обрабатывает до +150 градусов, но считать ардуиной сможем только до +110, хотя и это более чем достаточно для домашнего градусника. Поскольку этот датчик имеет высокую точность, но находится в корпусе TO92, без какой-либо дополнительной защиты, использовать его будем для измерения температуры в помещении.
Официальный мануал arduino рекомендует использовать для снятия показаний этого датчика опорное напряжение 1,1 В. Чтобы настроить arduino подобным образом достаточно использовать команду analogReference(INTERNAL) в функции setup. Далее достаточно просто, с нужным интервалом, считывать напряжение с выходной ножки(OUT) датчика.
LM35 формирует напряжение 10 милливольт на один градус, таким образом имея опорное напряжение в 1,1 В легко обработать, довольно точно, данные.
void setup() { // меняем опорное напряжение на 1.1 В, относительно которого происходят аналоговые измерения analogReference(INTERNAL); } void loop() { reading = analogRead(A0); // LM35 подключен к пину A0 temperature = (1.1 * reading * 100.0) / 1024; // получаем значение в градусах Цельсия }
Ниже на картинке показано, какая нога датчика LM35 за что отвечает.
Температурный датчик DS18B20. Подключение к arduino
Второй датчик, который будет использован – это цифровой DS18B20. Точность в этом случае не на много ниже — плюс-минус 0,5 градуса, а диапазон измерения температуры практически такой же: от -55 до +125 градусов Цельсия.
Большим преимуществом является то, что датчик находится внутри влагозащитного корпуса, а так же имеется кабель длиной 1 метр, что позволяет вынести его на улицу, когда само устройство будет находиться в помещении.
Еще из плюсов сюда можно добавить возможность подключение одновременно до 127 датчиков на один пин ардуино, только я даже предположить не могу, где это может пригодиться :).
Считывать данные с DS18B20 немного сложнее, чем с LM35, для удобства можно воспользоваться библиотекой OneWire.
В комплекте с библиотекой идет уже готовый пример считывания данных с датчика. Информация о температуре передаются в байтах, которые необходимо сначала запросить, получить и перевести к человеческому виду. В коде примера это подробно прокомментировано, а так же в полном скетче проекта я добавил комментарии.
На картинке ниже показано, как подключать датчик DS18B20. Основным моментом является то, что необходимо использовать резистор сопротивлением 4.7 кОм для соединения провода, передающего данные и плюсовым.
Проблема вывода температуры на индикаторе hs420561k-32
Пока я разбирался с каждым датчиком по отдельности, а также когда подключал к arduino 4-х разрядный 7-сегментнтый индикатор, проблем ни каких не было, все прекрасно работало. Но стоило мне собрать все в кучу, на одну макетную плату и собрать код воедино, как сразу появилась серьезная проблема.
Я писал в прошлой статье, что для одновременного вывода данных сразу на 4-х разрядах hs420561k-32 необходимо очень быстро по очереди выводить по одному разряду, тогда создается впечатление одновременного вывода четырех цифр, глаз не успевает уловить смену разрядов.
В связи с таким способом вывода возникла сложность с одновременной работой датчика DS18B20, для его опроса требуется чуть больше секунды времени – в двух участках кода используется delay, который заставляет микроконтроллер ждать, 250 и 1000 миллисекунд.
Сначала я сделал запрос к датчику раз в 30 секунд, но это не решило проблему – два раза в минуту датчик по секунде показывал непонятно что. Поэтому пришлось отказаться от delay и добавить другую аналогичную конструкцию в код, которая будет выполнять определенные куски кода с задержкой, а остальной код будет выполняться без задержек.
Многопоточности в arduino, как оказалось, нет, но есть псевдомногопоточность, добиться ее можно используя не хитрую конструкцию с таймером, который отмеряет время в миллисекундах от старта работы микроконтроллера. Пример такого кода я приведу ниже:
bool flag = false; // флаг unsigned long previousMillis = 0; // время последнего срабатывания const long interval = 1000; // интервал срабатывания кода, задержка. void setup() { // } void loop() { // получаем время в миллисекундах, которое прошло // с момента начала работы МК unsigned long currentMillis = millis(); // проверяем сколько прошло врмени if (currentMillis – previousMillis >= interval) { // если прошло нужное количество миллисекунд, // то записываем в переменную количество прошедшего времени previousMillis = currentMillis; // меняем положение флага, // это может быть вкл и выкл светодиода, например flag = !flag; } }
Что использовалось в проекте:
Скетч уличного и комнатного термометра на arduino
Все сложные моменты, с которыми возникали сложности, в процессе создания термометра я описал, теперь остается только написать скетч, его код приведен ниже, а также доступен для скачивания тут: скачать.
#include // библиотека для работы с датчиком DS18B20 OneWire ds(10); // подключаем уличный датчик к 10 пину //Пин подключен к SH_CP входу 74HC595 int clockPin = 6; //Пин подключен к ST_CP входу 74HC595 int latchPin = 7; //Пин подключен к DS входу 74HC595 int dataPin = 8; int tempHomePin = A0; // градусник в помещении // Пины разрядов цифер int pins_numbers[4] = {2, 3, 4, 5}; // Биты для отображения цифер от 0-9, минуса и символ градуса Цельсия byte numbers_array[22] = { B00111111, B00000110, B01011011, B01001111, // 0 1 2 3 B01100110, B01101101, B01111101, B00000111, // 4 5 6 7 B01111111, B01101111, B01000000, B01100011, // 8 9 – о // цифры с точкой внизу (+12 к индексу элемента) B10111111, B10000110, B11011011, B11001111, // 0 1 2 3 B11100110, B11101101, B11111101, B10000111, // 4 5 6 7 B11111111, B11101111 // 8 9 }; int cel_celsius = 0; // переменная для хранения градусов на улице float tempHome = 0; // переменная для хранения градусов в помещении const long tempInterval = 3000; // интервал запроса актуальной температуры unsigned long previousMillis = 0; // время предыдущего запроса unsigned long previousMillis_delay = 0; // хранения последней даты срабатывания, для второй задержки bool startQuery = false; // флаг, для обозначения начала запроса температуры bool firstQuery = true; // флаг первого запуска, при котором получаем температуру без задержек bool showhome = true; // флаг, который указывают какую температуру показывать – комнату или улицу int sec_show = 5000; // интервал смены отображения погоды unsigned long showhomeMillis_delay = 0; // хранения последней переключения градусников // функция для вывода чисел на индикаторе void showNumber(int numNumber, int number){ // зажигаем нужные сегменты digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, numbers_array[number]); digitalWrite(latchPin, HIGH); // включаем нужный разряд(одну из четырех цифр) int num_razryad = pins_numbers[numNumber-1]; for(int i; i= tempInterval) || startQuery || firstQuery) { previousMillis = currentMillis; // читаем данные от датчика на улицы if ( !ds.search(addr)) { ds.reset_search(); //delay(250); return; } // если ни чего не получили или получили не понятные данные if (OneWire::crc8(addr, 7) != addr[7]) { return; } // читаем первый байт и определяем тип датчика switch (addr[0]) { case 0x10: // DS18S20 type_s = 1; break; case 0x28: // DS18B20 type_s = 0; break; case 0x22: // DS1822 type_s = 0; break; default: return; } // делаем запрос на получение данных от датчика ds.reset(); ds.select(addr); ds.write(0x44); // ждем startQuery = true; // delay(1000); if ( currentMillis – previousMillis_delay >= 1000 ) { previousMillis_delay = currentMillis; }else{ return; } startQuery = false; // и получаем ответ present = ds.reset(); ds.select(addr); ds.write(0xBE); // берем только первые 9 байт for ( i = 0; i < 9; i++) { data[i] = ds.read(); } // данные приходят в битах, переводим их в десятичное число int16_t raw = (data[1]
Источник: https://vk-book.ru/termometr-s-pomoshhyu-arduino-datchikov-lm35-ds18b20/
Подключение датчика температуры LM35DZ (LM35DZ) к Arduino
LM35 является аналоговым температурным сенсором, в отличие от того же DS18B20. Это сильно упрощает работу с датчиком, так как не нужно эмулировать протокол OneWire и можно вручную легко корректировать показания датчика, изменяя коэффициенты в коде.
Однако, подключение такого датчика менее помехозащищённое, чем у DS18B20, поэтому необходимо иметь точные источники опорного напряжения (ИОН) и правильно разводить печатную плату для датчика, иначе показания могут быть неточными. Но для «домашних» применений типа метеостанции, где не так важна ошибка в плюс-минус градус, датчик идеален.
Он ещё и дешевле DS18B20. Дешевле него, наверное, только термисторы, но это уже совсем другой разговор
Источник: https://Voltiq.ru/lm35dz-and-arduino/
Мониторинг температуры с помощью Arduino и датчика LM35
Вы можете использовать плату Arduino для контроля температуры воздуха, подключив к ней датчик температуры LM35.
LM35 – это идеальный температурный датчик для измерения температуры окружающей среды.
Он обеспечивает линейный выход, пропорциональный температуре, где 0 В соответствует температуре 0 градусов Цельсия, а изменение выходного напряжения на 10 мВ соответствует изменению температуры на один градус Цельсия.
Датчики LM35 проще в использовании по сравнению с термисторами и термопарами, потому что они очень линейны и не требуют никакой обработки сигнала.
Выход LM35 может быть подключен непосредственно к аналоговому входу Arduino. Поскольку аналого-цифровой преобразователь (АЦП, ADC) Arduino обладает разрешением 1024 бита, а опорное напряжение составляет 5 В, для вычисления температуры из измеренного значения АЦП будет использоваться следующая формула:
[T = {5,0 cdot ext{analogRead(temperaturePin)} over 1024} cdot 100,0]
Для отображения температуры мы будем использовать жидкокристаллический дисплей (LCD).
Эксперимент
Цель данного эксперимента – построить монитор температуры, используя LM35, 16×2 LCD дисплей и плату Arduino.
Необходимые комплектующие
- 1 x Arduino Mega2560;
- 1 x LCD;
- 1 x потенциометр 5 кОм;
- 1 x макетная плата;
- 1 x датчик температуры LM35;
- 1 x резистор 1 кОм;
- перемычки.
Схема соединений
Схема соединений
Подключите компоненты, как показано на рисунке выше. Резистор 1 кОм подключен между выходом LM35 и общим проводом GND, чтобы ограничить ток без влияния на выходное напряжение.
Выводы LCD дисплея
LCD дисплей подключен к Arduino, как показано ниже. Средний вывод потенциометра подключен к выводу 3 LCD дисплея, чтобы изменять его контрастность. Другие два вывода потенциометра подключены к линиям 5V и GND. Вывод включения EN LCD дисплея подключен к выводу 9 Arduino, а вывод дисплея RS подключен к выводу 8 Arduino. Вывод RW дисплея подключен к общему проводу.
DB4 | 4 |
DB5 | 5 |
DB6 | 6 |
DB7 | 7 |
RS | 8 |
EN | 9 |
Код
Для записи данных на дисплей программа использует библиотеку LiquidCrystal.h. В функции loop() непрерывно считывается значение на выходе датчика, преобразуется в градусы Цельсия, а затем выводится на LCD.
// LCD библиотека Arduino #include // Определение выводов LCD LiquidCrystal lcd(8,9,4,5,6,7); // инициализация переменных int value=0; float volts=0.0; float temp=0.0; float tempF=0.0; void setup() { pinMode(3,INPUT); // установка вывода 3 Arduino на вход Serial.begin(9600); // открыть последовательный порт и установить скорость 9600 бит/с lcd.begin(16,2); // установить количество строк и столбцов LCD дисплея } void loop() { value=analogRead(A0); // прочитать из A0 volts=(value/1024.0)*5.0; // преобразование в вольты temp= volts*100.0; // поеобразование в температуру в градусах Цельсия tempF=temp*9/5+32; // поеобразование в температуру в градусах Фаренгейта // показать температуру на LCD дисплее Serial.print(“temperature= “); Serial.println(temp); lcd.setCursor(0,0); lcd.print(“TEMP= “); lcd.print(temp); lcd.print(” C”); lcd.setCursor(0,1); lcd.print(“TEMP= “); lcd.print(tempF); lcd.print(” F”); delay(500); }
Видео
Вот и всё! Надеюсь, статья оказалась полезной. Оставляйте комментарии!
Оригинал статьи:
- Keep Your Cool: Monitor Temperature with an Arduino
Arduino Mega 2560
Отладочная плата Arduino Mega 2560 построена на микроконтроллере ATmega2560.
Она имеет 54 цифровых входных/выходных выводов (15 из которых могут использоваться в качестве ШИМ выходов), 16 аналоговых входов, 4 порта UART (аппаратных последовательных порта), кварцевый резонатор 16 МГц, подключение USB, разъем питания, разъем ICSP и кнопку перезагрузки. Она содержит всё необходимое для работы с микроконтроллером;…
Набор перемычек (папа-папа)
Набор перемычек папа-папа. 40 штук по 15 см.
Символьный LCD дисплей 16×2 HD44780
Символьный (буквенно-цифровой) LCD дисплей. 2 строки по 16 символов. Построен на базе контроллера HD44780. По умолчанию поддерживается в Arduino IDE с помощью библиотеки LiquidCrystal.
Источник: https://radioprog.ru/post/183
Датчики температуры Arduino
В этой статье мы рассмотрим популярные датчики температуры для Arduino ds18b20, dht11, dht22, lm35, tmp36. Как правило, именно эти датчики становятся основой для инженерных проектов начального уровня для Arduino. Мы рассмотрим также основные способы измерения температуры, классификацию датчиков температуры и приведем сравнение различных датчиков в одной таблице.
Описание датчиков температуры
Температурные датчики предназначены для измерения температуры объекта или вещества с помощью свойств и характеристик измеряемой среды. Все датчики работают по-разному. По принципу измерения эти устройства можно разделить на несколько групп:
- Термопары;
- Термисторы;
- Пьезоэлектрические датчики;
- Полупроводниковые датчики;
- Цифровые датчики;
- Аналоговые датчики.
По области применения можно выделить датчики температуры воздуха, жидкости и другие. Они могут быть как наружные, так и внутренние.
Любой температурный датчик можно описать набором характеристик и параметров, которые позволяют сравнивать их между собой и выбирать подходящий под конкретную задачу вариант. Основными характеристиками являются:
- Функция преобразования, т.е. зависимость выходной величины от измеряемого значения. Для датчиков температуры этот параметр измеряется в Ом/С или мВ/К.
- Диапазон измеряемых температур.
- Метрологические параметры – к ним относятся различные виды погрешностей.
- Срок службы.
- Время отклика.
- Надежность – рассматриваются механическая устойчивость и метрологическая стойкость.
- Эксплуатационные параметры – габариты, масса, потребляемая мощность, стойкость к агрессивному воздействию среды, стойкость к перегрузкам и другие.
- Линейность выходных значений.
Датчики температуры по типу
- Термопары. Принцип действия термопар основывается на термоэлектрическом эффекте. Представляет собой замкнутый контур из двух проводников или полупроводников. В контуре возникает электрический ток, когда на месте спаев появляется разность температур.
Чтобы измерить температуру, один конец термопары помещается в среду для измерения, а второй требуется для снятия значений. На спаях возникают термоЭДС E(t2) и E(t1), которые и определяются температурами t2 и t Результирующая термоЭДС в контуре будет равна разности термоЭДС на концах спаев E(t2)- E(t1).
Термопары чаще всего выполняются из платины, хромеля, алюмеля и платинородия. Наибольшее распространение в России получили пары металлов ХА(хромель-алюмель), ТКХ(хромель – копель) и ТПП (платинородий-платина). Большим недостатком таких приборов является большая погрешность измерений. Из преимуществ можно выделить возможность измерения высоких температур – до 1300С.
- Терморезистивные датчики. Изготавливаются из материалов, обладающих высоким коэффициентом температурного сопротивления (ТКС). Принцип работы заключается в изменении сопротивления проводника в зависимости от его температуры. Такие приборы обладают высокой точностью, чувствительностью и линейностью измеренных значений.
Основными характеристиками устройства являются номинальное электрическое сопротивление при температуре 25 С и ТКС. Терморезистивные датчики различаются по температурному коэффициенту сопротивления – бывают термисторы с отрицательным (NTC) и положительным (PTC, позисторы) ТКС. Для первых с ростом температуры уменьшается сопротивление, для позисторов – увеличивается.
Терморезистивные датчики чаще всего применяются в электронике и машиностроении.
- Пьезоэлектрический датчик. Такое устройство работает на пьезоэффекте. Под воздействием электрического тока происходит изменение линейных размеров -прямой пьезоэффект. Когда подается разнофазный ток с определенной частотой, происходит колебание пьезорезонатора.
Частота определяется температурой. Зная полученную зависимость, можно определить необходимые данные о частоте и температуре. Диапазон измерения температуры широк, устройство обладает высокой точностью. Датчики чаще всего используются в научных опытах, которые требуют высокой надежности результатов.
- Полупроводниковый датчик.
Измеряют в диапазоне от -55С до 150С. Принцип работы основан на зависимости изменения напряжения на p-n-переходе от температуры. Так как эта зависимость практически линейна, есть возможность создать датчик без сложной схемы. Но для таких приборов схема содержит одиночный p-n-переход, поэтому датчик отличается большим разбросом параметров и невысокой точностью.
Исправить эти недостатки получилось в аналоговых полупроводниковых датчиках.
- Аналоговый датчик. Приборы стоят дешево и обладают высокой точностью измерения, что позволяет их применять в микроэлектронике. В схеме содержатся 2 чувствительных элемента (транзистора), обладающих различными характеристиками.
Выходной сигнал – это разность между падениями напряжений на транзисторах. При помощи калибровки датчика внешними цепями можно увеличить точность измерения, которая находится в диапазоне от +-1С до +-3С. Датчики обладают тремя выходами, один из них используется для калибровки.
- Цифровой датчик.
В отличие от аналогового датчика цифровой содержит дополнительные элементы – встроенный АЦП и формирователь сигнала. Подключаются по интерфейсам SPI, I2C, 1-Wire, что позволяет подключать сразу несколько датчиков к одной шине. Подобные устройства стоят немного дороже аналоговых, но при этом они значительно упрощают схемотехнику устройства.
- Существуют и другие датчики температуры. Например, для автоматических систем могут применяться сигнализаторы, также существуют пирометры, измеряющие энергию тела, которую оно излучает в окружающую среду. В медицине нередко используются акустические датчики — их принцип работы заключается в разности скорости звука при различных температурах.
Эти датчики удобно применять в закрытых полостях и в недоступных средах. Похожие датчики – шумовые, они работают на зависимости шумовой разности потенциалов на резисторе от температуры.
Выбор датчика в первую очередь определяется температурным диапазоном измерения. Важно учитывать и точность измерения – для обучения вполне сойдет датчик с малой точностью, а для научных работ и опытов требуется высокая надежность измерения.
Датчики температуры для работы с Ардуино
При работе с микроконтроллером Ардуино наиболее часто используются следующие датчики температуры: DS18B20, DHT11, DHT22, LM35, TMP36.
Датчик температуры DS18B20
DS18B20 – цифровой 12-разрядный температурный датчик. Устройство доступно в 3 вариантах корпусов — 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92, чаще всего используется именно последний. Он же изготавливается во влагозащитном корпусе с тремя выходами.
Датчик прост и удобен в использовании, к плате Ардуино можно подключать сразу несколько таких приборов. А так как каждое устройство обладает своим уникальным серийным номером, они не перепутаются в результате измерения. Важной особенностью датчика является возможность сохранять данные при выключении прибора.
Также DS18B20 может работать в режиме паразитного питания, то есть без внешнего питания через подтягивающий резистор. Подробная статья о ds18b20.
Датчики температуры DHT
DHT11 и DHT22 – две версии датчика DHT, обладающие одинаковой распиновкой. Разливаются по своим характеристикам. Для DHT11 характерно определение температуры в диапазоне от 0С до 50С, определение влажности в диапазоне 20-80% и частота измерений 1 раз в секунду.
Датчик DHT22 обладает лучшими характеристиками, он определяет влажность 0-100%, температурный диапазон увеличен – от -40С до 125С, частота опроса 1 раз за 2 секунды. Соответственно, стоимость второго датчика дороже. Оба устройства состоят из 2 основных частей – это термистор и датчик влажности.
Приборы имеют 4 выхода – питание, вывод сигнала, земля и один из каналов не используется. Датчик DHT11 обычно используется в учебных целях, так как он показывает невысокую точность измерений, но при этом он очень прост в использовании. Другие технические характеристики устройства: напряжение питания от 3В до 5В, наибольший ток 2,5мА.
Для подключения к ардуино между выводами питания и выводами данных нужно установить резистор. Можно купить готовый модуль DHT11 или 22 с установленными резисторами.
Датчик температуры LM35
LM35 – интегральный температурный датчик. Обладает большим диапазоном температур (от -55С до 150С), высокой точностью (+-0,25С) и калиброванным выходом. Выводов всего 3 – земля, питание и выходной мигнал. Датчик стоит дешево, его удобно подключать к цепи, так как он откалиброван уже на этапе изготовления, обладает низким сопротивлением и линейной зависимостью выходного напряжения.
Важным преимуществом датчика является его калибровка по шкале Цельсия. Особенности датчика: низкая стоимость, гарантированная точность 0,5С, широкий диапазон напряжений (от 4 до 30В) ток менее 60мА, малый уровень собственного разогрева (до 0,1С), выходное сопротивление 0,1 Ом при токе 1мА. Из недостатков можно выделить ухудшение параметров при удалении на значительное расстояние.
В этом случае источниками помех могут стать радиопередатчики, реле, переключатели и другие устройства. Также существует проблема, когда температура измеряемой поверхности и температура окружающей среды сильно различаются. В этом случае датчик показывает среднее значение между двумя температурами.
Чтобы избавиться от этой проблемы, можно покрыть поверхность, к которой подключается термодатчик, компаундом.
Схема подключения к микроконтроллеру Ардуино достаточно проста. Желательно датчик прижимать к контролируемой поверхности, чтобы увеличить точность измерения.
Примеры применения:
- Использование в схемах с развязкой по емкостной нагрузке.
- В схемах с RC цепочкой.
- Использование в качестве удаленного датчика температуры.
- Термометр со шкалой по Цельсию.
- Термометр со шкалой по Фаренгейту.
- Измеритель температуры с преобразованием напряжение-частота.
- Создание термостата.
TMP36 – аналоговый термодатчик
Датчик температуры Использует технологии твердотельной электроники для определения температуры. Устройства обладают высокой точностью, малым износом, не требуют дополнительной калибровки, просты в использовании и стоят недорого. Измеряет температуру в диапазоне от -40С до 150С.
Параметры схожи с датчиком LM35, но TMP36 имеет больший диапазон чувствительности и не выдает отрицательное значение напряжения, если температура ниже нуля. Напряжение питания от 2,7В до 5,5В. Ток – 0.05мА.
При использовании нескольких датчиков может возникнуть проблема, при которой полученные данные будут противоречивы. Причиной этого являются помехи от других термодатчиков. Чтобы исправить эту неполадку нужно увеличить задержку между записью измерений.
Низкое выходное сопротивление и линейность результатов позволяют подключать датчик напрямую к схеме контроля температуры. TMP36 также, как и LM34 обладает малым нагревом прибора в нормальных условиях.
Сравнение характеристик датчиков температуры Ардуино
Название | Температурный диапазон | Точность | Погрешность | Вариант исполнения | Библиотека |
DS18B20 | -55С…125С | +-0.0625С | +-2% | Существует в 3 видах — 8-Pin SO (150 mils), 8-Pin µSOP, и 3-Pin TO-92, последний изготавливается во влагозащитном корпусе. | Onewire.h |
DHT11 | 0С…50С | +-2С | +-2% температура, +-5% влажность | Изготавливается в виде готового прямоугольного модуля с 4 ножками, третья не используется. Также встречаются модули с тремя ножками и сразу установленным резистором на 10 кОм. | DHT.h |
DHT22 | -40С…125С | +-0,5С | +-0,5% температура, от +-2 до +-5% влажность | DHT.h | |
LM35 | -55С…150С | +-0.5С (при 25С) | +-2% | Существует несколько видов корпуса: TO-46 (для датчиков LM35H, LM35AH,LM35CH, LM35CAH,LM35DH)TO-92 (для датчиков LM35CZ, LM35CAZ,LM35DZ)SO-8 для датчика LM35DMTO-220 для датчика LM35DT. | |
TMP36 | -40С…150С | +-1С | +-2% | Изготавливается в трехвыводном корпусе TO-92, восьмивыводном SOIC и пятивыводном SOT-23. |
Источник: https://ArduinoMaster.ru/datchiki-arduino/podkluchenie-datchik-temperatury-arduino/
Инфракрасный термометр на Ардуино с датчиком MLX90614
Большинство методов измерения температуры требуют некий физический контакт температурного датчика с объектом, температура которого должна быть измерена.
Но по мере развития технологий меняется и способ измерения температуры. Как быть если нам необходимо измерить температуру объекта без физического контакта с ним? В этом нам окажет помощь инфракрасный термометр.
Принцип работы инфракрасных термометров прост — все тела при температуре выше 0° Кельвина (абсолютный ноль) в той или иной степени излучают инфракрасную энергию, которая может быть обнаружена датчиком инфракрасного термометра.
Конструкция инфракрасного термометра имеет оптическую систему, которая фокусирует инфракрасную энергию, излучаемую объектом. Далее инфракрасный датчик преобразует энергию в электрический сигнал, который затем может быть передан в микроконтроллер для интерпретации и отображения в единицах температуры.
Сегодня мы соберем термометр, используя инфракрасный датчик MLX90614, Arduino Uno и LCD дисплей Nokia 5110 для отображения измеренной температуры.
MLX90614 представляет собой инфракрасный датчик для измерения температуры бесконтактным способом. Он может измерять температуру в диапазоне от -70 до 380 градусов Цельсия с точностью около 0,5°C.
Ниже перечислены некоторые особенности датчика MLX90614:
- Малый размер и низкая стоимость.
- Легко интегрировать.
- Заводская калибровка в широком температурном диапазоне: от -40°C до 125°C для температуры окружающей среды и от -70°C до 380°C для температуры объекта.
- Высокая точность: 0,5°C в широком температурном диапазоне 0 .. + 50°C
- Разрешение измерения: 0,02 ° C
- Настраиваемый выход ШИМ для непрерывного чтения
- Датчик доступен в версиях с питанием от 3В и 5В
Схема подключения MLX90614 к Ардуино
Схема подключения очень проста, потому что дисплей используется в виде шилда для Ардуино, который избавит нас от необходимости подключения его с помощью соединительных проводов, и все, что нам нужно сделать, это подключить дисплей к Ардуино.
Соединение Ардуино и датчика температуры показано на схеме ниже.
MLX90614-Arduino Uno
- VCC-5V
- GND-GND
- SCL-A5
- SDA-A4
Скетч инфракрасного термометра
Наша цель сегодня — измерить температуру, обработать ее и отобразить на LCD дисплее. Для того чтобы мы могли легко общаться с температурным датчиком MLX90614, мы используем библиотеку температурного датчика mlx90614 от Adafruit и для удобного вывода текста на экран графическую библиотеку Nokia 5110.
Мы начинаем, как обычно, с подключения всех библиотеки, которые нам понадобятся в работе:
#include #include #include
Затем создадим объект библиотеки LCD, определяя контакты Ардуино к которым подключены контакты LCD:
LCD5110 lcd(2,3,4,6,5); // при использовании шилда Nokia 5110 // LCD5110 lcd(8,9,10,12,11); //при использовании обычного дисплея Nokia 5110
После этого мы пропишем переменные для шрифтов и других элементов, необходимых для отображения, после чего создадим экземпляр датчика температуры:
char TEMPERATURE = ‘C’; extern uint8_t SmallFont[]; extern uint8_t BigNumbers[]; extern uint8_t uic[]; extern uint8_t uif[]; extern uint8_t splash[]; Adafruit_MLX90614 mlx = Adafruit_MLX90614();
Далее напишем функцию void setup(). Начнем с кода, инициализирующий LCD-дисплей и датчик температуры, после чего используем LCD.drawbitmap() для создания пользовательского интерфейса на дисплее.
Интерфейс уже был разработан и преобразован в C-файл и уже прикреплен к коду. Причина использования пользовательского интерфейса заключается в возможности отображения данных более удобным и эффективным способом:
void setup() { Serial.begin(9600); lcd.InitLCD(60); mlx.begin(); lcd.drawBitmap(0, 0, splash, 84, 48); lcd.update(); delay(3000); }
Далее идет функция void loop(). Работа функции void loop() проста. Мы начинаем с определения единицы измерения, в которой должна отображаться температура (в градусах Цельсия или Фаренгейта), затем мы читаем температуру от датчика температуры и выводим на экран.
void loop() { String temperature=»»; lcd.clrScr(); if(TEMPERATURE == ‘C’) { temperature = String(mlx.readObjectTempC(),1); lcd.drawBitmap(0, 0, uic, 84, 48); }else { temperature = String(mlx.readObjectTempF(),1); lcd.drawBitmap(0, 0, uif, 84, 48); } if(temperature.length()>4) { temperature.remove(3,2); } Serial.println(temperature); lcd.setFont(BigNumbers); if(temperature.length()==4) { lcd.print(temperature,5,19); }else { lcd.print(temperature,15,19); }
Полный код проекта:
Инфракрасный термометр Arduino/MLX90614 (658 b, скачано: 195)
Скопируйте код и загрузите его в Ардуино, затем направьте датчик температуры на объект, температуру которого вы хотите измерить. Через некоторое время температура этого объекта будет показана на экране.
Источник: http://www.joyta.ru/11430-infrakrasnyj-termometr-na-arduino-s-datchikom-mlx90614/
Цифровой термометр DS18B20 и ARDUINO UNO
Казалось бы, что может быть интересного и нового в измерении температуры при помощи Ардуино? Написаны сотни статей, объемом десятки мегабайт, может чуть меньше, а может и чуть больше скетчей… А вот еще и моя статья.
Зачем? Честно говоря, я тоже думал, что вопрос этот «разжеван вдоль и поперек», пока сам не столкнулся с измерением температуры. А тут полезло. Что-то не работает, что-то работает не так, возникает масса вопросов, на которые ответы приходится «выцарапывать» перерывая половину интернета, причем не только русскоязычного.
Данная статья, в отличие от моих прошлых статей на данном ресурсе гораздо более практичная, но начнем сначала.
Зачем, собственно измерять температуру чем-то новым, когда термометров продается – на любой вкус и кошелек? А дело в том, что температуру, зачастую, приходится не только измерять, но потом, на основе полученных данных что-то делать, либо просто регистрировать с целью отслеживания изменений.
Соединив, при помощи Ардуино, термодатчик с релейным блоком получим простейший терморегулятор, а если данный терморегулятор сможет отслеживать температуру по нескольким точкам (зонам) и действовать по определенному алгоритму получим довольно серьезный прибор, промышленный аналог которого стоит сопоставимо со стоимостью неплохого ноутбука. Однако, целью данной статьи не является создание заумно-сложных устройств. Цель в другом – предложить новичку простое, проверенное на практике, решение для измерения температуры. Также, как и предыдущие статьи эта будет состоять из частей. В каждой из которых будет рассмотрен свой вопрос. Части будут идти по возрастанию сложности.
Часть первая. Простейшая, но тоже полезная
Итак, от слов к делу! Для реализации данного проекта на первом этапе нам понадобится цифровой термодатчик DS18B20, ARDUINO UNO, резистор на 4,7 кОм (мощность особого значения не имеет, от 0,125 до 2 Вт целиком подходит, но имеет значение точность, чем точнее – тем лучше), кусочек 3-жильного провода (и отдельные проводки на этапе эксперимента тоже подойдут), а еще – несколько штырьков для платы. Хотя и без них тоже можно, если аккуратно, конечно. Выбор данного датчика не случаен. Дело в том, что он может отслеживать температуру в диапазоне от -55оС до +125оС с точностью в основной части диапазона 0,5оС, что вполне хватает для управления, как бытовым отоплением, так и разнообразными морозильными и холодильными установками, а также банями, саунами, теплицами, инкубаторами, рассадниками и прочим. Напоминаю, что ARDUINO UNO можно свободно приобрести здесь: arduino-kit.com.ua/uno-r3-new.html или здесь: arduino-kit.com.ua/arduino-leonardo-original-italiya-new-rev3.html , термодатчик DS18B20 – arduino-kit.com.ua/18b20-sensor-datchik-temperatury-dlya-arduino.html , хотя лично у меня – такой:arduino-kit.com.ua/cifrovoy-datchik-temperatury-odnozhilnyy-ds18b20.html достоинство моего – малые размеры, сопоставимые с размерами кабеля. Недостатки – отсутствие платы, что в некоторых условиях отрицательно сказывается на удобстве монтажа и жизнеспособности датчика. Также – у датчика arduino-kit.com.ua/18b20-sensor-datchik-temperatury-dlya-arduino.html встроен резистор и больше никаких резисторов паять не нужно, зато исчезает возможность подключить несколько датчиков «цепочкой». Подключение датчика к Ардуино видно на Рис. 1 и указано в Таблице 1. На термодатчике определить контакты просто. Нужно взять его так, чтобы смотреть на срез с цифрами, а ножки были внизу. Крайняя левая ножка будет GND, средняя DQ, а крайняя правая VDD.
Таблица 1.
Пин Ардуино Уно | Пин DS18B20 | Примечание |
GND | GND | «-» |
+5V | VDD | +5V, также подпаивается одна ножка резистора 4,7 кОм. |
10 | DQ | Цифровой ввод, также подпаивается вторая ножка резистора 4,7 кОм. |
Рисунок 1. Подключение одного термодатчика.
На рисунке видно, что было использовано два резистора. Это связано с тем, что найденный мной резистор с маркировкой «4К7», на самом деле имел довольно высокую погрешность, которую и пришлось компенсировать вторым резистором.
Общее сопротивление данной сборки составило 4,695 кОм, что я считаю вполне приемлемым. Также на рисунке можно видеть, что датчик не подпаян непосредственно к проводам (обрезок шлейфа), а вставлен в разъем. Сделано это было из соображений развития эксперимента.
Паять данные датчики настоятельно рекомендуется. Сам скетч также получился довольно компактным:
Файл DS18B20.ino
Всего 14 строчек кода с комментариями. Любому новичку будет по силам разобраться. В результате работы программа выдаст нечто подобное:
Рисунок 2. Результат работы с одним датчиком.
Часть вторая. Немного усложненная
Усложним мы эту часть тем, что добавим еще один датчик. Предположим, что нам нужно измерять температуру на улице и в помещении. Для этого всего лишь допаиваем один датчик «в цепочку». Очень напоминает параллельное подключение. Знатоки электрики поймут, о чем я. Но отличие есть: в данном случае выводы от центрального провода должны быть как можно короче.
Рисунок 3. Плата с двумя датчиками.
Скетч вырос всего на 3 строчки. Теперь в нем 17 строк:
Файл DS18B20_2.ino
Результаты работы этого скетча видно на Рисунке 4.
Рисунок 4. Работа с двумя датчиками.
Часть третья. Заключительная
А теперь подключим к Ардуино светодиод, который будет загораться при достижении определенной температуры. Такой себе «пороговый сигнализатор». Для этого нужен обычный светодиод и токоограничивающий резистор.
Мне под руку попался на 100 Ом, его я и использовал, подключив к 7-у контакту Ардуино. Длинную ножку светодиода (анод) подпаиваем к резистору, а короткую (катод) подключаем к контакту GND Ардуино.
Должно получиться, примерно, как на рисунке 5.
Скетч также вырос совсем не на много:
Файл DS18B20_2_plus_diod.ino
Работа данной программы на компьютере отображается точно также, как показано на Рисунке 4. Естественно переменной sensors.getTempCByIndex(1) можно оперировать в очень широких пределах и управление светодиодиком лишь самый простой пример из всех возможных.
И в заключение данной статьи еще один шаг. Сейчас я расскажу, как к одной Ардуинке подключить несколько «гирлянд» данных устройств. Дело в том, что длина «гирлянды» не может быть бесконечной, более того – она очень сильно ограничена.
В идеальных условиях – 300 метров, но создание «идеальных» условий – довольно дорогостоящее удовольствие. В реальных условиях – не рекомендуется превышать 10 метров. Для обычного «комнатного» термометра этого более чем достаточно, но если речь идет о каком-либо более серьезном оборудовании – этого катастрофически мало.
Тем более, что для стабильной работы необходимо, чтобы датчики располагались как можно ближе к проводникам шины – «гирляндой». Отводить, конечно, тоже можно, но точность и помехозащищенность в этом случае будут крайне низкими.
Итак, подключаем мы несколько «гирлянд» именно для того, чтобы собрать информацию с большого числа точек, при этом сохранив достаточную точность и помехозащищенность. Добавляем контакты согласно таблице 2:
Пин Ардуино Уно | Пин DS18B20 | Примечание |
GND | GND | «-» |
+5V | VDD | +5V, также подпаивается одна ножка резисторов 4,7 кОм. |
10 | DQ | Цифровой ввод, также подпаивается вторая ножка резистора 4,7 кОм. |
8 | DQ | Цифровой ввод, также подпаивается вторая ножка резистора 4,7 кОм. |
Как видно из таблицы – ничего сложного нет, точно такая же шина, только на другой цифровой вод. Не стал паять на 9-й контакт только из соображений удобства и скорости пайки.
Скетч:
Файл DS18B20_2_plus_1.ino
Вряд ли скетч нуждается в излишних комментариях.
Результат работы скетча выглядит так:
Рисунок 6. Работа одновременно двух линий датчиков.
А плата с подключенными двумя линиями выглядит так:
Рисунок 7. Плата с двумя шинами.
Из рисунка видно, что резистор 4,7кОм для повышения точности также выполнен составным.
Библиотеки, примененные для написания скетчей рассмотренных в статье находятся здесь:
OneWire.h
DallasTemperature.h
Обзор подготовил Павел Сергеев
Источник: https://arduino-kit.com.ua/tsifrovoy-termometr-ds18b20-i-arduino-uno.html
Записки программиста
Ранее мы научились использовать текстовые ЖК-индикаторы из Arduino. Это, бесспорно, очень классные устройства.
Однако выводить с их помощью можно в основном только текст и какую-то простую псевдографику, например, прогресс бар. Для вывода же полноценной графики предназначены другие устройства — ЖК-матрицы.
Сегодня при помощи такой ЖК-матрицы мы соберем термометр, который строит графики температуры.<\p>
Пара слов о датчике температуры TMP36
Датчик температуры TMP36 в этом блоге еще не упоминался, поэтому хотелось бы сказать о нем отдельные пару слов. На первый взгляд, это довольно простое устройство с тремя ножками, внешне похожее на транзистор.
Если смотреть на него с плоской стороны головки, то левая ножка подключается к плюсу, правая — к минусу, а средняя — к аналоговому входу микроконтроллера.
Считывая напряжение на соответствующем пине и используя незамысловатую формулу, микроконтроллер переводит напряжение в градусы Цельсия.
По крайне мере, так написано в любом учебнике по Arduino. Если вы попытаетесь использовать TMP36, как описано выше, вместо градусов Цельсия вы получите какую-то ерунду. Например, TMP36 покажет, что у вас дома 10 градусов, хотя по ощущениям скорее 20. За ответом, что же пошло не так, идем в даташит [PDF].
Из него мы узнаем, что как можно ближе к датчику нужно поставить конденсатор на 100 нФ. Вжух, и показания сразу становятся похожими на правду! Но не надолго. Если на минуту положить устройство в холодильник, а потом достать, то он покажет сильно отрицательную температуру.
Такая температура может быть в морозильной камере, но в обычной камере холодильника держится небольшая положительная температура. Что намного хуже, TMP36 будет показывать отрицательную температуру еще несколько часов, даже если попытаться отогреть его паяльным феном.
В общем, опять получаем не показания, а какой-то мусор.
Чтобы датчик не измерял температуру окружающих его компонентов (например, большого ЖК-дисплея в металлическом корпусе), да и поменьше издеваться над этими самыми компонентами, к датчику нужно припаять около 50 см скрученных проводов и втыкать его в макетку через них.
Я использовал провода от разрезанного Ethernet-кабеля (витой пары). Конденсатор в этом случае, похоже, не нужен. Но если припаять его к датчику, вряд ли станет хуже. Если при помощи датчика вы планируете измерять температуру на улице, бросив его за окно, советую сделать провода подлиннее. Так просто удобнее.
Также не забудьте обеспечить нормальную изоляцию при помощи термоусадочных трубок.
Примите во внимание, что TMP36 вообще очень чувствителен к любым скачкам напряжения. Чтобы измерения получились точными, соединительные провода на макетке лишний раз лучше не теребить.
Кажется, это все, что касается тонкостей использования TMP36.
Вывода графика температуры при помощи ЖК-матрицы
Для экспериментов я использовал ЖК-матрицу MT-12864A-2YLG. Существуют аналогичные матрицы других моделей от других производителей, все они используются точно так же.
Иногда в описании пишут, что они работают на базе контроллера KS0107 или его аналога. Главное, чтобы у матрицы было 20 пинов, если она с подсветкой, или 18, если подсветки нет.
В теории пинов может быть и чуть меньше. Читайте далее, и сами поймете, почему.
Для работы с матрицей мы воспользуемся библиотекой GLCD. Мне пришлось ее слегка пропатчить, чтобы избавиться от ошибки при компиляции современном avr-gcc:
./glcd/fonts/SystemFont5x7.h:48:28: error: variable 'System5x7' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
static uint8_t System5x7[] PROGMEM = {
Просто допишите в соответствующей строке слово const, или используйте пропатченный GLCD из моего репозитория. Ссылку на него, как обычно, вы найдете в конце поста.
Библиотеку нужно положить к себе в репозиторий в каталог glcd. Также нужно подправить Makefile (что за Makefile рассказывалось в этом посте):
SOURCES := main.cpp glcd/gText.cpp glcd/glcd.cpp glcd/glcd_Device.cpp
CPPFLAGS := -I ./glcd -Wp,-w
Флаг -Wp,-w нужен для того, чтобы заглушить ворнинги вроде:
./glcd/include/avrio.h:1617:0: warning: “PIN_A7” redefined #define PIN_A7 AVRIO_PIN(AVRIO_PORTA, 7)
^
Если вам не лень, можете еще немного поправить код GLCD. Мне было лень 🙂
Чтобы понять, какой пин ЖК-матрицы куда нужно подключать при использовании GLCD, открываем файл config/ks0108_Arduino.h:
/* такие комментарии добавлены мной */
#define glcdData0Pin 8 /* PB0 */
#define glcdData1Pin 9 /* PB1 */
#define glcdData2Pin 10 /* PB2 */
#define glcdData3Pin 11 /* PB3 */
#define glcdData4Pin 4 /* PD4 */
#define glcdData5Pin 5 /* PD5 */
#define glcdData6Pin 6 /* PD6 */
#define glcdData7Pin 7 /* PD7 */
#define glcdCSEL1 14 /* A0, PC0 */
#define glcdCSEL2 15 /* A1, PC1 */
#define glcdRW 16 /* A2, PC2 */
#define glcdDI 17 /* A3, PC3 */
#define glcdEN 18 /* A4, PC4 */
Само собой разумеется, номера пинов микроконтроллера в этом файле при желании можно переопределить.
Где у матрицы находятся пины с такими именами, можно узнать из таблицы 4 на странице 7 даташита [PDF]. Примите во внимание, что если у вас другая ЖК-матрица, она может и почти наверняка будет подключаться немного не так, как моя. Поэтому обязательно сверьтесь с даташитом!
Итак, используемая мной ЖК-матрица подключается таким образом:
- 1 — GND, земля;
- 2 — VCC, питание модуля;
- 3 — Uo, вход питания ЖК-панели. Подключается к VEE (см далее) через потенциометр на 10 кОм для регулирования контрастности. Подключать напрямую без потенциометра нельзя, увидите только черные квадраты;
- 4 — A0, выбор команды/данные, к glcdDI;
- 5 — R/W, выбор чтение/запись, к glcdRW;
- 6 — E, стробирование данных, к glcdEN;
- 7-14 — DB0-DB7, шина данных, к glcdData0Pin-glcdData7Pin;
- 15 — E1, выбор кристала один, к glcdCSEL1;
- 16 — E2, выбор кристала два, к glcdCSEL2;
- 17 — RES, сброс. Можно подключить к любому цифровому пину на ваш выбор, к reset-пину микроконтроллера или просто к плюсу;
- 18 — VEE, выход DC-DC преобразователя. Подключается через потенциометр к Uo как описано выше;
- 19 — A, анод подсветки. Подключаем к плюсу напрямую или через потенциометр, если хотим регулировать яркость;
- 20 — K, катод подсветки, к минусу;
В собранном виде цепь выглядит таким образом:
На фото вы видите устройство после того, как датчик температуры был помещен примерно на одну минут в морозилку, а затем извлечен из нее. Как можно видеть по графику, и до и после извлечения термометр показывает что-то похожее на правду.
Я предпочитаю собирать свою Arduino прямо на макетке, но вы с тем же успехом можете использовать обычную Arduino. У меня микроконтроллер использует встроенные часы и работает на частоте 1 МГц. Запрограммировано все это хозяйство самопальным AVR-программатором. Если вам больше по душе бутлоадер Arduino, вы с тем же успехом можете использовать и его.
Код прошивки довольно прост:
#include
#include
#include
#define ZERO_X_OFFSET 35
#define MAX_TEMPERATURE 28
#define MIN_TEMPERATURE (-28)
#define HIST_SIZE 128
float hist[HIST_SIZE] = { 0.0 };
int curr_hist_idx = 0;
void setup()
{
GLCD.Init(NON_INVERTED);
GLCD.SelectFont(System5x7);
}
inline float sensor_to_celsius(int sensor)
{
return ((((float)sensor * 5000.0) / 1024.0) – 500.0) / 10.0;
}
inline int limit_temperature(int t)
{
if(t > MAX_TEMPERATURE)
return MAX_TEMPERATURE;
if(t = 1)
GLCD.DrawLine(x-1, ZERO_X_OFFSET-limit_temperature(hist[prev_i]),
x, ZERO_X_OFFSET-limit_temperature(hist[i]), BLACK);
x++;
prev_i = i;
i++;
if(i == HIST_SIZE)
i = 0;
} while(i != stop_i);
delay(2000);
}
Список методов, поддерживаемых GLCD, легко grep’ается:
ClearScreen(uint8_t color);
DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2,
uint8_t color);
DrawRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height,
uint8_t color);
DrawRoundRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height,
uint8_t radius, uint8_t color);
FillRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height,
uint8_t color);
InvertRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height);
SetDisplayMode(uint8_t invert);
DrawBitmap(Image_t bitmap, uint8_t x, uint8_t y, uint8_t color);
DrawVLine(uint8_t x, uint8_t y, uint8_t height, uint8_t color);
DrawHLine(uint8_t x, uint8_t y, uint8_t width, uint8_t color);
DrawCircle(uint8_t xCenter, uint8_t yCenter, uint8_t radius,
uint8_t color);
FillCircle(uint8_t xCenter, uint8_t yCenter, uint8_t radius,
uint8_t color);
GotoXY(uint8_t x, uint8_t y);
Все методы возвращают void. Они имеют говорящие имена и превосходно документированы прямо в коде библиотеки.
Заключение
Неоспоримое преимущество ЖК-матрицы перед текстовым ЖК-индикатором заключается в возможности выводить не только текст, но и произвольную (до тех пор, пока она черно-белая и умещается в 128×64 точек) графику. Однако ЖК-матрица больше по размеру.
Кроме того, для ее использования требуется 13 пинов микроконтроллера, в то время, как текстовому ЖК-индикатору нужно только 6 пинов. Наконец, GLCD отъедает заметно больше flash-памяти микроконтроллера, чем LiquidCrystal. Точные цифры, увы, я забыл выписать.
Можете добыть их и оставить в комментариях в качестве домашнего задания.
Если вам нужно просто выводить текст, используйте текстовый индикатор. Если вы решили сделать свой осциллограф, или свою убийцу GameBoy с тетрисами, змейками, марио и вот этим всем, используйте матрицу.
Полную версию исходников к этой заметке вы найдете в этом репозитории на GitHub. Вопросы и дополнения, как обычно, горячо приветствуются.
Дополнение: Использование ЖК-экранчика от Nokia 5110 в Arduino
Источник: https://eax.me/arduino-digital-thermometer/