이 프로젝트에서는 Arduino Uno를 사용하여 톤 제너레이터를 개발할 것 입니다. 우리는 UNO와 인터페이스되는 버튼을 갖게 될 것이며 각각은 다른 강도의 톤을 생성합니다. UNO에 의해 생성되는 톤의 주파수는 모든 내부에서 동일합니다. 누를 때마다 변하는 소리의 강도입니다. 이것은 Arduino Uno 로 피아노 를 만드는 가장 쉬운 방법 중 하나입니다. 이 피아노 회로도 확인하십시오.
톤은 최대 20 개까지 증가 할 수 있습니다. 이렇게하면 최상의 톤 변화와 훨씬 더 부드러운 변화를 얻을 수 있습니다. 톤의 강도는 PWM (Pulse Width Modulation)에 의해 변경됩니다. PWM의 예는 아래 그래프에 나와 있습니다.
PWM에서 신호의 주파수 또는 신호 시간 (Ton + Toff)은 항상 일정합니다. 켜기 및 끄기 시간의 비율 만 변경됩니다. 예를 들어 위 그림의 두 번째 그래프에서 TURN ON 시간은 80 %이고 TURN OFF 시간은 전체 지속 시간의 20 %입니다.
세 번째 그래프에서 TURN ON 시간은 50 %이고 TURN OFF 시간은 전체 지속 시간의 50 %입니다. 따라서 첫 번째 경우에는 듀티 비율이 80 %이고 두 번째 경우에는 듀티 비율이 20 %입니다.
이 듀티 비의 변화로 인해 Vrms (Root Mean Square Value of Voltage)가 변경되며,이 전압이 부저에 주어지면 듀티 비가 변경 될 때마다 다른 소음이 발생합니다.
각 버튼에 대해 서로 다른 듀티 비의 PWM 신호를 제공하도록 UNO를 프로그래밍 할 것입니다. 그래서 우리는 버튼을 누를 때마다 다른 톤을 생성 하는 톤 제너레이터 를 가지고 있습니다.
필요한 구성 요소
하드웨어: Arduino Uno, 전원 공급 장치 (5v), 1000uF 커패시터, 100nF 커패시터, 부저, 버튼 (8 개).
소프트웨어: AURDINO nightly 또는 Atmel studio 6.2
회로도 및 작동 설명
톤 제너레이터의 회로는 아래 다이어그램에 나와 있습니다.
공급 전압에서 노이즈를 걸러 내기 위해 커패시터는 다이어그램에 표시된대로 단자에 배치됩니다.
Arduino Uno의 PWM은 PCB 보드에서 "~"로 표시된 모든 핀에서 달성 할 수 있습니다. UNO에는 6 개의 PWM 채널이 있습니다. 그러나 PINS가 버튼 인터페이스에 선호되기 때문에 PINS 0-7 위에 설정된 PWM 핀을 사용할 수 없습니다.
PINS 0-7은 마이크로 컨트롤러의 PORTD를 나타 내기 때문에 PINS 0-7을 입력으로 선택하는 이유가 있습니다. 따라서 후자의 경우 PORTD의 전체 바이트를 사용할 수 있습니다.
이제 다른 듀티 비 PWM을 얻기 위해 다음 명령을 사용할 것입니다.
analogWrite (9, VALUE); |
위의 조건에서 해당 핀에서 PWM 신호를 직접 얻을 수 있습니다. 괄호 안의 첫 번째 매개 변수는 PWM 신호의 핀 번호를 선택하기위한 것입니다. 두 번째 매개 변수는 듀티 비를 쓰기위한 것입니다.
Arduino Uno의 PWM 값은 0에서 255까지 변경할 수 있습니다. "0"이 가장 낮 으면 "255"가 가장 높습니다. 듀티 비로 255를 사용하면 PIN9에서 5V를 얻을 수 있습니다. 듀티 비가 125로 주어지면 PIN9에서 2.5V가됩니다. UNO의 PORTD에 인터페이스 된 8 개의 버튼 중 0-250의 듀티 비를 나눌 것입니다. 여기에서는 모든 버튼에 대해 25 개 증분을 선택하지만 선택 사항입니다.
이를 통해 듀티 비가 각 버튼에 따라 변경되는 PWM 신호를 갖게됩니다. 이것은 부저에 주어지면 톤 제너레이터가 있습니다. 이 Arduino 기반 톤 제너레이터의 작동 은 아래에 주어진 C 코드에서 단계별로 설명됩니다.