- FM 라디오 일반 작업
- 필요한 구성 요소
- RDA5807 수신기
- 오디오 증폭기
- Arduino FM 수신기 회로도
- Arduino FM 라디오 코드 설명
- Arduino FM 라디오 작동
오늘날 거의 모든 사람들이 휴대 전화를 사용하여 음악, 뉴스, 팟 캐스트 등을 듣습니다.하지만 얼마 전까지 만해도 우리는 모두 최신 뉴스와 노래를 얻기 위해 지역 FM 라디오에 의존했습니다. 천천히이 라디오가 인기를 잃고 있지만 인터넷이 끊기면 긴급 상황이 발생합니다. 무전기는 사용자에게 정보를 전송하는 데 중요한 역할을합니다. 라디오 신호는 항상 공중에 존재하며 (방송국에서 방송 됨) FM 수신기 회로 만 있으면 라디오 신호를 포착하여 오디오 신호로 전송할 수 있습니다. 이전 자습서에서는 아래에 나열된 몇 가지 다른 FM 송신기 및 수신기도 구축했습니다.
- Raspberry Pi FM 송신기
- Raspberry Pi FM 수신기 라디오
- FM 송신기 회로
- 인덕터가없는 FM 송신기 회로
이 튜토리얼에서는 Arduino FM Receiver 를 구성하고 이를 프로젝트 무기고에 추가 할 것입니다. Arduino 와 함께 RDA5807 FM 수신기 IC를 사용하고 이를 프로그래밍하여 사용자가 전위차계로 조정할 수있는 FM 라디오 방송국을 재생합니다. 우리는 또한 회로와 함께 오디오 증폭기를 사용하여 Arduino FM 라디오 의 출력 볼륨을 제어 할 것입니다. 자, 시작합시다.
FM 라디오 일반 작업
라디오 방송국은 전기 신호를 라디오 신호 로 변환 하며 이러한 신호는 안테나를 통해 전송되기 전에 변조되어야합니다. 신호를 변조 할 수있는 두 가지 방법, 즉 AM과 FM이 있습니다. 이름에서 알 수 있듯이 진폭 변조 (AM) 는 신호를 전송하기 전에 진폭을 변조 하는 반면 주파수 변조 (FM) 에서는 신호의 주파수가 안테나를 통해 전송되기 전에 변조됩니다. 라디오 방송국에서는 주파수 변조를 사용하여 신호를 변조 한 다음 데이터를 전송합니다. 이제 우리가 구축해야 할 것은 특정 주파수에 맞춰 조정할 수있는 수신기뿐입니다. 이러한 신호를 수신하고 나중에 이러한 전기 신호를 오디오 신호로 변환 할 수 있습니다. 우리는이 프로젝트의 RDA5807 FM 수신기 모듈 은 우리 회로를 단순화합니다.
필요한 구성 요소
- Arduino Nano
- RDA5807 수신기
- 오디오 증폭기
- 전선 연결
- 냄비 – 10 만
- 성능 보드
RDA5807 수신기
RDA5807 은 신디사이저가 완전히 통합 된 단일 칩 FM 스테레오 라디오 튜너 모듈 입니다. 이 모듈은 50 – 115MHz의 전 세계 주파수 대역, 볼륨 제어 및 음소거, 프로그램 가능한 디엠 퍼시스 (50 / 75us), 수신 신호 강도 표시기 및 SNR, 32.768KHz 수정 발진기, 디지털 자동 이득 제어 등을 지원합니다. 아래 그림은 RDA5807M 튜너 의 블록 다이어그램.
디지털 low-IF 아키텍처를 갖추고 있으며 FM 방송 대역 (50 ~ 115MHz), 프로그래밍 가능한 이득 제어 (PGA), 고해상도 아날로그-디지털 변환기 및 고 충실도 디지털-아날로그 변환기 (DAC). 리미터는 과부하를 방지하고 인접 채널에 의해 생성되는 상호 변조 제품의 수를 제한합니다. PGA는 믹서 출력 신호를 증폭 한 다음 ADC로 디지털화합니다. DSP 코어는 채널 선택, FM 복조, 스테레오 MPX 디코더 및 출력 오디오 신호를 관리합니다. IC 의 RDA5807 핀아웃 다이어그램은 다음과 같습니다.
이 모듈 은 1.8 – 3.3V 의 전원 공급 장치에서 작동 합니다. 휴식을 취하고 인터페이스를 선택하면 VIO가 전원을 켤 때 모듈이 자체적으로 재설정되고 02H 주소의 0에서 1까지 비트 1의 트리거에 의한 소프트 재설정도 지원합니다. 모듈은 I2C 통신을 사용하여 MCU와 통신하고 인터페이스는 시작 조건, 명령 바이트 및 데이터 바이트로 시작됩니다. RDA5807에는 각각 특정 기능을 수행하는 13 개의 16 비트 레지스터가 있습니다. 레지스터 주소는 칩 ID에 할당 된 00H로 시작하고 0FH로 끝납니다. 13 개 레지스터 모두에서 일부 비트는 예약되고 일부는 R / W입니다. 각 레지스터는 할당 된 비트에 따라 볼륨 변경, 채널 변경 등과 같은 작업을 수행합니다.
핀이 닫히기 때문에 회로에 연결할 때 모듈을 직접 사용할 수 없습니다. 그래서 아래 그림과 같이 perf 보드와 일부 수 핀을 사용하고 모듈의 각 핀을 각 수 핀에 납땜했습니다.
오디오 증폭기
오디오 증폭기는 저전력 전자 오디오 신호를 라우드 스피커 나 헤드폰을 구동하기에 충분히 높은 수준으로 증폭하는 전자 장치입니다. 우리는 LM386을 사용하여 간단한 오디오 증폭기를 만들었습니다. 동일한 회로는 아래에 나와 있으며 링크를 확인하여이 회로에 대해 자세히 알아보고 다른 오디오 증폭기 회로도 확인할 수 있습니다.
Arduino FM 수신기 회로도
FM 대역을 조정 하고 오디오 증폭기 의 볼륨 을 제어하기 위해 두 개의 전위차계를 사용했습니다. 만약 1 내지 8에 접속되는 포트 달라질 수 중 볼륨 변경하는 일 LM386 또는 LM386의 핀 (3)에 접속되는 포트의 핀. 아래 그림은 Arduino FM Radio 의 전체 회로도를 보여줍니다.
나는 앰프를 거의 변경하지 않았습니다. 앰프에 두 개의 전위차계를 사용하는 대신 하나만 사용했습니다. 게인을 변경하는 데 사용되는 포트를 저항으로 교환했습니다. 이제 우리 프로젝트에는 튜닝 할 두 개의 전위차계와 볼륨을 변경하는 하나가 있습니다. 채널을 조정하는 데 사용되는 전위차계는 Arduino nano와 연결됩니다. 냄비의 중앙 핀은 Arduino nano의 A0 핀에 연결되고 나머지 두 핀 중 하나는 5V에 연결되고 다른 핀은 GND에 연결됩니다. 다른 포트는 라디오의 볼륨을 제어하는 데 사용되며 위의 그림과 같이 연결됩니다.
Arduino의 A4 및 A5 핀은 RDA5807M의 SDA 및 SCL 핀에 연결됩니다. 수신기 모듈은 3.3V에서만 작동합니다. 따라서 Nano의 3v3 핀을 수신기 모듈의 VCC 핀에 연결하십시오. 연결이 이루어지면 내 설정은 다음과 같습니다.
Arduino FM 라디오 코드 설명
코드는 수신기 모듈을 초기화 한 다음 미리 설정된 주파수로 채널을 설정합니다. nano가 A0 핀에서 읽은 값이 변경되면 (포트 변경) 주파수가 변경되고 채널이 변경됩니다. 전체 코드는 페이지 끝에 제공됩니다.
RDA5807과 통신하는 데 필요한 와이어 라이브러리를 추가하여 프로그램을 시작합니다. 그런 다음 변수 "channel"에서 채널 값을 설정합니다. 라디오가 시작될 때마다 자동으로이 채널에 맞춰집니다.
#포함
다음으로 RDA5807 IC의 각 레지스터에 바이트를로드하여 초기 구성을 설정합니다. 이 시점에서 우리는 수신기를 재설정하고 있습니다.
uint8_t boot_config = {/ * 레지스터 0x02 * / 0b11000001, 0b00000011, / * 레지스터 0x03 * / 0b00000000, 0b00000000, / * 레지스터 0x04 * / 0b00001010, 0b00000000, / * 레지스터 0x05 * / 0b10001000, 0b00001111, / * 레지스터 0x06 * / 0b00000000, 0b00000000, / * 레지스터 0x07 * / 0b01000010, 0b00000010,};
장치를 재설정 한 후 장치를 조정할 수 있습니다. 채널을 조정하려면 처음 4 바이트 만 프로그래밍하면됩니다. 코드의이 부분은 채널을 원하는 주파수로 변경합니다. I2C에서 처음에는 전송을 시작하고 데이터를 쓰거나 읽은 다음 전송을 종료합니다. 이 수신기 IC에서는 I2C 인터페이스에 고정 된 시작 레지스터 (즉, 쓰기 작업의 경우 0x02h, 읽기 작업의 경우 0x0Ah)가 있다고 데이터 시트에 명시되어 있으므로 주소를 지정할 필요가 없습니다.
uint8_t tune_config = {/ * 레지스터 0x02 * / 0b11000000, 0b00000001, / * 레지스터 0x03 * / (채널 >> 2), ((채널 & 0b11) << 6)-0b00010000};
설정에서 부팅 구성 (재설정)을 초기화 한 다음 RDA5807M에 튜닝 구성 바이트를 기록하여 채널을 튜닝합니다.
void setup () {Serial.begin (9600); pinMode (A0, INPUT); / * RDA5807M FM 튜너에 연결: * / Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (boot_config, BOOT_CONFIG_LEN); Wire.endTransmission (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
주파수 튜닝을 위해 냄비를 사용할 때 문제가 발생했습니다. A0 핀이 읽는 값은 일정하지 않습니다. 원하는 값을 가진 소음이 있습니다. A0과 GND 사이에 연결된 0.1uF 세라믹 커패시터를 사용했지만 노이즈가 최소화되었지만 원하는 수준에 미치지 못했습니다. 그래서 코드를 약간 변경해야했습니다. 처음에는 소음의 영향을받는 판독 값을 기록했습니다. 노이즈의 최대 값이 10이라는 것을 알았습니다. 그래서 같은 핀의 새 값과 이전 값의 차이가 10보다 큰 경우에만 새 값을 고려하는 방식으로 프로그램을 작성했습니다. 그런 다음 원하는 채널에 맞 춥니 다.
void loop () {int channel1 = 187, avg = 0, newA; static int oldA = 0; int 결과 = 0; newA = analogRead (A0); if ((newA-oldA)> 10-(oldA-newA)> 10) {Serial.println (newA); if (newA! = oldA) {channel = channel1 + (newA / 10); myChangeChannel (채널); oldA = newA; }}} // 루프 끝
이 기능은 tune_config 어레이 의 바이트를 설정하는 데 사용되며 I2C 프로토콜을 사용하여 데이터를 RDA5807M IC로 전송합니다.
void myChangeChannel (int channel) {/ * 아무것도 반환되지 않으면 void else int * / tune_config = (채널 >> 2); tune_config = ((채널 & 0b11) << 6)-0b00010000; Wire.begin (); Wire.beginTransmission (RDA5807M_ADDRESS); Wire.write (tune_config, TUNE_CONFIG_LEN); Wire.endTransmission (); }
Arduino FM 라디오 작동
모듈의 전원이 켜지면 코드는 RDA5807-M IC를 재설정하고 원하는 사용자의 채널로 설정합니다 (참고:이 주파수는 주파수가 증가 할 기본 주파수로 간주됩니다). 전위차계 (A0에 연결됨)를 변경하면 Arduino Nano가 읽는 값이 변경됩니다. 새 값과 이전 값의 차이가 10보다 크면 코드에서이 새 값을 고려합니다. 이전 값에서 새 값의 변경에 따라 채널이 변경됩니다. 볼륨 증가 또는 감소는 핀 3과 GND 사이에 연결된 전위차계에 따라 다릅니다.
구성 및 코딩이 끝나면 자신의 FM 라디오를 갖게됩니다. FM 라디오의 전체 작동 은이 페이지 하단에 링크 된 비디오 에서 찾을 수 있습니다. 프로젝트를 즐겼고 유용한 것을 배웠기를 바랍니다. 이 프로젝트를 작동시키는 데 질문이 있으면 댓글 섹션에 남겨 두거나 다른 기술 지원을 위해 포럼을 사용할 수 있습니다.