내가 지금 좀 바빠서
잡소리는 나중에 여유있을 때 추가하는 것으로 하고.
PWM이 뭔지 모르면 구글링 하고 오세요.
펄스파 (구형파, 사각파 라고도 부름)를 주기적으로 생성하는 것이다.
제목처럼
- LED 밝기조절 (아날로그로 조절하는게 아닌. 디지털 껐다켜기 + 잔상)
- Piezo로 특정 음 내기 (e.g. A = 440Hz (나는 A = 432Hz를 주장하는 사람중 하나다) )
- PWM 제어를 쓰는 모터 컨트롤 (서보모터, 대표적인 예가 CNC머신의 서보나 컴퓨터 팬)
I2C LCD와 포텐쇼미터를 추가로 쓸 것이다.
뭔지 모르면 무시하거나, 앞 포스팅을 참고하면 된다:
소오스코드
//#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
display.setTextSize(2);
display.setCursor(0,0);
display.print("Potentio %");
display.setTextSize(2);
display.setCursor(0,16);
display.print(" %");
display.display();
//using PWM on pin 3 (490MHz, pin5 goes 980Hz)
pinMode(3, OUTPUT);
digitalWrite(3, LOW);
}
void loop() {
static unsigned short potentVal;
static unsigned short prevPVal = 0;
static unsigned short potentPercent;
static unsigned short prevPPercent = 0;
potentVal = analogRead(A0);
potentPercent = (unsigned short)((double)(potentVal) * 100.0 / 1023.0);
display.setCursor(0,16); display.setTextColor(SSD1306_BLACK); display.print(prevPPercent);
display.setCursor(0,16); display.setTextColor(SSD1306_WHITE); display.print(potentPercent);
display.setCursor(70,16); display.setTextColor(SSD1306_BLACK); display.print(prevPVal);
display.setCursor(70,16); display.setTextColor(SSD1306_WHITE); display.print(potentVal);
display.display();
prevPVal = potentVal;
prevPPercent = potentPercent;
analogWrite(3, potentVal>>2);
//analogWrite() value range: 0 (0% duty, low) ~ 128(50% duty) ~ 255 (100% duty, HIGH)
delay(100);
}
LED가 점점 밝아진다.
끝.
은 아니고.
프루프 오브 콘셉트 보여줘\야지.
컴퓨터 팬
전원부에 12V 넣어주고
4번쨰 핀 PWM핀에 아두이노 5V PWM 신호를 넣어주면 돌아간다.
컴퓨터가 제어하듯 제대로 되는건 아니고
그냥 속도변화를 볼 수 있다.
정도.
맥 프로 팬 물려서
이것저것 실험하다가
아두이노 프로세서부분을 태워먹었다.
ㅜㅜ
트랜지스터인줄 알고 꽂았는데
태워먹고 보니 단순히 다이오드가 마주보고 있는
휘트스턴 브릿지용 다이오드...220V 견디는 AC to DC용 다이오드 ㅜㅜ
다이오드가 GND랑 12V 쇼트나는건 막아주었는데
12V 전압이가 0.7V 다이오드 하강 후
인풋핀으로 아무 저항 없이 쏟아져 들어갔다.
아마 1A (어댑터 최대출력)이 고대로 다 쳐들어 가지 않았을까..
인풋 핀에다 12V 1A를 때려박아버리니
아예 맛탱이가 가버렸다.
USB 통신 프로세서랑 전원부는 살아있는데
프로세서는 아예 식물인간..ㅜㅜ
파츠 살릴만한거
납땜 제거하고 떼어낸 다음에
DC 변압기로 써야겠다.
(12V 입력하고 3.3V랑 5V 뽑아내는 용)
끝.
'1.B. Low Level Engineering > Micro Controller Unit' 카테고리의 다른 글
[Arduino] 더이상의 포스팅은 없습니다. (0) | 2023.03.27 |
---|---|
[MCU] P3. 적외선 리모컨 사용하기 (수신, 발신) (0) | 2023.03.21 |
[MCU] P1. I2C 디스플레이 연결하기 (1602A LCD + Adafruit OLED) (0) | 2023.02.15 |
[MCU] T1.1 (정수) 데이터란 Intro. to Datum (0) | 2023.02.03 |
[MCU] P0. IDE & 드라이버 설치, 예제 (0) | 2023.01.31 |
Comment(s)