Arduino 아날로그 신호

//PWM테스트 - pulse width modulation
//아날로그를 디지털신호로 바꾸기 위한 방법
//pwm은 8bit를 사용 - 2의8승이니까 256까지 즉, 0부터 255까지 표현 가능
//AnalogDigitalConverter(ADC) - 10bit(2의 10승 - 1024)
int led4=11;
void setup() {
  pinMode(led4, OUTPUT);
}

void loop() {
  for(int i=0; i<256; i++) {
    analogWrite(led4, i);
    delay(10);
  }
  
  for(int i=255; i>=0; i--) {
    analogWrite(led4, i);
    delay(10);
  }
}

회로를 사진처럼 구성하고 코드를 작성해보자.

실행 시키면 LED가 서서히 밝아지고 서서히 밝기가 줄어드는것을 볼 수 있다

이게 아날로그 신호다

아날로그 신호는 8bit로 동작하기에 0~255까지의 값을 만들어 낸다

전압을 5V로 주는데 0~255까지의 밝기를 조절하면서 하는것이다.

 

저항 조절가는것은 10bit로 계산이 된다 0~1023까지 값을 만들어낸다

회로는 이렇게 구성 후

저항값이 500이상이면 led 불을 키고

500이하면 led 불을 끄게 설정해보자.

 

void setup() {
  pinMode(11, OUTPUT);
}

void loop() {
  int readValue = analogRead(A0);
  if(readValue >= 500 )
    digitalWrite(11, HIGH);
  else
    digitalWrite(11, LOW);
}

저항 조절에 3개의 다리가 달려있는데

가운데는 핀을 꼽아주고

양쪽은 +,-를 꼽아줘야 한다.

 

문제)

저항 조절기를 이용해 LED 밝기를 나타내라.

회로는 위와 같다.

더보기

 

void setup() {
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}

void loop() {
  int readValue = analogRead(A0);
  Serial.println(readValue/4);
  analogWrite(11,readValue/4);
}

위와 같이 해도 되고 이런 계산하는 일이 이번만 있는게 아니니 우리는 map을 이용해서 변환을 해줄거다

map(평가할 기준이 되는 변수 , 변수의 최소값, 변수의 최대값, 적용할 갑의 최소값, 적용할 값의 최대값)

                                         --------------------------------  --------------------------------------------

                                        실제 변수가 갖는 값의 범위          변환할 값의 범위

void setup() {
  Serial.begin(9600);
  pinMode(11, OUTPUT);
}

void loop() {
  int readValue = analogRead(A0);
  Serial.println(map(readValue,0,1023,0,255));
  analogWrite(11,map(readValue,0,1023,0,255));
}

 

 

문제

led 3개, push버튼 풀업 1개, 가변저항 1개 이용

- 가변저항의 값이 1~300 사이면 led1 켜기

301~700 사이면 led2 켜기

701~1023 사이면 led3 켜기

- push 버튼을 누르면 모든 led가 off

더보기
int value = 0; //가변저항 값
void setup() {
  Serial.begin(9600);
  for(int i=9; i<12; i++)
    pinMode(i, OUTPUT); //LED핀
  pinMode(12, INPUT); //push버튼
}

void loop() {
  value = analogRead(A0);
  Serial.println(value);
  a0(value);
  if(digitalRead(12) == LOW)
    ledoff();
}
void a0(int value) {
  if(value >= 1 && value <= 300)
    digitalWrite(11, HIGH);
  else if(value >= 301 && value <= 700)
    digitalWrite(10, HIGH);
  else if(value >= 701 && value <= 1023)
    digitalWrite(9, HIGH);
}
void ledoff() {
  for(int i=9; i<12; i++)
    digitalWrite(i, LOW);
  delay(1000);
}

 

 

 

댓글

Designed by JB FACTORY