Разделы

В сети

Пользователей: 56
Из них просматривают:
Аналоги: 13. Видео: 1. Галерея: 1. Даташиты: 8. Инструкции: 1. Новости: 5. Остальное: 3. Производители: 1. Профиль пользователя: 6. Форум: 17.
Участников: 3
Гостей: 53

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

Партнёры


Партнёры

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

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

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

Написал MACTEP 30.05.2020 19:20:00 (Просмотров: 6306)
На основе статьи об Ардуино (входы/выходы), соберем схему для замера температуры, используя датчик температуры 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.08.2008
Откуда: Тирасполь
Сообщений: 7258
не в сети
proger, я не программист, и настолько все тонкости не знаю.
А свои высеры можешь выкладывать на форуме программистов.
Твой пример со сдвигом работает, только если число делить надо на 2в какой то степени а дальше надо извращаться. А как ты думаешь, компилятор не то же самое сделает? Ну чуть побольше поизвращается...но для десяти строк кода и так сойдет.
Считаю твой высер только насчет int верным... остальное вытягивал...

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

PS. пиши на ассемблере, будет тебе самый оптимальный код.
Отправитель Нити

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

Разное

Интересно

Контактные щетки для микродеталей, электробритв и т.п. можно выпилить из графитовых стержней от старых батареек питания.

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