AJUSTE AUTOMATICO DE ANTENAS LOOP MAGNETICA - ARDUINO

Veja tambem a segunda e melhor montagem deste ajuste AQUI

Tenho uma loop magnetica construida faz algum tempo, uso um controle eletronico manual para ajusta-la. Há alguns anos atras montei um ajuste automático eletronico, fiz um video mostrando os resultados, mas queria resolver o problema de ter alta SWR durante o ajuste. Não tive exito e acabei deixando de lado a ideia e a montagem.
Tempos depois tive contato por Email com um colega da Alemanha (OM Detlef DD1EG) , que comentou : o tempo de SWR alta, era pequeno, que os radios modernos possuem um controle de redução de potencia em função da estacionaria e que fazendo ajuste manual demoraria muito mais tempo.
Resolvi voltar a briga.
Existem muitas formas de fazer um ajuste de loops, semi automatico ou automatico. Alem das formas de ajuste.
Como esta minha loop :
Ver artigo de como montei LOOPy2ohh
Eu trabalhei sempre com capacitores variaveis de recepção, com duas  seções ligadas em serie, que permitiu um ajuste entre cerca de 11MHz e 28,7MHz.  

Este é o capacitor da minha loop fixa.


Este é o capacitor (Alps de recepção) da minha outra antena loop magnetica - portatil (clone da ALEXLOOP). Montagem mecânica - ferramentaria LIMA - Celso PY2XT

Já o acionamento eletrico ficou por conta de um motor de passo, com redução de 1:69 (mecanica), um motor simples e barato comprado da China. Dados do motor

Ainda o acoplamento isolado entre motor e capacitor foi feito com um tubo plastico, fixado por parafusos, sem embreagem.

Motor de passo e acoplamento isolado

O maior problema encontrado foi a folga mecanica do motor. O motor parado apresenta uma folga relativamente grande. O ideal seria colocar uma especie de freio, que  impediria do motor girar facilmente, apesar que dependendo da montagem o alinhamento de eixos, peso das partes movimentadas (parte movel, buchas ou rolamentos do capacitor) dificultariam este movimento. Para acionamentos controlados por passo estes problemas ficam mais evidentes, pois seriam necessarios alguns passos para que o motor, vença a folga e inicie o movimento desejado. O ideal seria um controle que não dependesse do numero de passos dados ou um sistema mecanico sem folgas.

As chaves limite de capacitor aberto e capacitor fechado foram improvisadas  e após centenas de idas e vindas ainda funcionam bem.

A ponte de SWR ou ROE é um poto importante neste equipamento, tanto a montagem como o ajuste.

Usamos  dois toroides Amidon T50-10 com 9 espiras de secundario.







Inicio dos testes
Inicialmente fiz um sketch para o arduino controlar o motor, temos duas possiblidades passo normal e meio passo (metade do percurso angular do passo normal).
A ideia inicial :
Usar o passo normal abrir totalmente o capacitor variavel ...
E usar o meio passo para ajustar o capacitor variavel para obter uma estacionaria de 1:1.
O esquema completo é este :




Para saber mais sobre full step (passo completo) e half step (meio passo) neste link explico melhor.

1.Inicialmente adaptei um sketch para medir quantos passos daremos no passo completo e no meio passo. Assim poderemos saber qual é a resolução em "graus por passo" do nosso sistema.

Obtivemos o seguinte resultado :
 - passo completo cerca de 7 segundos 1034 passos. Resolução em 180 graus = 180/1034=0.174 graus por passo.
 - meio passo cerca de 12 segundos  2588 passos. Resolução em 180 graus = 180/2588= 0,0618 graus por passo.
Segundo o datasheet do motor a resolução é de 5,625 graus dividido por 64 =
0,0879 graus por passo ou seja 2048 passos para 180 graus (meia volta do eixo do motor).

2. Com ajuda de um receptor de banda corrida pudemos medir a frequencia maxima e minima de sintonia da antena. Minimo = 11600kHz e maxima = 28960kHz. Portanto a banda de sintonia da antena é de 28960-11600= 17360kHz.
Com esta banda de sintonia temos:
Para atuação do motor com resultados pelo datasheet temos 0,0979 graus por passo ou 2048 passos, o que resulta em 17360/ 2048 = 8kHz por passo em media.
Com passo completo temos 1034 passos, assim 17360/1034=16,79Khz por passo.
Com meio passo temos 2588 passos, assim 17360/2588=6,71kHz por passo.

3. Agora medimos o numero de passos para obter SWR 1:1, usamos detectar somente a tensão refletida quando igual a zero (ou seja SWR = 1:1), obtivemos estes dados :

10m 28185kHz 269 passos
15m 21185khz 804 passos
20m 14133khz 1650 passos
         14000kHz 1623 passos

O que gera este grafico :

A variação de capacitancia não é linear !

Obtivemos o seguintes resultados, apos diversas medidas
10m 13kHz/passo
15m 15khz/passo
20m 5kHz/passo

Como a variação de capacitancia não é linear, resolvemos ainda medir a banda passante, que mantivesse a SWR em 1:1, apos diversas medidas:
10m 10kHz
15m 35kHz
20m 8kHz

Resultado :
Para um bom funcionamento o valor de kHz por passo deve ser menor que a metade da banda passante (com SWR=1:1).
Assim a banda de 15m esta dentro desta caracteristica a de 20m quase atende e a de 10m não atende.
Isto justifica a dificuldade em acertar a SWR em 10m.

Observação :
Com a minimo de ajuste possivel 
0,0618 graus por passo, ainda fica dificil acertar a loop.
O ideal é que esta antena funcionasse até os 13800kHz, ajudando muito na sintonia, outro ponto é o diametro do tubo que quanto maior diminui a banda passante. Um tubo de menor diametro ajudaria tambem.


3. Sabendo a frequencia seria possivel abrir o capacitor variavel e dar o numero de passos para obter SWR 1:1 ?
Fiz varios experimentos e consegui bons resultados, sabendo da folga do motor, parti sempre de um ponto, no caso capacitor aberto, o que faz que na abertura do capacitor a folga fique sempre zerada no mesmo sentido.
Usei os dados obtidos para calcular o numero de passos a partir de uma frequencia desejada, assim:
10m frequencias acima de 28185kHz (frequencia base tem 269 passos) tem 13kHz por passo a mais ou se for menor  que 28185kHz  diminuimos 13kHz para cada passo.
Já para 15m a frequencia base foi 21185kHz com 806 passos e 15kHz por passo.
Em 20m a frequecia base foi de 14133kHz com 1650 passos e 5kHz por passo.

exemplo : desejamos operar em 14300kHz ... 14300-14133=167 e 167/5=33,4 seriam 33 passos a mais dos 1650 passos ...  1650+33 = 1683 passos.

funcionou bem, mas por não ser linear, não foi possivel obter uma formula que descrevesse esta não linearidade, assim seria necessario formulas ou tabelas.

Conclusão :
Funciona mas não atende. Não é possivel fazer o movimento nos dois sentidos pois existe a folga atrapalhando.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Video deste prototipo ===prototype video

4. O sistema que funcionou e atende o desejado, dentro das limitações impostas (motor muito simples, sistema mecanico precário, limitações do arduino, ajustes na ponte de SWR). É o de trabalhar ajustando para obter a SWR 1:1, medindo a frequencia, caso ele seja alterada o sistema vai para a direção certa até obter a SWR desejada.
Para medir a frequencia usamos um prescaler com 74HC4017, pois o arduino mede até uns 6MHz diretamente.

foto prescaler : Montamos o 74HC4017, em posição inseto morto,  sobre um soquete torneado. Facilita o uso em outros aparelhos.


Nos testes mostrou um bom fucionamento em 20m, necessitou de ajustes no software em 15m e teve um funcionamento razoavel em 10m. Explicações para isto acontecer :

Em 20m temos uma potencia no radio maior, uma relação entre banda 
(8kHz) com 1:1 de SWR,  para uma resolução do motor/capacitor (5kHz/passo). Como a relação 8/5 é maior que 0,5 temos uma condição ideal para atingir o desejado.

Já em 15m a potencia do radio cai e a relação
entre banda (35kHz) com 1:1 de SWR,  para uma resolução do motor/capacitor (15kHz/passo).Como a relação 35/15 é maior que 0,5 temos uma condição ideal para atingir o desejado. Aqui ocorre que a "velocidade" dos passos é muito grande (15kHz) o que dificulta o tempo de leitura da SWR.

Em 10m as condições pioraram a potencia do radio caiu consideravelmente, o nivel de tensão de RF para o contador de frequencia caiu (necessitamos de um amplificador de RF) e a relação
entre banda (10kHz) com 1:1 de SWR,  para uma resolução do motor/capacitor (13kHz/passo).Como a relação 10/13 é menor que 0,5 temos uma condição que impossibilita atingir o desejado em toda a banda, com o agravante de uma "velocidade" dos passos alta (13kHz/passo).

Conclusão:
Caso alguem queira construir um destes controles deve levar em conta os seguintes pontos:

1. O ideal é que a LOOP não tenha uma frequencia de trabalho muito grande. Procurar deixar o capacitor com um valor minimo e maximo , ou dimensionar o indutor para que em função dos valores do capacitor atendam
as frequencias desejadas.

2. Que a LOOP tenha um DIP não muito forte ou seja que apresente SWR 1:1 em uma banda maior. Isto se consegue com um tubo mais fino, na construção e no design.

3. Que o sistema de sintonia, motor, acoplamento, limite switch tenham uma rigidez mecanica boa.

4. Que na medida do possível o motor tenha um passo menor e/ou uma redução maior.

5. Que o motor / redutor não apresentem folga radial quando parado.

6. Cuidados na construção, ajuste e blindagem da ponte de SWR.

7. Em termos de software os ajustes de variaveis, que influem da resolução e funcionamento  são: o tempo entre um passo e outro, o motor tem uma inercia que depende do tempo e da frequencia
de acionamento. O valor minimo de detecção da SWR  que depende da leitura e conversão das medidas, alem da tonada de decisão.

Como o ajuste é independente do operador, este sistema pode ser construido de tal forma a ficar um uma caixa proximo a antena. Requer apenas uma bateria ou dois fios de alimentação. Não seria necessario o display. podendo tambem ser usada uma versão mais simples do arduino (sem USB).

Devido a constantes alterações : a versão da IDE do Arduino usada foi a 1.6.1 e
a biblioteca do FreqCounter (library) usada esta neste link

A medição de potencia esta prevista funciona, mas apresenta bug.
Como não sou um programador de C e o codigo pode ser simplificado.
Sugestões, dúvidas podem me escrever...

73 de py2ohh feb/2020

Sketch :


// entrada do frequencimetro pino 5 digital
#include <FreqCounter.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
float  frq;
float frqin;
float frq2 = 30000;
int frqin0;
int frq20;
float pwr;
int flat;
const int motorPin1 = 8;
const int motorPin2 = 9;
const int motorPin3 = 10;
const int motorPin4 = 11;
float Vinc, Vref = 0, SWR;
int delayTime = 5; //esta variavel implica em aumento de tempo geral - min.value for my //motor
const int fim1 = 4;
const int fim2 = 6;
int ehfim1 = LOW ;
int ehfim2 = LOW ;
float ROE = 1.1 ; // esta variavel pode ser modificada
int inicio = LOW ;
// Inicializa o display no endereco 0x27 -this adress depends LCD type
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() {
  Serial.begin(9600);
  lcd.begin (16, 2);
  lcd.setBacklight(HIGH);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("  AUTO MAGLOOP  ");
  lcd.setCursor(0, 1);
  lcd.print(" PY2OHH  QRP_BR ");
  delay(3000);
  pinMode(motorPin1, OUTPUT); // motor passo
  pinMode(motorPin2, OUTPUT); //motor de passo
  pinMode(motorPin3, OUTPUT); //motor de passo
  pinMode(motorPin4, OUTPUT); //motor de passo
   pinMode(fim1, INPUT);
  pinMode(fim2, INPUT);
  Zero();
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  imprime();
}

void loop() {
  FreqCounter::f_comp = 7; // Cal Value / Calibrate with professional Freq Counter
  delay(100);
  FreqCounter::start(10);  // values of 10, 100 or 1000 ms are practicable for a resolution of 100, 10 and 1 Hz
  while (FreqCounter::f_ready == 0) {
    frq = (FreqCounter::f_freq);
  }

  frqin = (int(frq));
  frqin0 = abs((frqin));

  if ((frqin > 20900) && (frqin < 22000)) {
    ROE = 1.3;
  }
  else {
    ROE = 1.1;
  }

  if (frqin < 11000 ) flat = 1;

  if ((frqin < (frq2 + 5) || frqin > (frq2 - 5)) && (frqin > 11000))  flat = 2;

  if ((frqin > frq2 + 6) && (frqin > 11000))  flat = 3;

  if ((frqin < frq2 - 6) && (frqin > 11000)) flat = 4;

  switch (flat) {
    case 1 :
       break;
    case 2 :
         break;
    case 3 :
      frq2 = (frqin);
      frq20 = abs(frq2);
      recua();
      pwr = (Vinc) * (Vinc) * (81 / 100);
      imprime();
      delay(2000);
      break;
    case 4 :
      frq2 = (frqin);
      frq20 = abs(frq2);
      avanca();
      pwr = (Vinc) * (Vinc) * (81 / 100);
      imprime();
      delay(2000);
      if (digitalRead(fim1) == HIGH) {
        Zero() ;
      }
      break;
    default : break;
  }


}
void Zero()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("   AGUARDE    ");
  lcd.setCursor(0, 1);
  lcd.print("   ZERANDO    ");
  while (ehfim2 == LOW )    {
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {
      (inicio = HIGH);
      break;
    }
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    delay(5);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {
      (inicio = HIGH);
      break;
    }
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(5);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {
      (inicio = HIGH);
      break;
    }
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, HIGH);
    delay(5);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {
      (inicio = HIGH);
      break;
    }
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(5);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {
      (inicio = HIGH);
      break;
    }
  }

}

void  avanca() {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("   AVANTE    ");
  Vinc = analogRead(2);
  Vref = analogRead(3);
  SWR = (Vinc + Vref) / (Vinc - Vref);
  while (SWR > 1.1) {
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);

    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);

    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, HIGH);
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);

    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);

    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);

    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);


    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    if (digitalRead(fim1) == HIGH) {
      break;
    }
    delay(delayTime);



  }
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
}



void recua() {
  // while (ehfim2 = LOW) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("   VOLTA     ");
  Vinc = analogRead(2);
  Vref = analogRead(3);
  SWR = (Vinc + Vref) / (Vinc - Vref);
  while (SWR > 1.1) {

    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {

      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {

      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, LOW);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {

      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {

      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {

      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);

    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, HIGH);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {

      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {

      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }
    delay(delayTime);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    ehfim2 = digitalRead(fim2);
    if (ehfim2 == HIGH) {

      break;
    }
    Vinc = analogRead(2);
    Vref = analogRead(3);
    SWR = (Vinc + Vref) / (Vinc - Vref);
    if (SWR < ROE) {
      break;
    }

    delay(delayTime);


  }
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
}

void imprime()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("F      kHz P    ");
  lcd.setCursor(2, 0);
  lcd.print(frq20);
  //lcd.setCursor(12, 0);
  //lcd.print(passo);
  lcd.setCursor(0, 1);
  lcd.print("SWR     :1/    W");
  lcd.setCursor(4, 1);
  lcd.print(SWR);
  lcd.setCursor(11, 1);
  lcd.print(pwr);
}