산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

FM 라디오

구성품 및 소모품

SparkFun FM 튜너 기본 브레이크아웃 - Si4703
× 1
SparkFun 스피커 - 0.5와트(8옴)
작은 라디오 프로젝트를 위한 훌륭한 사운드 스피커
× 1
Adafruit Monochrome 0.96" 128x64 OLED 그래픽 디스플레이
대비가 매우 좋은 멋진 작은 디스플레이
× 1
Texas Instruments LM386 - 오디오 증폭기 - DIP-8
소규모 배터리 구동 오디오 프로젝트를 위한 유명한 연산 증폭기
× 1
Arduino Nano R3
× 1
Adafruit 멤브레인 1x4 키패드
× 2
Adafruit 4채널 I2C 양방향 로직 레벨 변환기
사용하지는 않았지만 작동해야 합니다.
× 1
F 커넥터용 텔레스코픽 안테나 FM
× 1
케너블 패널 마운트 F형 나사
× 1

이 프로젝트 정보

어렸을 때 나는 AM 라디오를 만들곤 했지만 FM 라디오를 제대로 만들 수 없었습니다. 그것들은 너무 복잡했습니다. 요즘에는 칩에 완전한 FM 라디오 튜너를 얻을 수 있지만 이 칩은 표면 실장 구성 요소이며 취미로 작업하기가 어렵습니다. 다행히 Sparkfun은 모든 핀을 분리하는 Silicon Laboratories Si4703 FM 라디오 튜너 칩(데이터시트)에 대한 돌파구를 마련했습니다. 이 브레이크아웃을 중심으로 완전한 FM 라디오를 구축하고 Arduino를 사용하여 내장된 2선식 제어 인터페이스를 통해 튜너 기능을 제어하는 ​​방법을 보여 드리겠습니다. Sparkfun은 이를 쉽게 프로그래밍할 수 있는 완전한 라이브러리를 제공합니다.

동시에 매우 높은 명암비와 매우 낮은 전력 소비로 멋진 작은 OLED 디스플레이를 프로젝트에 추가했습니다. 마지막으로 최소한의 부품으로 훌륭한 사운드의 모노 오디오 앰프를 만드는 방법을 보여 드리겠습니다. 완성된 라디오는 3개의 AA 배터리로 여러 시간 동안 작동합니다.

Sparkfun FM 튜너 기본 브레이크아웃 및 I2C 직렬 버스

기본 브레이크아웃은 작업하기 쉽습니다. 브레드보드와 함께 브레이크아웃을 사용할 수 있도록 먼저 수 헤더에 납땜합니다. 아래 핀 레이아웃을 참조하십시오. 현재로서는 1미터의 가는 와이어에 납땜하는 것이 ANT의 안테나 역할을 합니다.

<울>
  • LOUT 및 ROUT은 앰프에 연결할 왼쪽 및 오른쪽 출력 채널입니다.
  • (자신만의 앰프를 만들고 싶지 않다면 헤드폰과 직접 사용할 수 있는 평가 보드를 대신 구입할 수 있습니다.)

    <울>
  • 공급 전압 Vcc는 +3.3V입니다.
  • <울>
  • GND는 접지 또는 0볼트입니다.
  • Si4703에는 직렬 통신을 통해 Arduino에서 튜너를 제어할 수 있는 직렬 버스인 2선 인터페이스가 있습니다. 보다 정확하게는 버스를 I2C(Inter-integrated circuit, I-squared-C 또는 I-two-C로 발음)라고 하며 두 개의 양방향 라인만 사용합니다.

    <울>
  • 직렬 데이터 라인(SDA) 및
  • <울>
  • 직렬 클록 라인(SCL).
  • <울>
  • 또한 리셋 라인(RST)이 제공됩니다.
  • Si4703에서는 SDA를 SDIO라고 하고 SCL을 SCLK라고 합니다. 모든 Arduino에는 I2C가 내장되어 있습니다. I2C 버스에 대해 더 알고 싶다면 Tom Igoe와 Jeff Feddersen이 훌륭한 비디오를 만들었습니다. I2C 버스에서 Arduino는 마스터 역할을 하는 반면 Si4703과 OLED 디스플레이는 슬레이브 역할을 합니다.

    I2C 버스 전압 및 Arduino 선택

    I2C 버스의 Si4703 및 OLED 디스플레이에 사용되는 전압은 3.3V입니다. 이러한 이유로 Sparkfun은 연결 가이드에서 3.3볼트 Arduino를 사용하도록 조언합니다. 이것은 USB 커넥터가 없고 FTDI 브레이크아웃으로 프로그래밍해야 하기 때문에 프로그래밍하기가 조금 더 어려운 Arduino Pro Mini를 사용한다는 것을 의미합니다. 그러나 또 다른 문제가 있습니다. Arduino Pro Mini는 Arduino Uno 또는 Nano의 절반 속도인 8MHz에서 실행됩니다. 테스트 결과 OLED 디스플레이를 구동하기에는 너무 느린 것으로 나타났습니다. 디스플레이를 유지하고 싶었기 때문에 I2C 버스에 5V 신호 레벨이 있는 Arduino Nano(16MHz)를 사용하고 양방향 I2C 로직 레벨 변환기(I2C-shifter)를 사용하여 3.3V 버스 신호에 연결하기로 결정했습니다. 디스플레이 및 라디오 칩. 나는 프로젝트에서 각각 사용했던 두 개의 신호와 함께 I2C 시프터를 몇 개 가지고 있었습니다. SDA, SCL 및 RST의 총 세 가지 신호를 레벨 시프트해야 합니다. 두 개의 I2C 시프터를 사용해야 했습니다. (위의 설명에서 일부 케이블링을 절약하는 데 도움이 될 수 있는 4개의 신호가 있는 I2C 시프터에 연결했습니다).

    Nano는 Uno와 거의 동일하지만 훨씬 더 작은 공간을 차지합니다. 원하는 경우 대신 Uno를 사용할 수 있습니다. 나는 첫 번째 테스트를 위해 그렇게 했다. 둘 다 USB 커넥터가 있으며 Arduino IDE와 함께 사용하기 쉽습니다.

    무선 및 디스플레이에 대한 Arduino 연결 회로도

    다음으로 Nano 주변의 배선과 I2C 버스 연결의 세부 사항을 살펴보겠습니다. (점이 없으면 와이어가 교차합니다.)

    보시다시피 이 프로젝트는 3개의 AA 배터리(4.5볼트)로 구동됩니다. 배터리는 전압 조정기를 우회하여 Arduino Nano의 5V 핀에 직접 연결됩니다. 이런 식으로 Nano는 3개의 AA 배터리로 행복하게 작동합니다. 경고! USB를 통해 Nano를 컴퓨터에 연결하기 전에 항상 배터리를 분리하십시오! 그렇지 않으면 컴퓨터의 5볼트가 배터리와 단락됩니다. 첫 번째 테스트 단계에서 배터리 없이 USB 전원 공급 장치에서 회로를 실행하십시오! 안전하게 플레이하려면 6개의 AA 배터리(9V)를 사용하고 플러스 극을 Nano의 VIN 핀(5V 핀 대신)에 연결하세요. . 그렇게 하면 USB 케이블을 연결할 때 Nano의 전원 관리가 자동으로 배터리를 끕니다. (대신 9볼트 블록 배터리를 사용할 수 있지만 몇 시간만 사용할 수 있습니다.)

    Arduino SDA(A4) 및 SCL(A5)은 I2C 시프터의 5V 쪽에 연결됩니다. 또한 D2를 RST 신호로 사용합니다. I2C 시프터의 3.3볼트 쪽에서 Si4703의 SDIO, SCLK 및 RST에 연결합니다. OLED 디스플레이의 경우 SDA와 SCL에 연결하면 충분합니다. (저는 banggood.com에서 노란색(상단 행)과 파란색의 두 가지 색상이 있고 RST 핀이 없기 때문에 구입했습니다.)

    모든 구성 요소를 Nano의 3.3V 출력과 접지에 연결합니다. I2C 시프터는 고전압 측에서 5볼트가 더 필요합니다.

    IO 핀 D5-D12는 두 개의 키패드에 연결됩니다. 버튼을 누르면 입력이 접지에 연결됩니다.

    저전압 오디오 증폭기 LM386

    LM386 칩을 사용하여 모노 앰프를 구축했습니다. LM386은 70년대부터 있었습니다. 저전압 소비자 애플리케이션(데이터시트)에 사용하도록 설계된 전력 증폭기입니다. 이득은 외부 부품 수를 낮게 유지하기 위해 내부적으로 20으로 설정되지만 핀 1과 8 사이에 외부 저항과 커패시터를 추가하면 이득이 20에서 200 사이의 값으로 증가합니다. 우리는 가장 낮은 이득인 20, 8옴 스피커를 사용한다면 충분히 높은 수치입니다.

    프로젝트의 오디오 증폭기 부분에 대한 개략도는 다음과 같습니다.

    먼저 Si4703을 살펴보겠습니다. 왼쪽에는 Arduino에 대한 I2C 신호 연결이 표시됩니다. 오디오 출력 채널은 다음과 같이 연결해야 합니다. 저항 R4는 LOUT에 연결되고 R5는 ROUT에 연결됩니다. 그런 다음 두 신호가 MONO 신호로 결합됩니다. 브레이크아웃 보드의 출력에는 커패시터가 있으므로 추가할 필요가 없습니다. R2 및 R3은 전압 분배기를 정의하여 증폭기로의 입력 신호 레벨을 감소시킵니다. 물론 R2와 R3을 전위차계로 교체하고 볼륨을 조절하는 데 사용할 수 있습니다. 그러나 우리는 볼륨을 디지털 방식으로 제어하고 싶습니다. Si4703 출력 레벨은 I2C에 대해 1에서 15까지 단계적으로 증가할 수 있습니다. R2/R3을 사용하면 다양한 저항을 실험하여 이를 증폭기에 맞출 수 있습니다. 예를 들어 R3를 높이면 볼륨이 커집니다.

    회로는 데이터 시트에서 직접 가져옵니다. C2는 최소 220μF여야 합니다. 값이 작을수록 저음 응답이 약화됩니다. 베이스를 높이고 싶다면 데이터 시트를 살펴보십시오. 브레드보드에 회로를 만들고 구성요소를 추가/제거하는 실험을 합니다. C3은 칩 가까이에 배치해야 합니다. C3 및 C1은 선택 사항입니다.

    유튜브에는 LM386 프로젝트에 대한 많은 동영상이 있으며 많은 사람들이 나쁜 소리에 대해 불평합니다. 그들 대부분은 적절한 지상 배치가 부족할 것입니다. 회로도를 보면 입력 접지를 출력 접지와 어떻게 분리했는지 알 수 있습니다. 이는 매우 중요합니다. 그들은 칩의 접지 핀인 핀 4에서 만납니다. 이에 대해 자세히 알아보려면 JohnAudioTech의 이 비디오(전체 LM386 프로젝트에 대한 비디오)를 시청하십시오.

    LM386N-1은 최소 4볼트가 필요하고 수백 mW를 제공합니다. 저는 이것을 3개의 AA 배터리(4.5볼트)로 실행하고 1에서 10 사이의 볼륨을 변경할 수 있으며 정말 좋은 소리를 냅니다. 그러나 이러한 낮은 공급 전압의 경우 4 Ohm이 아닌 8 Ohm 스피커를 사용하는 것이 매우 중요합니다. 볼륨을 15로 높이면 소리가 왜곡되기 시작합니다. 라디오를 정말 크게 재생하려면 공급 전압을 9볼트로 높이십시오.

    프로토타입

    먼저 전체 프로젝트를 두 개의 브레드보드에 구축하는 것이 좋습니다. Arduino, I2C 시프터 및 OLED 디스플레이를 하나의 브레드보드에 함께 유지하고 Si4703 브레이크아웃과 오디오 증폭기를 다른 브레드보드에 함께 배치하여 음향 왜곡을 최소화합니다. 내 첫 번째 프로토타입에서 오디오 부분에 긴 신호 케이블을 사용하여 Arduino에 가까운 Si4703을 사용했고(그림 참조) 이로 인해 왜곡이 발생했습니다.

    디스플레이와 라디오 칩에 전원을 공급하는 Arduino의 조절된 3.3볼트 출력으로 USB에서 Arduino에 전원을 공급합니다. 배터리(4.5 - 9볼트)로 LM386에 전원을 공급합니다.

    프로그램 코드

    다음 라이브러리가 포함되어야 합니다.

    #include  #include  #include  #include  #include   

    라이브러리 설치 방법이 어려우시면 다음 가이드를 참고하세요. Sparkfun 라이브러리는 여기에서 찾을 수 있으며 모든 작은 세부 사항에 신경 쓰지 않고도 Si4703과 통신할 수 있는 고급 기능을 제공합니다. 튜토리얼이 포함된 Adafruit 디스플레이 라이브러리는 여기에서 찾을 수 있습니다.

    다음으로 몇 가지 정의를 내려야 합니다.

    // 라디오의 입력 버튼 #define volDown 9 #define volUp 10 #define channelDown 11 #define channelUp 12 // Si4703 라디오 칩 #define resetPin 2 #define SDIO A4 #define SCLK A5 Si4703_Breakout radio(resetPin, SDIO, SCLK); #define SI4703Address 0x10 // Si4703 I2C 주소.  

    #define을 사용하면 소스 코드를 더 읽기 쉽게 만들 수 있습니다. volDown이 핀 9를 참조한다고 정의한 후 D9를 의미할 때마다 volDown을 작성합니다.

    다음으로 설정 섹션을 살펴보겠습니다.

    // 변수 정의 int channel; 정수 볼륨; void setup() { // 입력에 내부 풀업 저항 설정 pinMode(volDown, INPUT_PULLUP); 핀모드(볼륨업, INPUT_PULLUP); 핀모드(채널업, INPUT_PULLUP); 핀모드(채널다운, INPUT_PULLUP); // 라디오 radio.powerOn() 초기화; 채널 =882; radio.setChannel(채널); 볼륨 =4; radio.setVolume(볼륨); }  

    핀 9-12는 입력 핀으로 정의됩니다. INPUT_PULLUP 매개변수는 +5V에서 입력 핀으로 내부 풀업 저항(ATmega 칩 내부)을 연결합니다. 결과적으로 버튼을 누르지 않는 한 핀의 신호 레벨은 HIGH가 됩니다(누른 버튼 =LOW).

    Sparkfun 라이브러리를 사용하면 주요 기능인 powerOn(), setChannel() 및 setVolume()을 사용하여 I2C를 통해 라디오를 쉽게 제어할 수 있습니다.

    메인 루프는 버튼을 누른 다음 그에 따라 조치를 취합니다.

    void loop() { // 볼륨 낮추기 if (digitalRead(volDown) ==LOW) { if (volume> 0) volume--; radio.setVolume(볼륨); 업데이트디스플레이(); 지연(100); } // 볼륨 업 if (digitalRead(volUp) ==LOW) { if (volume <15) volume++; radio.setVolume(볼륨); 업데이트디스플레이(); 지연(100); } // 채널 다운 if (digitalRead(channelDown) ==LOW) { channel =radio.seekDown(); 업데이트디스플레이(); 지연(100); } // 채널 업 if (digitalRead(channelUp) ==LOW) { channel =radio.seekUp(); 업데이트디스플레이(); 지연(100); } }  

    아래의 전체 소스 코드를 살펴보십시오. 여기에는 미리 설정된 방송국(좋아하는 방송국을 넣을 수 있는 곳)을 위한 4개의 버튼과 거의 모든 사용 가능한 RAM을 사용하는 OLED 디스플레이를 업데이트하는 데 필요한 모든 코드가 포함되어 있습니다. SSD1306 라이브러리에 대해 배우고 싶다면 훌륭한 Adafruit 튜토리얼을 참조하십시오. 라이브러리는 소프트웨어를 통해 디스플레이의 화면 크기를 결정할 수 없습니다. Adafruit_SSD1306.h를 설치한 후 지정해야 합니다. 라이브러리 파일을 열고 주석의 지침을 읽고 그에 따라 파일을 편집하십시오.

    소스 코드에는 AVR 칩 내부의 내부 1.1볼트 기준과 비교하여 배터리 수준을 측정하는 "고급" 기능이 하나 있습니다. 우리는 배터리로 작동하기 때문에 배터리 전압을 측정할 일정한 5볼트 기준 전압이 없습니다. 더 자세히 알고 싶으시다면 Secret Arduino Voltmeter and Gammon 포럼 글을 참고하세요.

    브레드보드 프로토타입에서 완성된 라디오까지

    여기까지 왔다면 두 개의 브레드보드에 완전한 기능의 프로토타입이 있는 것입니다. 회로를 두 개의 perfboard로 옮기고 전체 라디오를 멋진 프로젝트 상자에 넣습니다. 이전에 이 작업을 수행하지 않았다면 시도하는 것을 두려워하지 마십시오. 당신이 정말로 잘못할 수 있는 것은 아무것도 없으며 진행하면서 필요한 기술을 배우게 됩니다. Adafruit의 Collin은 Breadboards&perfboards와 Perfboard 프로토타이핑이라는 두 가지 멋진 소개 동영상을 만들었습니다.

    나는 하나의 perfboard에 Nano를 I2C-shifter와 함께 넣기로 결정했습니다(저는 두 개의 shifter를 사용해야 했습니다. 위 참조).

    이 프로토타입 perfboard를 만들기 위해 튜토리얼을 따랐습니다. 이 튜토리얼은 자세히 공부할 것을 권장합니다:인쇄 회로 기판을 사용하지 않고 프로토타이핑하는 방법. 특히 중요한 것은 3단계:배선 계획을 세우는 것입니다! 계획은 가장 중요한 단계이자 실패와 성공의 차이입니다. 몇 가지 추가 팁:사진에서 볼 수 있듯이 너무 굵고 작업하기 어려운 검은색 22AWG 와이어를 사용했습니다. 대신 다른 색상의 얇은 "Wire Wrapping Wire"(30AWG)를 구입하십시오. 그리고 더 큰 perfboard를 사용하십시오! 핀 헤더를 만들고 Dupont 점퍼 와이어를 사용하여 여러 부품을 연결했습니다.

    두 번째 perfboard에 Si4703과 오디오 증폭기를 함께 놓습니다. 다음은 영감으로 사용할 수 있는 LM386 증폭기에 대한 간단한 자습서입니다. Schematics에서 Veroboard까지. 그러나 LM386에 IC 소켓을 사용하는 것이 좋습니다! 또는 JohnAudioTech는 신호 접지에서 분리된 전원 접지가 있는 좋은 레이아웃이 포함된 완전한 LM386 증폭기 프로젝트를 위한 멋진 비디오를 만들었습니다.

    다음으로 라디오를 위한 멋진 프로젝트 인클로저가 필요합니다. 다시 말하지만, Collin은 이 비디오에서 그 방법을 보여줍니다. 드릴 위치를 표시하기 위해 마스킹 테이프가 있는 아이디어가 특히 마음에 들었습니다. 너무 끈적거리지 않는 페인터스 테이프를 샀다. 마스킹 테이프와 드릴 외에 글루건을 사용합니다. 스피커, perfboards, 배터리 팩 등을 인클로저에 붙인 다음 Dupont 점퍼 와이어로 부품을 연결하기만 하면 됩니다. 최종 제품은 다음과 같습니다.

    나는 너무 낙관적이었고 보시는 것처럼 다소 작은 프로젝트 상자를 샀습니다. 전면 패널의 디스플레이를 위한 정사각형 구멍을 만들기 위해 내부에서 Stanley 블레이드로 자릅니다(외부에 못생긴 자국을 피하기 위해). 아주 우아하지는 않지만 잘 작동했습니다. 그런 다음 뜨거운 접착제로 디스플레이를 구멍에 붙였습니다. 전면 패널에 스피커 크기를 표시하고 사운드를 위해 3mm 구멍을 많이 뚫고 스피커를 후면에서 접착했습니다.

    사진에서 여전히 안테나 와이어를 볼 수 있습니다. 다음으로 패널 장착형 F형 커넥터와 텔레스코픽 FM 안테나를 구입했습니다. 안테나의 길이가 50cm에 불과하지만 수신 상태가 매우 좋고 작은 스피커의 소리도 놀라울 정도로 좋습니다. 가장 놀라운 사실은 며칠 동안 내 작은 라디오를 들었지만 아직 배터리를 한 번도 교체하지 않았다는 것입니다.

    기타 라디오 프로젝트

    나는 나중에 비디오에서 그의 라디오를 위한 멋진 나무 프로젝트 상자도 만든 Great Scott의 비디오를 보고 처음에 이 프로젝트를 하도록 영감을 받았습니다. 그러나 내 라디오에 대한 자세한 내용은 John Owen의 Si4703 Pocket FM Radio입니다. 그가 Sparkfun 브레이크아웃을 사용하므로 그의 프로젝트 설명을 자세히 살펴봐야 합니다. Mono 기능과 배터리 전압 측정에 그의 소스 코드를 사용했습니다.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    FM 라디오
    Arduino Nano용 소스 코드가 있는 Github 저장소https://github.com/Notthemarsian/FM-radio

    회로도

    Fritzing 도표 FM 라디오
    원본 Fritzing 파일 및 사진 모두 / PDFhttps://github.com/Notthemarsian/FM-radio/tree/master/Fritzing%20diagrams

    제조공정

    1. 클래스 B 오디오 증폭기
    2. 555 히스테리시스 발진기
    3. 무선 회로
    4. 무선 원리
    5. 라디오
    6. 지상 무선 전파
    7. UnifiedWater v1
    8. Pi-Arduino 인터넷 라디오
    9. Arduino 기반 샤워 캐빈 FM 라디오
    10. 원자 기반 무선 통신