Arduone kit
Урок №7 Датчик температуры
Датчик температуры - правильнее будет назвать датчиком для измерения температуры окружающей среды.
Датчик температуры - правильнее будет назвать датчиком для измерения температуры окружающей среды. Данный датчик имеет три контакта - положительный, сигнал и земля. Он вырабатывает напряжение пропорционально температуре в градусах Цельсия (коэфициент преобразования ~10 мВ/°C). В этом опыте, вы узнаете, как использовать датчик температуры с платой Arduino а также как использовать окно отладки ArduinoIDE для отображения температуры
Схема подключения
Скетч
// Мы будем использовать аналоговый порт 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.
}

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

Что вы должны увидеть:
В результате проведенного опыта вы должны увидеть в окне "монитора порта", среды программирования Arduino IDE, надписи подобно тем, которые вы увидите на этом рисунке. Если этого не происходит - проверьте правильность собранной вами схемы
Возможные трудности:
Кажется ничего не происходит Выполняемая программа не имеет внешних признаков выполнения. Чтобы увидеть результат откройте "Монитор порта" среды Arduino IDE. На дисплее какая-то "тарабарщина".
Такое может происходить из за не соблюдения скорости передачи данных между Arduino и последовательным портом. Установите скорость в окне "Монитора порта" - "9600 baud". Значение температуры не меняется
Попробуйте прикоснуться к датчику пальцем, тем самым вы немного нагреете его.
Применение в жизни:
В системах кондиционирования воздуха - датчик передает показания на пульт управления