2012/05/12

A/D変換のテスト

BeagleBoneには、8つの12bit A/D変換がついています。
最大入力電圧は1.8Vとなっています。

今回は温度センサ LM35DZをつなげて、温度測定してみることにしました。

LM35DZは、0℃から100℃まで計測できる温度センサで、出力は10mV/℃となっています。
動作電圧は4V~20Vなので、今回はSYS_5Vから電源を供給しています。
LM35DZの出力を、AIN0(P9の39ピン)に接続し、温度測定を行いました。






時刻もNTPで補正できるので、簡易温度ロガーとしてすぐに使えそうな感じです。


今回のソースコードは以下の通りです。
/*
 *Beagle Bone
 *Sample code for analog input.
 */

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

//LM35D
float VoltageToTemp(float voltage)
{
    //LM35D 10.0mV/Celsius
    return voltage*1000/10;
}

void printCurrentTime()
{
    //
    time_t t;
    struct tm *s_time;
    char str[100];
    (void) time(&t);
    s_time=localtime(&t);

    fprintf(stdout,"%4d-%02d-%02d %02d:%02d:%02d",1900+s_time->tm_year,s_time->tm_mon+1,s_time->tm_mday,
                    s_time->tm_hour,s_time->tm_min,s_time->tm_sec);

}

//Convert digitalvalue to voltage.
float digitalValueToVoltage(int digValue)
{
    int analogResolution=4096;//    12bit A/D converter in BeagleBone
    float voltage=0;
    float maxInputVoltage= 1.8f;
    float rate=(float)(maxInputVoltage/analogResolution);
    return (float)(rate*digValue);
}

int main()
{
    int filedescriptor=open("/sys/devices/platform/tsc/ain1", O_RDONLY);
    fprintf(stdout,"start templuture monitoring\n");

    char buffer[128];
    while(1)
    {
        int readcount=read(filedescriptor,buffer,sizeof(buffer));
        if(-1!=readcount)
        {
            buffer[readcount]=NULL;
            lseek(filedescriptor,0,0);//reset seek position
            int digitalValue=atoi(buffer);
            float voltage=digitalValueToVoltage(digitalValue);
            float templuture=VoltageToTemp(voltage);
            printCurrentTime();
            fprintf(stdout," ReadValue:%d\tVoltage:%2.3fV\tTemplture:%2.1f\n",digitalValue,voltage,templuture);
        }
        else
        {
            fprintf(stdout,"could not read from ain2\n");
            return -1;
        }
        sleep(1);
    }
    close(filedescriptor);
    return 0;
}

ではまた。



0 件のコメント:

コメントを投稿