Visualizza messaggio singolo
Vecchio 15 aprile 12, 00:07   #38 (permalink)  Top
faustog_2
User
 
L'avatar di faustog_2
 
Data registr.: 19-07-2008
Residenza: catania
Messaggi: 978
prova fatta

ciao Tom sei della stessa annata mia!

allora oggi ho potuto fare una prova, funziona! l'ipotesi era corretta, solo che arduino legge i dati dalla ricevente portando con se piccole sbavature.. tenendo fermo lo stick della radio il segnale ogni tanto porta delle piccole variazioni.. che poi trasferite sul servo significano piccoli e fastidiosi movimenti.. ...occorre per tanto un'istruzione di controllo , che effettua l'assegnamento del nuovo valore solo se il valore assoluto della differenza è > 10 ..in modo da avere un margine..

if ( abs( pulseIn(ENG, HIGH) - RX_engine ) > 10)
RX_engine = pulseIn(ENG, HIGH);

Quindi aggiorna il valore di RX_engine solo se il valore assoluto della differenza con il precedente valore supera 10. Con questa istruzione le sbavature vengono corrette.

Questo software è il primo passo.. vale a dire prendo il segnale dalla ricevente... se non cambia rispetto all'ultimo ordine... allora legge dalla lista dei waypoint per andare ad eseguire il movimento del prox punto..



#include <Servo.h>

Servo myservo1,myservo2; // create servo object to control a servo

const int ENG = 2; // pin lettura ricevente segnale motore INGRESSO
const int DIR = 4; // pin lettura segnale servo di direzione INGRESSO
const int IR = 8; // pin lettura segnale infrarosso INGRESSO
const int ENG_OUT = 9; // pin per segnale motore da inviare USCITA
const int DIR_OUT = 10; // pin per segnale direzione servo da inviare USCITA

long engine; // segnale imposto per la potenza motore
long direct; // segnale imposto al servo di direzione

long RX_engine; // segnale proveniente dalla ricevente potenza motore
long RX_direct; // segnale proveniente dalla ricevente servo direzione

int val_1,val_2;


//__________________________________________________ ________________
void setup()
{
// initialize serial communication:
Serial.begin(38400);
myservo.attach(ENG_OUT);

pinMode(ENG, INPUT);
pinMode(DIR, INPUT);
pinMode(IR, INPUT);
}
//__________________________________________________ ________________
void loop()
{

RX_engine = pulseIn(ENG, HIGH);
RX_direct = pulseIn(DIR, HIGH);

val_1 = map(RX_engine, 1050, 1850, 0, 180);
val_2 = map(RX_direct, 1050, 1850, 0, 180);


myservo.write(val_1);
}



Citazione:
Originalmente inviato da Tom_1971 Visualizza messaggio
Sei un drago, Fausto!

Tienici al corrente, se non altro farai sognare noi miseri vecchi, modellisti e sperimentatori da salotto


P.S. La storia della guida automatica intriga... a me era venuta l'idea di iniziare con una macchinina, più semplice da pilotare (manca la terza dimensione e non risente del vento!) e sicuramente anche più robusta in caso di ... ehm... errori di guida!

Ultima modifica di faustog_2 : 15 aprile 12 alle ore 00:13
faustog_2 non è collegato   Rispondi citando