Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 24 aprile 20, 22:02   #1 (permalink)  Top
Sospeso
 
Data registr.: 17-07-2013
Messaggi: 3.734
mi aiutate a completare uno sketch?

sto giocando con una arduino nano e vorrei poter usare il ch3 di una radio a volantino (on off) in modo che su una posizione ottengo un servo loop che va da un fine corsa all'altro.

questo è lo sketch del servo loop, appena si carica il servo inizia a ruotare da un lato all'altro della sua corsa.

int pos = 0;
void setup()
{
myservo.attach(10);
}
void loop()
{
for(pos = 0; pos < 180; pos += 1)
{
myservo.write(pos);
delay(25);
}
for(pos = 180; pos>=1; pos-=1)
{
myservo.write(pos);
delay(25);
}
}

purtroppo sono non più di 4 ore totali che gioco con questa roba e la nebbia è troppo densa, non mi riesce.

vorrei poterlo completare aggiungendo tutto quello che manca per dire alla nano che dovrà fare il loop quando riceverà il segnale di una delle 2 posizioni dalla ricevente del radiocomando.
mentre nell'altra posizione il servo dovrà stare fisso centrato indipendentemente dalla posizione nella quale sarà quando verrà azionato l'aux ch3 della radio, in pratica come se la nano non ci fosse.

per favore mi aiutate?

vorrei fare questo progetto per ovviare alla mancanza di un ch3 proporzionale sulla mia radio spektrum dx3s l'applicazione servirebbe per ruotare una videocamera e darsi un'occhiata intorno ma poter tornare alla visuale frontale in qualsiasi momento.
ma se avete altre soluzioni potrebbero essere altrettanto interessanti.
wrighizilla non è collegato   Rispondi citando
Vecchio 24 aprile 20, 22:20   #2 (permalink)  Top
Sospeso
 
Data registr.: 17-07-2013
Messaggi: 3.734
ops.. ho dimenticato le prime 2 stringhe:

#include <Servo.h>

Servo myservo;

di seguito il resto scritto nel post precedente.

myservo.attach 10 può essere cambiato di valore in base a quale piedino usate in uscita per il segnale del servo.

vorrei anche poter aggiungere una breve pausa raggiunti i fine corsa, 1 secondo andrebbe bene. sto studiando come fare, se lo sapete aiutatemi per favore

Ultima modifica di wrighizilla : 24 aprile 20 alle ore 22:25
wrighizilla non è collegato   Rispondi citando
Vecchio 24 aprile 20, 22:53   #3 (permalink)  Top
Sospeso
 
Data registr.: 17-07-2013
Messaggi: 3.734
ok almeno questo è stato facile..

questo è lo sketch del servo che ruota in loop con una pausa di 2 secondi sui fine corsa

#include <Servo.h>

Servo myservo;

int pos = 0;

void setup() {
myservo.attach(10); // il piedino assegnato al segnale servo
}

void loop() {
for (pos = 0; pos <= 180; pos += 1) { //il servo ruota da 1 a 180 gradi con step di 1 passo alla volta

myservo.write(pos);
delay(15); // la velocità con la quale il servo effettuerà la sua corsa in un verso
}

delay(2000); //2000 sono 2 secondi di pausa

for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15); // la velocità con la quale il servo effettuerà la sua corsa nell'altro verso
}

delay(2000); //altri 2 secondi di pausa prima di ricominciare il loop

}


---------------------
per adesso sono arrivato qui.. se sapete come fare per aggiungere quello che manca per comandare il loop dalla ricevente del modello vi sarei riconoscente

Ultima modifica di wrighizilla : 24 aprile 20 alle ore 22:57
wrighizilla non è collegato   Rispondi citando
Vecchio 24 aprile 20, 23:10   #4 (permalink)  Top
User
 
L'avatar di madqwerty
 
Data registr.: 18-05-2013
Residenza: Chivasso (TO)
Messaggi: 2.209
considerando che non programmo con Arduino da un tot (non programmo da un tot in generale ) e che non ho mai usato la libreria servo..

#include <Servo.h>

Servo myServo,
myInput;
int newPos,
oldPos;
bool direzione;

void setup()
{
myServo.attach(10);
myInput.attach(ingresso_ch3);
newPos = 90;
oldPos = 90;
direzione = true;
myservo.write(pos);
}


void loop()
{
oldPos = newPos;

if (myInput.read() < soglia_on_off_ch3)
{
newPos = 90;
direzione = true;
}
else
{
if (direzione)
{
if (newPos < 220)
NewPos++;
else
direzione = false;
}
else
{
if(newPos > -40)
NewPos--;
else
direzione = true;
}

if ( (newPos != oldPos) AND (newPos <= 180) AND (newPos >=0) )
myservo.write(newPos);

delay(25);
}


non so se sia giusta la routine di lettura dell'input, e anche non ricordo come dichiarare gli AND
__________________
v911 - mCPX - PRȎTOS - TRex 450 500 550
A959B - Q32 - DF03 - LRP TC2 - XB4 - M06 - B5(M) - T8E - X1 - T4 - XB2C - GF01
madqwerty non è collegato   Rispondi citando
Vecchio 24 aprile 20, 23:14   #5 (permalink)  Top
User
 
L'avatar di madqwerty
 
Data registr.: 18-05-2013
Residenza: Chivasso (TO)
Messaggi: 2.209
newPos e oldPos ti servono per capire che da un loop all'altro la posizione sia stata ricalcolata, quindi non dare comandi al servo non utili alla causa,

direzione serve per ricordare da un loop all'altro dove stava muovendo

e newPos oltre a 180 e inferiore a 0 ti servono per gestire i delay del servo fermo a dx o sx, tanto il controllo finale non li manderà al servo

scritto così "a sensazione" eh
__________________
v911 - mCPX - PRȎTOS - TRex 450 500 550
A959B - Q32 - DF03 - LRP TC2 - XB4 - M06 - B5(M) - T8E - X1 - T4 - XB2C - GF01
madqwerty non è collegato   Rispondi citando
Vecchio 25 aprile 20, 00:11   #6 (permalink)  Top
Sospeso
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da madqwerty Visualizza messaggio
newPos e oldPos ti servono per capire che da un loop all'altro la posizione sia stata ricalcolata, quindi non dare comandi al servo non utili alla causa,

direzione serve per ricordare da un loop all'altro dove stava muovendo

e newPos oltre a 180 e inferiore a 0 ti servono per gestire i delay del servo fermo a dx o sx, tanto il controllo finale non li manderà al servo

scritto così "a sensazione" eh
grazie spiegami meglio questo sketch che hai scritto, così come lo vedo è già utilizzabile con una ricevente? il segnale d'ingresso della rx ch3 a quale piedino della nano lo dovrei collegare?
lo decido io? ad esempio nella parentesi (ingresso_ch3) scrivo 8 e poi collego la rx al piedino 8?
inoltre non ritrovo scritto un delay di 2 secondi sui fine corsa comunque dopo lo carico e lo studio meglio.

Ultima modifica di wrighizilla : 25 aprile 20 alle ore 00:20
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 09:53   #7 (permalink)  Top
User
 
L'avatar di italo.driussi
 
Data registr.: 01-07-2004
Residenza: Ronchi dei Legionari (GO)
Messaggi: 4.893
Punto di partenza

#include <Servo.h>
Servo myservo;
int rxpulse = 1500;
int maxsx = 45; //-- tarare
int maxdx = 135; //-- tarare
int pservo = 90;
void setup() {
myservo.attach(9);
pinMode(3, INPUT); //-- legge RX
}

void loop() {
rxpulse = pulseIn(3, HIGH);
if (rxpulse > 1700)
{
myservo.write(90);
delay(200);
}
else
{
for (int n = maxsx; n <= maxdx; n++) {
myservo.write(n);
delay(50);
}

for (int n = maxdx; n >= maxsx; n--) {
myservo.write(n);
delay(50);
}
}
}
__________________
Solo Aeromodelli -
Autogiro Elicotteri Multirotori No grazie
italo.driussi non è collegato   Rispondi citando
Vecchio 25 aprile 20, 10:09   #8 (permalink)  Top
Sospeso
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da madqwerty Visualizza messaggio
newPos e oldPos ti servono per capire che da un loop all'altro la posizione sia stata ricalcolata, quindi non dare comandi al servo non utili alla causa,

direzione serve per ricordare da un loop all'altro dove stava muovendo

e newPos oltre a 180 e inferiore a 0 ti servono per gestire i delay del servo fermo a dx o sx, tanto il controllo finale non li manderà al servo

scritto così "a sensazione" eh
non mi compila il tuo sketch. mi da errore alla fine: myservo.write(newPos);
ho provato a inserire un valore numerico ma rimane l'errore myservo not declared
abbi pazienza è certamente banale ma ancora non sono capace di passare oltre

intanto sul serial monitor ho testato i valori ottenuti dalla nano dalla ricevente.
le 2 posizioni del canale ausiliario sono 1100 e 1904 ora non so dire ancora quale delle 2 sarà il loop. al canale servo ho assegnato il piedino 10 mentre l'ingresso del segnale è al piedino 8
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 10:27   #9 (permalink)  Top
Sospeso
 
Data registr.: 17-07-2013
Messaggi: 3.734
Citazione:
Originalmente inviato da italo.driussi Visualizza messaggio
Punto di partenza
funziona, ho modificato i tempi di delay della corsa in movimento portandoli a 20 e i canali assegnati al servo e all'ingresso che sono diversi.. 10, 8
a questo punto mancherebbe solo una pausa di 2 secondi alle estremità dei fine corsa.

grazie!! è quasi pronto ad essere impiegato, andrà corretta la posizione del servo alle 2 estremità del loop portandola ai gradi giusti della visuale che dovrò avere dalla cam ma il tuo sketch fa precisamente quello che vorrei ottenere.

Ultima modifica di wrighizilla : 25 aprile 20 alle ore 10:30
wrighizilla non è collegato   Rispondi citando
Vecchio 25 aprile 20, 10:39   #10 (permalink)  Top
Sospeso
 
Data registr.: 17-07-2013
Messaggi: 3.734
Italo, a cosa serve la stringa
myservo.write(90);
delay(200);

il 200 a cosa fa riferimento?
wrighizilla non è collegato   Rispondi citando
Rispondi

Bookmarks



Strumenti discussione
Visualizzazione

Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
buggy da completare BoBoPoP Automodellismo Mot. Scoppio Off-Road 41 18 maggio 16 15:56
monster da completare...! bronto_19 Automodellismo Mot. Elettrico Off-Road 2 22 giugno 10 15:35
Sto costruendo uno schiumino (o tzagi), mi aiutate??? crido96 Aeromodellismo Principianti 72 07 febbraio 10 00:26
Come completare una associated B4? ryan-j Automodellismo Mot. Elettrico On-Road 9 04 maggio 08 09:55



Tutti gli orari sono GMT +1. Adesso sono le 01:25.


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