Разделы

В сети

Пользователей: 131
Из них просматривают:
Аналоги: 42. Даташиты: 48. Доска объявлений: 1. Инструкции: 2. Новости: 9. Остальное: 3. Профиль пользователя: 3. Торрент: 1. Форум: 22.
Участников: 2
Гостей: 129

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

Партнёры


Партнёры

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

Для дома и быта

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

Написал MACTEP в 30.04.2020 19:20:00 (1121 прочтений)
RGB температура
На основе статьи об Ардуино (входы/выходы), соберем схему для замера температуры, используя датчик температуры 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   Температура   Arduino   LM35   Лента  
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити
Kosmonavt
Отправлено: 30.04.2020 21:31  Обновлено: 30.04.2020 21:31
Главный Инженер
Дата регистрации: 08.02.2009
Откуда:
Сообщений: 1845
 Измеряем температуру RGB лентой
Думаю, неплохо бы смотрелись часы с цифрами из светодиодной ленты и, чтобы цвет цифр соответствовали температуре. Или ещё проще, например, обычные кварцевые электро-механические часы с подобной подсветкой циферблата по периметру или по типу зеркального туннеля.
Открыть изображение в новом окне
wolf170571
Отправлено: 01.05.2020 11:12  Обновлено: 01.05.2020 11:12
Технический Директор
Дата регистрации: 08.01.2009
Откуда: Tallinn
Сообщений: 3154
 Измеряем температуру RGB лентой
Да всё клссно.
MACTEP
Отправлено: 01.05.2020 13:56  Обновлено: 01.05.2020 13:56
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 6866
 Измеряем температуру RGB лентой
Цитата:
Да всё клссно.
Проверь, не говнокод?
proger
Отправлено: 01.05.2020 14:39  Обновлено: 01.05.2020 14:39
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 111
 Измеряем температуру RGB лентой
Цитата:
Проверь, не говнокод?
Ну да!
Использование int там где достаточно uint8_t (не забываем AVR - 8-ми битный МК). А это вообще шедевр!
float konst = (valend valbeg) / 256.0;
Зачем здесь float? Для AVR все что больше 8 бит, уже приходится считать программно, а вы замахнулись на плавающую точку - тормоза обеспечены! Зачем деление? Задача решается гораздо проще и эффективнее
static uint16_t konst = (valend valbeg) >> 8;

Если нужна плавающая точка, берите МК поддерживающий ее. Они недорогие. Около 2.5$ за ардуино-подобную плату.
Открыть изображение в новом окне
MACTEP
Отправлено: 01.05.2020 17:13  Обновлено: 01.05.2020 17:32
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 6866
 Измеряем температуру RGB лентой
proger, я не программист, и настолько все тонкости не знаю.
А свои высеры можешь выкладывать на форуме программистов.
Твой пример со сдвигом работает, только если число делить надо на 2в какой то степени а дальше надо извращаться. А как ты думаешь, компилятор не то же самое сделает? Ну чуть побольше поизвращается...но для десяти строк кода и так сойдет.
Считаю твой высер только насчет int верным... остальное вытягивал...

Чет не пойму, ты чего за ресурсы МК борешься, да и за скорость, если там простейшая операция...

PS. пиши на ассемблере, будет тебе самый оптимальный код.
proger
Отправлено: 01.05.2020 17:55  Обновлено: 01.05.2020 17:56
Старший сотрудник
Дата регистрации: 07.01.2010
Откуда:
Сообщений: 111
 Измеряем температуру RGB лентой
Для меня программирование тоже хобби.
Если разрабатываешь программы нужно знать как минимум основы. К ним относятся типы данных, общие принципы устройства и работы микроконтроллера и др. Речь обо всех ардуинщиках. Они плохо разбираются в программировании и тупо копируют друг от друга особо не задумываясь об оптимальности кода.
Деление на 256 эквивалентно сдвигу право на 8. Плавающая точка для этого не требуется.
Не важно простая программа или сложная. Если допускать нерациональное использование ресурсов МК в простых задачах, поступишь также в сложных. В итоге в устройстве будет несколько ардуин, но хватило бы одной при правильном построении алгоритма программы и рациональном использовании возможностей контроллера.
Асм платформозависим и слишком низкоуровневый. Современные оптимизирующие компиляторы дают выход не хуже чем ассемблерщик средней квалификации.
MACTEP
Отправлено: 01.05.2020 18:06  Обновлено: 01.05.2020 18:06
Администратор
Дата регистрации: 07.08.2008
Откуда: Тирасполь
Сообщений: 6866
 Измеряем температуру RGB лентой
С делением ты наверное не понял. На выходе может получитьсяч число с плавающей точкой. Там не обязательно целое число. Так как параметры температуры добавляются разные, то konst будет в том числе дробным. Если без плавающей запятой, то [цензура] получится, особенно если диапазон малый. Можно и по другому, но универсальности не будет.
KT315
Отправлено: 01.05.2020 20:12  Обновлено: 01.05.2020 20:12
V.I.P.
Дата регистрации: 24.06.2011
Откуда: Мухосранск
Сообщений: 2517
 Измеряем температуру RGB лентой
Круть

Разное

Диэлектрические и диамагнитные отвертки можно выпилить из старых стеклотекстолитовых плат.

Интересно

Сортировать всякую всячину поможет магнит, завернутый в бумагу или полиэтилен.

Похожие новости