Powered By Blogger
Mostrando postagens com marcador Código Morse. Mostrar todas as postagens
Mostrando postagens com marcador Código Morse. Mostrar todas as postagens

domingo, 11 de março de 2012

Tradutor Morse

Arduino by my Self
Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);



Esta experiência é um complemento ao SOS, LED Código Morse.

Agora iremos ver como fazer um tradutor de palavras e textos para código morse e efetuar a sinalização em um LED.
Para usar, basta:
Abrir um terminal de comunicação serial da IDE do Arduino, e escrever os caracteres, palavra ou texto, e enviar. O Arduino irá traduzir e sinalizar no LED ou Lâmpada de Sinalização.


Tabela do Código Morse



O HARDWARE:
É o mesmo utilizado na experiência anterior. 

O CIRCUITO:

É o mesmo utilizado na experiência anterior.  Um LED ligado ao pino 10 com seu respectivo resistor de limitação e queda de tensão.



O SOFTWARE:

/*
  Este exemplo é um código de domínio público.
*/

int ledPin = 10; // pino onde seráconectado o LED

// matriz contendo o código Morse de cada letra do alfabeto
char* letters[] = {
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", // A-I
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", // J-R
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.." // S-Z
};

// matriz contendo o código Morse de cada número
char* numbers[] = {"-----", ".----", "..---", "...--", "....-", ".....", "-....",
"--...", "---..", "----."};

int dotDelay = 200; // delay para os "dits"

// inicialização do Arduino
void setup()
{
  pinMode(ledPin, OUTPUT); // define pino do LED como saída
  Serial.begin(9600); // inicializa a comunicação serial
}

// loop principal do programa
void loop()
{
  char ch; // define variável
  if (Serial.available()) // existe alguma informação a ser lida da serial?
    {
    ch = Serial.read(); // lê uma letra única
    if (ch >= 'a' && ch <= 'z') // se a letra estiver entre a e z
      {
      flashSequence(letters[ch - 'a']); // chama a função "flashSequence"
                                                     // tendo como parâmetro o número da
                                                     // letra na matriz
                                                    // subtrair 'a' da letra é um ponto
                                                    // de refrência 'a' - 'a' = 0...
                                                    // primeiro menbro da matriz;
                                                   // 'b' - 'a' = 1...
                                                   // segundo membro da matriz
                                                  // e assim por diante
      }
    else if (ch >= 'A' && ch <= 'Z') // se a letra está entre A e Z
      {
      flashSequence(letters[ch - 'A']); // como dito acima, agora para as maísculas
      }
  else if (ch >= '0' && ch <= '9') // se está entre 0 e 9
    {
      flashSequence(numbers[ch - '0']); // como dito acima, agora para os números
    }
  else if (ch == ' ') // se vazio, espaço
    {
    delay(dotDelay * 4); // gap entre as palavras
    }
  }
}

// pisca a sequência letras
void flashSequence(char* sequence)
{
  int i = 0;
  while (sequence[i] != NULL) // enquanto não acabar a sequencia de letras
    {
      flashDotOrDash(sequence[i]); // envia para ser piscado o dit ou dah 
      i++; // mais um da sequência
    }
  delay(dotDelay * 3); // gap entre letras
}


// pisca a sequência de dits e dahs
void flashDotOrDash(char dotOrDash)
{
  digitalWrite(ledPin, HIGH); // acende LED
  if (dotOrDash == '.') // se dit?
    {
      delay(dotDelay); // tempo de um dit
    }
  else // então é  um dah 
    {
      delay(dotDelay * 3); // tempo de um dah
    }
  digitalWrite(ledPin, LOW); // apaga o LED
  delay(dotDelay); // gap entre piscadas
}
// Fim da Compilação



O VÍDEO:
Vejamos o teste!

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com









SOS, LED Código Morse

Arduino by my Self
Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);



Este projeto é mais um simples uso do Arduino, neste caso vamos gerar um Código Morse "SOS", que será mostrado em um LED ou, facilmente adaptável para uma Lâmpada de Sinalização.

SOS é um sinal usado em situaçãoes de emergência.  Quando enviado em CódigoMorse, consiste em três pontos (correspondente à letra S_, três traços (correspondentes à letra O) e novamente três pontos (. . . - - - . . .) - oralmente diz-se "dit dit dit   dah dah dah   dit dit dit" .
SOS pode significar:
"Save Our Souls" - Salve Nossas Almas;
"Save Our Seamens" - Salve Nossos Marinheiros;
"Save Our Ship" - Salve Nosso Navio;
"Survivor On Shore" - Sobreviventes na Costa;


O HARDWARE:
1 x Arduino UNO
1 x BreadBoard
1 x resistor de 220O 1/8W
1 x LED vermelho
Fios

O CIRCUITO:
Ligar o catodo do LED no negativo da alimentação;
Ligar um terminal do resistor ao anodo do LED;
O outro terminal do resistor ligar diretamente ao pino 10 do Arduino.





O SOFTWARE:

Abaixo o Software comentado das duas versões executadas

Primeira versão:


  Este exemplo é um código de domínio público.
 */

int ledPin = 10;  // pino onde será ligado o LED ou Lâmpada Sinalizadora

// matriz com a duração de piscadas para a palvra em Código Morse "SOS"
int durations[] = {200, 200, 200, 500, 500, 500, 200, 200, 200};


void setup() // inicialização do Arduino
  {
    pinMode(ledPin, OUTPUT); // configura o pino digital como saída
  }
  
void loop()  // loop principal do programa
  {
    for (int i = 0; i < 9; i++) // Loop iterativo das 9 piscadas do SOS
    {
      flash(durations[i]); // executa a função de piscar com a duração
                           // correspondente da matriz
    }
    delay(2000);   // espera 2 segundo e começa novamente
  }
  
// função para piscar o LED com uma certa duração  
void flash(int duration)
  {
    digitalWrite(ledPin, HIGH); // acende o LED
    delay(duration);            // espera a duração necessária
    digitalWrite(ledPin, LOW);  // apaga o LED
    delay(duration);            // espera a duração necessária
  }


Esta segunda versão têm a temporização de dits, dahs e separação entre caracteres de acordo com as normas internacionais:


  Este exemplo é um código de domínio público.
 */


int ledPin = 10;  // LED conectado ao pino 10


void setup() // inicialização do Arduino
{
pinMode(ledPin, OUTPUT); // configura pino do LED como saída
}

void loop() // loop principal do programa
{
// 3 dits
for (int x=0; x<3; x++) {
digitalWrite(ledPin, HIGH); // acende o LED
delay(150); // espera 150ms
digitalWrite(ledPin, LOW); // apaga o LED
delay(100); // espera 100ms
}

// delay de 100ms para ter um gap entre as letras
delay(100);

// 3 dahs
for (int x=0; x<3; x++) {
digitalWrite(ledPin, HIGH); // acende o LED
delay(400); // espera 400ms
digitalWrite(ledPin, LOW); // apaga oLED
delay(100); // espera 100ms
}

// delay de 100ms para ter um gap entre as letras
delay(100);

// 3 dits novamente
for (int x=0; x<3; x++) {
digitalWrite(ledPin, HIGH); // acende o LED
delay(150); // espera 150ms
digitalWrite(ledPin, LOW); // apaga o LED
delay(100); // espera 100ms
}

// espera 5 segundos antes de repetir o código de SOS
delay(5000);
}



O VÍDEO:

Vejamos os resultados!

Dúvidas e sugestões enviem para: arduinobymyself@gmail.com