Передача даних температури на компютер "Метеостанція"

Застосування для вимірюванння температури, схеми інкубаторів, метеомстанцій, визначення та відображення вологості, в тому числі вологості грунту та наявності опадів. Термопари і термоелементи. Модулі точного часу та їх використання
Відповісти
Аватар користувача
Arduino
Site Admin
Повідомлень: 98
З нами з: 16 травня 2017 18:18

Передача даних температури на компютер "Метеостанція"

Повідомлення Arduino » 25 травня 2017 20:07

В цьому експерименті ми передаємо дані про вимірювання температури на комп'ютер (наприклад, для подальшої обробки).
Основи виводу даних в порт та формат відображення. Використання бібліотеки обміну даних Serial
l16-meteostancija1.jpg
#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 \ t Temperature" ) ;
}

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, який призначений для роботи з послідовним портом (UART) Arduino, і його методами (функціями, створеними для роботи з даним об'єктом) begin(), print()і println(), які викликаються після крапки, що йде за ім'ям об'єкта:
щоб обмінюватися даними, потрібно почати з'єднання, тому Serial.begin(baudrate) викликається в setup()
Serial.print(data) відправляє вміст data. Якщо ми хочемо відправити текст, можна просто укласти його в пару подвійних лапок: "". Кирилиця, швидше за все, буде відображатися некоректно.
Serial.println(data) робить те ж саме, тільки додає в кінці невидимий символ нового рядка.
В print() і println() можна використовувати другий необов'язковий параметр: вибір системи числення, в якій виводити число (це може бути DEC, BIN, HEX, OCTдля десяткового, двійковій, шістнадцятковій і вісімковій систем числення відповідно) або кількість знаків після коми для дрібних чисел.
наприклад,
Serial.println(18,BIN);
Serial.print(3.14159,3);
в моніторі порту дасть результат
10010
3.142
Монітор порту, що входить в Arduino IDE, відкривається через меню Сервіс або сполучення клавіш Ctrl + Shift + M. Слідкуйте за тим, щоб в моніторі і в скетчі була вказана однакова швидкість обміну даними, baudrate. Швидкості 9600 біт в секунду зазвичай достатньо. Інші стандартні значення можете подивитися в випадаючому меню праворуч внизу вікна монітора порту.
Вам не вдасться використовувати цифрові порти 0 і 1 одночасно з передачею даних по послідовному порту, тому що по них також йде передача даних, як і через USB-порт плати.
При запуску монітора порту скетч в мікроконтролері перезавантажується і починає працювати з початку. Це зручно, якщо вам не можна упустити якісь дані, які починаю передаватися відразу ж. Але в інших ситуаціях це може заважати, пам'ятайте про цей нюанс!
Якщо ви хочете читати якісь дані в реальному часі, не забувайте робити delay()хоча б на 100 мілісекунд, інакше біжать числа в моніторі буде неможливо розібрати. Ви можете відправляти дані і без затримки, а потім, наприклад, скопіювати їх для обробки в сторонньому додатку.
Послідовність \t виводиться як символ табуляції (8 пробілів з вирівнюванням). Також ви можете використовувати, наприклад, послідовність \n для перекладу рядка. Якщо ви хочете використовувати зворотний слеш, його потрібно екранувати другим таким же: \\.

Відповісти

Повернутись до “Температура та вологість, час і відлік”