精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Adafruit數據記錄儀防護板的說明

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-27 10:21 ? 次閱讀

概述

Adafruit數據記錄儀防護板的說明

這是一個方便的Arduino防護板:我們有很多人在尋找專用且設計良好的數據記錄防護板。我們努力設計出價格低廉但功能全面的設計。此防護罩可輕松為您的Arduino添加具有千兆字節存儲空間的“硬盤”!

此流行防護罩的最新版本具有流行原始防護罩的所有功能,并且與“ R3”兼容,因此您幾乎可以將其與任何Arduino或兼容產品一起使用。您可以在不到15分鐘的時間內啟動并運行它-將數據保存到任何FAT16或FAT32格式的SD卡上的文件中,以供任何繪圖,電子表格或分析程序讀取。本教程還將向您展示如何使用兩個免費軟件程序來繪制數據。隨附的RTC(實時時鐘)可用于以當前時間為所有數據添加時間戳,以便您確切地了解何時發生了什么!

數據記錄器是可靠,全面且通用的設計。它易于擴展或修改,并得到在線文檔和庫的很好支持

功能:

SD卡接口可用于FAT16或FAT32格式的卡。內置的3.3v電平轉換器電路使您可以超快地讀取或寫入數據,并防止損壞SD卡

即使在拔下Arduino的情況下,實時時鐘(RTC)仍可以保持時間。紐扣電池備份可以持續多年

包含的庫以及用于SD和RTC的示例代碼,這意味著您可以快速上手

用于焊接連接器,電路或傳感器的原型區域。

li》

兩個可配置指示燈LED

板載3.3v穩壓器既是可靠的參考電壓,又可可靠地運行需要大量功率才能運行的SD卡

使用“ R3布局”的I2CICSP/SPI端口,因此與各種Arduino和Arduino兼容產品兼容

在此新版本中,您可以將其與:

兼容Arduino UNO或ATmega328-4個模擬通道,分辨率為10位,如果不使用RTC,則為6個

Arduino Leonardo或ATmega32u4兼容-12個模擬通道,分辨率為10位分辨率

兼容Arduino Mega或ATmega2560-16個模擬輸入(10位)

兼容Arduino零或ATSAMD21-6個模擬輸入(12位)

兼容Arduino Due-12個模擬輸入(12位)

當然,您可以記錄任何您喜歡的東西,包括具有Arduino庫,串行數據,位時序等等的數字傳感器!

安裝接頭連接器

Adafruit Data Logger防護板經過測試,已組裝好所有組件和SD插槽,但是您仍然需要安裝接頭連接器,以便可以將其插入Arduino

,因為有兩個選項,所以我們不會預先組裝接頭!您可以使用普通的0.1英寸公頭(包括在屏蔽中)或Arduino Shield Stacking頭。這兩個選項還需要焊接一個2x3母頭。

帶公頭的組裝

大多數人都會對他與公頭的屏蔽罩組裝感到滿意。使用它們的好處是不要在項目的高度上添加任何東西,它們會建立良好的牢固連接。但是,您將無法在頂部堆疊另一個盾牌。權衡取舍!

翻轉并焊接另一側以及2x3接頭

將標頭切成一定長度:

將標頭條與在標頭邊緣上的孔對齊屏蔽并切下標題欄的4個部分以適合。

放置插頭:

將插頭部分(長針向下)插入Arduino/Metro的母頭中。另外,將2x3母頭插入USB另一側的相應插針中。

放置防護罩:

將防護罩與排針對齊,然后按下。

然后焊接!

焊接每個引腳以確保良好的電接觸。有關焊接的技巧,請參閱《 Adafruit優秀焊接指南》。

使用堆棧頭進行組裝:堆棧頭為您的數據記錄儀提供了更大的靈活性。您可以將其與其他防護罩(例如RGB/LCD顯示器防護罩)結合使用,以使緊湊型測井儀具有用戶界面。您還可以將其與一個或多個Proto-Shield堆疊在一起,以增加更多的原型空間來與傳感器接口

堆疊接頭安裝在板的頂部而不是底部,因此該過程與安裝簡單的公頭。

定位頭:

從屏蔽層頂部插入頁眉,然后將屏蔽層翻轉并將其放置在平坦的表面上。調整標題以使其垂直。

請確保從屏蔽層的頂部插入插頭,以便可以將其與底部。

將板子放在Metro上并焊接2x3接頭

然后焊接!

將每個引腳焊接成固體電氣連接。

提示:從每個插頭部分焊接一個引腳。如果其中任何一個彎曲,只需重新加熱一個焊點并用手將其拉直即可。一旦所有接頭都直了,繼續焊接其余的引腳。

翻轉并焊接另一面

放置2x3母頭Arduino/Metro上的標題

防護罩概述

數據記錄器防護罩有幾件事使其成為跟蹤數據的絕佳方法。這是盾牌的大致圖:

我們的最新版本為5V,3.3V和地面添加了電源軌:

div》 SD卡

大的SD卡夾可容納最大32G和最小32MB的SD/MMC存儲(任何格式的FAT16或FAT32)。如果您有MicroSD卡,則可以使用低成本的適配器SD卡比MicroSD更難丟失,并且有足夠的空間容納標準尺寸的存儲卡。

只需按一下即可插入,或拉出即可從該插槽中取出卡

SD活動LED 連接到時鐘引腳,當數據經過SPI時它將閃爍,這可以幫助您確定何時可以移除或插入SD卡或電源。

電平轉換器將所有信號從3.3V或5V DOW移動n至3.3V,因此您可以安全地將此屏蔽罩與 any Arduino一起使用,而不會損壞卡。便宜的屏蔽層使用電阻器進行電平轉換,但這在高速或在所有電壓電平下均無法正常工作!

實時時鐘

這是計時設備。它包括一個8針芯片,一個矩形的32KHz晶體和一個電池座

電池座必須包含一個電池,以便RTC能夠跟蹤從Arduino斷開電源時的時間!使用任何與CR1220兼容的紐扣電池

CR1220 12mm直徑-3V鋰幣電池 strong》

產品ID:380

這些是最高質量的產品。容量的電池,與iCufflinks,iNecklace,Datalogging和GPS Shields,GPS HAT等產品隨附的電池相同。每筆訂購一個電池。..

$ 0.95

入庫

添加到購物車

3.3V電源

板載3.3V LDO(低壓降)穩壓器可保持屏蔽的3V零件運行平穩。一些舊的Arduinos沒有完整的3.3V穩壓器,寫入SD卡可能會導致Arduino重新啟動。為了保持兼容性,我們只需將其保留在那里。右側還有一個綠色的PWR(電源)良好LED指示燈

用戶LED

我們有兩個用戶可配置的LED。將任何Arduino引腳上的電線連接到標記有 L1 或 L2 的焊盤,并拉高以打開 LED1 或 LED2

LED右側的重置按鈕將重置整個Arduino,方便您在要重新啟動電路板時使用

原型開發區域

大的中間部分充滿了0.1“網格原型孔,因此您可以自定義您的

頂部和底部兩行原型孔是電源導軌。

突破墊

上面在分支板區域附近還顯示了一些額外的分支。

在SD卡持有者的右側:

CD -這是SD卡上的卡檢測墊。將其接地后,將插入SD卡。它是漏極開路,使用上拉電阻(物理電阻或在軟件中啟用)

WP-這是SD卡上的寫保護板,您可以使用它來通過檢查此引腳來檢測卡上的寫保護選項卡。它是漏極開路,使用上拉電阻(物理電阻器或在軟件中啟用)

SQ -這是RTC的可選方波輸出。您必須發送命令將其打開,但這是選擇獲取精確方波的一種方法。我們主要將其用于測試。輸出是開漏輸出,因此具有上拉電阻(物理電阻或在軟件中啟用)

3V -這是穩壓器輸出的3V。它是高質量的3.3V參考電壓,您可能希望為傳感器供電。高達50mA可用

數字10號附近

CS -這是芯片選擇 SD卡的引腳。如果由于沖突而需要將跡線切割到引腳10,可以將該焊盤焊接到任何數字引腳上,并重新上載軟件

在數字3和#4附近 p》

L2 和 L1 -這些是可選的用戶LED。連接到任何數字引腳,將其拉高以打開相應的LED。這些LED已經串聯了470歐姆電阻。

接線和配置

從Datalogger屏蔽的B版本開始,我們不再使用數字引腳10、11、12、13用于SPI和A4,A5用于I2C。現在,我們使用2x3 ICSP標頭,這意味著您不需要特殊的自定義I2C或SPI庫即可與Mega,Leonardo或Zero(或其他任何將來的類型)的Arduino一起使用!

我具有哪個版本?

這是較舊的Datalogger屏蔽。特別要注意的是,原型區域完全充滿了0.1“間隔的孔

這是“與R3兼容”的數據記錄器。它具有較小的原型區域,并且在右側有一個2x3 SPI頭點

較舊的屏蔽插腳

在較舊的屏蔽上,插腳固定為固定 :

數字#13- SPI時鐘

數字#12- SPI MISO

數字#11- SPI MOSI

數字#10- SD卡芯片選擇(可以切割痕跡以重新分配)

SDA 已連接至 A4

SCL 已連接至 A5

RTC(DS13 07)I2C邏輯電平固定為5V

修訂版B屏蔽引腳排列

ICSP SCK- SPI時鐘

ICSP MISO- SPI MISO

ICSP MOSI- SPI MOSI

數字#10- SD卡芯片選擇(可以切割痕跡以重新分配)

SDA 不 連接到 A4

SCL not 連接到 A5

RTC(PCF8523)邏輯電平可以是3V或5V

在UNO上,請注意,數字#13與ICSP SCK相同,#12是ICSP MISO,#11是ICSP MOSI,SDA連接到A4,SCL連接到A5。但是,這僅適用于UNO!其他Arduino具有不同的連接。由于屏蔽不再假設它位于UNO上,因此它是最兼容的屏蔽。

在Rev B屏蔽的底部,您可以看到,如果您有一個較舊的Arduino,沒有ICSP 2x3接頭連接器,也沒有SDA/SCL引腳,則可以使焊接跳線短路。

如果您將屏蔽與3.3V邏輯Arduino配合使用,則可能需要更改 Vio 跳線。這就是I2C的10K上拉電阻。老實說,上拉非常弱,所以如果您忘記了,這沒什么大不了的。但是,如果可以的話,請在中心焊盤和5V之間切一條小線,然后焊接另一側,以便將Vio連接到3V

較舊的數據記錄器Shield Leonardo&Mega Library

僅當您有沒有SPI端口連接的較舊的Datalogger屏蔽。

僅當您使用帶有舊版Datalogger防護罩的Leonardo或Mega時才需要!

如果您的屏蔽罩如上所示,并且在右側具有2x3引腳頭,請跳過此頁面!

如果您的屏蔽罩沒有2x3引腳頭部分,并且您使用的是Mega或Leonardo(例如,不兼容UNO),那么您可以繼續閱讀!/p》

如果您使用的Leonardo或Mega帶有較舊的數據記錄屏蔽,則必須替換現有的SD卡庫以添加“任何引腳上的SD卡”支持。 如果您擁有Uno/Duemilanove/Diecimila,則不需要這樣做。如果您使用的是B版防護罩,那么也不需要這樣做!

首先,找到“核心庫”文件夾-如果您使用的是Windows或Linux,它將位于包含 Arduino 可執行文件,查找 libraries 文件夾。在內部,您會看到一個 SD 文件夾(其中將是 SD.cpp SD.h 等)

在庫文件夾中,新建一個名為 SDbackup 的文件夾。然后將 SD 文件夾拖到 SDbackup 中,這將“隱藏”舊的 SD 庫而不刪除它。 請注意,SDBackup必須位于庫文件夾的外部之外,以便有效地“隱藏” SD庫。

現在,我們將獲取新的SD庫,請訪問https://github。 com/adafruit/SD ,然后單擊 ZIP 下載按鈕,或單擊下面的按鈕

下載SD庫壓縮文件

解壓縮并重命名未壓縮的文件夾 SD 。檢查 SD 文件夾中是否包含 SD.cpp 和 SD.h

放置 SD 庫文件夾,即寫生簿庫文件夾。如果您是第一個庫,則可能需要創建庫子文件夾。有關如何安裝庫的更多詳細信息,請查看我們的超詳細教程,網址為http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use

使用Mega和Leonardo的SD庫因為Mega和Leonardo如果沒有相同的硬件SPI引腳分配,則需要指定將用于與卡進行SPI通信的引腳。對于數據記錄器屏蔽,它們將是引腳10、11、12和13。在草圖中找到調用SD.begin()的位置(如下所示):

下載:文件

復制代碼

// see if the card is present and can be initialized:

if (!SD.begin(chipSelect)) {

// see if the card is present and can be initialized:

if (!SD.begin(chipSelect)) {

并對其進行更改,以添加這些引腳號,如下所示:

下載:文件

復制代碼

// see if the card is present and can be initialized:

if (!SD.begin(10, 11, 12, 13)) {

// see if the card is present and can be initialized:

if (!SD.begin(10, 11, 12, 13)) {

cardinfo cardinfo草圖使用較低級別的庫直接與卡對話,因此調用card.init()而不是SD.begin()。

下載:file

復制代碼

// we‘ll use the initialization code from the utility libraries

// since we’re just testing if the card is working!

while (!card.init(SPI_HALF_SPEED, chipSelect)) {

// we‘ll use the initialization code from the utility libraries

// since we’re just testing if the card is working!

while (!card.init(SPI_HALF_SPEED, chipSelect)) {

在調用card.init()時,必須更改調用以指定SPI引腳,如下所示:

下載:文件

復制代碼

// we‘ll use the initialization code from the utility libraries

// since we’re just testing if the card is working!

while (!card.init(SPI_HALF_SPEED, 10, 11, 12, 13)) {

// we‘ll use the initialization code from the utility libraries

// since we’re just testing if the card is working!

while (!card.init(SPI_HALF_SPEED, 10, 11, 12, 13)) {

使用實時時鐘

是實時時鐘嗎?

記錄數據時,通常非常有用的是帶有時間戳記!這樣一來,您可以每隔一分鐘(通過檢查時鐘)或記錄一天中的什么時間記錄數據。

Arduino確實有一個稱為 millis()的內置計時器。 ,并且該芯片還內置了計時器,可以跟蹤更長的時間段,例如分鐘或幾天。那么,為什么要有單獨的RTC芯片呢?好吧,最大的原因是 millis()只跟蹤時間,因為Arduino上次通電是- ,這意味著何時通電打開后,毫秒計時器將設置為0。Arduino不知道它的“星期二”或“ 3月8日”,只能告訴我“自上次打開以來已經過了14,000毫秒”。

好的,如果您想在Arduino上設置時間怎么辦?您必須編程日期和時間,從那時起您就可以算上它了。但是,如果失去電源,則必須重新設置時間。就像非常便宜的鬧鐘一樣:每次斷電時,它們都會閃爍 12:00

盡管某些項目可以使用這種基本的計時功能,但數據記錄器需要具有一致的計時功能,當Arduino電池耗盡或重新編程時,計時不會重置。因此,我們包括一個單獨的RTC! RTC芯片是一種專門的芯片,可以跟蹤時間。它可以計算leap年,并且知道一個月中有多少天,但是它不考慮夏時制(因為它在不同的地方有所不同)

此圖顯示了具有實時功能的計算機主板時鐘稱為DS1387。

我們要使用的RTC是 PCF8523 或 DS1307 》。

如果您擁有Adafruit Datalogger Shield B版,則將使用PCF8523 -該RTC較DS1307更新且更好。看一下屏蔽罩,看看是否在芯片上方寫有 PCF8523 。

如果您使用的是較舊的Datalogger保護罩,則將使用DS1307 -沒有文本,因此您只需記住,如果不是 說是PCF8523,那就是DS1307

備用電池

只要有一個紐扣電池可以運行,即使在

使用任何CR1220 3V鋰金屬紐扣電池:

CR1220直徑12毫米-3V鋰紐扣電池

產品ID:380

這些是最高質量的產品,容量的電池,與iCufflinks,iNecklace,Datalogging和GPS Shields,GPS HAT等產品隨附的電池相同。每筆訂購一個電池。..

$ 0.95

入庫

添加到購物車

您必須安裝紐扣電池才能使RTC正常工作,如果沒有紐扣電池,它將表現得很奇怪,并可能在您嘗試使用Arduino時將其掛起,因此始終確保已安裝電池,即使電池沒電了。

RTC

RTC是一種i2c設備,這意味著它使用2條線進行通信。這兩條線用于設置時間并進行檢索。在Arduino UNO上,這些引腳還連接到模擬4 和 5 引腳。這有點煩人,因為我們當然希望最多有6個模擬輸入來讀取數據,而現在我們已經丟失了2個。

對于RTC庫,我們將使用JeeLab卓越的分叉器可以在GitHub上找到RTC庫 。您可以通過訪問github存儲庫并手動下載來實現此目的,或者只需單擊此按鈕即可下載zip

下載RTC庫

重命名未壓縮的文件夾 RTClib ,并檢查 RTClib 文件夾是否包含 RTClib 。 cpp 和 RTClib 。h

將 RTClib 庫文件夾放在 arduinosketchfolder/libraries/文件夾。

如果您是第一個庫,則可能需要創建庫子文件夾。重新啟動IDE。

我們還提供了有關Arduino庫安裝的出色教程,網址為:

http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use

完成后,重新啟動IDE

第一次RTC測試

我們將演示的第一件事是一個測試草圖,它將每秒從RTC讀取一次時間。我們還將顯示如果您卸下電池并更換電池會發生什么,因為這會導致RTC停止。因此,要開始使用,請在未給Arduino供電或未將其插入USB的情況下從電池座中取出電池。等待3秒鐘,然后更換電池。這將重置RTC芯片。現在,為您的RTC加載匹配的草圖

對于Adafruit Datalogger盾牌版本B,打開示例-》 RTClib-》 pcf8523

較舊的Adafruit數據記錄器,請使用示例-》 RTClib-》 ds1307

在數據記錄器防護罩打開的情況下將其上傳到Arduino!

如果遇到問題,請確保運行正確的示例! PCF8523和DS1307 RTC芯片不相同,因此它們有單獨的示例!

現在打開串行控制臺,并確保將波特率正確設置為 57600波特,您應該會看到以下內容:

每當RTC芯片失去所有電源(包括備用電池)時,它將重置為較早的日期,并將時間報告為0:0:0或類似時間。 DS1307甚至不會數秒(已停止)。無論何時設置時間,這都會啟動時鐘的滴答聲。

因此,基本上,這里的結果是,您永遠不要卸下電池您已設定時間。您不需要,電池座也非常貼合,因此除非面板被壓碎,否則電池不會“掉落”

設置時間

在加載了相同草圖的情況下,取消注釋以 RTC開頭的行。/strong》,例如:

下載:文件

復制代碼

if (! rtc.initialized()) {

Serial.println(“RTC is NOT running!”);

// following line sets the RTC to the date & time this sketch was compiled

rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); if (! rtc.initialized()) {

Serial.println(“RTC is NOT running!”);

// following line sets the RTC to the date & time this sketch was compiled

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

這行很可愛,它的作用是根據您使用的計算機獲取日期和時間(編譯時正確)代碼)并將其用于RTC編程。如果您的計算機時間設置不正確,則應首先解決該問題。然后,您必須按上傳按鈕進行編譯,然后立即上傳。如果您先編譯然后再上傳,則該時間將關閉時鐘。

然后打開“串行”監視器窗口以顯示時間已設置

從現在開始,您不會必須再次設置時間:電池將使用5年或以上

讀取時間

現在,RTC快活了,我們想查詢一下時間。讓我們再次看一下草圖,看看如何完成

下載:文件

復制代碼

void loop () {

DateTime now = rtc.now();

Serial.print(now.year(), DEC);

Serial.print(‘/’);

Serial.print(now.month(), DEC);

Serial.print(‘/’);

Serial.print(now.day(), DEC);

Serial.print(“ (”);

Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);

Serial.print(“) ”);

Serial.print(now.hour(), DEC);

Serial.print(‘:’);

Serial.print(now.minute(), DEC);

Serial.print(‘:’);

Serial.print(now.second(), DEC);

Serial.println(); void loop () {

DateTime now = rtc.now();

Serial.print(now.year(), DEC);

Serial.print(‘/’);

Serial.print(now.month(), DEC);

Serial.print(‘/’);

Serial.print(now.day(), DEC);

Serial.print(“ (”);

Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);

Serial.print(“) ”);

Serial.print(now.hour(), DEC);

Serial.print(‘:’);

Serial.print(now.minute(), DEC);

Serial.print(‘:’);

Serial.print(now.second(), DEC);

Serial.println();

使用RTClib獲取時間的方法幾乎只有一種,即調用 now(),此函數返回一個DateTime對象,該對象描述了調用 now()時的年,月,日,時,分和秒。

有一些RTC庫可以代替您調用 RTC.year()和 RTC.hour()之類的東西來獲取當前的年份和小時。但是,存在一個問題,如果您碰巧在下一分鐘滾動之前在 3:14:59 詢問分鐘,然后在分鐘滾動之后詢問第二分鐘(所以在 3:15:00 ),您會看到時間為 3:14:00 ,該時間需要一分鐘。如果您以其他方式進行操作,則可能會得到 3:15:59 -在另一方向上間隔一分鐘。

因為這不是特別不可能發生的情況-特別是如果您經常查詢時間-我們會一次從RTC中獲取時間的“快照”,然后將其拆分為 day()或 second() (如上所示)。付出了更多的努力,但是我們認為避免錯誤是值得的!

我們還可以通過調用 unixtime 來從DateTime對象中獲取“時間戳”,該計數會計數自1970年1月1日午夜以來的秒數(不計算leap秒)

下載:文件

復制代碼

Serial.print(“ since 2000 = ”);

Serial.print(now.unixtime());

Serial.print(“s = ”);

Serial.print(now.unixtime() / 86400L);

Serial.println(“d”); Serial.print(“ since 2000 = ”);

Serial.print(now.unixtime());

Serial.print(“s = ”);

Serial.print(now.unixtime() / 86400L);

Serial.println(“d”);

由于一天中有60 * 60 * 24 = 86400秒,因此我們可以輕松計算天數從那以后。當您想要跟蹤自上次查詢以來已經過去了多少時間,使一些數學變得容易得多時(例如檢查是否過了5分鐘,只需查看 unixtime()),這可能會很有用。增加了300,您不必擔心小時的變化)

使用SD卡

數據記錄器防護板的另一半是SD卡。 SD卡是我們存儲長期數據的方式。盡管Arduino芯片具有永久的EEPROM存儲,但只有幾百個字節-與2 gig SD卡相比很小。 SD卡非常便宜且易于獲得,它是長期存儲的明顯選擇,因此我們將其用作屏蔽。

SD卡不附帶屏蔽套件,但我們可以在其中隨身攜帶SD卡。保證工作的商店。幾乎所有SD卡都可以使用,但要注意一些廉價的卡是“假貨”,并且會引起頭痛。

4GB空白SD/MicroSD存儲卡

產品ID:102

使用此4GB micro-SD卡可以輕松添加大型存儲。它帶有SD適配器,因此您可以將其與我們的任何屏蔽罩或適配器一起使用!預格式化為FAT,因此無法使用。..

缺貨

缺貨

您還需要一種從SD卡進行讀寫的方法。有時您可以使用相機和MP3播放器-插入相機后,您就可以將其視為磁盤。或者您可能需要SD卡讀卡器。 屏蔽 不 能夠將SD卡顯示為“硬盤”,例如某些MP3播放器或游戲,而Arduino沒有該硬件,因此您將需要一個外部讀取器!

USB MicroSD卡讀取器/寫入器-microSD/microSDHC/microSDXC

產品ID:939

這是最可愛的小型microSD卡讀/寫器-但不要被它的可愛性所迷惑!它速度快,可支持多達64 GB的SDXC卡!只需將卡滑入。..

$ 5.95

進貨

添加到購物車

格式化在Windows/Mac操作系統

如果您購買了SD卡,則可能已經使用FAT文件系統對其進行了預格式化。但是,您可能對工廠格式化卡的方式有疑問,或者如果它是舊卡,則需要重新格式化。我們使用的Arduino SD庫支持 FAT16 和 FAT32 文件系統。如果您的SD卡非常小,例如說8-32 MB,您可能會發現它的格式為 FAT12 ,該格式不受支持。您必須重新格式化這些卡。無論哪種方式,即使使用新的總是格式化存儲卡的好主意!請注意,格式化會刪除卡,因此請先保存您想要的任何內容

我們強烈建議您使用的是官方SD卡格式化程序實用程序-由SD協會編寫,它解決了格式錯誤帶來的許多問題!

https上提供了官方SD格式化程序://www.sdcard.org/downloads/formatter_4/

下載并在您的計算機上運行,該頁面上還有一個手冊鏈接供使用

下載適用于Windows的官方SD Formatter軟件

獲取卡信息

Arduino SD卡庫有一個內置示例,可以幫助您測試屏蔽和連接

如果您使用的是較舊的沒有SPI頭連接的數據記錄屏蔽 ,并且您使用的是 Leonardo,Mega 或UNO以外的任何其他產品,則需要安裝規格SD庫的正式版本

在 SD 庫中打開文件 CardInfo 示例草圖:

該草圖不會向卡中寫入任何數據,只會告訴您它是否能夠識別它,以及一些有關它的信息。嘗試確定是否支持SD卡時,這可能非常有用。在試用新卡之前,請先試用此草圖!

轉到草圖的開頭,并確保 chipSelect 行正確,這是因為數據記錄器屏蔽了我們的‘重新使用數字引腳10,因此將其更改為10!

如果您具有Datalogger Shield的pre-reB版本,并且您正在使用Mega或Leonardo,請在此處進行檢查以調整引腳設置

好的,現在將SD卡插入Arduino并上傳草圖

打開串行監視器,并在出現提示時在文本框中鍵入一個字符(并點擊發送)。您可能會得到類似以下的內容:

它主要是亂碼,但查看卷類型為FAT16 部分以及卡的大小(大約2 GB,這應該是有用的)很有用是)等。

如果您的卡片質量較差(好品牌的盜版版本似乎更多),您可能會看到:

卡大部分響應,但是數據都很差。請注意,產品ID 為“不適用” ,并且沒有制造商ID 或 OEM ID 。該卡返回了一些SD錯誤。它基本上是一個壞場景,我只保留這張卡作為壞卡的例子!如果您收到類似這樣的消息(有響應但它已損壞),則應該扔掉卡

最后,嘗試取出SD卡并再次運行草圖,您將得到以下內容,

它甚至無法初始化SD卡。如果出現焊接錯誤或卡確實損壞

,也可能發生這種情況。如果您遇到SD卡問題,建議您使用上述SD格式化器首先確保卡清潔并可以使用!

光和溫度記錄器

簡介

已經介紹了RTC和SD卡,并驗證了它們是否可以正常工作,我們可以繼續進行日志記錄!

我們將使用一個非常好的詳細演示來展示這些最出色的數據的功能。測井屏蔽:我們將記錄溫度和相對光照水平,以確定:

隨著壓縮機的開啟和關閉,冰箱中的溫度變化多少?

保持門打開是否會導致溫度大幅下降?冷卻需要多長時間?

真的里面的燈在關門時會熄滅嗎?

構建它!

您的項目會需要:

Arduino(當然!)最好是Atmega328類型的-我們始終建議使用正式的“經典” Arduino,例如Uno。

Adafruit數據記錄器防護罩-組裝的

SD卡,已格式化為FAT,并使用示例草圖進行了測試

CdS光電管和匹配的10K下拉電阻

溫度傳感器,具有模擬輸出,例如TMP36

電池組,例如6-AA’brick‘和2.1mm DC插孔。

或,您可以將9V夾子用于一個電源,但一個9V供電的記錄儀將僅持續幾個小時,因此我們建議使用6xAA的

一些22 AWG導線,烙鐵,焊料等。

您可以在Adafruit商店中以折扣價獲得該列表中的大部分商品

i》

rs

我們將使用兩個基本傳感器來記錄數據,一個CdS光電管來跟蹤光(這將告訴我們門何時打開),以及一個半導體溫度傳感器來記錄冰箱的周圍溫度。

我們的站點上針對這些傳感器有兩個很棒的教程,如果您以前從未使用過它們或需要一些刷新,請立即閱讀!

Photocell教程

TMP36教程

我們將如下圖所示對傳感器進行接線。

請注意,我們連接了 ARef,溫度傳感器的電源引腳和 3.3V 不是5.0V 的光傳感器-我們這樣做是因為5V線路噪聲很大,而3.3V穩壓器是更好地過濾。在實際的電路板上,我們使用了數據記錄器穩壓器提供的3.3V線,請參見下圖-理論上與Arduino相同,但我們更信任我們。

接線板上的原型區域是帶有焊墊的簡單孔陣列。下面的步驟說明了我們如何構建此電路,并說明了一些基本的電路原型技術。為了清楚起見,我們將使用與上面電路圖中所示相同的色線:

傳感器的位置傳感器可以放置在原型區域的任何位置,但是我們選擇這種布置以簡化組件之間的連接。

準備一些跳線測量一根電線(紅色)的長度足以從3v插孔延伸到溫度傳感器上方的1/2英寸處。從一端剝去大約3/4英寸,從另一端剝去大約1/4英寸。

測量另一端(黃色)從AREF引腳到達兩個傳感器之間的孔的長度足夠長。一端剝去1/2英寸,另一端剝去1/4英寸。

安裝跳線如圖所示放置跳線,長條形的末端靠近傳感器。

由于在原型制作區域的孔之間沒有信號跡線,因此我們將使用長的剝去的末端來連接電路板上組件的支腳。

建立連接

將第一個跳線(紅色)焊接到3v孔中。

彎曲電線的剝皮末端,使其緊靠光傳感器,溫度傳感器和AREF跳線的末端。

將傳感器支腳和AREF支腳折疊在3v跳線上并焊接以形成連接。

為傳感器添加更多跳線

從模擬引腳0到光傳感器和電阻器附近的孔。 (白色)

從GND到電阻另一端旁邊的孔(黑色)

從模擬引腳1到電阻旁邊的孔。溫度傳感器的中心引腳(綠色)

以及LED指示燈

從L1到數字引腳2(黃色)

從L2到數字引腳3(黃色)

焊接并修剪所有內容連接使用相同的方法將組件支腿折疊在跳線上-進行所有連接,如接線圖所示。

確保所有連接均已焊接。還要將電線和組件腳焊接到穿過孔的板上。

準備電池組

將連接器上的黑色塑料套圈放在電池組電線上。

將紅色電線從電池組焊接到中心銷

將黑色電線焊接到外部槍管。

壓接以牢固地保持電線

擰緊黑色塑料套圈

現在,您的Light Temp Logger已連接好并可以進行測試了!/div》

使用它!

Sensor test

我們現在將使用此草圖來測試傳感器,這是本教程中兩個示例的混搭

下載:文件

復制代碼

#include

#include

/* Sensor test sketch

for more information see http://www.ladyada.net/make/logshield/lighttemp.html

*/

#define aref_voltage 3.3 // we tie 3.3V to ARef and measure it with a multimeter!

int photocellPin = 0; // the cell and 10K pulldown are connected to a0

int photocellReading; // the analog reading from the analog resistor divider

//TMP36 Pin Variables

int tempPin = 1; //the analog pin the TMP36’s Vout (sense) pin is connected to

//the resolution is 10 mV / degree centigrade with a

//500 mV offset to allow for negative temperatures

int tempReading; // the analog reading from the sensor

void setup(void) {

// We‘ll send debugging information via the Serial monitor

Serial.begin(9600);

// If you want to set the aref to something other than 5v

analogReference(EXTERNAL);

}

void loop(void) {

photocellReading = analogRead(photocellPin);

Serial.print(“Light reading = ”);

Serial.print(photocellReading); // the raw analog reading

// We’ll have a few threshholds, qualitatively determined

if (photocellReading 《 10) {

Serial.println(“ - Dark”);

} else if (photocellReading 《 200) {

Serial.println(“ - Dim”);

} else if (photocellReading 《 500) {

Serial.println(“ - Light”);

} else if (photocellReading 《 800) {

Serial.println(“ - Bright”);

} else {

Serial.println(“ - Very bright”);

}

tempReading = analogRead(tempPin);

Serial.print(“Temp reading = ”);

Serial.print(tempReading); // the raw analog reading

// converting that reading to voltage, which is based off the reference voltage

float voltage = tempReading * aref_voltage / 1024;

// print out the voltage

Serial.print(“ - ”);

Serial.print(voltage); Serial.println(“ volts”);

// now print out the temperature

float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset

//to degrees ((volatge - 500mV) times 100)

Serial.print(temperatureC); Serial.println(“ degrees C”);

// now convert to Fahrenheight

float temperatureF = (temperatureC * 9 / 5) + 32;

Serial.print(temperatureF); Serial.println(“ degrees F”);

delay(1000);

} #include

#include

/* Sensor test sketch

for more information see http://www.ladyada.net/make/logshield/lighttemp.html

*/

#define aref_voltage 3.3 // we tie 3.3V to ARef and measure it with a multimeter!

int photocellPin = 0; // the cell and 10K pulldown are connected to a0

int photocellReading; // the analog reading from the analog resistor divider

//TMP36 Pin Variables

int tempPin = 1; //the analog pin the TMP36‘s Vout (sense) pin is connected to

//the resolution is 10 mV / degree centigrade with a

//500 mV offset to allow for negative temperatures

int tempReading; // the analog reading from the sensor

void setup(void) {

// We’ll send debugging information via the Serial monitor

Serial.begin(9600);

// If you want to set the aref to something other than 5v

analogReference(EXTERNAL);

}

void loop(void) {

photocellReading = analogRead(photocellPin);

Serial.print(“Light reading = ”);

Serial.print(photocellReading); // the raw analog reading

// We‘ll have a few threshholds, qualitatively determined

if (photocellReading 《 10) {

Serial.println(“ - Dark”);

} else if (photocellReading 《 200) {

Serial.println(“ - Dim”);

} else if (photocellReading 《 500) {

Serial.println(“ - Light”);

} else if (photocellReading 《 800) {

Serial.println(“ - Bright”);

} else {

Serial.println(“ - Very bright”);

}

tempReading = analogRead(tempPin);

Serial.print(“Temp reading = ”);

Serial.print(tempReading); // the raw analog reading

// converting that reading to voltage, which is based off the reference voltage

float voltage = tempReading * aref_voltage / 1024;

// print out the voltage

Serial.print(“ - ”);

Serial.print(voltage); Serial.println(“ volts”);

// now print out the temperature

float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset

//to degrees ((volatge - 500mV) times 100)

Serial.print(temperatureC); Serial.println(“ degrees C”);

// now convert to Fahrenheight

float temperatureF = (temperatureC * 9 / 5) + 32;

Serial.print(temperatureF); Serial.println(“ degrees F”);

delay(1000);

}

確定上傳此草圖,然后再次檢查串行監視器

在我的工作室中,我的溫度約為24攝氏度,“光度”約為400-請記住,盡管溫度傳感器以C或F給出“絕對”讀數,但光傳感器為

一旦您確認傳感器已正確連接并運行其時間來記錄日志,就無法精確地給出讀數!

測井草圖

從Git下載光和溫度測井草圖轂。插入SD卡。

在該部分的草圖頂部查找,并取消注釋任何相關的行。如果您不確定自己擁有哪一個,請查看RTC頁面以獲取詳細信息。

下載:文件

復制代碼

/************** if you have a DS1307 uncomment this line **************/

//RTC_DS1307 RTC; // define the Real Time Clock object

/************** if you have a PCF8523 uncomment this line **************/

//RTC_PCF8523 RTC; // define the Real Time Clock object

/**********************************************************************/ /************** if you have a DS1307 uncomment this line **************/

//RTC_DS1307 RTC; // define the Real Time Clock object

/************** if you have a PCF8523 uncomment this line **************/

//RTC_PCF8523 RTC; // define the Real Time Clock object

/**********************************************************************/

將草圖上傳到Arduino。現在,我們將在仍“綁定”到計算機上的情況下對其進行測試

在Arduno仍保持連接,閃爍并通電的情況下,將您的手放在光電管上幾秒鐘,然后將閃光燈照在它上面。您還應該用手指擠壓溫度傳感器以對其加熱

使用電子表格繪制

當您準備檢查數據時,請拔下Arduino并將SD卡放入計算機的讀卡器中。您將至少看到一個文件,或者可能是幾個文件,每次記錄器最終運行時都一個文件

我們將打開最新的一個。如果要使用圖形演示中使用的相同日志文件,請單擊此處下載。

查看數據的最快方法是使用OpenOffice或Excel之類的文件,您可以在其中打開.csv文件并將其直接導入電子表格

然后您可以通過選擇數據列來執行一些繪圖操作

點擊圖表 按鈕并使用線條(我們認為它們最適合此類圖表)

設置第一列作為標簽

這將生成此圖

您可以清楚地看到我如何遮蔽傳感器,然后在其上照手電筒。

您可以使圖形顯示兩者都具有不同的軸(因為溫度變化是一組不同的單位。選擇臨時線(紅色),右鍵單擊并選擇格式化數據系列。在選項標簽中,將數據系列與次要Y軸對齊。

或者您也可以僅使用 temp 數據

現在可以清楚地看到如何通過將其握在手指之間來對其進行加熱

使用Gnuplot

Gnuplot是一個免費的(但不是開源的?)超強大的繪圖程序。使用起來也很痛苦!但是,如果您買不起Mathematica或Matlab等專業的數學/繪圖軟件包,則Gnuplot可以做很多!

我們不足以提供有關gnuplot的完整教程,這里有一些我們發現方便的鏈接。 Google一定會幫助您找到更多的教程和鏈接。也是最好的老師。

http://www.cs.hmc.edu/~vrable/gnuplot/using-gnuplot.html

http://www.duke.edu/~hpgavin/gnuplot.html

http://www.ibm.com/developerworks/library/l-gnuplot/

我們發現按順序執行以下命令將生成此數據的漂亮圖形,請確保將LOGTEST.CSV與 wgnuplot.exe 放在同一目錄中(或者,如果您知道如何引用目錄,則可以可以放在其他位置)

下載:文件

復制代碼

set xlabel “Time” # set the lower X-axis label to ’time‘

set xtics rotate by -270 # have the time-marks on their side

set ylabel “Light level (qualitative)” # set the left Y-axis label

set ytics nomirror # tics only on left side

set y2label “Temperature in Fahrenheit” # set the right Y-axis label

set y2tics border # put tics no right side

set key box top left # legend box

set key box linestyle 0

set xdata time # the x-axis is time

set format x “%H:%M:%S” # display as time

set timefmt “%s” # but read in as ’unix timestamp‘

plot “LOGTEST.CSV” using 2:4 with lines title “Light levels”

replot “LOGTEST.CSV” using 2:5 axes x1y2 with lines title “Temperature (F)”

set xlabel “Time” # set the lower X-axis label to ’time‘

set xtics rotate by -270 # have the time-marks on their side

set ylabel “Light level (qualitative)” # set the left Y-axis label

set ytics nomirror # tics only on left side

set y2label “Temperature in Fahrenheit” # set the right Y-axis label

set y2tics border # put tics no right side

set key box top left # legend box

set key box linestyle 0

set xdata time # the x-axis is time

set format x “%H:%M:%S” # display as time

set timefmt “%s” # but read in as ’unix timestamp‘

plot “LOGTEST.CSV” using 2:4 with lines title “Light levels”

replot “LOGTEST.CSV” using 2:5 axes x1y2 with lines title “Temperature (F)”

這是這樣的:

請注意超酷的雙面y軸刻度!您也可以輕松放大內容。

其他繪圖儀

我們的朋友約翰還建議將Live-Graph作為免費的繪圖程序-我們還沒有嘗試過,但是如果您需要進行大量繪圖,它值得一看!/p》

便攜式日志記錄

當然,有一個數據記錄器鏈接到臺式計算機并不是那么方便。我們可以通過增加電池組來制造便攜式記錄儀。獲得大量電量的最便宜方法是使用6節AA電池。我在這里用可充電電池和6xAA電池座制作了一個。它每秒運行Arduino日志一次,持續18.5小時。如果您使用堿,則可以輕松獲得24小時或更長時間。

冰箱日志記錄

準備好我的便攜式記錄儀之后,該做一些冰箱Loggin了!兩者都放在冰箱的中間架子中央。

我將其放置在晚上10點左右,然后第二天中午將其移除。如果您沒有冰箱,則可以從此zip文件中獲取數據并使用它。

以下是記錄的數據:

您可以在中間看到并結束溫度和光照水平很高,因為記錄儀在冰箱外面。綠線是溫度,因此您可以看到溫度緩慢升高,然后每半小時左右啟動壓縮機。紅線表示門何時打開。今晚比平常更殘酷!

在大約12:40 AM放大圖,我們可以看到門打開時溫度是如何上升的,即使在幾秒鐘內溫度也可以很快上升4度!

結論!

好的,這是一個詳細的項目,但是它是測試數據記錄的一個好項目的能力,尤其是因為它更難以修復現場的錯誤。通常,我們建議嘗試其他傳感器,并在可能的情況下在家進行測試。記錄比所需更多的數據,并使用軟件程序過濾不需要的內容也是一個好主意。例如,我們不使用VCC日志,但是如果您的傳感器行為異常,它可能會為您提供電池壽命是否在影響它的線索。

代碼演練

簡介

這是“光和溫度記錄”草圖的演練。它冗長而詳盡,因此我們將其放在此處以供您細讀。我們強烈建議您仔細閱讀它,該代碼具有非常多的用途,并且我們的文字描述應清楚說明其中為什么存在所有內容!

在此處下載完整文件:

包含并定義

下載:文件

復制代碼

#include “SD.h”

#include

#include “RTClib.h” #include “SD.h”

#include

#include “RTClib.h”

確定這是文件的頂部,其中我們包括三個將要使用的庫:用于與卡對話的 SD 庫,可幫助Arduino的 Wire 庫使用i2c和 RTClib 與實時時鐘聊天

下載:文件

復制代碼

// A simple data logger for the Arduino analog pins

#define LOG_INTERVAL 1000 // mills between entries

#define ECHO_TO_SERIAL 1 // echo data to serial port

#define WAIT_TO_START 0 // Wait for serial input in setup()

// the digital pins that connect to the LEDs

#define redLEDpin 3

#define greenLEDpin 4

// The analog pins that connect to the sensors

#define photocellPin 0 // analog 0

#define tempPin 1 // analog 1 // A simple data logger for the Arduino analog pins

#define LOG_INTERVAL 1000 // mills between entries

#define ECHO_TO_SERIAL 1 // echo data to serial port

#define WAIT_TO_START 0 // Wait for serial input in setup()

// the digital pins that connect to the LEDs

#define redLEDpin 3

#define greenLEDpin 4

// The analog pins that connect to the sensors

#define photocellPin 0 // analog 0

#define tempPin 1 // analog 1

接下來都是“定義” -常量和可調整項。

LOG_INTERVAL是傳感器讀數之間的毫秒數。 1000是1秒,這不是一個不好的起點。

ECHO_TO_SERIA L確定是否將寫入卡的內容也發送到串行監視器。這會使記錄器更加緩慢,您可能需要串行監視器來查看其他內容。另一方面,它的使用很有用。我們將其設置為 1 以保持打開狀態。將其設置為 0 將其關閉

WAIT_TO_START意味著您必須向Arduino的串行端口發送一個字符才能啟動記錄。如果您啟用了此功能,則基本上無法使其脫離計算機,因此我們暫時將其保持關閉狀態(設置為 0 )。如果要打開它,請將其設置為 1

其他定義更容易理解,因為它們只是引腳定義

redLEDpin是您連接到記錄儀護罩上紅色LED的一切

greenLEDpin是您連接到記錄儀護罩上綠色LED的一切

photocellPin是CdS單元連接到的模擬輸入

tempPin是TMP36連接到的模擬輸入

對象和錯誤()

下載:文件

復制代碼

RTC_DS1307 RTC; // define the Real Time Clock object

// for the data logging shield, we use digital pin 10 for the SD cs line

const int chipSelect = 10;

// the logging file

File logfile;

void error(char *str)

{

Serial.print(“error: ”);

Serial.println(str);

// red LED indicates error

digitalWrite(redLEDpin, HIGH);

while(1);

} RTC_DS1307 RTC; // define the Real Time Clock object

// for the data logging shield, we use digital pin 10 for the SD cs line

const int chipSelect = 10;

// the logging file

File logfile;

void error(char *str)

{

Serial.print(“error: ”);

Serial.println(str);

// red LED indicates error

digitalWrite(redLEDpin, HIGH);

while(1);

}

接下來,我們已經有了RTC的所有對象以及SD卡芯片選擇引腳。對于我們所有的屏蔽,我們將 pin 10 用于SD卡芯片選擇線

接下來是error()功能,這對我們來說只是一個快捷方式,我們在以下情況下使用它發生了一件非常糟糕的事情,例如我們無法寫入SD卡或將其打開。它將錯誤輸出到串行監視器,打開紅色錯誤LED,然后永遠處于while(1);循環,也稱為 halt

設置

下載:文件

復制代碼

void setup(void)

{

Serial.begin(9600);

Serial.println();

#if WAIT_TO_START

Serial.println(“Type any character to start”);

while (!Serial.available());

#endif //WAIT_TO_START

void setup(void)

{

Serial.begin(9600);

Serial.println();

#if WAIT_TO_START

Serial.println(“Type any character to start”);

while (!Serial.available());

#endif //WAIT_TO_START

K現在我們進入代碼。我們首先以9600波特初始化串口。如果我們將WAIT_TO_START設置為除 0 之外的任何值,則Arduino將等待直到用戶鍵入內容為止。否則,它將進入下一部分

下載:文件

復制代碼

// initialize the SD card

Serial.print(“Initializing SD card.。.”);

// make sure that the default chip select pin is set to

// output, even if you don’t use it:

pinMode(10, OUTPUT);

// see if the card is present and can be initialized:

if (!SD.begin(chipSelect)) {

Serial.println(“Card failed, or not present”);

// don‘t do anything more:

return;

}

Serial.println(“card initialized.”);

// create a new file

char filename[] = “LOGGER00.CSV”;

for (uint8_t i = 0; i 《 100; i++) {

filename[6] = i/10 + ’0‘;

filename[7] = i%10 + ’0‘;

if (! SD.exists(filename)) {

// only open a new file if it doesn’t exist

logfile = SD.open(filename, FILE_WRITE);

break; // leave the loop!

}

}

if (! logfile) {

error(“couldnt create file”);

}

Serial.print(“Logging to: ”);

Serial.println(filename); // initialize the SD card

Serial.print(“Initializing SD card.。.”);

// make sure that the default chip select pin is set to

// output, even if you don‘t use it:

pinMode(10, OUTPUT);

// see if the card is present and can be initialized:

if (!SD.begin(chipSelect)) {

Serial.println(“Card failed, or not present”);

// don’t do anything more:

return;

}

Serial.println(“card initialized.”);

// create a new file

char filename[] = “LOGGER00.CSV”;

for (uint8_t i = 0; i 《 100; i++) {

filename[6] = i/10 + ‘0’;

filename[7] = i%10 + ‘0’;

if (! SD.exists(filename)) {

// only open a new file if it doesn‘t exist

logfile = SD.open(filename, FILE_WRITE);

break; // leave the loop!

}

}

if (! logfile) {

error(“couldnt create file”);

}

Serial.print(“Logging to: ”);

Serial.println(filename);

現在代碼開始與SD卡通信,它將嘗試初始化SD卡并找到FAT16/FAT32分區。

接下來它將嘗試創建日志文件。我們在這里做了一些棘手的事情,我們基本上希望將文件命名為 LOGGERnn 。 csv ,其中 nn 是一個數字。通過開始嘗試創建 LOGGER00.CSV 并在文件已經存在時每次遞增,直到我們到達 LOGGER99.csv ,我們基本上每次創建一個新文件Arduino啟動

要創建文件,我們使用一些Unix風格的命令標志,您可以在logfile.open() 過程中看到這些標志。 FILE_WRITE 表示創建文件并向其中寫入數據。

假設我們成功創建了文件,則將名稱打印到串行端口。

下載:文件

復制代碼

Wire.begin();

if (!RTC.begin()) {

logfile.println(“RTC failed”);

#if ECHO_TO_SERIAL

Serial.println(“RTC failed”);

#endif //ECHO_TO_SERIAL

}

logfile.println(“millis,time,light,temp”);

#if ECHO_TO_SERIAL

Serial.println(“millis,time,light,temp”);

#if ECHO_TO_SERIAL// attempt to write out the header to the file

if (logfile.writeError || !logfile.sync()) {

error(“write header”);

}

pinMode(redLEDpin, OUTPUT);

pinMode(greenLEDpin, OUTPUT);

// If you want to set the aref to something other than 5v

//analogReference(EXTERNAL);

} Wire.begin();

if (!RTC.begin()) {

logfile.println(“RTC failed”);

#if ECHO_TO_SERIAL

Serial.println(“RTC failed”);

#endif //ECHO_TO_SERIAL

}

logfile.println(“millis,time,light,temp”);

#if ECHO_TO_SERIAL

Serial.println(“millis,time,light,temp”);

#if ECHO_TO_SERIAL// attempt to write out the header to the file

if (logfile.writeError || !logfile.sync()) {

error(“write header”);

}

pinMode(redLEDpin, OUTPUT);

pinMode(greenLEDpin, OUTPUT);

// If you want to set the aref to something other than 5v

//analogReference(EXTERNAL);

}

好的,我們在這里結束了。現在,我們通過初始化Wire庫開始RTC,并戳RTC以查看其是否還存在。

然后我們打印標題。標頭是文件的第一行,可幫助您的電子表格或數學程序確定接下來要執行的操作。數據采用CSV(逗號分隔值)格式,因此標頭也是如此:“ millis,time,light,temp”第一項 millis 是自Arduino啟動以來的毫秒數,時間是RTC的時間和日期, light 是CdS單元中的數據, temp 是讀取的溫度。

您將請注意,在每次調用 logfile.print()之后,我們都有#if ECHO_TO_SERIAL和匹配的 Serial.print()調用,接著是#if ECHO_TO_SERIAL,這就是調試我們前面提到的輸出。 logfile.print()調用是將數據寫入SD卡上的文件的功能,其作用與 Serial 版本非常相似。如果將 ECHO_TO_SERIAL 設置為頂部的 0 ,則看不到打印到串行終端的書面數據。

最后,我們將兩個LED引腳作為輸出,因此我們可以使用它們與用戶進行通信。有一條注釋行用于設置模擬參考電壓。此代碼假定您將使用“默認”參考,該參考是芯片的VCC電壓-在傳統的Arduino上這是5.0V。有時可以通過降低參考來獲得更高的精度。但是,我們暫時將其保持簡單!稍后,您可能要嘗試一下。

主循環

現在進入循環,循環基本上重復執行以下操作:

等待直到下一次出現讀(每秒說一次-取決于我們定義的內容)

詢問當前時間和日期,以免RTC

將時間和日期記錄到SD卡上

讀取光電池和溫度傳感器

將這些讀數記錄到SD卡上

如果時間到,將數據同步到SD卡

時間戳

讓我們看一下第一部分:

下載:文件

復制代碼

void loop(void)

{

DateTime now;

// delay for the amount of time we want between readings

delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));

digitalWrite(greenLEDpin, HIGH);

// log milliseconds since starting

uint32_t m = millis();

logfile.print(m); // milliseconds since start

logfile.print(“, ”);

#if ECHO_TO_SERIAL

Serial.print(m); // milliseconds since start

Serial.print(“, ”);

#endif

// fetch the time

now = RTC.now();

// log time

logfile.print(now.get()); // seconds since 2000

logfile.print(“, ”);

logfile.print(now.year(), DEC);

logfile.print(“/”);

logfile.print(now.month(), DEC);

logfile.print(“/”);

logfile.print(now.day(), DEC);

logfile.print(“ ”);

logfile.print(now.hour(), DEC);

logfile.print(“:”);

logfile.print(now.minute(), DEC);

logfile.print(“:”);

logfile.print(now.second(), DEC);

#if ECHO_TO_SERIAL

Serial.print(now.get()); // seconds since 2000

Serial.print(“, ”);

Serial.print(now.year(), DEC);

Serial.print(“/”);

Serial.print(now.month(), DEC);

Serial.print(“/”);

Serial.print(now.day(), DEC);

Serial.print(“ ”);

Serial.print(now.hour(), DEC);

Serial.print(“:”);

Serial.print(now.minute(), DEC);

Serial.print(“:”);

Serial.print(now.second(), DEC);

#endif //ECHO_TO_SERIAL

void loop(void)

{

DateTime now;

// delay for the amount of time we want between readings

delay((LOG_INTERVAL -1) - (millis() % LOG_INTERVAL));

digitalWrite(greenLEDpin, HIGH);

// log milliseconds since starting

uint32_t m = millis();

logfile.print(m); // milliseconds since start

logfile.print(“, ”);

#if ECHO_TO_SERIAL

Serial.print(m); // milliseconds since start

Serial.print(“, ”);

#endif

// fetch the time

now = RTC.now();

// log time

logfile.print(now.get()); // seconds since 2000

logfile.print(“, ”);

logfile.print(now.year(), DEC);

logfile.print(“/”);

logfile.print(now.month(), DEC);

logfile.print(“/”);

logfile.print(now.day(), DEC);

logfile.print(“ ”);

logfile.print(now.hour(), DEC);

logfile.print(“:”);

logfile.print(now.minute(), DEC);

logfile.print(“:”);

logfile.print(now.second(), DEC);

#if ECHO_TO_SERIAL

Serial.print(now.get()); // seconds since 2000

Serial.print(“, ”);

Serial.print(now.year(), DEC);

Serial.print(“/”);

Serial.print(now.month(), DEC);

Serial.print(“/”);

Serial.print(now.day(), DEC);

Serial.print(“ ”);

Serial.print(now.hour(), DEC);

Serial.print(“:”);

Serial.print(now.minute(), DEC);

Serial.print(“:”);

Serial.print(now.second(), DEC);

#endif //ECHO_TO_SERIAL

第一個重要的事情是 delay()調用,這就是使Arduino等待直到需要再次讀取的原因。如果您還記得我們 #defined ,則兩次讀數之間的延遲為1000毫秒(1秒)。由于兩次讀取之間有更多延遲,因此我們可以使用更少的電量,而無法盡快填充存儲卡。這基本上是一個折衷,您希望多久讀取一次數據,但是對于基本的長期日志記錄,每秒獲取數據將導致大量數據!

然后我們打開綠色LED,這對于告訴我們,是的,我們現在正在讀取/寫入數據。

接下來,我們調用 millis ()以獲取“自arduino開啟以來的時間”并將其記錄到卡上。擁有它很方便-尤其是如果您最終不使用RTC時。

然后熟悉的 RTC.now()調用以獲取時間快照。有了這些信息后,我們便可以使用電子表格可以輕松識別的時間戳記(自2000年以來的秒數)以及 YY/MM/DD HH:MM:SS 時間格式。我們兩者都有,因為時間戳的好處是它會單調增加,而打印日期的好處是它的可讀性

記錄傳感器數據

下一個是傳感器記錄代碼

下載:文件

復制代碼

int photocellReading = analogRead(photocellPin);

delay(10);

int tempReading = analogRead(tempPin);

// converting that reading to voltage, for 3.3v arduino use 3.3

float voltage = (tempReading * 5.0) / 1024.0;

float temperatureC = (voltage - 0.5) * 100.0 ;

float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;

logfile.print(“, ”);

logfile.print(photocellReading);

logfile.print(“, ”);

logfile.println(temperatureF);

#if ECHO_TO_SERIAL

Serial.print(“, ”);

Serial.print(photocellReading);

Serial.print(“, ”);

Serial.println(temperatureF);

#endif //ECHO_TO_SERIAL

digitalWrite(greenLEDpin, LOW);

} int photocellReading = analogRead(photocellPin);

delay(10);

int tempReading = analogRead(tempPin);

// converting that reading to voltage, for 3.3v arduino use 3.3

float voltage = (tempReading * 5.0) / 1024.0;

float temperatureC = (voltage - 0.5) * 100.0 ;

float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;

logfile.print(“, ”);

logfile.print(photocellReading);

logfile.print(“, ”);

logfile.println(temperatureF);

#if ECHO_TO_SERIAL

Serial.print(“, ”);

Serial.print(photocellReading);

Serial.print(“, ”);

Serial.println(temperatureF);

#endif //ECHO_TO_SERIAL

digitalWrite(greenLEDpin, LOW);

}

此代碼非常簡單,處理代碼已從我們之前的教程中刪除。然后我們只需將其打印()到卡上,并用逗號將兩者分開即可

我們通過關閉綠色LED指示燈完成

下載

文件 GitHub上的

EagleCAD PCB文件

Adafruit Fritzing庫中的Fritzing對象

修訂版C原理圖和構造打印

版本B原理圖

點擊放大

原始版本原理圖

點擊放大

責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Arduino
    +關注

    關注

    187

    文章

    6464

    瀏覽量

    186681
收藏 人收藏

    評論

    相關推薦

    路暢科技發布百秘盾二代加密記錄儀,全面升級汽車數據安全防護

    10月25日,路暢科技正式揭曉了其最新的研發成果——百秘盾二代加密記錄儀,并宣布該產品將于10月28日全面登陸各大電商平臺。這一舉動標志著路暢科技在強化汽車記錄儀音視頻數據安全領域取得了重大進展。
    的頭像 發表于 11-05 11:28 ?473次閱讀

    行車記錄儀CCC認證的必要性分析

    行車記錄儀需要申請CCC認證嗎?作為每臺需要正式上路的汽車來說,行車記錄儀是必備的車載產品,因此行車記錄儀再投入到每臺車進行使用時都需要需要申請CCC認證。以下英利檢測整合收集的一些是于行車
    的頭像 發表于 07-05 16:25 ?381次閱讀
    行車<b class='flag-5'>記錄儀</b>CCC認證的必要性分析

    干貨分享 數據記錄儀自動測量與記錄加速度:振動,顛簸,沖擊和定位

    什么是加速度數據記錄儀?我們如何記錄振動?顛簸或沖擊是什么意思?我們可以使用什么方法來檢測因沖擊而造成的貨物損壞?“快速峰值”是什么意思?一篇文章讓你弄懂所有問題!
    的頭像 發表于 07-04 14:46 ?341次閱讀
    干貨分享  <b class='flag-5'>數據</b><b class='flag-5'>記錄儀</b>自動測量與<b class='flag-5'>記錄</b>加速度:振動,顛簸,沖擊和定位

    CAN總線數據記錄儀選型指南

    CAN總線數據記錄儀擁有多種型號和強大的功能,滿足了不同行業、不同場景下的數據記錄需求。今天,我們將針對Influx以及Kvaser兩個品牌的記錄儀
    的頭像 發表于 05-24 17:08 ?516次閱讀
    CAN總線<b class='flag-5'>數據</b><b class='flag-5'>記錄儀</b>選型指南

    記錄儀定制_基于MT6762的音視頻記錄儀解決方案

    搭載聯發科MT6762新一代12納米高性能芯片的音視頻記錄儀,搭載了8核處理器和支持H.264高保真視頻編碼的芯片,使得這些記錄儀具備了出色的運算和處理能力。無論是處理復雜的現場圖片還是進行視頻快速運算處理,都能夠記錄整個事件過
    的頭像 發表于 05-16 19:57 ?366次閱讀
    <b class='flag-5'>記錄儀</b>定制_基于MT6762的音視頻<b class='flag-5'>記錄儀</b>解決方案

    4G,5G執法記錄儀人臉識別、人臉比對使用說明

    4G,5G執法記錄儀人臉識別、人臉比對使用說明
    的頭像 發表于 05-13 17:41 ?941次閱讀
    4G,5G執法<b class='flag-5'>記錄儀</b>人臉識別、人臉比對使用<b class='flag-5'>說明</b>

    數據記錄儀的選購知識介紹

    數據記錄儀是一種功能強大的小型自動電子測量設備。它們廣泛用于各種專業數據采樣和分析任務,可以讓用戶捕獲特定環境或過程中的各類信息,或者在長時間范圍內遠程收集信息。
    發表于 04-24 10:34 ?198次閱讀

    4G執法記錄儀,5G執法記錄儀

    4G執法記錄儀,5G執法記錄儀系統設計
    的頭像 發表于 04-14 17:08 ?684次閱讀
    4G執法<b class='flag-5'>記錄儀</b>,5G執法<b class='flag-5'>記錄儀</b>

    單北斗5G執法記錄儀有什么作用?什么品牌的5G執法記錄儀具有最高性價比?

    單北斗5G執法記錄儀有什么作用?什么品牌的5G執法記錄儀具有最高性價比?
    的頭像 發表于 04-14 10:02 ?745次閱讀
    單北斗5G執法<b class='flag-5'>記錄儀</b>有什么作用?什么品牌的5G執法<b class='flag-5'>記錄儀</b>具有最高性價比?

    無線數據記錄儀與傳統有線熱電偶系統的對比優勢

    在過去的10-15年中,無線數據記錄系統逐漸取代了熱電偶系統,用于食品、醫療和制藥行業的驗證。過去,使用記錄儀的一個主要缺點是在研究過程中缺乏實時數據,但由于虹科EllabSKY選項可
    的頭像 發表于 03-08 08:04 ?649次閱讀
    無線<b class='flag-5'>數據</b><b class='flag-5'>記錄儀</b>與傳統有線熱電偶系統的對比優勢

    如何選擇CAN總線數據記錄儀 Kvaser Memorator Pro 5xHS

    什么是CAN總線數據記錄儀? CAN總線數據記錄儀是一種用于記錄CAN總線數據的設備。它通過CA
    的頭像 發表于 03-04 16:35 ?538次閱讀
    如何選擇CAN總線<b class='flag-5'>數據</b><b class='flag-5'>記錄儀</b>  Kvaser Memorator Pro 5xHS

    4G記錄儀_智能視頻記錄儀基于聯發科MT6762平臺方案

    4G記錄儀_智能視頻記錄儀基于聯發科MT6762平臺方案。全新的智能記錄儀搭載了聯發科強勁八核處理器,采用12nm制程工藝,內置4GB+32GB內存,運行著Android 11.0操作系統,性能強勁
    的頭像 發表于 02-29 20:05 ?462次閱讀
    4G<b class='flag-5'>記錄儀</b>_智能視頻<b class='flag-5'>記錄儀</b>基于聯發科MT6762平臺方案

    溫濕度記錄儀HG-01

    溫濕度記錄儀HG-01說明
    發表于 01-24 10:05 ?0次下載

    車輛數據記錄儀 | GL系列產品

    面對車輛開發周期的不斷縮短、項目的快速迭代和新能源車輛的滲透,工程師對于車輛在實驗室、場地和道路試驗的數據記錄提出了更多的要求。數據記錄儀需要有滿足用戶試驗的諸多需求,例如不同的車輛總
    的頭像 發表于 12-28 08:25 ?764次閱讀
    車輛<b class='flag-5'>數據</b><b class='flag-5'>記錄儀</b> | GL系列產品

    GL記錄儀及配置工具

    GLLogger(以下簡稱GL)是一種特殊的汽車數據記錄儀,被廣泛應用于路試或臺架測試,該系列記錄儀支持CAN/CANFD、LIN、FlexRay以及車載以太網總線的數據
    的頭像 發表于 12-28 08:25 ?716次閱讀
    GL<b class='flag-5'>記錄儀</b>及配置工具