본문 바로가기
2022-2/마이크로프로세서

6. Analog Input

by 철없는민물장어 2022. 11. 1.
728x90
반응형
  • poteiometer input
  • light input
  • temperature measurement
  • water level measurement
  • analog joystick
  • sound input
analogRead(analog pin number)
//아날로그 핀으로부터 전압값을 읽음. (0~5V의 값을 0~1023의 값으로 읽어옴)

map(value, range1 min, range1 max, range2min, range2max)
//range1 min~max범위에서의 value값을 range2 min~max범위의 값으로 매핑

 

potentiometer

가변 저항.

저항의 위치를 물리적으로 옮김으로써 저항을 많이/적게 통과하게 만듦

const int potentioMeterPin =0;
const int ledPin=13;

void setup(){
	pinMode(ledPin,OUPUT);
    Serial.begin(9600);
}

void loop()
{
	int adcValue = analogRead(potentioMeterPin);
    duty = map(adcValue,0,1023,0,100);
    
    digitalWrite(ledPin,HIGH);
    delay(duty);
    digitalWrite(ledPin,LOW);
    delay(100-duty);
    
    Serial.print("ADC Value is");
    Serial.print(adcValue);
    Serial.print(". Duty cycle is");
    Serial.print(duty);
    Serial.print("%");
}

 

light input(CdS Sensor)

CdS 센서를 이용.

빛의 세기가 셀 수록 저항이 작아짐 ==> 전압 작아짐

따라서 빛의 세기가 셀 수록 analogRead 리턴 값이 작아진다.

int adcValue;
adcValue=analogRead(CdSPin);
illuminance=map(adcValue,0,1023,100,0);

map의 range2 min,max를 역으로 입력할 수 있다.

 

Temperature measurement

LM35 센서를 사용.

1도 증가할 때마다 0.01V 증가함

adcValue=analogRead(LM35Pin);
temp=(adcValue*500L)/1024;

숫자뒤의 L은 long자료형이라는 뜻임.

 

더보기
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3f,16,2); //혹은 0x27

const int waterLevelPin=0;

const int waterFullAdcValue=600;

void setup()
{
	lcd.init();
    lcd.backlight();
    
    lcd.print("ex 6.4");
    lcd.setCursor(0,1);
    lcd.print("Water Level");
    delay(3000);
    
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("ADC: ");
    lcd.setCursor(0,1);
    lcd.print("Water Level: ");
    lcd.setCursor(15,1);
    lcd.print("%");
    
}

void loop()
{
	int adcValue;
    int waterLevel;
    
    adcValue=analogRead(waterLevelPin);
    
    waterLevel=map(adcValue,0,waterFullAdcValue,0,100);
    
    
    lcd.setCursor(9,0);
    lcd.print(" ");
    
    lcd.setCursor(9,0);
    lcd.print(adcValue);
    
    lcd.setCursor(13,1);
    lcd.print(" ");
    
    lcd.setCursor(12,1);
    lcd.print(waterLevel);
    
    delay(1000);
}

 

Water level measurement

수위 센서

오징어 다리같이 긴 부분을 물에 담가 사용.

 

Analog joystick

내부에 potentiometer가 있음.

수직으로 누르는 경우 switch 동작이 가능

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3f,16,2);

const int xAxisPin=0;
const int yAxisPin=1;
const int zAxisPin=2;

void setup()
{
	pintMode(zAxisPin,INPUT_PULLUP);
    
    lcd.init();
    lcd.backlight();
    
    lcd.print("ex 6.5");
    lcd.setCursor(0,1);
    lcd.print("Joystick");
    delay(3000);
    
    lcd.clear()
    lcd.setCursor(0,0);
    lcd.print("X:");
    lcd.setCursor(0,1);
    lcd.print("Y:");
    lcd.setCursor(15,1);
}

void loop()
{
	int xValue = analogRead(xAxisPin);
    int yValue = analogRead(yAxisPin);
    int zValut = digitalRead(zAxisPin);
    
    int xDisplay=map(xValue,0,1023,6,15);
    int yDisplay=map(yValue,0,1023,6,15);
	
    lcd.setCursor(2,0);
    lcd.print("              ")//14칸 공백
    lcd.setCursor(2,0);
    lcd.print(xValue);
    lcd.setCursor(xDisplay,0);
    lcd.print("|");
    
    lcd.setCursor(2,1);
    lcd.print("              ")//14칸 공백
    lcd.setCursor(2,1);
    lcd.print(yValue);
    lcd.setCursor(yDisplay,1);
    lcd.print("|");
    
    if(zValue==LOW)//눌린 경우
    {
    	lcd.noBacklight();
        delay(300);
        lcd.backlight();
    }
    delay(100);
}

 

Sound input

microphone module 사용.

int soundInput = analogRead(soundInputPin);
int soundLevel = map(soundInput,50,900,0,7);

노이즈부분을 제외하기 위해 map 함수의 인자를 0,1023이 아닌 50,900으로 설정하였다.

 

728x90
반응형

'2022-2 > 마이크로프로세서' 카테고리의 다른 글

8. Infrared Remote Control  (0) 2022.11.14
7. Motor Drive  (0) 2022.11.07
5. Digital Signal Input  (0) 2022.10.23
아두이노와 기타등등 알아보기  (0) 2022.10.14
4-2 LED  (0) 2022.10.10

댓글