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 |
댓글