MEDIDOR
DE SWR "FALADO" (for English please scroll down)
Video em
portugues
TALKING SWR
METER (video english)
Outro medidor (another meter) SWR
by tone ...ROE por variação de tom
Mais uma aplicação do Arduino, especial para
radioamadores cegos.
O primeiro desta série foi o frequencimetro falante ,
onde explicamos algumas coisas a mais que neste documento.
Com uma ponte de
ROE / SWR comum o arduino lê e fala a
relação de ondas estacionárias.
Como funciona :
Algoritmo:
O valor lido de SWR entre 1:1 e 1:5, na realidade é calculada a
relação entre a tensão de RF incidente
(Vinc) com a tensão refletida (Vref); com 50 Ohms na saida a
relação das tensões fica em 1:1, com 250 Ohms na
saida a relação fica em 1:5.
A formula é dada :
SWR = (Vinc + Vref) / (Vinc-Vref)
Assim teremos como resultado numeros entre 1 e limitados por software a
5, no algoritmo que usamos multiplicamos o valor de SWR por 10 para
conseguir o valor do numero logo abaixo da virgula ex 1,3324 , primeiro
somamos 0,05 para arredondar a casa significativa do numero desejado
1,3324 será 1,3824 (caso fosse 1,3624 teriamos apos a soma
1,4324), multiplicamos por 10 obtendo swr= 13,324 e
aplicamos o comando abs() resultando em swr=13 ...
Do numero 13 dividimos por 10
d=swr/10
d=13/10 = 1 resulta somente a parte inteira
e apos isto obtemos u
u=(swr -(d*10))
u= (13- (1*10)) =13-10=3
Falando :
Gravamos arquivos de formato .WAV com as palavras necessarias assim
1.wav é "um"
e 1:1.3 temos os arquivos "estacionaria um para" o valor de d =
1.wav "um" o arquivo ponto.wav "ponto" e por fim o valor u =3.wav
"tres".... "estacionaria um para tres"
A biblioteca escolhida lê os arquivos .wav, gravado no Sdcard e
reproduz em sinal analogico, um amplificador com 2n2222 e um LM386 faz
o audio ser amplificado apra um pequeno alto falante.
Gravando arquivos .wav :
Os arquivos de voz (disponivel em vários idiomas) foram gerados
no seguinte link :
http://www.oddcast.com/home/demos/tts/tts_example.php
Colocamos em
portugues, e usamos um software (da Creative) "Gravador Inteligente",
onde é gravado o que se ouve, assim gravamos o som de UM, DOIS
...NOVE, assim por diante ... depois com o
software "WAVE STUDIO" (tambem da Creative) editamos cada arquivo
retirando as partes não necessarias e aumentamos o volume quando
fosse preciso.
Gravamos em um SDcard e usamos um shield do arduino que lê o
SDcard.
É possivel gravar em outras linguas, e gravamos tambem em ingles
:
Video em
ingles
Esquema :
![](swrtalk.GIF)
Montagem :
Cuidado na montagem da ponte de SWR, blindagem são necessarias,
leia mais sobre potencia etc em:
PONTE DE SWR
Nota :
Para desativar a leitura da ROE, basta ligar o pino D3 do arduino ao 5V
via resistor de 10k.
Ou incluir um transistor para unção mute como no frequencimetro falante.
Duvidas sugestões escreva para [email protected] remova o XX.
Biblioteca TMRpcm
Para este sketch usamos a IDE arduino versão 1.6.1
Arquivos wave para serem gravados no Sdcard.
Sketch :
#include <SPI.h>
#include <SD.h>
#include <TMRpcm.h>
TMRpcm tmrpcm;
#define SD_ChipSelectPin 10
float ax = 0 ;
const int bPin = 3;
int bestado = 1;
float Vinc, Vref = 0, SWR;
int d, u, dezena, unidade ;
void setup() {
Serial.begin(9600);
tmrpcm.speakerPin = 9;
pinMode(bPin, INPUT);
if (!SD.begin(SD_ChipSelectPin)) { // see if the card is
present and can be initialized:
Serial.println("SD fail");
return;
}
tmrpcm.setVolume(5);
tmrpcm.play("py2ohh1.WAV");
delay (5000);
Serial.println("py2ohh");
}
void loop() {
Vinc = analogRead(2);
while (Vinc<100) {
Vinc = analogRead(2);
}
delay(100);
Vinc = analogRead(2);
Vref = analogRead(3);
SWR = (Vinc + Vref) / (Vinc - Vref);
SWR=SWR + 0.05;
ax = abs(10 * SWR);
bestado = digitalRead(bPin);
if (bestado == LOW) {
if (SWR > 4.9) {
tmrpcm.play("ealta.WAV");
delay(4000);
}
else {
debulhando();
falando();
}
}
delay(1000);
}
void undde() {
if (unidade == 1) {
tmrpcm.play("1.WAV");
delay(1000);
}
else if (unidade == 2) {
tmrpcm.play("2.WAV");
delay(1000);
}
else if (unidade == 3) {
tmrpcm.play("3.WAV");
delay(1000);
}
else if (unidade == 4) {
tmrpcm.play("4.WAV");
delay(1000);
}
else if (unidade == 5) {
tmrpcm.play("5.WAV");
delay(1000);
}
else if (unidade == 6) {
tmrpcm.play("6.WAV");
delay(1000);
}
else if (unidade == 7) {
tmrpcm.play("7.WAV");
delay(1000);
}
else if (unidade == 8) {
tmrpcm.play("8.WAV");
delay(1000);
}
else if (unidade == 9) {
Serial.println("nove");
tmrpcm.play("9.WAV");
delay(1000);
}
}
void dzn() {
if (dezena == 1) {
tmrpcm.play("1.WAV");
delay(1000);
}
else if (dezena == 2) {
tmrpcm.play("2.WAV");
delay(1000);
}
else if (dezena == 3) {
tmrpcm.play("3.WAV");
delay(1000);
}
else if (dezena == 4) {
tmrpcm.play("4.WAV");
delay(1000);
}
else if (dezena == 5) {
tmrpcm.play("5.WAV");
delay(1000);
}
else if (dezena == 6) {
tmrpcm.play("6.WAV");
delay(1000);
}
else if (dezena == 7) {
tmrpcm.play("7.WAV");
delay(1000);
}
else if (dezena == 8) {
tmrpcm.play("8.WAV");
delay(1000);
}
else if (dezena == 9) {
tmrpcm.play("9.WAV");
delay(1000);
}
}
void falando() {
if (u != 0) {
dezena = d;
tmrpcm.play("eumpr.WAV");
delay(2500);
dzn();
tmrpcm.play("ponto.WAV");
delay(1000);
unidade = u;
undde();
}
if ((u == 0) ) {
dezena = d;
tmrpcm.play("eumpr.WAV");
delay(2500);
dzn();
}
}
void debulhando() {
Serial.println(ax);
Serial.println();
d = (ax / 10);
Serial.println(d);
Serial.println();
u = (ax - (d * 10));
Serial.println(u);
Serial.println();
}
73 de py2ohh miguel
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
English
ARDUINO TALKING SWR METER
TALKING SWR
METER (video english)
this is another application of Arduino, especially for blind radio
amateurs.
The first in this series was the talking frequency meter talking frequency meter
(portuguese) , where we
explained a few more things than in this document.
With a common ROE / SWR bridge the arduino reads and speaks the
standing wave ratio.
How it works :
Algorithm:
The SWR value read between 1: 1 and 1: 5, in reality, the relationship
between the incident RF voltage (Vinc) and the reflected voltage (Vref)
is calculated; with 50 Ohms at the output the voltage ratio is 1: 1,
with 250 Ohms at the output the ratio is 1: 5.
The formula is given:
SWR = (Vinc + Vref) / (Vinc-Vref)
So we will have as a result numbers between 1 and limited by software
to 5, in the algorithm we use we multiply the SWR value by 10 to get
the value of the number just below the point ex 1.3324, first we add
0.05 to round the significant place of the desired number 1.3324 will
be 1.3824 (if it were 1.3624 we would have after the sum 1.4324),
multiply by 10 obtaining swr = 13.324 and apply the command abs ()
resulting in swr = 13
From number 13 we divide by 10
d = swr / 10
d = 13/10 = 1 results only the entire part
and after that we get u
u = (swr - (d * 10))
u = (13- (1 * 10)) = 13-10 = 3
Speaking :
We write .WAV format files with the necessary words so 1e.wav is "one"
and 1: 1.3 we have the files "SWR one for" the value of d = 1e.wav
"one" the file point.wav "point" and finally the value u = 3e.wav
"three" .... "SWR one to three "
The chosen library reads the .wav files, recorded on the Sdcard and
reproduces in analog signal, an amplifier with 2n2222 and an LM386
makes the audio amplified to a small speaker.
Writing .wav files:
The voice files (available in several languages) were generated at the
following link:
http://www.oddcast.com/home/demos/tts/tts_example.php
We put it in English, and we use a software (from Creative)
"Intelligent Recorder", where what is heard is recorded, so we record
the sound of ONE, TWO ... NINE and so on .. then
with the software "WAVE STUDIO" (also from Creative) we edit each file
removing the unnecessary parts and increase the volume when necessary.
We write to an SDcard and use an arduino shield that reads the SDcard.
It is possible to record in other languages.
Assembly :
Care in the assembly of the SWR bridge, shielding is necessary, read
more about power etc in:
SWR BRIDGE
![](swrtalk.GIF)
Note :
To disable the ROE reading, simply connect the D3 pin on the arduino to
the 5V via a 10k resistor.
Or include a transistor for mute anointing as in the (sechematic) talking frequency meter
(portuguese).
Doubtful, suggestions, english corrections write to
[email protected] remove the XX.
TMRpcm library
For this sketch we use the arduino IDE version 1.6.1
Wave files to be recorded on the Sdcard.
Sketch in english :
#include <SPI.h>
#include <SD.h>
#include <TMRpcm.h>
TMRpcm tmrpcm;
#define SD_ChipSelectPin 10
float ax = 0 ;
const int bPin = 3;
int bestado = 1;
float Vinc, Vref = 0, SWR;
int d, u, dezena, unidade ;
void setup() {
Serial.begin(9600);
tmrpcm.speakerPin = 9;
pinMode(bPin, INPUT);
if (!SD.begin(SD_ChipSelectPin)) { // see if the card is
present and can be initialized:
Serial.println("SD fail");
return;
}
tmrpcm.setVolume(6);
tmrpcm.play("pye12.WAV");//change for your call .wav file
delay (5000);
}
void loop() {
Vinc = analogRead(2);
while (Vinc < 100) {
Vinc = analogRead(2);
}
delay(100);
Vinc = analogRead(2);
Vref = analogRead(3);
SWR = (Vinc + Vref) / (Vinc - Vref);
SWR = SWR + 0.05;
ax = abs(10 * SWR);
bestado = digitalRead(bPin);
if (bestado == LOW) {
if (SWR > 4.9) {
tmrpcm.play("hswr.WAV");
delay(1000);
}
else {
debulhando();
falando();
}
}
delay(1000);
}
void undde() {
if (unidade == 1) {
tmrpcm.play("1e.WAV");
delay(1000);
}
else if (unidade == 2) {
tmrpcm.play("2e.WAV");
delay(1000);
}
else if (unidade == 3) {
tmrpcm.play("3e.WAV");
delay(1000);
}
else if (unidade == 4) {
tmrpcm.play("4e.WAV");
delay(1000);
}
else if (unidade == 5) {
tmrpcm.play("5e.WAV");
delay(1000);
}
else if (unidade == 6) {
tmrpcm.play("6e.WAV");
delay(1000);
}
else if (unidade == 7) {
tmrpcm.play("7e.WAV");
delay(1000);
}
else if (unidade == 8) {
tmrpcm.play("8e.WAV");
delay(1000);
}
else if (unidade == 9) {
Serial.println("nove");
tmrpcm.play("9e.WAV");
delay(1000);
}
}
void dzn() {
if (dezena == 1) {
tmrpcm.play("1e.WAV");
delay(1000);
}
else if (dezena == 2) {
tmrpcm.play("2e.WAV");
delay(1000);
}
else if (dezena == 3) {
tmrpcm.play("3e.WAV");
delay(1000);
}
else if (dezena == 4) {
tmrpcm.play("4e.WAV");
delay(1000);
}
else if (dezena == 5) {
tmrpcm.play("5e.WAV");
delay(1000);
}
else if (dezena == 6) {
tmrpcm.play("6e.WAV");
delay(1000);
}
else if (dezena == 7) {
tmrpcm.play("7e.WAV");
delay(1000);
}
else if (dezena == 8) {
tmrpcm.play("8e.WAV");
delay(1000);
}
else if (dezena == 9) {
Serial.println("nove");
tmrpcm.play("9e.WAV");
delay(1000);
}
}
void falando() {
if (u != 0) {
dezena = d;
tmrpcm.play("swr12.WAV");
delay(3000);
dzn();
tmrpcm.play("point.WAV");
delay(1000);
unidade = u;
undde();
}
if ((u == 0) ) {
dezena = d;
tmrpcm.play("swr12.WAV");
delay(3000);
dzn();
}
}
void debulhando() {
Serial.println(ax);
Serial.println();
d = (ax / 10);
Serial.println(d);
Serial.println();
u = (ax - (d * 10));
Serial.println(u);
Serial.println();
}
73 from py2ohh miguel