Эксперимент Маячок


Эксперимент 15. Комнатный термометр



бет32/45
Дата13.02.2023
өлшемі1,82 Mb.
#67503
түріЗакон
1   ...   28   29   30   31   32   33   34   35   ...   45

Эксперимент 15. Комнатный термометр


← Счётчик нажатий | Оглавление | Метеостанция →

В этом эксперименте мы измеряем температуру окружающей устройство среды и с помощью шкалы показываем, на сколько она превышает заданный порог.


Список деталей для эксперимента


  • 1 плата Arduino Uno

  • 1 беспаечная макетная плата

  • 1 светодиодная шкала

  • 1 резистор номиналом 10 кОм

  • 1 термистор

  • 10 резисторов номиналом 220 Ом

  • 14 проводов «папа-папа»

Для дополнительного задания


  • 1 пьезопищалка

  • еще 2 провода

Принципиальная схема



Схема на макетке



Обратите внимание

Скетч


p150_bar_thermometer.ino
// Огромное количество готового кода уже написано другими людьми
// и хранится в виде отдельных файлов, которые называются
// библиотеками. Для использования кода из библиотеки, её нужно
// подключить (англ. include). Библиотека «math» даёт разные
// математические функции, в том числе функцию логарифма
// (англ. log), которая нам понадобится далее
#include
#define FIRST_LED_PIN 2
#define LED_COUNT 10
// Параметр конкретного типа термистора (из datasheet):
#define TERMIST_B 4300
#define VIN 5.0
void setup()
{
for (int i = 0; i < LED_COUNT; ++i)
pinMode(i + FIRST_LED_PIN, OUTPUT);
}
void loop()
{
// вычисляем температуру в °С с помощью магической формулы.
// Используем при этом не целые числа, а вещественные. Их ещё
// называют числами с плавающей (англ. float) точкой. В
// выражениях с вещественными числами обязательно нужно явно
// указывать дробную часть у всех констант. Иначе дробная
// часть результата будет отброшена
float voltage = analogRead(A0) * VIN / 1023.0;
float r1 = voltage / (VIN - voltage);
float temperature = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;
for (int i = 0; i < LED_COUNT; ++i) {
// при 21°С должен гореть один сегмент, при 22°С — два и
// т.д. Определяем должен ли гореть i-й нехитрым способом
boolean enableSegment = (temperature >= 21+i);
digitalWrite(i + FIRST_LED_PIN, enableSegment);
}
}


Достарыңызбен бөлісу:
1   ...   28   29   30   31   32   33   34   35   ...   45




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет