«Магический глаз» тёплых ламповых времён — эмуляция на ардуино. Часть 2

df978c77ca845ed366c62b539ba14f1b.JPG

часть 1

В первой публикации я описывал эмуляцию на Ардуино и маленьком дисплее работы пальчиковой индикаторной лампы 6E1П. Люди постарше помнят эти красивые зелёные огоньки в ламповой технике — магнитофонах, усилителях, радиолах, радоприемниках.

Предшественником индикатора 6Е1П была октальная лампа 6Е5С. Это копия американской лампы 6E1 фирмы RCA разработки 30-х г одов.

Единственное советское устройство, которое я застал, имевшее этот индикатор — это неубиваемый железобетонный магнитофон «Комета-201»:

22445b7fb919642851f7534279419b19.jpg

Еще эти индикаторы устанавливались в ламповых радиоприемниках и радиолах, которые во множестве выпускались в СССР. Давно это было.

В предыдущей статье я неосторожно пообещал выполнить эмуляцию 6E5С. Выполняю это обещание.

На самом деле поводом к работе послужило появление очень симатишного круглого LCD -дисплея GC9A01 работающего по SPI протоколу. Круглая форма прекрасно подходит для построения изображения индикаторной лампы, правда, размер этого дисплея значительно больше чем экран лампы.Ну, что поделать.

Чтобы добиться хорошего быстродействия я использовал контроллер ESP32:

7d11c955c83849e7dbc441a95a3c9aae.webp

Графика создана с помощью библиотеки Arduino_GFX. Для бОльшей плавности изображения использовалось скользящее усреднение входного сигнала по 20 выбркам с помощью библиотеки RunningAverage. Звукой входной сигнал подавался, как и в предыдущей статье, от микрофонного усилителя Max9814.

Вот упрощенная схема соединения деталей:

8757d3d8986f0e357b8015d9219be165.jpg

С программной точки зрения эта эмуляция гораздо проще чем предыдущая, изображение строится из единственного динамического элемента (треугольника с вершиной в центре экрана), двух статичных узких треугольников расположеных горизонтально по бокам от центра, и трёх почти перекрывающихся кругов в центре, один центральный серый, изображающий ширму экрана, и два других — белый чуть смещенный влево-вверх и черный, смещенный на несколько пикселей вправо-вниз, это моя попытка придать ширме слегка «объемный» вид. Не уверен, что удачная. Выглядит вот так:

cd8361fb2641a5d45d43988619f64f1e.jpg

Код ардуино-программы:

/************************************************************
* WHAT: Magic eye emulator FPS
* GC9A01
* library Arduino_GFX
* DETAILS:  
* ESP32 with milrophone on pin 34
* rotated 180 degree
* DC - 27, CS  - 5, RS - 33, indexed canvas
 */
/************************************************************/
#include 
#include "RunningAverage.h"
#define TFT_RST 33

Arduino_DataBus *bus = new Arduino_ESP32SPI(27 /* DC */, 5 /* CS */, 18 /* SCK */, 23 /* MOSI */, -1 /* MISO */, HSPI /* spi_num */);
Arduino_G *output_display = new Arduino_GC9A01(bus, TFT_RST, 2 /* rotation */, true /* IPS */);
Arduino_GFX *gfx = new Arduino_Canvas(240 /* width */, 240 /* height */, output_display);
RunningAverage myRA(20);


uint16_t r,r0;
//uint16_t d=0;
//uint16_t counter=0;
uint16_t v_inVal;
uint16_t i;
float p,p_avg;

void setup() {
    Serial.begin(115200);
    while (!Serial)    
    Serial.print("Sketch:   ");   Serial.println(__FILE__);
    Serial.print("Uploaded: ");   Serial.println(__DATE__);
    gfx->begin(80000000);
    r = gfx->width();
    r0=r/2;
    analogSetAttenuation(ADC_6db);  
    myRA.clear();       
}

void drawE5(uint16_t v_i){
  gfx->fillScreen(gfx->color565(37,234,61));
  gfx->fillTriangle(r0,r0+10, r0-v_i,r,r0+v_i,r,gfx->color565(28,152,53)); 
  gfx->fillTriangle(0,r0, r0,r0-8,r0,r0+8,gfx->color565(20,140,40));    
  gfx->fillTriangle(r,r0, r0,r0-8,r0,r0+8,gfx->color565(20,140,40));
  gfx->fillCircle(r0+2,r0+2, 52, gfx->color565(40,40,40));  
  gfx->fillCircle(r0-3,r0-2, 52, gfx->color565(150,162,160));  
  gfx->fillCircle(r0,r0, 52, gfx->color565(71,76,69));
  gfx->flush();            
}


void loop() {
  p=analogRead(34);
  myRA.addValue(p);
  p_avg=myRA.getAverage();
  i=map(p_avg,50,1000,120,20);
 // i=map(p_avg,50,1200,20,200);
  if (i<0) i=0;
  drawE5(i);
} 

Устройство собрано на перфорированой плате, монтаж проводной. Вот несколько снимков иллюстрирующих сборку:

140b9a9f5e84d44db82d91c1bb302d0a.jpg

монтаж проводами:

4805898706cdb3941d9c60e598e9b08d.jpg

устройство в сборе:

6b7ddf5f007ac167d6b2ef30a4873637.jpg

короткое видео работы:

© Habrahabr.ru