본문 바로가기 주메뉴 바로가기

1. 개요


소소하지만^^;; 코딩할 때 이런게 있었으면 편할 것 같은 기능들을 ChatGPT 등 여러가지 툴을 이용하여 만들어 봅니다.^^

2. 1602 LCD 시뮬레이터


1602 LCD를 사용할 때, 내가 쓸 내용이 몇 행, 몇 열에 들어갈지 체크하기불편하지요^^. 간단하게 미리 써보고 쉽게 행과 열의 번호를 확인할 수 있도록 만들었습니다.
아두이노와 헥사보드가 행의 번호가 달라서 선택할 수 있도록 하였습니다.

1602 LCD 시뮬레이터

1602 LCD 시뮬레이터


엑셀 파일로도 만들어 놓은 것이 있어 출력하여 사용하실 수도 있습니다.^^

파일 다운로드 링크


3. BPM 계산기


악보에 있는 음악을 연주하고 싶을 때 음표별 시간을 계산할 때가 있습니다.
먼저 16분 음표를 계산한 후 2배, 4배, 8배를 하여 8분음표, 4분음표, 2분음표를 계산하기 때문에 음표별 시간이 정확하지 않을 수 있습니다.

예를 들면, BPM=120의 4분음표는 0.5초인데, 8분음표, 16분음표가 각각 1/2, 1/4 가 될 수 없기 때문에 0.52초로 계산됩니다.



BPM에 따른 음표 시간 계산기

BPM에 따른 음표 시간 계산기

음표 지속 시간
2분음표 -
4분음표 -
8분음표 -
16분음표 -

4. 초음파센서 3핀으로 사용


초음파 센서의 원리는 초음파를 발사한 뒤, 물체에 맞고 반사되어 돌아온 시간을 계산하여 거리로 환산하는 것입니다.

거리 = 속도 * 시간으로 쉽게 구할 수 있지요.
보통 왼쪽 은색 부품이 초음파 발사(송신기)하고, 오른쪽이 받는(수신기) 역활을 수행합니다. 

그래서, 초음파을 발사하는 Trig핀과 받아들이는 Echo핀이 있습니다. 전원을 공급하는 2개핀까지 포함하면 총 4개의 핀입니다.  



 

초음파를 발사하는 핀(Trig)와 받는 핀(Echo)를 한 핀으로 사용할 수 있습니다. 

간단하게 Trig 신호를 보낸 후 핀 모드를 입력 모드로 변경하여 Echo 신호를 수신 후 거리 계산하고, 다시 출력 모드로 신호를 보내는 것을 반복하는 방법입니다.


물론, 3핀 초음파 센서도 있지만, 대부분 4핀을 사용합니다.

그런데, 아두이노나 ESP32 등의 보드를 사용할 때 신호핀을 2개 사용하니 케이블 연결도 불편한 듯 해서, 젠더를 만들어 보았습니다.  

Trig와 Echo를 병렬로 연결하면 되는데, 노이즈 감소를 위해 Trig에 4.7K의 저항을 달았습니다.
 

 



 

아두이노 우노에 사용하는 예제입니다.
프로그램을 읽어보시면 쉽게 이해가 되실 겁니다^^

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#define US_PIN 4  // 초음파 센서 트리거 및 에코 핀
 
void setup() {
  Serial.begin(9600);  // 시리얼 통신 시작
}
 
void loop() {
  long duration, distance;
  
  // 트리거 신호 보내기
  pinMode(US_PIN, OUTPUT);
  digitalWrite(US_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(US_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(US_PIN, LOW);
 
  // 에코 신호 수신 대기
  pinMode(US_PIN, INPUT);
  duration = pulseIn(US_PIN, HIGH);
 
  // 거리 계산 (cm)
  distance = duration * 0.034 / 2;
 
  // 거리 출력
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
 
  delay(1000);  // 1초 대기
}
cs


 

ESP32에 사용하는 예제입니다.
3.3V에서도 동작하는 HC-SR04P를 사용하셔야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#define US_PIN 4 // 사용하고자 하는 GPIO 핀 번호
 
void setup() {
  Serial.begin(115200);
}
 
void loop() {
  // 트리거 신호 보내기
  gpio_set_direction((gpio_num_t)US_PIN, GPIO_MODE_OUTPUT);
  gpio_set_level((gpio_num_t)US_PIN, 0);
  delayMicroseconds(2);
  gpio_set_level((gpio_num_t)US_PIN, 1);
  delayMicroseconds(10);
  gpio_set_level((gpio_num_t)US_PIN, 0);
 
  // 에코 신호 수신 대기
  gpio_set_direction((gpio_num_t)US_PIN, GPIO_MODE_INPUT);
  long duration = pulseIn(US_PIN, HIGH);
 
  // 거리 계산 (cm)
  long distance = duration * 0.034 / 2;
 
  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println(" cm");
 
  delay(500); // 0.5초 대기
}
cs


 

TOP