Processor

【라즈베리파이】 wiringPi C 언어 : 아날로그 센서(가변 저항, 조도 센서)

작성자 임베디드코리아 작성일26-02-17 18:15 조회87회 댓글0건
라즈베리파이로 GPIO 제어의 경우 디지털 출력은 digitalWrite()와 아날로그 출력은 pwmWrite()으로 하고,
디지털 입력은 digitalRead()와  analogRead()를 사용한다.

◆ 라즈베리파이는 ADC 단자가 없어서 아날로그 센서값을 자체적으로 읽어오지 못한다.
◆ 아날로그 입력은 MCP3008과 같은 IC를 이용하여 아날로그 값을 디지털 값으로 바꾼 후 (Convert)에 읽어 온다.
◆ 라즈베리파이에서 읽어오는 방법은 주로 SPI 통신를 사용한다.

--->>> 예제 :  ADC_Potentiometer.c <<<--------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <unistd.h>
#include <time.h>
#define SPI_CH 0 //  SPI channel
#define ADC_CH2 0 // AD Converter Channel
#define ADC_CS 10
#define SPI_SPEED 500000 // SPI speed

int main(void){
int adcValue=0, i;
    char adChannel = ADC_CH2;
    unsigned char buf[3];

    if(wiringPiSetup()==-1)
return 1;
    pinMode(ADC_CS, OUTPUT);
    if(wiringPiSPISetup(SPI_CH,SPI_SPEED)==-1){
  printf("wiringPi SPI Setup failed!]n");
  exit(0);
    }

    while(1) {
  buf[0] = 0x06|((adChannel & 0x07)>>2);
  buf[1] = ((adChannel & 0x07)<<6);
  buf[2] =0x00;
  digitalWrite(ADC_CS,0);
  wiringPiSPIDataRW(SPI_CH,buf,3);
  buf[1]=0x0F & buf[1];
  adcValue = (buf[1]<<8)|buf[2];
  digitalWrite(ADC_CS,1);
  printf("VR ADC Value -> %d\n",adcValue);
  usleep(100000);
}
  return 0;
}
----------------------------------------------------------------------------------
$ gcc  -o  ADC_Potentiometer    ADC_Potentiometer.c  -lwiringPi
$ sudo  ./ADC_Potentiometer

◆ 조도 센서
--->>> 예제 :  mcp3008_cds.c    <<<-----------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wiringPi.h>
#include <wiringPiSPI.h>
#include <mcp3004.h>

#define  BASE        100
#define  SPI_CHAN  0

int main(int argc, char *argv[])
{
    int i;
    printf(wiringPiSPIsetup return= %d \n", wiringPiSPISetup(0, 500000);
    mcp3004Setup(BASE, SPI_CHAN);
 
    while(1)
    {
        printf(" CDS value : %d \n", analogRead(BASE+2));
        delay(500);
    }

    return 0;
}
----------------------------------------------------------------------------------
$ gcc  -o  mcp3008_cds  mcp3008_cds.c  -lwiringPi
$ sudo  ./mcp3008_cds