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
158-840 서울시 양천구 남부순환로 571(신월동, 영남타운 307호) l 대표: 박길성 ㅣ Tel:02-2695-1114 ㅣ Fax:02-2695-1113
Copyright © 2015 Embedded Korea. All Rights Reserved.