вступ
У цій статті ми обговоримо, як створити проект реєстрації даних, який дає команду VEX Robot збирати дані за допомогою VEX Brain і зберігати їх у файлі CSV на SD-карті для аналізу даних.
Реєстрація даних — це потужний інструмент, який ми можемо використовувати для допомоги в наукових дослідженнях, проведення власних експериментів і вирішення конкретних проблем. Існують різноманітні веселі та захоплюючі завдання, які ми можемо керувати роботом VEX, щоб виконати за допомогою реєстрації даних. Нижче наведено кілька прикладів:
- Збір даних за допомогою датчика відстані для розрахунку швидкості робота
- Водіння робота по класній кімнаті та збір даних за допомогою оптичного датчика для спостереження за змінами освітленості в різних місцях.
- Візьміть робота в пригоду та запишіть дані GPS-координат для створення карти.
Навички кодування, необхідні для розробки проекту реєстрації даних
- Використовуйте різні команди для збору даних за допомогою VEX Brain/Sensors і додавання їх до структури даних.
- Запишіть дані у файл із значеннями, розділеними комами (CSV) на SD-карті.
Обладнання, необхідне для реєстрації даних:
- A VEX Brain (IQ, V5, EXP)
- Картка SD
- Датчик або кілька датчиків (додатково, відповідно до необхідних даних)
Отримання даних від датчика
Ми можемо запрограмувати робота VEX (IQ, V5, EXP) для отримання даних від таких датчиків:
- Інерційний датчик
- Датчик відстані
- Оптичний датчик
- Датчик зору
- Датчик обертання (V5, EXP)
- Датчик GPS (V5)
Примітка: VEX IQ (2-го покоління) Brain і VEX EXP Brain мають вбудований інерційний датчик. Ми можемо збирати дані інерційного датчика за допомогою цих VEX Brians.
У цій статті ми розробимо проект реєстрації даних, який збирає дані прискорення за допомогою VEX IQ Brain (2nd) і зберігає їх на SD-карті.
По-перше, нам потрібно написати коротку програму для отримання показань від таймера та інерційного датчика, вбудованого в VEX IQ Brain (2-й).
- На початку цієї програми нам потрібно буде імпортувати модулі Python для керування VEX IQ Brain (2nd) і отримати з нього дані. Отже, почніть із додавання цих інструкцій до проекту.
-
# Бібліотека імпортує
з vex import *
# Brain має бути визначено за замовчуванням
brain = Brain()
brain_inertial = Inertial() - Далі додайте код, щоб оголосити змінну
numOfDataEntriesдля зберігання кількості записів даних для запису, оголосите зміннуpolling_delay_msecдля збереження значення інтервалу часу для читання даних і створіть порожню рядкову зміннуdata_bufferдля зберігання дані, зчитані з датчика. -
numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = "" - Оскільки ми використовуватимемо поточне значення таймера для додавання позначки часу до даних, нам потрібно скинути значення таймера до 0 секунд, перш ніж розпочати збір даних.
-
# Додати код ініціалізації таймера
brain.timer.clear() - Перш ніж використовувати інструкцію, яка отримує дані з VEX IQ Brain (2nd) і записує дані в буфер, нам потрібно спочатку це зрозуміти.
Наступна інструкція додає поточне значення таймера до змінноїdata_bufferу певному форматі.Давайте розберемо рядок формату
“%1.3f”:- «%»: представляє специфікатор перетворення.
- «1»: вказує на мінімальну кількість цифр у рядку
- “.3”: визначає кількість знаків після коми, які потрібно включити у відформатований номер.
- «f»: вказує на те, що значення, яке потрібно відформатувати, є числом з плаваючою комою.
Таким чином, ми можемо використовувати рядок формату «%1.3f» для форматування числа з плаваючою комою з мінімальною шириною 1 цифри та точністю 3 знаки після коми.
- Тепер ми можемо прочитати таймер і значення прискорення інерційного датчика, вбудованого у VEX IQ Brain (2-й), а потім додати дані до змінної
data_bufferу вказаному форматі. -
# Команди для запису даних у буфер
data_buffer += "%1.3f" % brain.timer.value() + "\n"
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ", "
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ", "
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
Примітка: “\n” – символ нового рядка. Це вказує на те, що тут закінчується рядок і починається новий рядок.
- Потім, щоб записати певну кількість записів даних у змінну
data_buffer, ми можемо використовувати циклfor, щоб багаторазово виконувати інструкції, які отримують дані та додають дані до змінноїdata_bufferпротягом кількох ітерацій. Наша стратегія полягає у використанні значення змінноїnumOfDataEntriesдля визначення кількості ітерацій. -
# Генерація даних
для i в діапазоні(0, numOfDataEntries):
# Команди для запису даних у буфер
data_buffer += "%1.3f" % brain.timer.value() + "\n"
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
- Поки що наша програма записує дані настільки швидко, наскільки це можливо. Однак ми хочемо записувати дані через певні проміжки часу. Таким чином, ми можемо використовувати функцію
wait()у цикліfor, щоб призупинити програму, щоб додати певний проміжок часу між двома читаннями. Використовуємо значення змінноїpolling_delay_msecдля визначення значення інтервалу часу. -
# Генерація даних
для i в діапазоні(0, numOfDataEntries):
# Команди для запису даних у буфер
data_buffer += "%1.3f" % brain.timer.value() + "\n"
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
wait(polling_delay_msec, MSEC)
Щиро вітаю! Ми завершили програму для отримання показань (даних про прискорення) від інерційного датчика, вбудованого в VEX Brain. Далі ми розглянемо, як записати дані у файл CSV на SD-карті.
# Бібліотека імпортує
з vex import *
# Brain має бути визначено за замовчуванням
brain = Brain()
brain_inertial = Inertial()
numOfDataEntries = 100
polling_delay_msec = 50
data_buffer = ""
# Додати код ініціалізації таймера
brain.timer.clear()
# Генерація даних
for i in range(0, numOfDataEntries):
# Команди для запису даних у буфер
data_buffer += "%1.3f" % brain.timer.value() + "\n"
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
wait(затримка_опитування_мсек, МСЕК)
Приєднання SD-карти до VEX Brain
Перш ніж записувати дані у файл на SD-карті, спочатку вставте SD-карту в слот для SD-карти VEX Brain.
Примітка: Відформатуйте SD-карту у FAT32 для запису даних. Ми рекомендуємо використовувати SD-карти розміром 32 ГБ або менше.
Щоб переконатися, що запис даних у файл на SD-карті можна виконати за відповідних умов, нам потрібно буде додати код, щоб перевірити, чи SD-карту правильно вставлено у VEX IQ Brain (2-й).
- Використовуйте функцію
brain.sdcard.is_inserted(), щоб перевірити, чи вставлено SD-карту. Якщо SD-карта не вставлена, відобразіть відповідне повідомлення на екрані VEX IQ Brain і утримуйте програму. -
# Призупинити програму, якщо SD-карта не вставлена
Примітка: функція ()
якщо ні brain.sdcard.is_inserted():
brain.screen.set_cursor(1,1)
brain.screen.print("SD-карта відсутня")
while(True):
wait(5, MSEC)повертає True якщо SD-карту вставлено в Brain.
Запис даних у файл CSV на SD-карті
Наразі наша програма може збирати дані за допомогою VEX IQ Brain (2nd). Щоб завершити проект реєстрації даних, нам потрібно записати дані у файл із значеннями, розділеними комами (CSV) на SD-карті для подальшої перевірки та аналізу.
- Записуючи різні типи даних у файл CSV, ми хочемо знати, який тип даних містить кожен стовпець. Для цього ми можемо додати текст заголовка CSV до змінної
data_bufferперед записом даних.
Таким чином, додайте код для оголошення змінноїcsvHeaderTextдля зберігання тексту заголовка CSV, щоб указати назви стовпців для файлу CSV, і оголосите зміннуsd_file_nameдля зберігання назви файлу CSV для запису в Флеш-картка. -
csvHeaderText = "час, x, y, z"
sd_file_name = "myDataPY.csv"
Примітка: Переконайтеся, що заголовки розташовані в тому самому порядку, що й дані, що зберігаються в змінній data_buffer.
- Далі додайте текст заголовка CSV до рядка
data_bufferперед цикломforдля збору даних. -
# Створення заголовка CSV
data_buffer = csvHeaderText + "\n"
# Генерація даних CSV
for i in range(0, numOfDataEntries):
# Команди для запису даних у буфер
data_buffer += "%1.3f" % brain.timer.value() + "\n"
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
wait(polling_delay_msec, MSEC
- Перш ніж записувати дані у файл на SD-карті, давайте спочатку зрозуміємо, як використовувати функцію
brain.sdcard.savefile().
Ця інструкція записує дані, що зберігаються в зміннійdata_buffer, у файл CSV з іменем на SD-карті.
Давайте розберемо:-
brain.sdcard.savefile(): функція зберігає байтовий масив у файлі з назвою на SD-карті. Функція повертає кількість байтів, записаних у файл.
-
sd_file_name: перший параметр функції. Вказує назву файлу для запису. У цьому проекті ім'я файлу зберігається в змінній
sd_file_name. -
bytearray(datat_buffer,'utf-8'): другий параметр функції. Представляє масив байтів, який потрібно записати у файл.
-
- bytearray(): метод створює змінний bytearray. У цій інструкції ми використовуємо його для перетворення рядка в байтовий масив, вказавши кодування.
- data_buffer: перший параметр методу. Вказує джерело, яке потрібно перетворити на байтовий масив. У цьому проекті джерелом є дані, що зберігаються в змінній
data_buffer. - 'utf-8': другий параметр методу. Вказує вказане кодування, яке використовується для кодування рядка. У цій інструкції використовується кодування "utf-8".
-
-
- Після циклу
forдля збору даних використовуйте функціюbrain.sdcard.savefile(), щоб записати дані, що зберігаються в зміннійdata_buffer, у файл CSV на SD-карті. Крім того, додайте код для перевірки значення, що повертається функцієюbrain.sdcard.savefile(), щоб переконатися, що дані були успішно записані у файл, та відобразити відповідне повідомлення на екрані VEX IQ Brain для отримання зворотного зв'язку в режимі реального часу. -
# Генерація даних CSV
Примітка: Функція brain.sdcard.savefile )
для i в діапазоні(0, numOfDataEntries):
# Команди для запису даних у буфер
data_buffer += "%1.3f" % brain.timer.value() + "\n"
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
wait(polling_delay_msec, MSEC)
# Запис даних на SD-карту
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
brain.screen.print("Помилка запису на SD-карту")
else:
brain.screen.print("Дані записані")повертає кількість байтівзаписаних у файл. У цьому проекті ми використовуємо його для запису зібраних даних у файл CSV, тому кількість байтів, записаних у файл, має бути більшою за нуль. Іншими словами, якщо функціяbrain.sdcard.savefile()повертає 0, ми можемо зробити висновок, що дані не були успішно записані у файл. В іншому випадку дані були записані у файл.
Щиро вітаю! Ми розробили проект реєстрації даних, який збирає дані прискорення за допомогою VEX IQ Brain (2nd) і зберігає їх у файлі CSV на SD-карті. Далі ми розглянемо, як відкрити файл CSV для аналізу даних.
# Бібліотека імпортує
з vex import *
# Brain має бути визначено за замовчуванням
brain = Brain()
brain_inertial = Inertial()
csvHeaderText = "time, x, y, z"
sd_file_name = "myDataPY.csv"
polling_delay_msec = 50
numOfDataEntries = 100
data_buffer = ""
# Призупинити програму, якщо SD-карта не вставлена
якщо ні brain.sdcard.is_inserted():
brain.screen.set_cursor(1,1)
brain.screen.print("SD-карта відсутня")
while(True):
wait(5, MSEC)
# Додати будь-який датчик & сюди код ініціалізації таймера
brain.timer.clear()
# Створити заголовок CSV
data_buffer = csvHeaderText + "\n"
# Генерація даних CSV
for i in range(0, numOfDataEntries):
# Команди для запису даних у буфер
data_buffer += "%1.3f" % brain.timer.value() + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(XAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(YAXIS) + ","
data_buffer += "%1.3f" % brain_inertial.acceleration(ZAXIS) + "\n"
wait(polling_delay_msec, MSEC)
# Запис даних на SD-карту
brain.screen.set_cursor(4,1)
if brain.sdcard.savefile(sd_file_name, bytearray(data_buffer,'utf-8')) == 0:
brain.screen.print("Помилка запису на SD")
else:
brain.screen.print("Дані записані")
Відкриття файлу CSV для аналізу даних
Після того, як дані будуть записані у файл CSV на SD-карті, ми можемо використовувати програму для роботи з електронними таблицями, щоб відкрити файл для читання та аналізу даних.
Примітка. Двома найпоширенішими програмами для роботи з електронними таблицями є Google Таблиці та Microsoft Excel. У цій статті ми будемо використовувати Google Таблиці (веб-інтерфейс), щоб відкрити файл CSV на SD-карті. Процес використання інших програм аналогічний.
- Вийміть SD-карту з гнізда SD-карти VEX IQ Brain. Якщо комп’ютер має вбудований слот для карт Micro SD, ми можемо вставити SD-карту безпосередньо в цей слот. В іншому випадку вставте SD-карту в адаптер SD-карти, а потім під’єднайте адаптер до комп’ютера.
- Увійдіть до нашого облікового запису Google і відкрийте Google Sheets. Створіть нову електронну таблицю.
- В електронній таблиці відкрийте меню «File» , виберіть «Import» -> «Upload» -> «Browse» , потім виберіть файл CSV на комп’ютері. Після завантаження файлу CSV натисніть кнопку «Імпорт даних». Після імпортування даних натисніть «Відкрити зараз» , щоб переглянути зібрані дані у файлі CSV.
- (Необов’язково) Один із простих способів аналізу даних – намалювати графік, а потім знайти тенденції в даних. В електронній таблиці відкрийте меню «Вставити» і виберіть «Діаграма» , щоб намалювати графік, використовуючи дані у файлі CSV. Наведений нижче графік є результатом даних про прискорення, зібраних за допомогою VEX IQ Brain (2-й).
Примітка: Ми можемо використовувати редактор діаграм , щоб вибрати інший тип діаграми або відредагувати діаграму відповідно до наших потреб.
До цього моменту ми завершили проект реєстрації даних, який збирає дані за допомогою VEX IQ Brain (2nd) і зберігає їх у файлі CSV на SD-карті. Крім того, ми навчилися читати файл CSV на SD-карті за допомогою Google Таблиць і навіть створювати графік для подальшого аналізу. Що далі? Давайте спробуємо спланувати більш захоплюючі експерименти з використанням робота VEX для реєстрації даних, щоб спостерігати, як мінливі фактори навколишнього середовища впливають на різні типи даних, і отримати глибше розуміння навколишнього світу.