ARDUINO FELD HELL  ou HELLSCHREIBER

O que é ?

Um pouco mais sobre Feld Hell (ingles) ...



Imagem do display recebendo Feld Hell, com o arduino "CQ CQ CQ DE PY2OHH".

Video deste DECODIFICADOR no YOUTUBE

O Procurando na WEB achei o WA6PZB Dan em seu BLOG , no seu blog o Dan  mostra como  receber o feld hell com o arduino.

Estudando o sketch eu modifiquei a parte do display para acertar com o meu display TFT simples, que é barato e  fácil de  programar.  Meu display é de  128x160 pixels, não é uma maravilha  mas pelo preço de cerca de 4U$  tem um desempenho muito bom.

Esquema :

No site do WA6PZP não aparece o esquema do adaptador de entrada (link quebrado), então desenvolvemos um. Apesar de ter trabalhado com audio diretamente na entrada do arduino, o resultado com o LM567 se confirmou como melhor e sem o ruido, perde um pouco na sensibilidade mas o reultado é bom.
Os valores dos capacitores no circuito do lm567 podem ser outros basta procurar na WEB que existem varios exemplos do uso do LM567 como conversor AD em sinais de CW.

Sketch :

// Seven Line Hellscriber Painter
// Software from WA6PZP adaptado por PY2OHH para o display
//TFT 128x160 com o ST7735. Com 160 pixels na horizontal

#include <TFT.h>
#include <SPI.h>

int analogPin = 5; // The audio input pin
int analogPot1 = 4; // Lower Limit Pot pin
int analogPot2 = 3; // Upper Limit Pot pin


int x, y, x2 = 0 ; // plotting varables
int sig = 0; // Audio signal varable
int pot1, pot2; // Analog pot values
int greendot, dot; // The Hellscrieber dot varables
int lower, upper; // Contrast mapped pot values


#define cs   10 // pinos do arduino para o display
#define dc   8
#define rst  9

TFT TFTscreen = TFT(cs, dc, rst);

void setup()
{
  TFTscreen.begin();

  TFTscreen.background(255, 0, 0);
}

void loop()
{
  for (int y = 0; y < 159; y++)
  {

    for (int x = 14 + x2; x > 0 + x2; x--) // certo
      //  for (int x = 0  ; x = 14; x++)// esta linha imprime os caracteres em espelho ou inverso

    {

      sig = analogRead(analogPin); // signal input
      pot1 = analogRead(analogPot1); //get lower limit
      pot2 = analogRead(analogPot2); //get upper limit

      lower = map(pot1, 0, 1023, 0, 511); // map pot1 to lower range
      upper = map(pot2, 0, 1023, 512, 1023); // map pot2 to upper range

      dot = map(sig, lower, upper, 0, 255); // Signal mapped with a lower & upper limit for contrast
      greendot = dot;

      TFTscreen.stroke(0, greendot, 0);
      TFTscreen.point(y, x);

      TFTscreen.point(y   , x + 13);


      delayMicroseconds(3480L); // master time delay for Hellschreiber

    }
  }
  x2 = x2 + 32; // paint line offset with boundary to seperate each line with black space

  if (x2 > 114) x2 = 0;

}

Fotos da montagem :


Montagem tipo sandwich


Usamos soquetes para fixar os modulos e CIs


A montagem tem 4 potenciometros


Vista do arduino Nano e do LM567


PCB  sen o arduino nano


Para uma montagem rapida uso jumpers.

Este Sketch imprime  com 128 pixels na horizontal

// Seven Line Hellscriber Painter
// Software from WA6PZP adaptado por PY2OHH para o display
//TFT 128x160 com o ST7735. Com 128 pixels na horizontal


#include <TFT.h>
#include <SPI.h>

int analogPin = 5; // The audio input pin
int analogPot1 = 4; // Lower Limit Pot pin
int analogPot2 = 3; // Upper Limit Pot pin


int x, y, x2 ; // plotting varables
int sig = 0; // Audio signal varable
int pot1, pot2; // Analog pot values
int greendot, dot; // The Hellscrieber dot varables
int lower, upper; // Contrast mapped pot values


#define cs   10
#define dc   8
#define rst  9

TFT TFTscreen = TFT(cs, dc, rst);

void setup()
{
  TFTscreen.begin();

  TFTscreen.background(255, 0, 0);
}

void loop()
{

  for (int y = 0; y < 127; y++)
  {

    for (int x = 131 - x2; x < 145 - x2; x++)
    {

      sig = analogRead(analogPin); // signal input
      pot1 = analogRead(analogPot1); //get lower limit
      pot2 = analogRead(analogPot2); //get upper limit

      lower = map(pot1, 0, 1023, 0, 511); //map pot1 to lower range
      upper = map(pot2, 0, 1023, 512, 1023); //255 map pot2 to upper range

      dot = map(sig, lower, upper, 0, 255); //Signal mapped into 5 bits with a lower & upper limit for contrast
      greendot = dot;

      TFTscreen.stroke(0, greendot, 0);
      TFTscreen.point(x, y);

      TFTscreen.point(x + 13 , y);


      delayMicroseconds(3480L); //master time delay for Hellschreiber

    }
  }
  x2 = x2 + 32; // era 35paint line offset with boundary to seperate each line with black space

  if (x2 > 140) x2 = 0;

}


Vamos escrever o programa de decodificação de CW neste hardware, para um futuro projeto de receber CW e FELD HELL no mesmo equipamento.

73 de py2ohh miguel