Содержание

Эксперимент 16. Метеостанция

← Комнатный термометр | Оглавление | Пантограф →

В этом эксперименте мы передаем данные об измерениях температуры на компьютер (например, для последующей обработки).

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

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

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

Скетч

p160_meteostation.ino
#include <math.h>
int minute = 1;
 
// Параметр конкретного типа термистора (из datasheet):
#define TERMIST_B 4300 
 
#define VIN 5.0
 
void setup()
{
  // мы хотим передавать информацию на компьютер через USB, а
  // точнее через последовательный (англ. serial) порт.
  // Для этого необходимо начать (англ. begin) передачу, указав
  // скорость. 9600 бит в секунду — традиционная скорость.
  // Функция «begin» не является глобальной, она принадлежит
  // объекту с именем «Serial». Объекты — это «продвинутые»
  // переменные, которые обладают собственными функциями,
  // к которым обращаются через символ точки.
  Serial.begin(9600);
  // передаём заголовок нашей таблицы в текстовом виде, иначе
  // говоря печатаем строку (англ. print line). Символы «\t» —
  // это специальная последовательность, которая заменяется на
  // знак табуляции (англ. tab): 8-кратный выровненный пробел
  Serial.println("Minute\tTemperature");
}
 
void loop()
{
  // вычисляем температуру в °С с помощью магической формулы.
  // Используем при этом не целые числа, а вещественные. Их ещё
  // называют числами с плавающей (англ. float) точкой. В
  // выражениях с вещественными числами обязательно нужно явно
  // указывать дробную часть у всех констант. Иначе дробная
  // часть результата будет отброшена
 
   float voltage = analogRead(A0) * VIN / 1024.0;
   float r1 = voltage / (VIN - voltage);
 
 
   float temperature = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;
  // печатаем текущую минуту и температуру, разделяя их табом.
  // println переводит курсор на новую строку, а print — нет
  Serial.print(minute);
  Serial.print("\t");
  Serial.println(temperature);
 
  delay(60000); // засыпаем на минуту
  ++minute;     // увеличиваем значение минуты на 1
 
  // откройте окно Serial Monitor в среде Arduino, оставьте на
  // сутки, скопируйте данные в Excel, чтобы построить графики
}

Пояснения к коду

Например,

Serial.println(18,BIN);
Serial.print(3.14159,3);

в мониторе порта даст результат

10010
3.142

Вопросы для проверки себя

  1. Какие действия нужно предпринять, чтобы читать на компьютере данные с Arduino?
  2. О каких ограничениях не следует забывать при работе с последовательным портом?
  3. Как избежать ошибки в передаче данных, содержащих обратный слэш (\)?

Задания для самостоятельного решения

  1. Перед таблицей данных о температуре добавьте заголовок (например, "Meteostation").
  2. Добавьте столбец, содержащий количество секунд, прошедших с момента запуска микроконтроллера. Можно уменьшить интервал передачи данных.

← Комнатный термометр | Оглавление | Пантограф →