Один раз мы уже затронули тему эмуляторов Ардуино в статье "Мигаем светодиодом с помощью Ардуино эмулятора 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");
Формула для преобразования между градусами Цельсия и Фаренгейта такая:
Вывод на последовательный монитор помогает наблюдать за изменением температуры более подробно, чем состояния светодиодов.
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 и создания простого дисплея температуры со светодиодами.
Вы сможете использовать эту технику с другими типами датчиков в будущих проектах! Один из способов расширить этот проект - создать способ для двух человек сравнить температуру пальцев, но в таком случае вам нужны будут два датчика.
7 ноября 2020 в 14:28
Здравствуйте, объясните пожалуйста строчку celsius = map(((analogRead(A0) — 20) * 3.04), 0, 1023, -40, 125); — откуда мы взяли число 3.04? Почему вычитаем из данных на аналоговом входе 20? Буду вам очень благодарен за ответ.
31 мая 2023 в 09:19
Что делать если есть ошибки в строках 25,39,44,49