test didattico di trasmissione/ricezione angolare      

 

Applicazioni personali nel campo naturalistico.

Test di controllo della posizione per l'apertura dei bracci da presa del DISPENSER applicato al DRONE personale.

La movimentazione dei bracci da presa è determinata da un servo motore posto all'interno del gruppo superiore dell'assieme.

Test di controllo della rotazione del perno del servo a distanza non definita (max 5 km.)

 

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);
}

 

 

Continua.....