[ ์คํผ์ปค ์ถ๋ ฅ ]
- ์๋์ด๋ ธ ์ฐ๋ ธ์ ์ฌ์ฉ๋ ATmega 328P ๋ง์ดํฌ๋ก ์ปจํธ๋กค๋ฌ๋ ์๋ ๋ก๊ทธ ์ ํธ ์ถ๋ ฅ ๋ถ๊ฐ๋ฅ
- PWM ์ ํธ๋ฅผ ํตํด ์๋ ๋ก๊ทธ ์ ํธ์ ์ ์ฌํ ํจ๊ณผ๋ฅผ ๋ด๋ ๋์งํธ ์ ํธ ์ถ๋ ฅ ๊ฐ๋ฅ
- tone() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ ์ฌ์ ๊ฐ๋ฅ
[ tone() ํจ์ ]
- ํ์ ํน์ ์ฃผํ์(50% ๋ํฐ ์ฌ์ดํด)์ ๊ตฌํํ๋ฅผ ๋ฐ์์์ผ ๋จ์์ ์ฌ์
- ์ง์์๊ฐ ์ง์ ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ง์ ํ์ง ์๋๋ค๋ฉด noTone() ํจ์๊ฐ ํธ์ถ๋ ๋๊น์ง ์ง์
- ํ๋ฒ์ ํ tone๋ง ๋ฐ์ ์ํฌ ์ ์์.
[ํ์]
- void tone(pin, frequency, duration);
[๋งค๊ฐ๋ณ์]
- pin : ํ ๋ฒํธ
- frequency : ์ถ๋ ฅ ์ฃผํ์(Hz ๋จ์) - unsigned int
- duration(์ต์ ) : ์ถ๋ ฅ ์ง์ ์๊ฐ, ms ๋จ์- unsigned long
ํ๊ต์ข ๋ฉ๋ก๋ ์ฌ์ ์์
// C++ code
// ํ๊ต์ข
๋ฉ๋ก๋ ์ฌ์ ์์
// ๊ฐ ์ ๋์ด์ ํด๋นํ๋ ์ฃผํ์ ๊ฐ์ ์ ๊ณตํ๋ pitches.h ๋ผ์ด๋ธ๋ฌ๋ฆฌ
// #include <pitches.h>
/*
int melody[] = {
NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_G4, NOTE_E4, 0,
NOTE_G4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, 0,
NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_G4, NOTE_E4, 0,
NOTE_G4, NOTE_E4, NOTE_D4, NOTE_E4, NOTE_C4, 0
};
*/
int melody[] = {
392 , 392 , 440 , 440, 392 , 392 , 330, 0,
392 , 392 , 330 , 330, 294 , 0,
392 , 392 , 440 , 440, 392 , 392 , 330, 0,
392 , 330 , 294 , 330, 262 , 0
};
int speaker_pin = 14; // A0(๋์งํธ 14๋ฒ ํ)
int melody_size = sizeof(melody) / sizeof(melody[0]);
int note_duration = 4; // 4๋ถ ์ํ
void setup()
{
Serial.begin(9600);
}
void loop()
{
for(int i=0; i < melody_size; i++){
// ์ํ ๊ธธ์ด๋ฅผ ์๊ฐ์ผ๋ก ๋ณํ
int note_length = 1000 / note_duration;
// ๋จ์ ์ฌ์
tone(speaker_pin, melody[i], note_length);
delay(500);
noTone(speaker_pin);
}
while(true); // 1ํ ์ฌ์ ํ ๋๊ธฐ
}
[ ์จ๋ ์ผ์ ]
- ์คํผ์ปค๋ฅผ ํตํ ์์ ์ฌ์ : PWM ์ ํธ๋ฅผ ํตํด ์๋ ๋ก๊ทธ ๊ฐ ์ถ๋ ฅ
- ์ผ์๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๋ ฅ : ADC๋ฅผ ํตํด ์๋ ๋ก๊ทธ ์ ํธ๋ฅผ ๋์งํธ ์ ํธ๋ก ๋ณํ
์จ๋ ์ผ์ ํ ์คํธ ์์
// C++ code
// ์จ๋ ์ผ์์ ๊ฐ์ ์ฝ์ด ์๋ฆฌ์ผ ๋ชจ๋ํฐ๋ก ์ถ๋ ฅ
void setup()
{
Serial.begin(9600);
}
void loop()
{
int reading = analogRead(A0);
// ADC ๋ฐํ๊ฐ(์จ๋ ์ผ์์ ๊ฐ)์ ์ ์์ผ๋ก ๋ณํ
float voltage = reading * 5000.0 / 1024.0; // [TMP 36]
//float voltage = reading * 5.0 / 1024.0; // [LM 35]
Serial.print(voltage);
Serial.print(" V : ");
// ์ ์์ ์ญ์จ ์จ๋๋ก ๋ณํ
float temperature_c = (voltage-500) / 10; // [TMP 36]
//float temperature_c = voltage * 100 // [LM 35]
Serial.print(temperature_c);
Serial.print(" C | ");
// ํ์จ ์จ๋๋ก ๋ณํ
float temperature_f = (temperature_c * (9.0 / 5.0)) + 32.0;
Serial.print(temperature_f);
Serial.println(" F");
delay(1000);
}
[ ์กฐ๋ ์ผ์ ]
- ๋น์ ์์ ๋ฐ๋ผ ๋ฌผ๋ฆฌ์ ํน์ฑ์ด ๋ณํ๋ ์์(ํฌํ ๋ ์ง์คํฐ, ํฌํ ๋ค์ด์ค๋, ํฌํ ํธ๋์ง์คํฐ ๋ฑ) ์กด์ฌ
- ๋น์ ์์ ๋ฐ๋ผ ์ ํญ๊ฐ์ด ๋ณํ๋ ํฌํ ๋ ์ง์คํฐ ํํ ์ฌ์ฉ
- ํฌํ ๋ ์ง์คํฐ๋ ๊ด์ผ์, ์กฐ๋์ผ์, ๊ด์ ๋์ , ํฌํ ์ ๋ฑ์ผ๋ก ๋ถ๋ฆผ
- ์กฐ๋ ์ผ์๋ CdS ์ผ์๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋๋ฐ, ์ด๋ ์นด๋๋ฎด(Cd)๊ณผ ํฉ(S)์ด ํํ์ ์ผ๋ก ๊ฒฐํฉํ ํฉํ์นด๋๋ฎด
๊ฒฐ์ ์ ๊ธ์ ๋ค๋ฆฌ๋ฅผ ๊ฒฐํฉํ์ฌ ๋ง๋ ๊ฒ์.
์กฐ๋ ์ผ์ ํ ์คํธ ์์
// C++ code
// ๊ด์ผ์์ ์ธ๊ฐ๋๋ ์ ์์ ์๋ฆฌ์ผ ๋ชจ๋ํฐ ์ถ๋ ฅ
// ์์ผ๋ก ๊ฐ๋ฆฌ๋ฉด์ ์ถ๋ ฅ๋๋ ๊ฐ์ ๋ณํ ํ์ธ
void setup()
{
Serial.begin(9600);
}
void loop()
{
int reading = analogRead(A0);
Serial.print("ADC : ");
Serial.print(reading);
// ADC ๋ฐํ๊ฐ์ ์ ์์ผ๋ก ๋ณํ
float voltage = reading * 5.0 / 1024.0;
Serial.print(" | V : ");
Serial.println(voltage);
delay(1000);
}