Visitantes
Notícias da Labre
Postagens populares
-
ANTENA ENCURTADA DE FIO PARA 20 E 80 M ACOPLANDO ELA TAMBÉM FUNCIONA EM 15 M BOBINA DA ANTENA BOBINA SIMPLES PARA 40 E 80...
-
Projeto antena Omini 1x 5/8 vhf QSO com Luiz e Tierres a 100km Antena Omini Caseira que usei para esse QSO. ...
-
Medidas de Cabo Cabo coaxial Para PX Para se instalar um rádio (PX no caso) Você precisa levar alguns fatores em consideração antes de ...
-
Projetos Antenas VHF Exelente antena vertical DUAL BAND / VHF UHF - Com bobina no centro . Antena testada e aprovada em todoas as ban...
-
Boa tarde galera... bom depois de longas pesquisas, acabei partipando no grupo do whatsapp (RADIOAMADORES BRASIL) , e la onde obtive o conta...
-
Modificações para o Voyager VR94 Plus e genéricos Autor: Giovani Alves de Cavalcanti É o seguinte, se o VR94 tiver como PLL ...
-
Como trocar os Tr 2sc 1969 e o 2sc 2166 pelo IRF 520 Sem perder potência e qualidade de áudio em seu rádio PX Voyager, Alan, Super Star, Meg...
-
Neste tutorial o Fábio Alexandre explica como fazer uma antena dipolo para 11metros PX - usando tambem cabo RGC-75 OHMS Tutorial por ...
-
Antena VHF/ UHF de pvc caseira Passo a passo para a montagem de uma prática e econômica antena vhf/uhf de pvc. Você vai precisar d...
-
Bobina de base da antena 2x5/8 bobina central da antena 2 x 5/8 ANTENA PARA 10 OU 11 METROS Obs: com 1,23 m par...
domingo, 28 de novembro de 2021
Sketch para INTERFACE CONTROLADORA DE GATEWAY
para arduino Pro-Mini
Por Renato Druziani 2RUGE7
* Esta INTERFACE CONTROLADORA DE GATEWAY funciona com o app ZELLO e um SMARTPHONE com o áudio interligado
* (mic>fone / fone>mic).
* O diferencial nessa interface é a NÃO UTILIZAÇÃO da função VOX em nenhum dos equipamentos.
* O acionamento dos PTTs tanto no ZELLO quanto no RÁDIO é feito por dois Opto Acopladores acionados através da leitura
* do LED de Tx/Rx do rádio e da mudança da cor na borda do botão PTT na tela do ZELLO. esse método melhora a agilidade
* do gateway evitando o corte no início do câmbio, a espera após o final do câmbio e as quedas de PTT durante as pausas
* de fala durante o câmbio.
* Essa detecção é feita com um LDR fixado na tela do smartphone bem posicionado dobre a borda do botão PTT do APP
* e outro LDR posicionado sobre o LED de Tx/Rx do rádio, os LDRs monitoram a VARIAÇÃO da LUZ quando o botão do
* zello muda cor ou o LED no rádio acende com a recepção de um sinal e o Arduíno trata estas leituras para acionar
* o PTT necessário de acordo com os limites predefinidos.
*/
// DEFININDO PINOS -------------------------------------------------------------------------------------------------------
#define Radio A0 // LDR rádio - uma perna no VCC e a outra na porta A2 e um resistor 10k em PullDown A2-GND
#define Celular A2 // LDR Celular - uma perna no VCC e a outra na porta A0 e um resistor 10k em PullDown A0-GND
#define PTTradio 5 // Relé que aciona o PTT do celular - FECHA contato do GND até MIC com resistor de 5~10ohm
#define PTTcelular 2 // Relé que aciona o PTT do Rádio
#define LEDpw 6 // LED indicação de Operadional
#define LEDst 7 // LED indicação de Zello online ou offline
#define LEDrx 8 // LED indicação de Gateway em Rx
#define LEDtx 9 // LED indicação de Gateway em Tx
#define LED 13 // LED da placa para visualizar o funcinamento
// DEFININDO ESTADO ------------------------------------------------------------------------------------------------------
#define Ligado 1 // LIGADO para HIGH e !LIGADO para LOW
// DEFININDO VALORES E LIMITES -------------------------------------------------------------------------------------------
#define LimiteCelular 95 // Limite que determina quando ativar o PTT do rádio
#define LimiteRadio 110 // Limite que determina quando ativar o PTT do Celular
#define OffLine 65 // Limite inferior para evitar a ativação do PTT do rádio se a tela do celular apagar
#define Pausa 500 // Tempo em milissegundos para PAUSAR as micro ativações repetitivas
#define Intervalo 150 // Tempo entre o acionamento dos LED sequênciais - velocidade da sequência
#define TempoMax 300000 // TOT - Tempo máximo para PTT do HT ficar acionado (300000 milisegundos = 5 min)
#define n 250 // Número de pontos para calcular a média móvel - Sem DEBUG 250, com DEBUG 25
long mediamovel();
// DECLARANDO VARIÁVEIS --------------------------------------------------------------------------------------------------
int SinalRadio = 0; // Armazena a leitura do LDR do Rádio
int SinalCelular = 0; // Armasena a leitura do LDR do Celular
unsigned long Temporizador = 0; // Para contar o tempo
unsigned long TimerSeguranca = 0; // Para contar o tempo de transmissão
int media[n]; // Array para armazenamento das leituras obtidas do rádio e cálculo da média
//------------------------------------------------------------------------------------------------------------------------
void setup()
{
pinMode (Radio, INPUT); // Configuração dos PINOS
pinMode (Celular, INPUT);
pinMode (PTTradio, OUTPUT);
pinMode (PTTcelular, OUTPUT);
pinMode (LEDpw, OUTPUT);
pinMode (LEDst, OUTPUT);
pinMode (LEDrx, OUTPUT);
pinMode (LEDtx, OUTPUT);
pinMode (LED, OUTPUT);
digitalWrite (PTTradio, !Ligado); // Situação inicial - MODO ESPERA
digitalWrite (PTTcelular, !Ligado);
digitalWrite (LEDpw, Ligado);
digitalWrite (LEDst, !Ligado);
digitalWrite (LEDrx, !Ligado);
digitalWrite (LEDtx, !Ligado);
digitalWrite (LED, !Ligado);
// DEBUG 1 de 5 - Remova as // da linha abaixo para usar o monitor serial ou plotter serial
//Serial.begin(9600);
}
// -----------------------------------------------------------------------------------------------------------------------
void loop()
{
SinalRadio = analogRead (Radio);
SinalCelular = analogRead (Celular);
SinalCelular = mediamovel();
TimerSeguranca = millis (); // Zerando o timer de segurança
Temporizador = millis (); // Zerando o temporizador
// DEBUG 2 de 5- Remova os /* e */ para usar o monitor serial ou plotter serial
/*
Serial.print ("ESPERANDO ");
Serial.print ("LDR Rádio ");
Serial.print (SinalRadio);
Serial.print (" >> ");
Serial.print ("LDR Celular ");
Serial.println (SinalCelular);
*/
// Enquanto estiver OFFLINE ou TELA APAGADA --------------------------------------------------------------------------------
/*
* se a tela se apagar ou se o Zello ficar Offline este trecho irá evitar que o PTT do Rádio fique acionado
* permanentemente.
* os IFs fazem todos os LED piscarem juntos
*/
while (SinalCelular < OffLine)
{
SinalRadio = analogRead (Radio);
SinalCelular = analogRead (Celular);
SinalCelular = mediamovel();
// DEBUG 3 de 5- Remova os /* e */ abaixo para usar o monitor serial ou plotter serial
/*
Serial.print ("OFFLINE ");
Serial.print ("LDR Radio ");
Serial.print (SinalRadio);
Serial.print (" >> ");
Serial.print ("LDR Celular ");
Serial.println (SinalCelular);
*/
if ((millis () - Temporizador) < Intervalo)
{
digitalWrite (LEDst, Ligado); //ST piscando OFFLINE
digitalWrite (LED, Ligado);
}
else
{
digitalWrite (LEDst, !Ligado); //ST piscando OFFLINE
digitalWrite (LED, !Ligado);
}
if ((millis () - Temporizador) > (Intervalo * 2))
{
Temporizador = millis ();
}
}
// TX - Enquanto chegar áudio no ZELLO -----------------------------------------------------------------------------------
/*
* Este trecho entra em ação quando o sinal do LED na tela do celular detecta a chegada de uma
* transmissão de áudio percebendo a mudança de cor na borda do botão PTT da tela. ele percebe
* uma queda no sinal, essa queda é menor que a tela se apagando.
* ao perceber essa variação no sinal o PTT do rádio será acionado
* os IFs seguintes fazem os LEDs piscarem sequencialmente gerando um movimento do celular
* para o rádio indicando o sendito da transmissão
*/
while ((SinalCelular < LimiteCelular) and (SinalCelular > OffLine))
{
if ((millis() - TimerSeguranca) < TempoMax )
{
digitalWrite (PTTradio, Ligado);
digitalWrite (LEDtx, Ligado);
digitalWrite (LED, Ligado);
}
else
{
digitalWrite (PTTradio, !Ligado);
if ((millis () - Temporizador) < Intervalo)
{
digitalWrite (LEDtx, Ligado); //TX piscando TOT
digitalWrite (LED, Ligado);
}
else
{
digitalWrite (LEDtx, !Ligado); //TX piscando TOT
digitalWrite (LED, !Ligado);
}
if ((millis () - Temporizador) > (Intervalo * 2))
{
Temporizador = millis ();
}
}
SinalRadio = analogRead (Radio);
SinalCelular = analogRead (Celular);
SinalCelular = mediamovel();
// DEBUG 4 de 5- Remova os /* e */ abaixo para usar o monitor serial ou plotter serial
/*
Serial.print ("TRANSMITINDO ");
Serial.print ("LDR Radio ");
Serial.print (SinalRadio);
Serial.print (" >> ");
Serial.print ("LDR Celular ");
Serial.println (SinalCelular);
*/
}
// RX - Enquanto chegar sinal no RÁDIO ------------------------------------------------------------------------------------
/*
* Este trecho entra em ação quando o sinal do LDR nno LED Tx/Rx do rádio detecta a recepção
* no rádio percebendo a mudança de cor no LED Tx/Rx.
* ao perceber essa variação no sinal o PTT do celular será acionado
* os IFs seguintes fazem os LEDs piscarem sequencialmente gerando um movimento do rádio
* para o celular indicando o sendito da transmissão
*/
while (SinalRadio > LimiteRadio)
{
digitalWrite (PTTcelular, Ligado);
digitalWrite (LEDrx, Ligado);
digitalWrite (LED, Ligado);
SinalRadio = analogRead (Radio);
SinalCelular = analogRead (Celular);
SinalCelular = mediamovel();
// DEBUG 5 de 5- Remova os /* e */ abaixo para usar o monitor serial ou plotter serial
/*
Serial.print ("RECEBENDO ");
Serial.print ("LDR Radio ");
Serial.print (SinalRadio);
Serial.print (" >> ");
Serial.print ("LDR Celular ");
Serial.println (SinalCelular);
*/
}
// Retornando para o modo ESPERA
digitalWrite (PTTradio, !Ligado); // PTT rádio OFF
digitalWrite (PTTcelular, !Ligado); // PTT celular OFF
digitalWrite (LEDpw, Ligado); // PW ok
digitalWrite (LEDst, Ligado); // ST online
digitalWrite (LEDrx, !Ligado); // RX off
digitalWrite (LEDtx, !Ligado); // TX off
digitalWrite (LED, !Ligado);
}
// ---------------------------------------------------- FIM ------------------------------------------------------
//----------------------------------------------Função MÉDIA MÓVEL------------------------------------------------
/*
* A MÉDIA MÓVEL consistem em somar uma sequencia N de leituras dos LDRs e dividir o resultado por N achando a média,
* assim teremos um número mais estável eliminando as discrepâncias causadas por ruídos nas entradas evitando micro
* acionamentos dos PTTs.
* Essa média é MÓVEL porque, depois de preenchido o número N de vezes para o cálculo, a cada nova leitura é descartada
* a leitura mais antiga e somada a leitura mais recente para um novo cálculo. Assim temos uma pequena latencia e
* o amortecimento das leituras muito acima ou abaixo da média causadas pelo ruido.
*/
long mediamovel()
{
for(int i= n-1; i>0; i--) media[i] = media[i-1]; // Jogando as leituras uma casa pra frente no array, a última se descarta
media[0] = SinalCelular; // Colocando a nova leitura no início do array
long contador = 0; // Zerando o contador
for(int i=0; i<n; i++) contador += media[i]; // Somando todas as leituras do array no contador
return contador/n; // Dividindo o resultado por N para chegar na média e retornar o resultado
}
CANAL DE QAP NO ZELLO Talkabout FRS
Até a próxima publicação até lá!!!! 73
Assinar:
Postar comentários
(Atom)
0 comentários:
Postar um comentário