test di VERIFICA CON OSCILLOSCOPIO      

 

Applicazioni personali didattiche

Si utilizzano 2 moduli:

SX1276 V2 Lora ESP32 LX6 Dual-Core 0.96 Pollici Blue OLED

WiFi Kit 32 Modulo CP2012 Scheda di Sviluppo IOT 433 MHz

 

 

 

Configurazione dei moduli

 Un modulo posizionato sul:

Prima verifica pratica: il duty cycle dei segnali di comando della trasmittente

Per questa esercitazione utilizzerò :

   Funzionamento vedere link: FREQUENZA - PWM -PERIODO - DUTY CYCLE  oscilloscopio digitale-Arduino-Servo

Ho effettuato il BINDING (riconoscimento) con la Ricevente FS -IA10B .

Set a disposizione

 

 

  

 

Collegamenti effettuati:

FISHINO -  PIN 2(azzurro) ==> Ricevente  CH1      PIN 3(bianco) ==>  Ricevente CH2                                 

Alimento la ricevente  5 Volt   collegando il  + e  il  ad un qualsiasi pin della rispettiva linea   (vedi foto sopra)

Test precedente con BINDING ricevente a 6 canali: 

Collegamenti effettuati:

ARDUINO    PIN 2 3           >>>      Ricevente  FS-IA6     CH1 - CH2

 

Conoscendo la funzionalità dei servi utilizzerò ARDUINO per una verifica dei segnali della trasmittente.

Il segnale della Trasmittente prevede un impulso che si ripete ogni 20 ms, corrispondente ad una frequenza di 50 Hz.

La durata della larghezza del segnale alto all'interno di un impulso(PERIODO), determina una funzione specifica della meccanismo elettronico a cui è rivolto.

Es. per un Servo, se  l'ampiezza dell'impulso alto, ripetitivo, è pari a:

 La curiosità è soddisfatta: I segnali della trasmittenti hanno un    Periodo di 20 ms  ==>  Frequenza 50 Hz

PROGRAMMA PER RILEVARE IL  duty cycle della Trasmittente/Ricemente

POSIZIONE CENTRALE DELLO STICK:

         

Canale 2° tutto in posizione superiore:

        

Canale 2° tutto in posizione inferiore:

        

Lo stick del Canale 1 (movimento orizzontale):

La larghezza dell'impulso durante lo spostamento orizzontale di decrementa(verso sx) o aumenta(verso dx) a seconda della posizione.

Il multimetro DIGITAL  MORPILOT  mi permette di rilevare  la Frequenza ed il duty cycle, ecco la modalità pratica.

                                                                                                    

Opero con il canale 1.                                              Frequenza rilevata    50 Hz

 

In elettronica si utilizza anche il duty cycle che rappresenta, in valori percentuali, il rapporto tra la durata del segnale "alto" ed il periodo.

Es.:  duty cycle = (1.5 ms/20 ms) x 100 = 7.5 %     duty cycle = (2 ms /20 ms) x100 = 10 %         duty cycle = (1 ms /20 ms)x100 = 5 %

   

 La curiosità è soddisfatta: I segnali della trasmittenti hanno un  Periodo di 20 ms  ==>  Frequenza 50 Hz

Ecco un programma completo diverso dal precedente:

 permette di rilevare Frequenza, Ampiezza del segnale ON e relativo Duty Cycle.

Opero con il canale 2^ (per una migliore manovrabilità) e si utilizza il PIN 7 di Fishino (va bene Arduino, Nano,..)

POSIZIONE CENTRALE DELLO STICK:   circa 1.5 ms

         

Canale 2° tutto in posizione superiore:  circa 2 ms

         

Canale 2° tutto in posizione inferiore:  circa 1 ms

         

Lo stick del Canale 1 (movimento orizzontale):

Questo è tutto.....

                     PRONTO PER I TEST   operiamo sul canale 2

Collegamento oscilloscopio ricevente FlySky:

Impostare il valore del SEC/DIV  su 1 ms   - ogni quadretto(orizzontale) è uguale a 1 ms

Movimentare lo stick del canale 2 sulla trasmittente.

Posizione centrale   duty cycle 7.5%  x  20 ms  larghezza dell'impulso alto è pari a 1.5 ms 

    

 

Posizione in alto   duty cycle 10%  x  20 ms   larghezza dell'impulso alto è pari a 2 ms 

 

  

Posizione in basso   duty cycle 5%  x  20 ms   larghezza dell'impulso alto è pari a 1 ms 

 

   

 

A differenza degli altri stick il Trottle - Acceleratore -Spinta (canale CH3), al suo rilascio, non ritorna automaticamente nella posizione centrale.

Controlla la potenza erogata dai motori aumentando o diminuendo il numero di giri.

I motori sono collegati alle eliche ed il throttle ne controlla direttamente la spinta.

Il throttle può essere paragonato al movimento lineare di un tipico resistore lineare:

Questo è il risultato:

 

 

 

 

 

Fatto questo iniziamo a progettare il guanto con i moduli.

Trasmissione/ricezione angolare del perno di un servomeccanico.

 

Primo test didattico da effettuare:(distanza di circa 5 km.)

Ruotando il perno del potenziometro vario  la posizione angolare del perno del servo (0° - 180°)

Test di funzionamento.

I programmi proposti , necessitano di "aggiustamenti" di visualizzazione su OLED e programmazione.

Programma di TRASMISSIONE:

//FILE:INVIO_POSIZIONE CON POTENZIOMETRO PER SERVO_16_7_2021
//SCHEDA Hardware: SX1276 V2 Lora ESP32 LX6 Dual-Core
//0.96" Blue OLED Bluetooth WiFi Kit 32 Modulo CP2012 868MHZ-915MHz
//SCHEDA IDE: TTGO LoRa32-OLED v2.1.6
//IDE:Arduino 1.8.14
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include "SSD1306.h"
#define SCK 5 // GPIO5 -- SX1278's SCK
#define MISO 19 // GPIO19 -- SX1278's MISO
#define MOSI 27 // GPIO27 -- SX1278's MOSI
#define SS 18 // GPIO18 -- SX1278's CS
#define RST 14 // GPIO14 -- SX1278's RESET
#define DI0 26 // GPIO26 -- SX1278's IRQ(Interrupt Request)
#define BAND 433E6
static const int potentiometerPin = 12;// pin printed as G12 or 12
int servoPosition =0;
SSD1306 display(0x3c, 4, 15);
String rssi = "RSSI --";
String packSize = "--";
String packet ;
void setup() {
pinMode(16,OUTPUT);
digitalWrite(16, LOW); // set GPIO16 low to reset OLED
delay(50);
digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high
Serial.begin(115200);
while (!Serial);
Serial.println();
Serial.println("LoRa Sender Test");
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.setPins(SS,RST,DI0);
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
//LoRa.onReceive(cbk);
// LoRa.receive();
Serial.println("init ok");
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
delay(1500);
}
void loop() {
int servoPosition = map(analogRead(potentiometerPin), 0, 4096, 0, 180);
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_10);
display.drawString(0, 0, "POSIZIONE GRADI: ");
display.drawString(96, 0, String( servoPosition) );
Serial.println(String(servoPosition));
display.display();
// send packet
LoRa.beginPacket();
//LoRa.print("hello ");
LoRa.print(servoPosition);
LoRa.endPacket();
// wait for a second
}

 

Programma di RICEZIONE:

// FILE:RICEZIONE_POSIZIONE_CON_POTENZIOMETRO_CON_ SERVO_ 16_7_2021
//SCHEDA Hardware: DollaTek LORA32 V2.0 433MHz ESP32 Lora OLED 0.96"
//SD Card Display Blu modulo WiFi Bluetooth con Antenna
//SCHEDA IDE: TTGO LoRa32-OLED v2.1.6
//IDE:Arduino 1.8.14
// Scheda SD non abilitata è stato inserito OLED SUPPLEMENTARE
#include <Servo_ESP32.h>
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include "SSD1306.h"
#define SCK 5 // GPIO5 -- SX1278's SCK
#define MISO 19 // GPIO19 -- SX1278's MISO
#define MOSI 27 // GPIO27 -- SX1278's MOSI
#define SS 18 // GPIO18 -- SX1278's CS
#define RST 14 // GPIO14 -- SX1278's RESET
#define DI0 26 // GPIO26 -- SX1278's IRQ(Interrupt Request)
#define BAND 433E6
SSD1306 display(0x3c, 21, 22);
// OLED SDA 21 SCL 22
//String rssi = "RSSI --";
static const int servoPin = 23; // pin printed as G14 or 14
Servo_ESP32 servo1;
String packSize = "--";
String packet ;
void loraData(){
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_10);
// display.drawString(0 , 15 , "Received "+ packSize + " bytes");
display.drawStringMaxWidth(0 , 26 , 128, packet);

// display.drawString(0, 0, rssi);
display.display();
// Serial.println(rssi);
}
void cbk(int packetSize) {
packet ="";
packSize = String(packetSize,DEC);
for (int i = 0; i < packetSize; i++) { packet += (char) LoRa.read(); }
//rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ;
loraData();
}
void setup() {
servo1.attach(servoPin);
pinMode(16,OUTPUT);
digitalWrite(16, LOW); // set GPIO16 low to reset OLED
delay(50);
digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high、
Serial.begin(115200);
while (!Serial);
Serial.println();
Serial.println("LoRa Receiver Callback");
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.setPins(SS,RST,DI0);
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
//LoRa.onReceive(cbk);
LoRa.receive();
Serial.println("init ok");
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
delay(1500);
}
void loop() {
int packetSize = LoRa.parsePacket();
Serial.print("packet ");
Serial.println(packet);
int pos = packet.toInt();
Serial.println(pos);
//int servoPosition = map( (int(pos)), 0, 4096, 0, 180);
servo1.write(pos);
Serial.print("POSIZIONE ");
Serial.println(pos);
// Serial.println(servoPosition);
delay(20);
//Serial.println(packetSize);
if (packetSize) { cbk(packetSize); }
delay(10);
}

 

 

TEST di accensione di un LED distante circa  4-5 km   dalla trasmittente.

PIN  12  sulla Trasmittente                        PIN 13 sulla Ricevente

 

 

 

Continua.....