1. 개요
소소하지만^^;; 코딩할 때 이런게 있었으면 편할 것 같은 기능들을 ChatGPT 등 여러가지 툴을 이용하여 만들어 봅니다.^^
소소하지만^^;; 코딩할 때 이런게 있었으면 편할 것 같은 기능들을 ChatGPT 등 여러가지 툴을 이용하여 만들어 봅니다.^^
1602 LCD를 사용할 때, 내가 쓸 내용이 몇 행, 몇 열에 들어갈지 체크하기불편하지요^^. 간단하게 미리 써보고 쉽게 행과 열의 번호를 확인할 수 있도록 만들었습니다.
아두이노와 헥사보드가 행의 번호가 달라서 선택할 수 있도록 하였습니다.
엑셀 파일로도 만들어 놓은 것이 있어 출력하여 사용하실 수도 있습니다.^^
파일 다운로드 링크
악보에 있는 음악을 연주하고 싶을 때 음표별 시간을 계산할 때가 있습니다.
먼저 16분 음표를 계산한 후 2배, 4배, 8배를 하여 8분음표, 4분음표, 2분음표를 계산하기 때문에 음표별 시간이 정확하지 않을 수 있습니다.
예를 들면, BPM=120의 4분음표는 0.5초인데, 8분음표, 16분음표가 각각 1/2, 1/4 가 될 수 없기 때문에 0.52초로 계산됩니다.
음표 | 지속 시간 |
---|---|
2분음표 | - |
4분음표 | - |
8분음표 | - |
16분음표 | - |
초음파 센서의 원리는 초음파를 발사한 뒤, 물체에 맞고 반사되어 돌아온 시간을 계산하여 거리로 환산하는 것입니다.
거리 = 속도 * 시간으로 쉽게 구할 수 있지요.
보통 왼쪽 은색 부품이 초음파 발사(송신기)하고, 오른쪽이 받는(수신기) 역활을 수행합니다.
그래서, 초음파을 발사하는 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 |
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 |