Измеряем температуру RGB лентой

Дата 30.05.2020 19:20:00 | Раздел: Для дома и быта

На основе статьи об Ардуино (входы/выходы), соберем схему для замера температуры, используя датчик температуры LM35.

Сначала несколько измененная схема. Вместо переменного резистора подключен датчик LM35. Чем он хорош? От 0 до 100° на выходе будет напряжение от 0 до 1.0 В, с увеличением 10мВ на градус. При включении внутреннего опорного напряжения - практически идеальный датчик температуры, для замера от 0 до 100°.
 
Особенности датчиков LM35.
  • Значение температуры калибровано в шкале Цельсия.
  • Линейное значение напряжения на  выходе с коэффициентом 10 мВ/ °C.
  • Гарантирована точность 0.5 °C (при 25 °C).
  • Параметры нормированы для полного диапазона температур -55 … +150 °C.
  • Удобны для использования в устройствах с удаленным подключением датчиков.
  • Низкая цена.
  • Работает в широком диапазоне напряжения питания 4 – 30 В.
  • Потребляемый ток менее 60 мкА.
  • Низкий уровень собственного разогрева – 0.08 °C при неподвижном воздухе.
  • Нелинейность только ±0.25 °C.
  • Низкое выходное сопротивление – 0.1 Ом, при токе нагрузки 1 мА.


Вот схема:






И измененный скетч. Изменения коснулись только включением внутреннего опорного напряжения 1.1В.
analogReference(INTERNAL);
 


int Pin9 = 9; // красный
int Pin10 = 10; // синий
int Pin11 = 11; // зеленый
int Pin3 = 3; // потенциометр подключен к входу 3
int val = 0; // переменная для хранения значения
int valbeg = 100; // начальное значение параметра (0-1023) обычно ближе к нулю
int valend = 380; // конечное значение параметра (0-1023)ближе к краю
// valbeg должен быть заведомо меньше valend
int pwm = 0; // переменная для хранения значения шим
float konst = (valend - valbeg) / 256.0; // Подсчитываем коэффициент
// Данный коэффициент нужен для того, чтоб вписать диапазон в 0-255 для ШИМ

void setup()
{
  pinMode(Pin9, OUTPUT); // установка порта на выход
  pinMode(Pin10, OUTPUT); // установка порта на выход
  pinMode(Pin11, OUTPUT); // установка порта на выход
  analogReference(INTERNAL); // Включаем внутреннее опорное напряжение 1.1В
}
void loop()
{
  val = analogRead(Pin3); // считываем значение с порта 3,
  pwm = (val - valbeg) / konst; // Полученные данные должны вписаться в 0-255 для вывода

  if (pwm < 0) { pwm = 0; }; // если данные меньше, то 0
  if (pwm > 255) { pwm = 255; }; // если данные больше, то 255
  // Даже если параметры вышли за пределы, они обрежутся, и будет один из крайних цветов

  if (pwm < 128)
   {
    analogWrite(Pin10, 255 - pwm * 2); //Выводим синий цвет
    analogWrite(Pin11, pwm * 2); //Выводим зеленый цвет
    analogWrite(Pin9, 0); // меньше середины красный не выводим
   }
  else
   {
    analogWrite(Pin9, pwm * 2 - 255); //Выводим красный цвет
    analogWrite(Pin11, 510 - pwm*2 ); //Выводим зеленый цвет
    analogWrite(Pin10, 0); // дальше середины синий не выводим
   }
  ;

}


По скетчу.
int valbeg = 93; - указываем начальную температуру (10°)
int valend = 353; - указываем верхнюю температуру (38°)

Записываемые значения рассчитываются по формуле x=1023*t*10/1100
где:
x-нужные данные
1023 - значение при 1.1В
t*10 - температуру умножаем на 10, чтобы получить входное напряжение на выв.3
1100 - опорное напряжение в мВ
Можно вывести коэффициент, на который надо умножать градусы - x=t*9.3

Очень холодно (10°) Холодно (17°) Тепло (24°) Жарко (31°) Очень жарко (38°)




Эта статья взята с сайта Портал радиолюбителей
https://radio-hobby.org

Адрес этой статьи:
https://radio-hobby.org/modules/news/article.php?storyid=1562