BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Sistema automatico su Taranis x9d (https://www.baronerosso.it/forum/circuiti-elettronici/386098-sistema-automatico-su-taranis-x9d.html)

Minestrone 20 novembre 20 23:16

Si

Inviato dal mio M2004J19C utilizzando Tapatalk

Max187 23 novembre 20 15:32

Citazione:

Originalmente inviato da Minestrone (Messaggio 5210474)
Lui vuole uno switch nella ricevente, non nella radio. Per farlo la ricevente deve avere un ingresso, anche analogico. La x8r non ce l'ha per cui bisogna creare un sensore.

Inviato dal mio M2004J19C utilizzando Tapatalk


Esattamente! Credo che ingannare un sensore di tensione lipo sia al momento la cosa più semplice, veloce ed economica. Basta realizzare un partitore che viene "chiuso" da microntatto.
"LIPO carica" contatto On
"LIPO" scarica" contatto Off

Dovrò poi solo trovare quale parametro si riferisce in telemetria alla tensione delle lipo e creare la condizione che se scende sotto un certo valore (di Volt) quindi contatto Off mi porta un canale alla mixaggio stabilito.
Quando risale, quindi contatto On mi ripristina il parametro.

Top!

Minestrone 23 novembre 20 15:38

Economica forse no, un qualsiasi Arduino , anche un promini, farebbe in modo semplice all caso tuo e costerebbe anche meno

Inviato dal mio M2004J19C utilizzando Tapatalk

BBC25185 23 novembre 20 19:06

anche un Digispark và bene. Poi, se uno vuole essere sicuro che la memoria basti, un arduino micro basta e avanza. E con 3-4 euro te la cavi!
Alla fine il programma è abbastanza semplice da fare.
Un pin qualunque è collegato alla porta SPORT e comunica con la ricevente il dato interessato (la porta viene emulata in ogni caso per via dell'inversione del segnale).
Un altro pin è usato in INPUT_PULLUP con un contatto (indifferente se normalmente aperto o chiuso) e basta.

absinth84 23 novembre 20 21:57

Citazione:

Originalmente inviato da BBC25185 (Messaggio 5210644)
anche un Digispark và bene. Poi, se uno vuole essere sicuro che la memoria basti, un arduino micro basta e avanza. E con 3-4 euro te la cavi!
Alla fine il programma è abbastanza semplice da fare.
Un pin qualunque è collegato alla porta SPORT e comunica con la ricevente il dato interessato (la porta viene emulata in ogni caso per via dell'inversione del segnale).
Un altro pin è usato in INPUT_PULLUP con un contatto (indifferente se normalmente aperto o chiuso) e basta.

Arduino pro mini mi sembra la scelta migliore, con poche righe di codice fai quello che vuoi.
Qui trovi le librerie sport e un po di esempi:
https://www.rcgroups.com/forums/show...d-configurable

Io ho appena fatto un sensore barometrico

Max187 24 novembre 20 09:13

Buongiorno,
sono alquanto neofita con Arduino, se qualche buon anima:) vista la semplicità del programma può inviarmi il link via mail o msg privato gle ne sarei grato.

Io praticamente non ho un vero è proprio trasduttore o meglio un microinterruttore a deviatore, in determinate situazioni il contatto risulta NC in altre contatto NO, semplicemente.

Ps. ho la porta Sbus impegnata da un convertitore SBUS PWM però da come intuisco il segnale di "telemetria" va collegato nella Smart Port, quindi non ci sono problemi.

Grazie

Minestrone 24 novembre 20 11:49

Tra un po' ti carico il codice che farebbe al caso tuo, devo solo trovare da dove farti scaricare la libreria che ho usato che è diversa da quella postata qualche post fa.

Minestrone 24 novembre 20 12:17

La libreria che ho usato io la trovi qua e devi installarla nella cartella delle librerie:
https://github.com/RealTadango/FrSky
Il codice te lo scrivo alla fine del post, non devi fare altro che copiarlo ed incollarlo nell'IDE di Arduino.
In pratica il codice costruisce un sensore con ID 5900 (puoi anche cambiarlo) che vale 0 quando il pulsante non è a massa e dà 10 quando il pulsante va a massa, vedi un po' tu come costruirti lo switch.
Nel codice è implementato un semplice filtro per il debaunce dell'interruttore (50ms).
All'inizio del codice ci sono le righe che puoi impostare per cambiare il pin dell'interruttore (ora è 8 ma puoi mettere quello che ti fa più comodo). Il pin 8 deve essere collegato a GND quando il pulsante è premuto. Puoi inoltre impostare il pin del segnale che va a SmartPort (ora è il pin 3), l' ID del sensore (ora 5900) e il tempo di debaunce (ora 50 ms).

Immagino che l'Arduino dovrà essere alimentato tramite la ricevente pertanto preoccupati di collegare il positivo al pin RAW e non a Vin perchè altrimenti bruci tutto. Il pin Raw accetta fino a 12V perciò occhio a cosa lo colleghi.
Se usi un arduino pro mini da 3.3V non dovrebbero esserci problemi, se usi un arduino a 5 V potrebbe esserci qualche problema con i livelli di tensione dell'arduino e della ricevente. Per scongiurare qualsiasi problema puoi mettere una semplice resistenza sul cavetto di segnale che va dal pin 3 ala porta smart, 220ohm dovrebbe andare.


CODICE:


#include <SPort.h> //Include la SPort library
#define PIN_INTERRUTTORE 8 //definisce il pin da usare come interruttore
SPortHub hub(0x12, 3); //Hardware ID 0x12, il pin del cavetto smart port è il 3
SimpleSPortSensor sensore(0x5900); //Sensore con ID 0x5900
#define DEBOUNCE 50 //definisce il tempo di debounce

bool lettura = 0;
bool buttonState = 0;
bool lastButtonState = 0;
unsigned long lastDebounceTime = 0; // tempo dall'untimo switch dell'interruttore
unsigned long debounceDelay = DEBOUNCE; // tempo di debaunce

void setup() {
pinMode( PIN_INTERRUTTORE , INPUT_PULLUP);
hub.registerSensor(sensore); //definisce il sensore
hub.begin(); //attiva il sensore
}

void loop() {
//lettura dell'interruttore con debounce
lettura = digitalRead(PIN_INTERRUTTORE);
if (lettura != lastButtonState) {
lastDebounceTime = millis(); // resetta il tempo
}
if ((millis() - lastDebounceTime) > debounceDelay) {

if (lettura != buttonState) {
buttonState = lettura;
}
}


if (lettura) { sensore.value = 0; //setta il valore del sensore
}
else { sensore.value = 10; //setta il valore del sensore

}
hub.handle(); //ora gestisce i dati del sensore
}

Max187 25 novembre 20 09:08

Grazie mille sei stato GENTILISSIMO a indicarmi tutto nei minimi dettagli, appena possibile effettuerò qualche prova. Acquisterò un Arduino mini così risolvo tutto.

Perdonami, a livello hardware elettronico me la cavo abbastanza, però sui software poco. La libreria la devo installare nell IDE di Arduino giusto?

Citazione:

Originalmente inviato da Minestrone (Messaggio 5210686)
La libreria che ho usato io la trovi qua e devi installarla nella cartella delle librerie:
https://github.com/RealTadango/FrSky
Il codice te lo scrivo alla fine del post, non devi fare altro che copiarlo ed incollarlo nell'IDE di Arduino.
In pratica il codice costruisce un sensore con ID 5900 (puoi anche cambiarlo) che vale 0 quando il pulsante non è a massa e dà 10 quando il pulsante va a massa, vedi un po' tu come costruirti lo switch.


Nel codice è implementato un semplice filtro per il debaunce dell'interruttore (50ms).
All'inizio del codice ci sono le righe che puoi impostare per cambiare il pin dell'interruttore (ora è 8 ma puoi mettere quello che ti fa più comodo). Il pin 8 deve essere collegato a GND quando il pulsante è premuto. Puoi inoltre impostare il pin del segnale che va a SmartPort (ora è il pin 3), l' ID del sensore (ora 5900) e il tempo di debaunce (ora 50 ms).

Immagino che l'Arduino dovrà essere alimentato tramite la ricevente pertanto preoccupati di collegare il positivo al pin RAW e non a Vin perchè altrimenti bruci tutto. Il pin Raw accetta fino a 12V perciò occhio a cosa lo colleghi.
Se usi un arduino pro mini da 3.3V non dovrebbero esserci problemi, se usi un arduino a 5 V potrebbe esserci qualche problema con i livelli di tensione dell'arduino e della ricevente. Per scongiurare qualsiasi problema puoi mettere una semplice resistenza sul cavetto di segnale che va dal pin 3 ala porta smart, 220ohm dovrebbe andare.


CODICE:


#include <SPort.h> //Include la SPort library
#define PIN_INTERRUTTORE 8 //definisce il pin da usare come interruttore
SPortHub hub(0x12, 3); //Hardware ID 0x12, il pin del cavetto smart port è il 3
SimpleSPortSensor sensore(0x5900); //Sensore con ID 0x5900
#define DEBOUNCE 50 //definisce il tempo di debounce

bool lettura = 0;
bool buttonState = 0;
bool lastButtonState = 0;
unsigned long lastDebounceTime = 0; // tempo dall'untimo switch dell'interruttore
unsigned long debounceDelay = DEBOUNCE; // tempo di debaunce

void setup() {
pinMode( PIN_INTERRUTTORE , INPUT_PULLUP);
hub.registerSensor(sensore); //definisce il sensore
hub.begin(); //attiva il sensore
}

void loop() {
//lettura dell'interruttore con debounce
lettura = digitalRead(PIN_INTERRUTTORE);
if (lettura != lastButtonState) {
lastDebounceTime = millis(); // resetta il tempo
}
if ((millis() - lastDebounceTime) > debounceDelay) {

if (lettura != buttonState) {
buttonState = lettura;
}
}


if (lettura) { sensore.value = 0; //setta il valore del sensore
}
else { sensore.value = 10; //setta il valore del sensore

}
hub.handle(); //ora gestisce i dati del sensore
}


Max187 25 novembre 20 09:20

Potrei portare a massa il contatto quando scambia e lasciarlo a +5V quando è NC.

Così +5V valore 0, in scambio portato a massa valore 10

Potrebbe andare?portarlo a +5V per non lasciare il segnale flottante quando il contatto è NC.

Per l'alimentazione potrei dedicare anche un circuito a parte nessun problema se vanno bene 5V metto un 7805 per alimentare Arduino nano, la ricevente è alimentata da un esc perciò i 5V dovrebbero essere compatibili.

La butto la non potrei alimentare tutto dalla SmartPort?
+5V gnd e segnale... Ovviamente mettendo una resistenza da 220Ohm sul segnale...


Tutti gli orari sono GMT +2. Adesso sono le 03:55.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002