/*
* Набор для экспериментов ArduinoKit
* Код программы для опыта №7: sketch 07
*
* Датчик температуры
*
* Написано для сайта http://arduinokit.ru
*
*
* Помощь сообщества Arduino.
* Посетите сайт http://www.arduino.cc
*
*
* ДАТЧИК ТЕМПЕРАТУРЫ
*
* Использование «Монитора порта» (Serial Monitor), чтобы прочитать
* показания датчика температуры.
*
* TMP35/TMP36/TMP37 являются простыми в использовании датчиками температуры,
* которые меняют напряжение на своем выходе прямо пропорционально температуре
* окружающей среды. Вы можете использовать их во всех видах задач
* автоматизации, где необходимо использовать изменение параметров в
* зависимости от изменения температуры.
*
*
* Передача информации от Arduino компьютеру тема еще более интересная, чем
* предыдущие опыты, — мы начнем использовать последовательный порт Arduino.
* До сих пор мы ограничивались в использовании простых светодиодов для индикации
* каких либо событий. Теперь мы убедимся, что Arduino можете не только
* сигнализировать о чем либо, но и с легкостью общаться с компьютером, если это
* необходимо, а также выводить все виды текста и данных на любой терминал.
*
* Подключение оборудования:
*
* Будьте осторожны при установке датчика температуры, т.к. он очень
* похож на транзистор и есть шанс ошибиться! Вам нужен тот, на котором нет
* надписи 222, а есть треугольный логотип или надпись «TMP».
*
* Если повернуть датчик плоской стороной к себе, а выводами вниз, то
* назначение выводов будет таким (с лева на право): 5V, СИГНАЛ, и GND.
*
* Подключите вывод датчика «5V» к общей шине +5 вольт.
* Подключите вывод «Сигнал» к аналоговому порту 0 (Pin0).
* Подключите вывод «GND» к земляной шине (GND).
*
* Комментарий к программе переведен
* 11 октября 2014
* специально для http://arduinokit.ru
*
*/
// Мы будем использовать аналоговый порт 0 (Pin0) для снятия
// показаний с сигнального вывода датчика температуры.
const int temperaturePin = 0;
void setup()
{
// В этом скетче, мы будем используем последовательный порт Arduino,
// чтобы передать текст обратно на компьютер.
// Для того чтобы общение происходило корректно, необходимо соблюсти
// общий протокол обмена данными, а также скорость передачи информации.
// Для этого мы воспользуемся функцию Serial.begin(), она используется
// для инициализации порта и согласования скорости связи.
// Скорость передачи информации через последовательный порт измеряется в
// битах в секунду, кстати бит может быть либо логической «единицей»,
// либо логическим «нулем». «baud rate» — скорость передачи.
// Скорость 9600 является очень широко используемой при передачи данных,
// хотя и очень медленной, при такой скорости передается примерно 10
// символов в секунду.
Serial.begin(9600);
}
void loop()
{
// До сих пор мы использовали для наших скетчей только целые числа («INT»),
// «int» в переводе на русский — целые числа — 0, 1, 23 и т.д..
// В этй программе, мы будем использовать значения «float».
// «Float» в переводе с английского – плавающий, у таких чисел помимо целой,
// есть еще дробная часть например, 1,42, 2523,43121 и т.д.
// Мы объявляем три переменных, все они будут «float», т.е. дробные, или как
// еще говорят с плавающей точкой. Мы можем объявить несколько переменных
// одного типа за раз, на одной строчке, через запятую с пробелом:
float voltage, degreesC, degreesF;
// Сначала мы измерим напряжение на аналоговом входе. Обычно для этого мы
// использовали функцию analogRead(), которая возвращает число от 0 до 1023.
// Здесь же мы написали специальную функцию, о ней чуть дальше, под
// названием getVoltage(), которая возвращает напряжение (от 0 до 5 вольт),
// присутствующего на аналоговом входе.
voltage = getVoltage(temperaturePin);
// Теперь мы преобразовываем напряжения в градусы Цельсия.
// В этой формуле используются данные полученные с датчика температуры.
// Следующая формула работает для датчика TMP36:
degreesC = (voltage — 0.5) * 100.0;
// Если у вас датчик TMP35 формулу нужно немного изменить,
// соответственно закомментируйте функцию выше и раскомментируйте
// следующую, в ней ничего не надо вычитать, так как у TMP35
// выходное напряжение 0,25 милли вольт, а не 0,75 как у TMP36:
// degreesC = voltage * 100.0;
// Хотя нам это и не очень нужно, но давайте преобразуем градусы Цельсия (C)
// в градусы Фаренгейта (F) (система используемая в США).
// Это классическая формула преобразования C в F:
degreesF = degreesC * (9.0/5.0) + 32.0;
// Теперь мы будем использовать последовательный порт для вывода
// данных на монитор!
// Чтобы открыть окно монитора порта, нужно загрузить код, а затем
// нажать кнопку «увеличительное стекло» на правом краю панели
// инструментов Arduino IDE, откроется дополнительное окно монитора COM порта.
// (ПРИМЕЧАНИЕ: не забудьте, о чем мы говорили ранее, что скорость передачи
// должна быть одинаковой для обеих сторон (передающей стороны и принимающей.
// Убедитесь, что контроль скорости передачи в нижней части окна установлен
// в 9600. Если это не так, исправьте его на 9600.)
// Также обратите внимание, что каждый раз, когда вы загружаете
// новый скетч в Arduino, окно монитора порта закрывается. Это
// происходит потому что последовательный порт используется также
// и для загрузки кода! Когда загрузка будет завершена, вы можете
// повторно открыть окно монитора COM порта.
// Для передачи данных от Arduino в COM порт, мы используем функцию
// Serial.print(). Вы можете добавить свой текст напечатав его в кавычках.
// С русскими символами монитор не дружит! Сразу за вашим текстом будет
// впечатано значение переменной, см. ниже, оно без кавычек, их 3 —
// voltage, degreesC, degreesF:
Serial.print(«voltage: «);
Serial.print(voltage);
Serial.print(» deg C: «);
Serial.print(degreesC);
Serial.print(» deg F: «);
Serial.println(degreesF);
// Вывод информации будет иметь вид подобно следующему:
// «voltage: 0.73 deg C: 22.75 deg F: 72.96»
// Обратите внимание, что все переменные выше заявлены как
// «Serial.print», а для последнего «Serial.println».
// Все слова и значения переменных будут выведены на экран в одной строке,
// а вот после последней переменной будет произведен «перевод каретки»
// на новую строку, за это как раз и отвечает «println».
delay(1000); // повторение через одну секунду (можете поменять!)
}
float getVoltage(int pin)
{
// Эта функция имеет один входной параметр, получаемый с аналогового
// порта. Вы могли заметить, что эта функция не имеет ключевого «void»,
// хотя «void» должен использоваться при объявлении функций, но если
// только функция не возвращает никакого значение, у нас как раз случай,
// наоборот, потому что возвращается значение с плавающей точкой,
// которое является настоящим напряжением на этом выводе (от 0 до 5 В).
// Вы можете написать свои собственные функции, которые принимают
// что-то в параметрах, и после возвращают какие-либо значения:
// Чтобы что-то принять в параметрах, укажите их тип и имя в скобках,
// после имени функции (смотри выше). Вы можете указать несколько
// параметров, разделенных запятыми.
// Чтобы возвратить значение, укажите тип перед именем функции,
// помните пример «float», и используйте функцию return() для возврата
// значение (см ниже).
// Если у вас нет необходимости, что-то получить, просто используйте
// пустые скобки «()» после имени функции.
// Если у вас нет необходимости возвращать какое либо значение,
// просто укажите «void» перед именем функции.
// Далее идет оператор возврата return() для нашей функции. Мы
// делаем все вычисления которые должны сделать:
return (analogRead(pin) * 0.004882814);
// Это уравнение преобразует значение напряжения от 0,0 до 5,0 В.,
// полученное с помощью функции analogRead() с аналогового порта,
// в значения от 0 до 1023.
}
// Как еще можно попробовать использовать этот код?
// Например включить светодиод, если температура становится выше
// или ниже заданного значения.
// Прочитать показания с потенциометра — получится термостат!
// Ну и так далее, все в ваших руках!
Оставить комментарий