Skip to content

Commit 94a4769

Browse files
committed
docs: 아날로그, 가변저항, RGB LED
아날로그 입출력 - 입력 : analogRead() - 최댓값 변경 : analogReference() DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, EXTERNAL - 출력 : analogWrite(pin, value) value = 듀티 사이클 (0-255)
1 parent 510d749 commit 94a4769

File tree

4 files changed

+248
-1
lines changed

4 files changed

+248
-1
lines changed

docs/마이크로컨트롤러.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
: 각종 사물에 센서와 통신 기능을 내장하여 인터넷에 연결하는 기술
9191

9292

93-
### 📎 정리
93+
### 🔎 정리
9494

9595
마이크로컨트롤러는
9696

docs/아날로그입출력.md

+124
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
# 📙 아날로그 입출력
2+
3+
### ✔ 아날로그 vs 디지털
4+
5+
- 아날로그 : 연속적, 원본 데이터에 충실
6+
7+
- 디지털 : 일정 값만 표현, 노이즈에 강함
8+
9+
10+
<br>
11+
<br>
12+
13+
### ✔ ADC, 아날로그 -> 디지털 변환 과정
14+
15+
![image](https://user-images.githubusercontent.com/54584063/84179761-6a79d200-aac1-11ea-83df-e06a6f73fd3b.png)
16+
17+
**1. 필터링** : 원하는 대역폭에 대한 신호만 필터링
18+
19+
**2. 표본화(Sampling)** : 표본 만들기
20+
21+
- 표본화율(Sampling Rate): **1초** 동안에 취한 표본수(디지털화한 횟수), 단위:Hz
22+
23+
ex: 0.1초마다 샘플링 -> Sampling Rate = 10Hz
24+
25+
- Sampling Rate가 높아지면 본래 특성을 더 잘 유지 BUT, 데이터 多多
26+
27+
- 나이퀘스트 정리
28+
29+
최소 샘플링 주파수 = 2x최대주파수
30+
31+
**3. 양자화(Quantization)** : n개의 레벨로 분해, 정밀도 결정
32+
33+
- 비트수: 2bit -> 4레벨 양자화, 4bit -> 16레벨 양자화
34+
35+
36+
**4. 부호화(Coding)** : 양자화된 값 비트로 변환
37+
38+
39+
40+
<br>
41+
<br>
42+
43+
### ✔ 아날로그 데이터 입력
44+
45+
- A0-A15 : 16채널
46+
47+
- A0=디지털54번, A15=디지털69번
48+
49+
- 1개의 ADC(아날로그-디지털 변환기)를 공유(동시 사용X)
50+
51+
- 10비트 해상도
52+
53+
- 2^10 = 0-1023사이의 정수값 반환
54+
55+
- 1023의 기준전압 = 5v (analogReference함수로 변경 가능)
56+
57+
- 5v / 1024 = 4.9mv 전압 차이 인식 가능
58+
59+
60+
<br>
61+
<br>
62+
63+
### ✔ 아날로그 데이터 출력
64+
65+
아날로그 데이터 출력은 불가능
66+
67+
하지만 PWM신호를 이용해 디지털로 흉내가능
68+
69+
- **PWM** : 아날로그 디지털화
70+
71+
PWM신호는 디지털 신호의 일종
72+
73+
PWM신호 출력 함수 = analogWrite -> 아날로그 데이터 출력으로 불림
74+
75+
![image](https://user-images.githubusercontent.com/54584063/84183068-4c62a080-aac6-11ea-8a55-132605084683.png)
76+
77+
![image](https://user-images.githubusercontent.com/54584063/84183327-b2e7be80-aac6-11ea-9b6a-3d90a351de46.png)
78+
79+
- Duty Cycle : 1이 차지하는 비율
80+
81+
- 한구간에서 1이 차지하는 정도 측정 -> 아날로그 값으로 해석
82+
83+
ex: 아두이노(0-5v) -> duty cycle 50% -> 아날로그값=2.5v
84+
85+
- 15개의 핀으로 PWM신호 출력
86+
87+
디지털2-13번, 디지털 44-46번
88+
89+
0과 255사이값 출력 (2^8 = 256)
90+
91+
92+
<br>
93+
<br>
94+
95+
### ✔ 아날로그 입출력 함수
96+
97+
- 입력 : analogRead()
98+
99+
- 최댓값 변경 : analogReference()
100+
101+
DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, EXTERNAL
102+
103+
- 출력 : analogWrite(pin, value)
104+
105+
value = 듀티 사이클 (0-255)
106+
107+
108+
<br>
109+
<br>
110+
111+
112+
### 🔎 정리
113+
114+
- 아날로그 데이터 입력
115+
116+
- 10비트 ADC를 통해 0-1023사이의 양자화된 디지털값 입력
117+
118+
- 1023에 해당하는 기준 전압 설정해야함
119+
120+
- 아날로그 데이터 출력
121+
122+
- PWM이용해 디지털이 아날로그 흉내
123+
124+
- ex: LED 밝기 제어, 모터 속도 제어

부품&연결방법/RGB_LED.md

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# 📌 RGB LED
2+
3+
![image](https://user-images.githubusercontent.com/54584063/84186198-27bcf780-aacb-11ea-9ffc-2e3c64176262.png)
4+
5+
공통핀과 3개의 R,G,B 제어핀으로 구성
6+
7+
공동 양극방식(common anode)의 경어 제어판에 GND로 출력하면 켜짐
8+
9+
### ✔ 연결방법
10+
11+
![image](https://user-images.githubusercontent.com/54584063/84186350-5f2ba400-aacb-11ea-98c0-bd737cc6c70d.png)
12+
13+
### ✔ 밝기 조절
14+
15+
- 최대 밝기 : analogWrite(0)
16+
17+
- 최소 밝기 : analogWrite(255)
18+
19+
20+
### ✔ 예시
21+
22+
- RGB LED 밝기 조절
23+
```js
24+
int RGB_LED[] = {6,7,8};
25+
26+
void setup(){
27+
for (int i=0; i<3; i++){
28+
pinMode(RGB_LED[i], OUTPUT);
29+
}
30+
}
31+
32+
void loop(){
33+
// Adjusting Blue color
34+
digitalWrite(RGB_LED[1], HIGH);
35+
digitalWrite(RGB_LED[2], HIGH);
36+
for (int i=255; i>=0; i--){
37+
analogWrite(RGB_LED[0], i);
38+
delay(10);
39+
}
40+
}
41+
42+
```
43+
44+
- 가변저항사용 -> LED밝기조절 ; 방법1
45+
46+
```js
47+
int pins_LED[] = {2, 3, 4, 5}; // Pins connected to LEDs
48+
49+
void setup() {
50+
Serial.begin(9600);
51+
for (int i = 0; i < 4; i++) {
52+
pinMode(pins_LED[i], OUTPUT);
53+
}
54+
pinMode(A0, INPUT); // Pin A0 connected to a Potentiometer
55+
}
56+
57+
void loop() {
58+
int ADC_value = analogRead(A0); // ADC value
59+
int PWM_value = ADC_value >> 2; // PWM value
60+
Serial.print(String("ADC value : ") + ADC_value);
61+
Serial.println(String(", PWM value : ") + PWM_value);
62+
for (int i = 0; i < 4; i++) {
63+
// Adjusting the brightness of LEDs
64+
analogWrite(pins_LED[i], PWM_value);
65+
}
66+
delay(1000);
67+
}
68+
69+
```
70+
- 가변저항사용 -> LED밝기조절 ; 방법2
71+
72+
```js
73+
int pins_LED[] = {2, 3, 4, 5}; // Pins connected to LEDs
74+
75+
void setup() {
76+
Serial.begin(9600);
77+
for (int i = 0; i < 4; i++) {
78+
pinMode(pins_LED[i], OUTPUT);
79+
} // Pin A0 connected to a Potentiometer
80+
pinMode(A0, INPUT);
81+
}
82+
83+
void loop() {
84+
int ADC_value = analogRead(A0); // ADC value
85+
int PWM_value[4] = {0, };
86+
Serial.println(String("ADC value : ") + ADC_value);
87+
for (int i = 3; i >= 0; i--) {
88+
// Calculating the brightness of each LED
89+
if (ADC_value >= 256 * i) {
90+
PWM_value[i] = ADC_value - 256 * i;
91+
ADC_value -= (PWM_value[i] + 1);
92+
} // Adjusting the brightness of LEDs
93+
analogWrite(pins_LED[i], PWM_value[i]);
94+
Serial.print(" ");
95+
Serial.print(PWM_value[i]);
96+
}
97+
Serial.println();
98+
delay(500);
99+
}
100+
```
101+
102+

부품&연결방법/가변저항.md

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# 📌 가변저항
2+
3+
### ✔ 가변저항 연결
4+
5+
![image](https://user-images.githubusercontent.com/54584063/84185750-6aca9b00-aaca-11ea-81aa-d65e2ffa870e.png)
6+
7+
- 가변저항 값 읽기
8+
9+
```js
10+
int vResistor = A0;
11+
12+
void setup(){
13+
Serial.begin(9600);
14+
pinMode(vResistor, INPUT);
15+
}
16+
void loop(){
17+
Serial.println(analogRead(vResistor));
18+
delay(1000);
19+
}
20+
21+
```

0 commit comments

Comments
 (0)