На основе статьи об Ардуино (входы/выходы), соберем схему для замера температуры, используя датчик температуры 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°) |
|