Измеряем температуру кожи через TMP36 с Ардуино в Тинкеркаде

Один раз мы уже затронули тему эмуляторов Ардуино в статье "Мигаем светодиодом с помощью Ардуино эмулятора Tinkercad" и познакомились с таким продуктом как Тинкеркад (англ. - Tinkercad). Сегодня продолжим наше знакомство с этим отличным сервисом и в этом проекте вы превратите Arduino в термометр!

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

Несмотря на то, что Arduino является цифровым инструментом, он может интерпретировать сигналы с аналогового входа, например, температурного датчика TMP36, используя встроенный аналого-цифровой преобразователь (АЦП), доступ к которому осуществляется через аналоговые выводы A0-A5.

Изучить пример схемы можно ниже. Вам нужно нажать "Начать симуляцию" (Start Simulation), нажав на сенсор TMP36, затем перетащив температурный слайдер влево или вправо, чтобы настроить смоделированный вход и наблюдать результирующую светодиодную реакцию.

В этом уроке вы создадите данную смоделированную схему самостоятельно следуя примеру. Далее, по желанию, вы сможете создать физическую схему, для чего вам понадобятся: плата Arduino Uno, USB-кабель, макетная плата, три светодиода, три одинаковых резистора (любое значение от 100 до 1000, 220 Ом), датчик температуры TMP36 и провода.

Вы можете следовать этому уроку практически с помощью Tinkercad Circuits. Tinkercad Circuits - бесплатная браузерная программа, которая позволяет создавать и моделировать схемы. Она идеально подходит для обучения, преподавания и создания прототипов.

Шаг 1. Создаем светодиодную цепь

Как вы могли узнать из уроков для начинающих, лучше всего начать с подключения вашего Arduino и макета к питанию и заземлению соответственно схеме в примере. Затем добавьте три красных светодиода к макету, как показано на рисунке. Это будет индикатор или индикаторная «гистограмма» проекта.

Перетащите Arduino Uno и макетную плату с панели компонентов на рабочую область рядом с существующей схемой.

Подключите проводами 5-вольтовые и заземляющие штыри Arduino к (+) и (-) рельсам на макете. Вы можете изменить цвет проводов, если хотите. Также вы можете использовать раскрывающийся список, либо цифровые клавиши на клавиатуре.

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

Используйте резистор 220 Ом для подключения катода каждого светодиода (левая нога) к рельсу заземления (черный) макета. В Tinkercad Circutis вы можете изменить значение резистора, выделив его и используя раскрывающееся меню в помощнике.

Подключите светодиодные аноды (правые, более длинные ножки) к цифровым контактам 4, 3 и 2 на Arduino. Светодиодный анод (+) - это терминал, в который втекает ток.

Катод (-) является терминалом, из которого вытекает ток. Он соединяется с рельсом заземления.

Шаг 2. Добавляем датчик температуры

Датчик температуры создает изменяющийся сигнал напряжения в зависимости от температуры, которую он определяет. Он имеет три контакта: один, который соединяется с землей, другой, который подключается к 5 вольтам, и третий, который выдает переменное напряжение на ваш Arduino, аналогичный аналоговому сигналу от потенциометра.

Существует несколько различных моделей датчиков температуры. Эта модель, TMP36, удобна, потому что ее выходное напряжение прямо пропорционально температуре в градусах Цельсия.

В редакторе схем найдите датчик температуры в компонентах.

Поместите датчик температуры (TMP36) на макет с закругленной частью, обращенной в сторону от Arduino, как показано на рисунке (это ориентация по умолчанию).

Поместите датчик температуры на макет в строку Е, как показано на рисунке.

Подключите датчик температуры так, чтобы левый контакт подключался к шине напряжения 5 В, центральный контакт соединяется с A0 на Arduino, а правый штырь соединяется с шиной GND.

Шаг 3. Наблюдение за аналоговым входом

В схеме вы можете увидеть, что температурный датчик подключен к источнику питания (5 вольт) и заземлению (0 В) и аналоговому выходу A0. По мере повышения температуры выход, подключенный к A0, увеличивает свое напряжение. Вы также можете видеть, что три светодиода подключены к их собственным цифровым выводам.

Несмотря на то, что Arduino - это цифровой инструмент, он может получать информацию от аналоговых датчиков для измерения таких параметров, как температура или свет. Для этого вы воспользуетесь встроенным аналого-цифровым преобразователем Arduino (ADC).

Аналоговые контакты от A0 до A5 могут интерпретировать напряжения от 0 до 5 В и переводить это напряжение в значения от 0 до 1023 для использования в скетче Arduino. Аналоговые контакты в основном используются для считывания информации с датчиков (они также могут быть использованы как цифровые выходы 14-19, несвязанные).

Шаг 4. Блоки кода

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

Нажмите кнопку «Код», чтобы открыть редактор кода. Блоки серого цвета (Notation) являются комментариями для того, чтобы понимать что вы намерены делать в своем коде, эти комментарии не выполняется как часть программы.

Нажмите на категорию «Переменные» в редакторе кода. Создайте новую переменную baselineTemp и используйте блок «set», чтобы установить ее на 40 (градусов C°). Чтобы сохранить значение датчика, создайте переменную с именем «celsius». Перетащите блок «set» и настройте раскрывающийся список на нашу новую переменную celsius.

В категории «Математика» (Math, вычисления) перетащите блок «map» и вставьте в него два арифметических блока («1+1») в первое поле. Отрегулируйте диапазон от -40 до 125. Нажмите на категорию «Ввод» (Input) и перетащите блок «аналогового считывающего вывода» и поместите его в первое арифметическое поле внутри блока «map».

Настройте арифметические блоки на: "(прочитайте аналоговый вывод A0 - 20) x 3.04" (англ. - "(read analog pin A0 - 20) x 3.04").

При желании создайте новую переменную для преобразования температуры в Фаренгейты с заданным блоком и некоторыми арифметическими блоками для чтения: «установите значение по Фаренгейту (celsius x 9) / 5 + 32». Добавьте несколько блоков последовательного монитора, чтобы вывести температуру в C° или F°.

Нажмите категорию «Управление» (Control) и перетащите блок if, затем перейдите к Math и перетащите блок компаратора в блок if.

В категории «Переменные» возьмите переменную celsius и переменную baselineTemp и перетащите их в блок компаратора, отредактировав раскрывающееся меню, чтобы он читал «if celsius < baselineTemp then».

Добавьте три цифровых выходных блока внутри оператора if, чтобы установить контакты 2, 3 и 4 LOW.

Дублируйте этот оператор if четыре раза и добавьте арифметические и/или блоки, чтобы создать пять операторов общего определения состояния if. Первое состояние - «температура ниже нашей базовой линии», поэтому светодиоды не загораются. Когда температура больше или равна базовой линии и меньше базовой линии + 10, загорается только один светодиод. Когда температура находится между базовым уровнем + 10 и базовым + 20, загорается два светодиода. И так далее для учета всех желаемых состояний.

Шаг 5. Объяснение кода Arduino

Когда редактор кода открыт, вы можете щелкнуть выпадающее меню слева и выбрать «Блоки + Текст», чтобы открыть код Arduino, сгенерированный блоками кода. Следуйте дальше, изучая код более подробно.

int baselineTemp = 0;
int celsius = 0;
int fahrenheit = 0;

Перед setup() мы создаем переменные для хранения целевой базовой температуры, а также значения датчика. Они называются int, потому что они являются целыми числами или целым числом.

void setup()
{
  pinMode(A0, INPUT);
  Serial.begin(9600);

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
}

Внутри setup контакты сконфигурированы с помощью функции pinMode(). Pin A0 сконфигурирован как вход, поэтому мы можем «слушать» электрическое состояние датчика температуры. Штыри 2, 3 и 4 сконфигурированы как выходы для управления светодиодами.

void loop()
{
  // set threshold temperature to activate LEDs
  baselineTemp = 40;
  // measure temperature in Celsius
  celsius = map(((analogRead(A0) - 20) * 3.04), 0, 1023, -40, 125);

Все, что после набора косых черт // является комментарием, просто для нас, людей, читающих и не используется программой, когда Arduino запускает ее. В основном цикле baselineTemp устанавливается на целевую температуру в 40 градусов C°.

// convert to Fahrenheit
  fahrenheit = ((celsius * 9) / 5 + 32);
  Serial.print(celsius);
  Serial.print(" C, ");
  Serial.print(fahrenheit);
  Serial.println(" F");

Формула для преобразования между градусами Цельсия и Фаренгейта такая:

F = (C * 9) / 5 + 32

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

if (celsius < baselineTemp) {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
  }
  if (celsius >= baselineTemp && celsius < baselineTemp + 10) {
    digitalWrite(2, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
  }
  if (celsius >= baselineTemp + 10 && celsius < baselineTemp + 20) {
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
  }
  if (celsius >= baselineTemp + 20 && celsius < baselineTemp + 30) {
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
  }
  if (celsius >= baselineTemp + 30) {
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
  }
  delay(1000); // Wait for 1000 millisecond(s)
}

Шесть операторов if для разных сегментов определенного диапазона температур между 40 и 46 градусами Цельсия, включают больше светодиодов когда теплее температура.

Если вы хотите увидеть более очевидное изменение яркости гистограммы, вы можете изменить базовую температурную переменную и / или диапазон, изменив аргументы в операторах if(). Это называется калибровкой.

Шаг 6. Используем проект

Если вы создали физическую версию этой схемы, вы можете протестировать ее с помощью последовательного монитора программного обеспечения Arduino IDE (кнопка увеличительного стекла в правом верхнем углу окна эскиза), активируя датчик пальцами. Проект может не сработать если температура в комнате действительно холодная или действительно теплая, или если ваши пальцы холодные!

Если вы используете физическую плату, оцените температуру в помещении с помощью последовательного монитора и установите для нее значение baselineTemp.

Отрегулируйте разницу температурных порогов на меньший диапазон (2, 4, 6, вместо 10, 20, 30).

Загрузите свой код еще раз и попробуйте подержать сенсор пальцами. По мере повышения температуры вы должны видеть, что светодиоды включаются один за другим.

Шаг 7. Что дальше?

Вы использовали analogRead() и последовательный монитор для отслеживания изменений внутри вашего Arduino и создания простого дисплея температуры со светодиодами.

Вы сможете использовать эту технику с другими типами датчиков в будущих проектах! Один из способов расширить этот проект - создать способ для двух человек сравнить температуру пальцев, но в таком случае вам нужны будут два датчика.

30 августа 2018 в 15:34 | Обновлено 7 декабря 2019 в 00:12 (редакция)
Опубликовано:
Уроки, , ,

2 комментария

  1. Александр
    7 ноября 2020 в 14:28

    Здравствуйте, объясните пожалуйста строчку celsius = map(((analogRead(A0) — 20) * 3.04), 0, 1023, -40, 125); — откуда мы взяли число 3.04? Почему вычитаем из данных на аналоговом входе 20? Буду вам очень благодарен за ответ.

    Ответить
  2. Максим
    31 мая 2023 в 09:19

    Что делать если есть ошибки в строках 25,39,44,49

    Ответить

Добавить комментарий

Ваш E-mail не будет никому виден. Обязательные поля отмечены *