Разделы

В сети

Пользователей: 241
Из них просматривают:
Аналоги: 84. Галерея: 1. Даташиты: 96. Новости: 11. Остальное: 10. Профиль пользователя: 3. Форум: 36.
Участников: 2
Гостей: 239

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.
RGB температура

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

Написал MACTEP 30.05.2020 19:20:00 (Просмотров: 6318)
На основе статьи об Ардуино (входы/выходы), соберем схему для замера температуры, используя датчик температуры 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°)
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.

 Измеряем температуру RGB лентой
Старший сотрудник
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 124
не в сети
Цитата:
Проверь, не говнокод?
Ну да!
Использование int там где достаточно uint8_t (не забываем AVR - 8-ми битный МК). А это вообще шедевр!
float konst = (valend valbeg) / 256.0;
Зачем здесь float? Для AVR все что больше 8 бит, уже приходится считать программно, а вы замахнулись на плавающую точку - тормоза обеспечены! Зачем деление? Задача решается гораздо проще и эффективнее
static uint16_t konst = (valend valbeg) >> 8;

Если нужна плавающая точка, берите МК поддерживающий ее. Они недорогие. Около 2.5$ за ардуино-подобную плату.
Открыть изображение в новом окне
Отправитель Нити

Ответы Отправитель Отправлено
 Измеряем температуру RGB лентой MACTEP 01.05.2020 17:13
    Измеряем температуру RGB лентой proger 01.05.2020 17:55
      Измеряем температуру RGB лентой MACTEP 01.05.2020 18:06
        Измеряем температуру RGB лентой KT315 01.05.2020 20:12

Разное

Интересно

Из старых спиц от велосипеда или зонта, вплавленных паяльником в цилиндрические куски пластмассы, получаются удобные регулировочные отвертки.

Похожие статьи