Винтажный радиоприемник со шкалой и передачами времен 2-ой мировой войны

Цель этого проекта состоит в том, чтоб создать из старенького радио рабочее устройство. Но не попросту радиоприемник, а, чтоб он воспроизводил радиопередачи тех лет.

Давайте поглядим маленькое видео.

Для реализации проекта мастер будет употреблять Rasberry Pi. Но у него есть свои недочеты, в этом случае это отсутствие звуковой платы и аналоговых входов. Для решения препядствия он будет употреблять усилитель Adafruit I2S 3W класса D — MAX98357A, и MCP 3002.
Еще одна неувязка состоит в том, что если неправильно выключить Pi, то при последующем включении он может не загрузится. Эта неувязка решается установкой модуля On / Off Shim.

Инструменты и материалы:
-Старенькый радиоприемник;
-Наждачка;
-Шеллак;
-Термоусадочная трубка;
-Raspberry Pi Zero;
-Звуковой монофонический I2S модуль;
-Модуль On / Off Shim;
-Динамик;
-Блок питания;
-Микросхема MPC3002;
-Светодиод;
-Резистор 270R;
-Клавиша выключения;

Шаг 1-ый: радио
Радио мастер заполучил на ebay за 15 фунтов стерлингов.

Разобрал его. Спроектировал и напечатал на 3D-принтере новое шасси.

Шаг 2-ой: ремонт корпуса
Далее необходимо было отреставрировать древесный корпус. Поначалу мастер попробовал просто очистить его и сохранить старенькый вид, но покрытие было в таком состоянии, что пришлось зачищать корпус вполне.

Лак и старенькую краску он снял, используя средство Nitromors. Потом отшлифовал корпус наждачкой.

Отслоившиеся кусочки шпона подклеил при помощи столярного клея. Сколы заполнил клеем с опилками. Опосля высыхания отшлифовал корпус и покрыл отделочным материалом. Ткань (мед. система клеток и межклеточного вещества, объединённых общим происхождением, строением и выполняемыми функциями) закрывающую динамик мастер снял и замочил на ночь (то есть темное время суток) в моющем средстве. Потом постирал и прополоскал.

Железные детали очистил при помощи ультразвукового очистителя. Шкалу отполировал.

Шаг 3-ий: Raspberry Pi Zero
Далее он устанавливает Raspberry и i2S. По его словам, использования этого модуля наилучшее решение в этом случае.

Шаг 4-ый: шкала
Старенькую шкалу мастер снял и отсканировал. Обработал изображение в графической программке и поменял частоты на года с 1939 по 1945. Распечатал изображение. Также поменял старенькое пластиковое стекло.

Шаг 5-ый: АЦП
Как уже говорилось мастер установил MPC3002, который конвертирует аналоговый вход в 10-битное значение.
В сети много кодов для MPC3008, который является 4-канальным устройством, в отличии от двухканального MPC3002. Но мастер отыскал код и на MPC3002. Скачать его можно тут.
В этом случае один канал для громкости, а иной для выбора даты.

Шаг 6-ой: питание
Для включения и отключения устройства мастер употребляет в схеме Pimoroni ON / OFF. Для включения необходимо один раз надавить клавишу, для неопасного выключения надавить и подержать некое время.

Клавишу мастер установил в задней части корпуса. Установил светодиод для индикации работы устройства.
Для питания устройства мастер употребляет повербанк.

Шаг седьмой: сборка
Опосля установки всех деталей устройство было помещено в корпус. Установлены ручки.

Шаг восьмой: код и звуковые файлы
Мастер употребляет файлы MP3. Таковых файлов времен 2-ой мировой много на веб-сайте Archive.org.
С веб-сайта были скопированы и перенесены в сборники PI в главном анонсы тех лет.

Для работы устройства необходимо установить проигрыватель mpg123, также код. В конфигурации должны быть включены i2s и SPI. Код мастер расположил в каталог / home / pi / volume /

 Скетч#!/usr/bin/env python
# WW2 Radio — software to read MCP3002 ADC and convert to volume and year adjustment
# Ouput via i2S amplifier 20/10/2018 — Ajax Jones
# Code fragments supplied from https://learn.adafruit.com/adafruit-max98357-i2s-class-d-mono-amp/raspberry-pi-usage
# MCP 3002 Python https://github.com/CaptainStouf/Adafruit-raspi-python/blob/master/Adafruit_MCP3002/MCP3002.py

import RPi.GPIO as GPIO, time, os
from os import listdir
import subprocess
from time import sleep
import random
GPIO.setmode(GPIO.BCM)

# read the SPI data from the MCP3002 chip, 2 possible adc's (0 and 1)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
if ((adcnum > 1) or (adcnum < 0)):
return -1
GPIO.output(cspin, True)
GPIO.output(clockpin, False) # start clock low
GPIO.output(cspin, False) # bring CS low

commandout = adcnum << 1;
commandout |= 0x0D # start bit + single-ended bit + MSBF bit
commandout <<= 4 # we only need to send 4 bits here

for i in range(4):
if (commandout & 0x80):
GPIO.output(mosipin, True)
else:
GPIO.output(mosipin, False)
commandout <<= 1
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)

adcout = 0

# read in one null bit and 10 ADC bits
for i in range(11):
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout <<= 1
if (GPIO.input(misopin)):
adcout |= 0x1
GPIO.output(cspin, True)

adcout /= 2 # first bit is 'null' so drop it
return adcout

# Use these pinouts for the raspberry pi zero
SPICLK = 11
SPIMOSI = 10
SPIMISO = 9
SPICS = 8

# set up the SPI interface pins
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)

# Note that bitbanging SPI is incredibly slow on the Pi as its not
# a RTOS — reading the ADC takes about 30 ms (~30 samples per second)
# which is awful for a microcontroller but better-than-nothing for Linux

# list year , this retrieves a list of files from the specified directory and returns the list
def list_year(radio_year):
war_dir = '/home/pi/radio/WWII_News_'+radio_year
mp3_files = [ f for f in listdir(war_dir) if f[-4:] == '.mp3' ]
if not (len(mp3_files) > 0):
print "No mp3 files found!"
return mp3_files

print "—WW2 Radio —————————————————————"
last_read = 0 # store the last position of the volume pot
last_year = 0 # store the last position of the frequency pot
tolerance = 5 # allow a small tolerance so slight movement of the pots doesnt cause a change

while True:
trim_pot_changed = False
year_pot_changed = False

for adcnum in range(2):
ret = readadc(adcnum, SPICLK, SPIMOSI, SPIMISO, SPICS)
if (adcnum == 0): # read the pot for the year selector to see it has moved
year_adjust = абс(ret — last_year)
if ( year_adjust > tolerance+10):
year_pot_changed = True

if (year_pot_changed): # Values for the if then checks can be мейд after its built
subprocess.call(['killall', 'mpg123']) # kill any MP3 running
sleep(0.1);
if ret <=50:
war_year="1939"
elif (ret >50 and ret <150):
war_year="1940"
elif (ret >=150 and ret <250):
war_year="1941"
elif (ret >=250 and ret <350):
war_year="1942"
elif (ret >=350 and ret <450):
war_year="1943"
elif (ret >=450 and ret <550):
war_year="1944"
elif (ret >=550):
war_year="1945"

# save the value of the pot for the next time around the loop
last_year = ret
print ("Playing from "),
print (war_year),
print (" number of files="),
war_dir = '/home/pi/radio/WWII_News_'+war_year+'/'
play_list = list_year(war_year)
num_of_files = len(play_list)
print num_of_files
play_file = random.randint(1,num_of_files) # randomly select one of the files to play
war_mp3 = war_dir + play_list[play_file]

subprocess.Popen(['mpg123', war_mp3]) # Use mpg123 as the player for the audio
sleep (0.1); # provide a slight pause before continuing

if (adcnum == 1): # read the volume pot
pot_adjust = абс(ret — last_read)
if ( pot_adjust > tolerance):
trim_pot_changed = True

if ( trim_pot_changed ):
set_volume = ret / 10.24 # convert 10bit adc0 (0-1024) pot value into a 0-100 volume level
set_volume = round(set_volume)# round out decimal value
set_volume = int(set_volume) # cast volume as integer

# Use the value from the pot to send a level to the amixer prog
print 'Volume = {volume}%' .format(volume = set_volume)
set_vol_cmd = 'sudo amixer cset numid=1 — {volume}% > /dev/null' .format(volume = set_volume)
os.system(set_vol_cmd) # set volume

# save the potentiometer reading for the next loop
last_read = ret

# A pause after changing the volume so we dont act on too many changes if the pot changes fast
time.sleep(0.5)
Для автозагрузки ПО (то есть программное обеспечение — комплект программ для компьютеров и вычислительных устройств) при запуске устройства необходимо выполнить последующую команду
sudo crontab -e p>
Потом ввести
@reboot python /home/pi/volume/year.py & p>
При последующей загрузке все обязано заработать.
В принципе все готово, в планах мастера-самодельщика создать очередной радиоприемник с возрастом и передачами «галлактической гонки» меж СССР (Союз Советских Социалистических Республик, также Советский Союз — государство, существовавшее с 1922 года по 1991 год на территории Европы и Азии) и США (Соединённые Штаты Америки — государство в Северной Америке). Начиная от пуска первого спутника Земли и заканчивая посадкой на Луну.

Источник (Source)