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

스파크펀 & 아두이노 부품으로 신뢰할 수 있는 FM 라디오 만들기

부품 및 소모품

스파크펀 FM 튜너 베이직 브레이크아웃 - Si4703 × 1
스파크펀 스피커 - 0.5W (8Ω) × 1
아다프루트 흑백 0.96" 128x64 OLED 그래픽 디스플레이 × 1
텍사스 인스트루먼트 LM386 - 오디오 앰프 - DIP-8 × 1
아두이노 나노 R3 × 1
아다프루트 멤브레인 1x4 키패드 × 2
아다프루트 4채널 I2C 양방향 로직 레벨 컨버터 × 1
망원 안테나 FM (F 커넥터용) × 1
케네이블 패널 마운트 F 타입 나사 × 1

프로젝트 소개

어릴 적 AM 라디오는 만들어봤지만, FM 라디오는 너무 복잡해서 도전하지 못했습니다. 요즘은 FM 라디오 튜너가 칩 하나로 구현되지만, 이 칩들은 표면 실장 부품이라 취미로 다루기 어렵습니다. 다행히 스파크펀에서 실리콘 래버러토리스 Si4703 FM 라디오 튜너 칩(데이터시트)용 브레이크아웃 보드를 제공하여 모든 핀을 쉽게 사용할 수 있게 했습니다. 이 브레이크아웃을 중심으로 완전한 FM 라디오를 만들고, 내장된 2선 제어 인터페이스를 통해 아두이노로 튜너 기능을 제어하는 방법을 보여드리겠습니다. 스파크펀에서 완벽한 라이브러리를 제공하여 프로그래밍이 매우 쉽습니다.

동시에 매우 높은 대비와 낮은 전력 소비를 자랑하는 작은 OLED 디스플레이를 추가했습니다. 마지막으로 최소한의 부품으로 훌륭한 사운드의 모노 오디오 앰프를 만드는 방법도 소개합니다. 완성된 라디오는 AA 배터리 3개로 수시간 동안 작동합니다.

스파크펀 FM 튜너 베이직 브레이크아웃과 I2C 시리얼 버스

기본 브레이크아웃은 사용하기 쉽습니다. 먼저 브레드보드에서 사용하기 위해 수컷 헤더를 납땜하세요. 아래 핀 배치를 참조하세요. ANT 핀에 가는 선 1미터를 납땜하면 임시 안테나로 사용할 수 있습니다.

Si4703은 2선 인터페이스를 가지며, 이는 아두이노에서 시리얼 통신으로 튜너를 제어할 수 있는 시리얼 버스입니다. 정확히는 I2C(Inter-integrated circuit; I-스퀘어드-C 또는 I-투-C로 발음)이며, 양방향 2선만 사용합니다:

여기에 리셋 라인(RST)이 추가됩니다. Si4703에서 SDA는 SDIO, SCL은 SCLK라고 부릅니다. 모든 아두이노에 I2C가 내장되어 있습니다. I2C 버스에 대해 더 알고 싶다면 톰 이고와 제프 페더슨의 훌륭한 영상을 참고하세요. 우리 I2C 버스에서 아두이노는 마스터 역할을 하고, Si4703과 OLED 디스플레이는 슬레이브 역할을 합니다.

I2C 버스 전압과 아두이노 선택

Si4703과 OLED 디스플레이의 I2C 버스 전압은 3.3V입니다. 따라서 스파크펀 훅업 가이드에서는 3.3V 아두이노 사용을 권장합니다. 이는 USB 커넥터가 없어 FTDI 브레이크아웃으로 프로그래밍해야 하는 아두이노 프로 미니를 의미합니다. 하지만 문제가 있습니다: 프로 미니는 8MHz로 작동하여 우노나 나노(16MHz)의 절반 속도입니다. 테스트 결과 이 속도로는 OLED 디스플레이를 구동하기에 너무 느렸습니다. 디스플레이를 포기하고 싶지 않아서 5V 신호 레벨을 가진 아두이노 나노(16MHz)를 사용하고, 양방향 I2C 로직 레벨 컨버터(I2C 시프터)로 3.3V 버스 신호인 디스플레이와 라디오 칩에 연결하기로 했습니다. 2개 신호용 I2C 시프터를 몇 개 가지고 있었는데, SDA, SCL, RST 총 3개 신호를 레벨 시프트해야 해서 2개의 I2C 시프터를 사용했습니다. (위 설명에서 4신호용 I2C 시프터 링크를 걸었는데, 이걸 쓰면 배선을 줄일 수 있습니다.)

나노는 우노와 거의 동일하지만 훨씬 작은 풋프린트를 가집니다. 원한다면 우노를 써도 됩니다. 초기 테스트 때 우노를 썼는데, 둘 다 USB 커넥터가 있고 아두이노 IDE로 쉽게 사용할 수 있습니다.

회로도: 아두이노-라디오-디스플레이 연결

이제 나노 주변 배선과 I2C 버스 연결 세부 사항을 살펴보겠습니다. (점이 없으면 선이 그냥 교차하는 것입니다.)

보시다시피 프로젝트는 AA 배터리 3개(4.5V)로 구동됩니다. 배터리는 아두이노 나노의 5V 핀에 직접 연결되어 전압 레귤레이터를 우회합니다. 이렇게 하면 나노가 AA 배터리 3개로도 잘 작동합니다. 경고! 나노를 USB로 컴퓨터에 연결하기 전 반드시 배터리를 분리하세요! 그렇지 않으면 컴퓨터의 5V와 배터리가 단락됩니다. 초기 테스트 단계에서는 배터리 없이 USB 전원으로 회로를 돌리세요. 안전을 원한다면 AA 배터리 6개(9V)를 사용해 플러스 극을 나노의 5V 핀이 아닌 VIN 핀에 연결하세요. 그러면 나노의 전원 관리가 USB 연결 시 자동으로 배터리를 차단합니다. (9V 블록 배터리를 써도 되지만 몇 시간밖에 못 갈 수 있습니다.)

아두이노 SDA(A4)와 SCL(A5)는 I2C 시프터의 5V 측에 연결됩니다. 또한 D2를 RST 신호로 사용합니다. I2C 시프터의 3.3V 측에는 Si4703의 SDIO, SCLK, RST를 연결합니다. OLED 디스플레이는 SDA, SCL만 연결하면 충분합니다. (제가 산 건 banggood 제품으로 투톤(상단 노란색, 하단 파란색)이었고 RST 핀이 없었습니다.)

모든 부품을 나노의 3.3V 출력과 그라운드에 연결하세요. I2C 시프터는 고전압 측에 5V가 필요합니다.

IO 핀 D5-D12는 두 키패드에 연결됩니다. 버튼을 누르면 입력이 그라운드에 연결됩니다.

저전압 오디오 앰프 LM386

LM386 칩으로 모노 앰프를 만들었습니다. LM386은 1970년대부터 쓰인 칩으로, 저전압 소비자 가전용으로 설계된 파워 앰프입니다(데이터시트). 이득은 내부적으로 20으로 고정되어 외부 부품 수를 최소화하지만, 핀 1과 8 사이에 외부 저항과 커패시터를 추가하면 이득을 20~200 사이로 조절할 수 있습니다. 8Ω 스피커를 쓴다면 최저 이득 20으로도 충분합니다.

오디오 앰프 부분 회로도는 다음과 같습니다:

먼저 Si4703을 보세요. 왼쪽에는 아두이노와의 I2C 신호 연결이 표시되어 있습니다. 오디오 출력 채널 연결 방법은 다음과 같습니다: 저항 R4를 LOUT에, R5를 ROUT에 연결합니다. 두 신호는 모노 신호로 합쳐집니다. 브레이크아웃 보드 출력단에 이미 커패시터가 있으므로 추가할 필요 없습니다. R2, R3는 앰프 입력 신호 레벨을 낮추는 전압 분배기입니다. 물론 포텐쇼미터로 대체해 볼륨을 조절할 수도 있지만, 우리는 디지털로 볼륨을 제어하려 합니다. Si4703 출력 레벨은 I2C로 1~15단계 조절 가능합니다. R2/R3로 실험하며 앰프에 맞출 수 있습니다. 예를 들어 R3를 늘리면 볼륨이 커집니다.

이 회로는 데이터시트에서 그대로 가져왔습니다. C2는 최소 220µF여야 합니다. 더 작은 값은 저음 응답을 약화시킵니다. 저음을 부스트하고 싶다면 데이터시트를 참고하세요. 브레드보드에 회로를 구성하고 부품을 추가/제거하며 실험해보세요. C3는 칩 가까이 배치해야 합니다. C3와 C1은 선택 사항입니다.

유튜브에 LM386 프로젝트 영상이 많은데 소리가 나쁘다는 불평이 많습니다. 대부분 제대로 된 그라운드 레이아웃이 없어서입니다. 회로도를 보면 입력 그라운드와 출력 그라운드를 분리해둔 게 보이는데, 이게 매우 중요합니다. 둘은 칩의 그라운드 핀인 핀 4에서 만납니다. 더 알고 싶다면 JohnAudioTech의 영상(이 영상은 완전한 LM386 프로젝트)을 보세요.

LM386N-1은 최소 4V가 필요하고 수백 mW를 출력합니다. AA 배터리 3개(4.5V)로 구동하며 볼륨 1~10 사이에서 소리가 정말 좋습니다. 하지만 이렇게 낮은 전압에서는 8Ω(4Ω이 아닌) 스피커를 쓰는 게 꽤 중요합니다. 볼륨을 15로 올리면 소리가 찌그러지기 시작합니다. 정말 크게 듣고 싶다면 전압을 9V로 올리세요.

프로토타이핑

브레드보드 2개에 전체 프로젝트를 먼저 구성해보길 강력히 권장합니다. 아두이노, I2C 시프터, OLED 디스플레이는 한 브레드보드에, Si4703 브레이크아웃과 오디오 앰프는 다른 브레드보드에 가까이 배치해 어쿠스틱 왜곡을 최소화하세요. 첫 프로토타입에서 Si4703을 아두이노 가까이 두고 오디오 부분에 긴 신호 케이블을 썼더니 왜곡이 발생했습니다.

아두이노는 USB로 구동하고, 나노의 정류된 3.3V 출력으로 디스플레이와 라디오 칩에 전원을 공급하세요. LM386은 배터리(4.5~9V)로 구동하세요.

프로그램 코드

다음 라이브러리를 포함해야 합니다:

#include <SparkFunSi4703.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

라이브러리 설치 방법을 모른다면 이 가이드를 참고하세요. 스파크펀 라이브러리는 여기에 있으며, Si4703의 세세한 디테일을 몰라도 고수준 함수로 제어할 수 있게 해줍니다. 아다프루트 디스플레이 라이브러리와 튜토리얼은 여기에 있습니다.

다음으로 몇 가지 정의를 만듭니다:

// 라디오 입력 버튼
#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이라고 쓰면 됩니다.

이제 setup 부분을 봅시다:

// 변수 정의
int channel;
int volume;

void setup() {
  // 입력 핀에 내부 풀업 저항 설정
  pinMode(volDown, INPUT_PULLUP);
  pinMode(volUp, INPUT_PULLUP);
  pinMode(channelUp, INPUT_PULLUP);
  pinMode(channelDown, INPUT_PULLUP);

  // 라디오 초기화
  radio.powerOn();
  channel = 882; // 88.2 MHz
  radio.setChannel(channel);
  volume = 4;
  radio.setVolume(volume);
}

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

스파크펀 라이브러리로 powerOn(), setChannel(), setVolume() 같은 주요 함수로 I2C를 통해 라디오를 쉽게 제어할 수 있습니다.

메인 루프는 버튼 입력을 감지해 해당 동작을 수행합니다:

void loop() {
  // 볼륨 다운
  if (digitalRead(volDown) == LOW) {
    if (volume > 0) volume--;
    radio.setVolume(volume);
    UpdateDisplay();
    delay(100);
  }
  // 볼륨 업
  if (digitalRead(volUp) == LOW) {
    if (volume < 15) volume++;
    radio.setVolume(volume);
    UpdateDisplay();
    delay(100);
  }
  // 채널 다운
  if (digitalRead(channelDown) == LOW) {
    channel = radio.seekDown();
    UpdateDisplay();
    delay(100);
  }
  // 채널 업
  if (digitalRead(channelUp) == LOW) {
    channel = radio.seekUp();
    UpdateDisplay();
    delay(100);
  }
}

아래 전체 소스 코드를 보세요. 즐겨찾기 방송국용 4개 버튼과 OLED 디스플레이 업데이트 코드가 포함되어 있으며, 사용 가능한 RAM을 거의 다 씁니다. SSD1306 라이브러리에 대해 더 알고 싶다면 훌륭한 아다프루트 튜토리얼을 참고하세요. 라이브러리가 소프트웨어로 디스플레이 화면 크기를 자동 감지하지 못하니, Adafruit_SSD1306.h 설치 후 라이브러리 파일을 열어 주석의 지침을 읽고 파일을 수정해야 합니다.

소스 코드에는 AVR 칩 내부 1.1V 레퍼런스와 배터리 전압을 비교해 배터리 잔량을 측정하는 "고급" 기능이 하나 있습니다. 배터리로 구동하니 일정한 5V 레퍼런스 전압이 없어 배터리 전압을 측정할 기준이 없습니다. 더 알고 싶다면 Secret Arduino Voltmeter와 Gammon 포럼 글을 참고하세요.

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

여기까지 왔다면 두 브레드보드에 완전히 작동하는 프로토타입이 있습니다. 이제 기판 두 개로 회로를 옮기고 예쁜 프로젝트 박스에 라디오 전체를 넣어봅시다. 처음 해보는 거라도 두려워 마세요. 진짜로 잘못될 건 없고, 진행하면서 필요한 기술을 익히게 됩니다. 아다프루트의 콜린이 만든 두 입문 영상을 보세요: 브레드보드 & 퍼프보드와 퍼프보드 프로토타이핑.

나노와 I2C 시프터(위에서 설명했듯 2개 필요)를 한 퍼프보드에 올리기로 했습니다:

이 프로토타입 퍼프보드를 만들 때 인쇄 회로 기판 없이 프로토타이핑하는 방법 튜토리얼을 따랐는데, 자세히 공부해보길 추천합니다. 특히 3단계: 배선 계획 세우기! 계획이 가장 중요하고 성공과 실패를 가릅니다. 추가 팁: 검정 22 AWG 선을 썼는데 너무 두꺼워 작업하기 힘들었습니다(사진 참조). 대신 여러 색상의 얇은 "와이어 래핑 와이어"(30 AWG)를 구하세요. 그리고 더 큰 퍼프보드를 쓰세요! 핀 헤더를 만들고 듀폰 점퍼 와이어로 각 부분을 연결했습니다.

Si4703과 오디오 앰프를 두 번째 퍼프보드에 함께 배치하세요. LM386 앰프용 작은 튜토리얼을 참고하세요: 회로도에서 베로보드로. 하지만 LM386용 IC 소켓을 쓰는 게 좋습니다! 아니면 JohnAudioTech의 완전한 LM386 앰프 프로젝트 영상을 보세요. 좋은 레이아웃이 포함되어 있고 전원 그라운드와 신호 그라운드가 분리되어 있습니다.

이제 라디오용 멋진 프로젝트 인클로저가 필요합니다. 콜린이 이 영상에서 어떻게 하는지 보여줍니다. 특히 마스킹 테이프로 드릴 위치를 표시하는 아이디어가 좋았습니다. 저는 페인터즈 테이프(접착력이 약함)를 썼습니다. 마스킹 테이프와 드릴 외에 핫글루건을 쓰세요. 스피커, 퍼프보드, 배터리 팩 등을 인클로저에 붙이고 듀폰 점퍼 와이어로 부품들을 연결하면 됩니다. 최종 결과물은 이렇습니다:

낙관적으로 너무 작은 프로젝트 박스를 샀습니다. 전면 패널에 디스플레이용 정사각형 구멍을 내려고 스탠리 칼로 안쪽에서 잘랐습니다(바깥쪽에 보기 흉한 자국이 안 남게). 그다지 우아하진 않지만 잘 작동합니다. 핫글루로 디스플레이를 구멍에 고정했습니다. 전면 패널에 스피커 크기를 표시하고 3mm 구멍을 많이 뚫어 소리를 내보내게 한 뒤 스피커를 뒤에서 붙였습니다.

사진에서 아직 안테나 선이 보입니다. 나중에 패널 마운트 F 타입 커넥터와 망원 FM 안테나를 샀습니다. 안테나가 50cm밖에 안 되는데 수신 상태가 아주 좋고, 작은 스피커에서 놀랍게도 좋은 소리가 납니다. 가장 놀라운 건 며칠 동안 라디오를 들었는데 배터리를 한 번도 안 갈았다는 사실입니다.

다른 라디오 프로젝트들

처음 이 프로젝트 영감을 받은 건 그레이트 스콧의 영상을 보고서였는데, 나중에 나무 프로젝트 박스로 라디오를 만든 영상도 올렸습니다. 내 라디오와 세부 사항이 더 가까운 건 존 오웬의 Si4703 포켓 FM 라디오입니다. 스파크펀 브레이크아웃을 쓰니 그의 프로젝트 설명을 꼭 자세히 보세요. 모노 기능과 배터리 전압 측정 소스 코드는 그의 것을 참고했습니다.

코드

FM 라디오

아두이노 나노용 소스 코드 GitHub 저장소: https://github.com/Notthemarsian/FM-radio

회로도

프리칭 다이어그램 FM 라디오

원본 프리칭 파일들과 사진/PDF: https://github.com/Notthemarsian/FM-radio/tree/master/Fritzing%20diagrams

제조공정

  1. TL082 오피앰프로 고성능 클래스 B 푸시풀 오디오 앰프 제작
  2. 555 히스테레시스 발진기: 클래식 RC 멀티바이브레이터 제작
  3. 크리스탈·트랜지스터 라디오 회로: 기본 검파기부터 집적 AM/FM 수신기까지
  4. 라디오 기초: 전자기파 생성과 전송 원리
  5. 라디오 기술의 진화와 공학
  6. 지표면 무선 전파 전파: 무선 링크에 미치는 영향 이해
  7. UnifiedWater v1 - 아두이노 MKR GSM 1400 기반 완전 수질 모니터링 센서 키트
  8. 라즈베리 파이와 아두이노로 만드는 와이파이 인터넷 라디오: 전 세계 방송 청취
  9. 아두이노 나노로 만드는 방수 샤워 라디오: RDA5807, 노키아 LCD, PAM8403
  10. 원자 기반 무선 센서, 신호 방향 감지로 더 깨끗한 통신 구현