Выбрать главу

if ( !SD.begin(CS_PIN))

{

Serial.println(F("Card Failure"));

return;

}

- 299 -

Serial.println(F("Card Ready"));

// Запись заголовка

File dataFile = SD.open("log.csv", FILE_WRITE);

if (dataFile)

{

dataFile.println(F("\nNew Log Started!"));

dataFile.println(F("Date,Time,Raw,Active"));

dataFile.close();

// Запись в последовательный порт для отладки

Serial.println(F("\nNew Log Started!"));

Serial.println(F("Date,Tirne,Raw,Active"));

}

else

{

Serial.println(F("Couldn't open log file"));

}

}

void loop()

{

// Получить значение даты и времени и перевести в строковые значения

DateTirne datetirne = RTC.now();

year = String(datetirne.year(), DEC);

rnonth = String(datetime.rnonth(), DEC);

day = String(datetirne.day(), DEC);

hour = String(datetirne.hour(), DEC);

rninute = String(datetime.rninute(), DEC);

second = String(datetime.second(), DEC);

// Собрать строку текущей даты и времени

date = year + "/" + rnonth + "/" + day;

time = hour + ":" + rninute + "·" + second;

// Собрать данные движения

raw = analogRead(IR_PIN);

// При изменении значения более чем на 75 между показаниями

// фиксируем факт прохода через дверь.

if (abs(raw-raw_prev) > 75)

active

true;

else

active=false;

raw_prev=raw;

// Открыть лог-файл и записать в него.

if (active || update_tirne == 20)

File dataFile=SD.open("log.csv", FILE_WRITE);

if (dataFile)

{

dataFile.print(date);

- 300 -

dataFile.print(F(","));

dataFile.print(time);

dataFile.print(F(","));

dataFile.print(raw);

dataFile.print(F(","));

dataFile.println(active);

dataFile.close();

// Вывод в последовательный порт для отладки

Serial.print(date);

Serial.print(F(","));

Serial.print(time);

Serial.print(F(","));

Serial.print(raw);

Serial.print(F(","));

Serial.println(active);

}

else

{

Serial.println(F("Couldn't open log file"));

}

update_time = 0;

}

delay(50);

update_time++;

}

13.4.3. Анализ зарегистрированных данных

После загрузки программы на плату Arduino установите регистратор возле двери и дайте поработать некоторое время. Когда наберется достаточное количество данных, вставьте SD-карту в компьютер и откройте лог-файл CSV в программе просмотра электронных таблиц. Предполагая, что на карте записаны данные для одного дня, можно построить график активности движения от времени. Пока никто не проходит через дверь, значение остается равным нулю. Когда кто-нибудь входит или выходит из комнаты, значение подскакивает до единицы, и можно точно узнать, когда это случилось. Процедура построения графика зависит от выбранного графического приложения. Я создал онлайн-таблицу, которая будет рисовать график. Чтобы воспользоваться этим сервисом, вам необходимо иметь учетную запись Google.

Посетите веб-страницу http://www.exploringarduino.com/content/ch13 и перейдите по ссылке на таблицу для построения графика. Вам будет предложено создать новую таблицу в своем аккаунте Google Drive. В итоге вы получите график данных, приведенный на рис. 13.24.

- 301 -

Рис. 13.24. Данные регистратора входа, представленные в графическом виде

Резюме

В этой главе вы узнали следующее:

• Что данные удобно хранить в CSV-файлах, использующих строки и запятые в качестве разделителей.

• Как отформатировать SD-карту памяти в операционных системах Windows, Mac и Linux.

• Что есть множество плат расширения SD-карт для Arduino, каждая со своими особенностями.

• Как использовать Arduino библиотеку SD для записи и чтения из файла на SD-карте.

• Как с помощью RTC вставить временные метки в данные регистратора.

• Как преодолеть ограничения оперативной памяти за счет хранения строк во флэш-памяти.

• Как обнаружить движение по изменению аналогового значения, полученного с ИК-датчика расстояния.

• Как построить на компьютере график данных от регистратора, используя программу просмотра электронных таблиц.

Глава 14. Подключение Arduino к Интернету

Список деталей

Для повторения примеров главы вам понадобятся следующие детали:

• плата Arduino (рекомендуется Uno);

• USB-кабель для программирования платы Arduino;

• плата расширения Ethemet shield;

• фоторезистор;

• датчик температуры ТМР36;

• RGB-светодиод;

• 1 резистор номиналом 10 кОм;

• 1 резистор номиналом 150 Ом;

• 3 резистора номиналом 220 Ом;

• динамик или пьезозуммер;

• кабель Ethemet;

• доступ к проводному маршрутизатору;

• набор перемычек;

• макетная плата.

Электронные ресурсы к главе

На странице http://www.exploringarduino.com/content/ch14 можно загрузить программный код, видеоуроки и другие материалы для данной главы. Кроме того, листинги примеров можно скачать со страницы www.wiley.com/go/exploringarduino в разделе Downloads.

Что вы узнаете в этой главе

Вот она, последняя глава. Запустим плату Arduino в виртуальное пространство, подключив ее к Интернету. Доступ к Интернету - очень сложная тема, можно написать целые тома книг о лучшем способе подключения Arduino к Интернету.