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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

часть 1

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

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

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

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

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

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

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

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

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

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

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

/************************************************************
* 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 <Arduino_GFX_Library.h>
#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);
} 

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

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

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

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

Источник: https://habr.com/ru/post/657883/


Интересные статьи

Интересные статьи

Продолжаем серию материалов про создание системы заметок. В этой части мы спроектируем и разработаем RESTful API Service на Golang cо Swagger и авторизацией. Будет много кода, ещё больше рефакторинга ...
Предлагаю ознакомиться с ранее размещенными материалами по проекту Starlink (SL): ‣ Часть 20. Внутреннее устройство терминала SL ‣ Часть 21. SL и проблемы поляризаци ‣ Часть 22. Пробл...
Привет! Меня зовут Петр Александров, я много лет работал руководителем проектов и живо интересовался вопросами календарного планирования, достижения дедлайнов и координац...
Здравствуйте. Представляю вам заключительную главу цикла. В ней пойдет речь о реализации самого парсера, его модулей, вроде функции анализа, построения стека и dom дерева. Помимо это...
Доброго времени суток, друзья! Простые одностраничные приложения, основанные на React, Vue или чистом JavaScript, окружают нас повсюду. Хороший «одностраничник» предполагает соответствующи...