Програмирање на дневникот за температура со Arduino Uno - Дел 2
На последниот начин на Arduino, изградивме дисплеј за температура и влажност. Ова сега се проширува за да вклучува складирање на податоците на SD-картичка; се запишува и соодветното време во секое мерење. Новите додатоци се штит за СД картичка и часовник во реално време. Екранот може да остане на Grove-Shield. Ако сакате да управувате со снимачот на податоци без приказ, можете едноставно да го исклучите од струја.

Погоден за: Напредно
Потребно време: околу 1,5 часа
Буџет: околу 30 евра
Што ви треба: 1x Arduino - Grove часовник во реално време - RTC, 1x Arduino Shield - SD картичка V4, 1x батерија за Grove часовник во реално време, 1x SD картичка
Може да се прошири со:-
Што се бара: Интернет конекција, компјутер со прелистувач, напојување за Arduino
SD штитот
Опис и инсталација
Логерот на податоци ги зачувува своите податоци на стандардна SD, SDHC или MicroSD картичка (тогаш со адаптер). Постои штит за ова, кој е вклучен помеѓу Ардуино и основниот штит - основниот штит останува нагоре заради приклучокот.
Библиотеките потребни за SD штитот се веќе вклучени во Arduino Studio, така што не мора да се инсталираат одделно. Документацијата може да се најде во референцата Ардуино:
Напиши податоци - здраво свет
Ние ги запишуваме првите податоци на картичката со следнава програма:
Првите две променливи се дефинирани: SELECTED_CHIP одредува кој хардвер се користи за SD-Shield. Вредноста може да се добие од производителот на штитот SD. Променливиот број се користи само за броење на процесите на континуирано пишување со цел да се напише бројот на картичката.
При поставување () прво се воспоставува сериска врска за дебагирање, а потоа и врска со SD-картичката. Методот SD.begin () враќа дали врската може успешно да се воспостави.
Линијата е составена во јамка () и потоа се запишува на SD-картичката со writeToSD (). За ова ја користиме класата String, која овозможува флексибилна работа со жици. Операторот + поврзува две жици, така што броењето на променливата прво се претвора во низа со Стринг (брои). Вредноста на броењето се зголемува за една и конечно се чека една секунда.
Пишувањето се случува во writeToSD (). Датотеката прво се отвора или креира таму со SD.open () ако сеуште не постои (важно: името на датотеката можеби не е подолго од 8 карактери). FILE_WRITE означува дека датотеката треба да се отвори на пишлив начин.
Ако отворањето беше успешно, датотеката содржи објект од класата File со кој ја пишуваме линијата составена во јамка (). Потоа повторно ја затвораме датотеката. Ова осигурува дека датотеката нема да се оштети ако картичката е отстранета помеѓу запишувањата или ако струјата не работи. За дебагирање, ние исто така ја издаваме вредноста на линијата на серискиот интерфејс.
Ако отворањето не било успешно (на пример затоа што недостасува СД-картичката), тогаш датотеката е празна и излегува порака за грешка на серискиот интерфејс.
Часовник во реално време
Опис и инсталација
За разлика од компјутер, Arduino нема вграден часовник бидејќи не е потребен за многу апликации. Затоа, ние го користиме модулот Grove RTC за најавувачот на податоци, кој содржи чип на часовник DS1307.
Часовникот во реално време бара дополнителен извор на напон во форма на 3V копче (CR1225) така што поставеното време да се задржи дури и ако самиот Arduino нема напојување. Спротивно на тоа, ова значи дека часовникот во реално време не работи правилно без батерија - така што не можете без неа, дури и ако Arduino остане трајно поврзан на извор на енергија. Комуникацијата се одвива преку системот за шини I²C, може да се користи каква било врска I²C.
Библиотека мора да биде инсталирана за часовник во реално време, како и за приказот:
Преземете ги библиотеките, а потоа инсталирајте ги преку менито „Скица“ → „Вклучи библиотека“ → „Додај .ZIP библиотеки…“.
За сите библиотеки има примерни програми под „Датотека“ → „Примери“.
Поставете и прочитајте го времето
За да го поставиме времето, ќе ја користиме нашата сопствена скица наместо методот за поставување () во финалната програма. Инаку, времето ќе се ресетираше секогаш кога ќе се активира Arduino:
При поставување () прво ја отвораме врската со сериската порта со цел да го испратиме времето на компјутер за проверка. Поврзувањето со часовникот потоа се отвора со clock.begin (), се подготвуваат датумот, времето и денот во неделата и конечно се испраќаат до часовникот во реално време со clock.setTime () (заменете ги вредностите со тековното време претходно;-)).
Во јамка (), времето е прво излезно, а потоа следува период на чекање од една секунда. Во Arduino Studio излезот се појавува под „Алатки“ → „Сериски монитор“.
Важно: Испраќањето на програмата до Arduino трае неколку секунди, па затоа е тешко точно да го поставите времето. Ова не е проблем за оваа апликација - ако се мери измерена вредност на секои неколку минути со цел да се снима текот на измерените вредности во текот на денот, тогаш отстапувањето од неколку секунди не прави никаква разлика.
Дефинитивна програма за логирање на податоци
Откако еднаш ќе ги тестираме сите делови, можеме да ја прошириме програмата од последното упатство:
Она што е ново со оваа програма е дека постојат два процеса со различна брзина на часовникот. Екранот треба да се ажурира неколку пати во секунда за тековен дисплеј и непречено преминување на бојата. Сепак, секоја минута е доволна за да ги напишете измерените вредности на картичката. Едноставни паузи со задоцнување () затоа повеќе не се можни.
Решение: Функцијата милис () може да се користи за пребарување на милисекундите што поминаа од почетокот на Ардуино. Во lastDisplayUpdate и lastWrite, последниот пат кога е ажуриран екранот или кога е запишан на SD-картичката е зачуван. Секогаш кога се извршува временска јамка (), се прави споредба дали разликата помеѓу овие вредности и милис () е поголема од вредностите на DISPLAY_UPDATE_INTERVAL или WRITE_INTERVAL и само тогаш се извршуваат соодветните дејства. Променливите lastWrite и lastDisplayUpdate се иницијализираат со должината на соодветниот интервал, така што двете дејства се одвиваат веднаш кога ќе започне програмата.
Во јамка (), вредностите конечно се преземаат од сензорот и се проверуваат. Ако имало проблеми при собирање на вредностите, излегува грешка и извршувањето на јамката () завршува во овој момент и започнува повторно од почетокот (т.е. вредностите повторно се преземаат од сензорот).
Потоа проверува дали е време повторно да се ажурира екранот. Ова е случај ако разликата помеѓу тековното време и последното ажурирањеDisplayUplay е поголема од DISPLAY_UPDATE_INTERVAL. Потоа, бојата повторно се одредува и податоците се испраќаат на екранот. Заради читливост, сега постои методот updateDisplay (). Потоа lastDisplayUpdate е поставено на тековното време.
Истото се случува и за запишување на податоците на СД-картичката. Ако времето на последниот процес на запишување е подолго од WRITE_INTERVAL, тековното време се определува со часовникот во реално време, податоците се запишуваат на SD-картичката и lastWrite е поставено на тековното време.
Времето се определува во методот getTime (), кој го прашува времето од часовникот во реално време и создава низа со датумот и времето. Операторот + = ја додава вредноста на десната низа на левата.
евалуација на податоците
Податоците се запишуваат во датотека наречена datalog.csv и можат да бидат увезени во Excel, LibreOffice Calc или Google Spreadsheets за анализа.
Едноставно отстранете ја SD-картичката од Arduino и прочитајте ја на компјутер.