データロギング用のSDカードモジュールのインターフェース

問題を排除するために楽器を試してください





この投稿では、データロギングのためにSDカードモジュールをarduinoとインターフェースさせます。 SDカードモジュールの概要を確認し、そのピン構成とオンボードコンポーネントを理解します。最後に、温度と湿度のデータをSDカードに記録する回路を構築します。



安全なデジタルカード

SDカードまたはセキュアデジタルカードは、最小サイズで大容量のストレージを提供するため、最新の電子機器に適しています。以前のプロジェクトの1つ(Mp3プレーヤー)でメディアストレージにSDカードを使用しました。ここでは、データロギングに使用します。

データロギングは、インシデントの過去の発生を記録するための基本的なステップです。例:地球の気温の上昇を解釈できる科学者や研究者。



彼らは過去数十年のデータを見て温度上昇パターンを理解した後、この結論に達しました。現在のインシデントに関するデータを記録すると、将来の発生についても開示される可能性があります。

arduinoはセンサーデータを読み取るための優れたマイクロコントローラーであり、センサーと入出力周辺機器を読み取るためのさまざまな通信プロトコルをサポートしているため、SDカードモジュールarduino間の接続は簡単です。

arduinoには独自のプログラムストレージスペース以外のストレージがないため、この記事で説明するモジュールを使用して外部ストレージを追加できます。

それでは、SDカードモジュールを見てみましょう。

SDカードモジュールの画像:

SDカードモジュールの画像:

モジュールとピン構成の裏側:

モジュールとピン構成の裏側:

6つのピンがあり、SPI(シリアルペリフェラルインターフェイス)通信プロトコルをサポートします。 Arduino UNOの場合、SPI通信ピンは13、12、11、および10です。Arduinomegaの場合、SPIピンは50、51、52、および53です。

提案されたプロジェクトは、Arduino UNOで示されています。他のモデルのArduinoをお持ちの場合は、SPIピンについてインターネットを参照してください。

モジュールは、SDカードを所定の位置に保持するカードホルダーで構成されています。 3.3Vレギュレータは、5Vではなく3.3Vで機能するように設計されているため、SDカードへの電圧を制限するために提供されています。

ロジックレベルシフターであるLVC125A集積回路が搭載されています。ロジックレベルシフターの機能は、5V信号をarduinoから3.3Vロジック信号に減らすことです。

これでSDカードモジュールは終わりです。

SDカードモジュールを使用して、あらゆる王様のデータを保存できます。ここでは、テキストデータを保存します。温度・湿度データをSDカードに保存します。また、リアルタイムクロックモジュールを利用して、センサーデータとともに時刻を記録しています。 30秒ごとにデータを記録します。

回路図:

データロギング用のSDカードモジュールのインターフェース

RTCモジュールは時刻を追跡し、日付と時刻をSDカードに記録します。

SDカードが失敗または初期化に失敗した場合、またはSDカードが存在しない場合、エラーLEDがすばやく点滅します。残りの時間はLEDが消灯したままです。

RTCに時間を設定する方法:

•以下のライブラリをダウンロードしてください。
•ハードウェアのセットアップが完了したら、arduinoをPCに接続します。
•arduinoIDEを開く
•[ファイル]> [例]> [DS1307RTC]> [SetTime]に移動します。
•コードをアップロードすると、RTCがコンピューターの時刻と同期されます。
•次に、以下のコードをアップロードします。

コードをアップロードする前に、次のarduinoライブラリをダウンロードしてください。

DS1307RTC:github.com/PaulStoffregen/DS1307RTC

DHT11の温度と湿度:arduino-info.wikispaces.com/file/detail/DHT-lib.zip

プログラム:

//-----Program developed by R.Girish-----//
#include
#include
#include
#include
#include
#include
#define DHTxxPIN A0
const int cs = 10
const int LED = 7
dht DHT
int ack
int f
File myFile
void setup()
{
Serial.begin(9600)
pinMode(LED,OUTPUT)
if (!SD.begin(cs))
{
Serial.println('Card failed, or not present')
while(true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
Serial.println('Initialization done')
}
void loop()
{
myFile = SD.open('TEST.txt', FILE_WRITE)
if(myFile)
{
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
tmElements_t tm
if(!RTC.read(tm))
{
goto A
}
if (RTC.read(tm))
{
Serial.print('TIME:')
if(tm.Hour>12) //24Hrs to 12 Hrs conversion//
{
if(tm.Hour==13)
{
Serial.print('01')
myFile.print('01')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==14)
{
Serial.print('02')
myFile.print('02')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==15)
{
Serial.print('03')
myFile.print('03')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==16)
{
Serial.print('04')
myFile.print('04')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==17)
{
Serial.print('05')
myFile.print('05')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==18)
{
Serial.print('06')
myFile.print('06')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==19)
{
Serial.print('07')
myFile.print('07')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==20)
{
Serial.print('08')
myFile.print('08')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==21)
{
Serial.print('09')
myFile.print('09')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==22)
{
Serial.print('10')
myFile.print('10')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==23)
{
Serial.print('11')
myFile.print('11')
Serial.print(':')
myFile.print(':')
}
else
{
Serial.print(tm.Hour)
myFile.print(tm.Hour)
Serial.print(':')
myFile.print(':')
}
Serial.print(tm.Minute)
myFile.print(tm.Minute)
Serial.print(':')
myFile.print(':')
Serial.print(tm.Second)
myFile.print(tm.Second)
if(tm.Hour>=12)
{
Serial.print(' PM')
myFile.print( ' PM')
}
if(tm.Hour<12)
{
Serial.print('AM')
myFile.print( ' AM')
}
Serial.print(' DATE:')
myFile.print(' DATE:')
Serial.print(tm.Day)
myFile.print(tm.Day)
Serial.print('/')
myFile.print('/')
Serial.print(tm.Month)
myFile.print(tm.Month)
Serial.print('/')
myFile.print('/')
Serial.println(tmYearToCalendar(tm.Year))
myFile.println(tmYearToCalendar(tm.Year))
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
} else {
A:
if (RTC.chipPresent())
{
Serial.print('RTC stopped!!!')
myFile.print('RTC stopped!!!')
Serial.println(' Run SetTime code')
myFile.println(' Run SetTime code')
} else {
Serial.print('RTC Read error!')
myFile.print('RTC Read error!')
Serial.println(' Check circuitry!')
myFile.println(' Check circuitry!')
}
}
ack=0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack=1
break
}
if(ack==0)
{
f=DHT.temperature*1.8+32
Serial.print('Temperature(C) = ')
myFile.print('Temperature(°C) = ')
Serial.println(DHT.temperature)
myFile.println(DHT.temperature)
Serial.print('Temperature(F) = ')
myFile.print('Temperature(°F) = ')
Serial.print(f)
myFile.print(f)
Serial.print('n')
myFile.println(' ')
Serial.print('Humidity(%) = ')
myFile.print('Humidity(%) = ')
Serial.println(DHT.humidity)
myFile.println(DHT.humidity)
Serial.print('n')
myFile.println(' ')
}
if(ack==1)
{
Serial.println('NO DATA')
myFile.println('NO DATA')
}
for(int i=0 i<30 i++)
{
delay(1000)
}
}
myFile.close()
}
}

// ----- R.Girishによって開発されたプログラム----- //

回路がしばらくの間データを記録できるようになったら、コンピュータに接続されているSDカードを取り外すことができます。以下に示すように、すべての温度と湿度のデータが日時とともに記録されるTEXT.txtファイルがあります。

注:上記のアイデアは、データをインターフェースして記録する方法の例です。このプロジェクトの利用はあなたの想像力に依存します、あなたはどんな種類のセンサーデータも記録することができます。

著者のプロトタイプ:

ArduinoとのインターフェースSDカードモジュールのプロトタイプ




前:非接触センサー–赤外線、温度/湿度、静電容量式、光 次へ:回路にIRフォトダイオードセンサーを接続する方法