Torna indietro   BaroneRosso.it - Forum Modellismo > Categoria altre specialità modellistiche. > Mezzi Corazzati


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 07 agosto 19, 13:40   #1 (permalink)  Top
User
 
L'avatar di davirex
 
Data registr.: 20-06-2010
Residenza: riccione
Messaggi: 841
costruire carro armato

ciao a tutti
voglio costruire un cingolato fpv ma voglio usarlo con un radiocomando tradizionale a stik,quello che si usa per le auto rc,come posso fare per farlo funzionare con la radio?ci sono schede apposite o altro?premetto che con i cingolati sono a zero e magari se mi potevate elencare il materiale occorrente.
voglio usare il kit cingoli come quello in foto
grazie
davirex non è collegato   Rispondi citando
Vecchio 07 agosto 19, 13:41   #2 (permalink)  Top
User
 
L'avatar di davirex
 
Data registr.: 20-06-2010
Residenza: riccione
Messaggi: 841
questo kit
Icone allegate
costruire carro armato-616y7bctnql._sl1001_.jpg  
davirex non è collegato   Rispondi citando
Vecchio 07 agosto 19, 16:44   #3 (permalink)  Top
User
 
L'avatar di giankyfunky
 
Data registr.: 06-08-2015
Residenza: Torino
Messaggi: 1.395
Immagini: 8
Se ha due motori a spazzole, uno per cingolo, ti servono due ESC per motori a spazzole tipo questi, una ricevente ad almeno due canali ed una trasmittente a stick dove si possa montare il ritorno al centro a molla su entrambi gli stick se vuoi avere il comando con due mani, oppure con la possibilità di miscelare due canali se vuoi comandare avanti/indietro e destra/sinistra con uno stick solo....
__________________
I miei modelli
giankyfunky è collegato   Rispondi citando
Vecchio 07 agosto 19, 20:16   #4 (permalink)  Top
User
 
L'avatar di davirex
 
Data registr.: 20-06-2010
Residenza: riccione
Messaggi: 841
Si ha due motori a spazzole,infatti la mia radio ha lo stik che torna al centro,i due esc li collego sul canale 1 e 2,cosi facendo per andare avanti muovo gli stik dx e sx tutto avanti e per curvare a destra muovo in avanti lo stik sx e viceversa per curvare a sx giusto?
davirex non è collegato   Rispondi citando
Vecchio 07 agosto 19, 22:18   #5 (permalink)  Top
User
 
L'avatar di giankyfunky
 
Data registr.: 06-08-2015
Residenza: Torino
Messaggi: 1.395
Immagini: 8
Esatto e per fare il girotondo uno avanti e uno indietro.......
__________________
I miei modelli
giankyfunky è collegato   Rispondi citando
Vecchio 24 marzo 20, 21:06   #6 (permalink)  Top
User
 
Data registr.: 03-08-2009
Residenza: Borgosesia
Messaggi: 247
Ciao a tutti, riesumo questo post visto che tutto sommato è ancora tra le prime discussioni.

Ho in mente lo stesso progetto per far giocare mio figlio, solo che pensavo di interfacciare la ricevente ad arduino ed utilizzare una motor shield per comandare i 2 motori ridotti.

Non ho trovato molte difficoltà a capire come far leggere ad aurduino i segnali ppm della radio, ma non riesco a compilare la parte di codice per utilizzare 2 canali separati per movimento e direzione,in parole semplici un canale per movimento avanti ed indietro ed un secondo per sterzare (quindi rallentare od invertire la rotazione di uno dei 2 cingoli)

Qualcuno è pratico di arduino oppure ha già trovato qualcosa a riguardo?

Sono anche aperto a nuove idee senza arduino, purchè il risultato sia l'utilizzo di 2 canali separati come indicato in precedenza.

Grazie in anticipo.
Ch3ch2oh non è collegato   Rispondi citando
Vecchio 25 marzo 20, 01:03   #7 (permalink)  Top
User
 
L'avatar di Mrk89
 
Data registr.: 29-05-2006
Residenza: Catania
Messaggi: 2.932
Citazione:
Originalmente inviato da Ch3ch2oh Visualizza messaggio
Ciao a tutti, riesumo questo post visto che tutto sommato è ancora tra le prime discussioni.

Ho in mente lo stesso progetto per far giocare mio figlio, solo che pensavo di interfacciare la ricevente ad arduino ed utilizzare una motor shield per comandare i 2 motori ridotti.

Non ho trovato molte difficoltà a capire come far leggere ad aurduino i segnali ppm della radio, ma non riesco a compilare la parte di codice per utilizzare 2 canali separati per movimento e direzione,in parole semplici un canale per movimento avanti ed indietro ed un secondo per sterzare (quindi rallentare od invertire la rotazione di uno dei 2 cingoli)

Qualcuno è pratico di arduino oppure ha già trovato qualcosa a riguardo?

Sono anche aperto a nuove idee senza arduino, purchè il risultato sia l'utilizzo di 2 canali separati come indicato in precedenza.

Grazie in anticipo.
Ciao, invia la parte di codice che hai già scritto e ti spiego come modificarla
__________________
Il filo attaccato all'antenna non mente mai....Troppo vento, si torna a casa....
I miei circuiti elettronici autocostruiti: Postbruciatore per ventole intubate ; Circuito luci per aeromodello-elimodello ; Rallenta servo con protezione da corto circuito
Mrk89 non è collegato   Rispondi citando
Vecchio 27 marzo 20, 19:57   #8 (permalink)  Top
User
 
Data registr.: 03-08-2009
Residenza: Borgosesia
Messaggi: 247
Thumbs down

in realtà di funzionante ho solo la parte di codice che mi serve per leggere i segnali:

int channel_1_us;
int channel_2_us;
int channel_3_us;
int channel_4_us;
int channel_5_us;
int channel_6_us;

int channel_1_perc;
int channel_2_perc;
int channel_3_perc;
int channel_4_perc;
int channel_5_perc;
int channel_6_perc;

void setup() {
Serial.begin (9600);
pinMode (2, INPUT);
pinMode (3, INPUT);
pinMode (4, INPUT);
pinMode (5, INPUT);
pinMode (6, INPUT);
pinMode (7, INPUT);
}

void loop() {

//leggi la durata dell'impulso sui 6 pin
channel_1_us = pulseIn (2, HIGH);
channel_2_us = pulseIn (3, HIGH);
channel_3_us = pulseIn (4, HIGH);
channel_4_us = pulseIn (5, HIGH);
channel_5_us = pulseIn (6, HIGH);
channel_6_us = pulseIn (7, HIGH);

//limita la durata dell'impulso tra 1000 e 2000us e poi scalalo tra 0 e 100
channel_1_perc = map(constrain(channel_1_us, 1000, 2000), 1000, 2000, 0, 100);
channel_2_perc = map(constrain(channel_2_us, 1000, 2000), 1000, 2000, 0, 100);
channel_3_perc = map(constrain(channel_3_us, 1000, 2000), 1000, 2000, 0, 100);
channel_4_perc = map(constrain(channel_4_us, 1000, 2000), 1000, 2000, 0, 100);
channel_5_perc = map(constrain(channel_5_us, 1000, 2000), 1000, 2000, 0, 100);
channel_6_perc = map(constrain(channel_6_us, 1000, 2000), 1000, 2000, 0, 100);

//stampa sul serial monitor i valori in microsecondi e in percentuale
Serial.print("canale 1 microsec: ");
Serial.println(channel_1_us);
Serial.print("canale 1 %: ");
Serial.println(channel_1_perc);

Serial.print("canale 2 microsec: ");
Serial.println(channel_2_us);
Serial.print("canale 2 %: ");
Serial.println(channel_2_perc);

Serial.print("canale 3 microsec: ");
Serial.println(channel_3_us);
Serial.print("canale 3 %: ");
Serial.println(channel_3_perc);

Serial.print("canale 4 microsec: ");
Serial.println(channel_4_us);
Serial.print("canale 4 %: ");
Serial.println(channel_4_perc);

Serial.print("canale 5 microsec: ");
Serial.println(channel_5_us);
Serial.print("canale 5 %: ");
Serial.println(channel_5_perc);

Serial.print("canale 6 microsec: ");
Serial.println(channel_6_us);
Serial.print("canale 6 %: ");
Serial.println(channel_6_perc);

Serial.println("");

delay (2000);

in questi giorni ho provato, scritto e cestinato righe di codice, cercando in rete varie idee per comandare la mia motorshield ( https://www.futurashop.it/motor-shie...ata-8220-vma03)

ciò che mi blocca è come miscelare i canali per un movimento realistico da cingolato, sarebbe semplice usare 2 canali separati e farlo a mano, o usare i mix della radio..ma allora tanto varrebbe pormi la sfida di usare arduino

Sono ben lontano da definirmi anche solo pratico nell'uso del codice, però capisco cosa leggo e solitamemte riesco ad adattarlo alle mie esigenze. Ma in questo caso mi stà letteralmente fumando il cervello
Ch3ch2oh non è collegato   Rispondi citando
Vecchio 27 marzo 20, 20:49   #9 (permalink)  Top
User
 
L'avatar di Mrk89
 
Data registr.: 29-05-2006
Residenza: Catania
Messaggi: 2.932
Guarda, di seguito il codice di esempio che si trova nel sito che hai linkato tu:

Codice:
int pwm_a = 3;  //PWM control for motor outputs 1 and 2 
int pwm_b = 9;  //PWM control for motor outputs 3 and 4 
int dir_a = 2;  //direction control for motor outputs 1 and 2 
int dir_b = 8;  //direction control for motor outputs 3 and 4 

void setup()
{
  pinMode(pwm_a, OUTPUT);  //Set control pins to be outputs
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);
  
  analogWrite(pwm_a, 100);  //set both motors to run at (100/255 = 39)% duty cycle (slow)
  analogWrite(pwm_b, 100);
  
}

void loop()
{
  digitalWrite(dir_a, LOW); 
  digitalWrite(dir_b, LOW);  
  
  
  analogWrite(pwm_a, 50);  
  analogWrite(pwm_b, 50);
  
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(1000);
  
  analogWrite(pwm_a, 150);  
  analogWrite(pwm_b, 150);
  
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(1000);
  
  analogWrite(pwm_a, 255);  
  analogWrite(pwm_b, 255);
 
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(5000);
  
  digitalWrite(dir_a, HIGH); 
  digitalWrite(dir_b, HIGH);  
  
  
  analogWrite(pwm_a, 50);  
  analogWrite(pwm_b, 50);
  
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(1000);
  
  analogWrite(pwm_a, 150);  
  analogWrite(pwm_b, 150);
  
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(1000);
  
  analogWrite(pwm_a, 255);  
  analogWrite(pwm_b, 255);
 
  delay(1000);
  
  analogWrite(pwm_a, 0);  
  analogWrite(pwm_b, 0);
  
  delay(5000);

}
Assegnati i pin DIR (direzione) e PWM (controllo della velocità) in queste prime righe

Codice:
int pwm_a = 3;  //PWM control for motor outputs 1 and 2 
int pwm_b = 9;  //PWM control for motor outputs 3 and 4 
int dir_a = 2;  //direction control for motor outputs 1 and 2 
int dir_b = 8;  //direction control for motor outputs 3 and 4 

void setup()
{
  pinMode(pwm_a, OUTPUT);  //Set control pins to be outputs
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);
non ti resta che controllare la direzione dei due motori con:

Codice:
digitalWrite(dir_a, LOW); //per andare avanti 
  digitalWrite(dir_a, HIGH); //per andare indietro
e la velocità dei motori da a 0 a 255 (ESEMPIO: nelle righe appena sotto, i motori sono entrambi al 50% della loro velocità massima):

Codice:
  analogWrite(pwm_a, 127);  
  analogWrite(pwm_b, 127);
I comandi sono simmetrici rispetto allo 0, quindi meglio mapparli così:

Codice:
channel_1_perc = map(constrain(channel_1_us, 1000, 2000), 1000, 2000, -100, 100);
channel_2_perc = map(constrain(channel_2_us, 1000, 2000), 1000, 2000, -100, 100);
Misceliamo i canali (se il raggio di sterzata dovesse essere troppo brusco, aumenta la divisione a fine rigo "/1;" ).

Codice:
PWM_SX = channel_1_perc + channel_2_perc/1;
PWM_DX = channel_1_perc - channel_2_perc/1;
Ora creiamo i valori da inviare alla scheda (0-255 e non 0-100).
La velocità è comunque un valore positivo, la direzione è da selezionare a parte:

Codice:
if (PWM_SX>=0){DIR_SX = 1;}else{DIR_SX = 0;};
PWM_SX = map(abs(constrain(PWM_SX, -100, 100)), 0, 100, 0, 255);
if (PWM_DX>=0){DIR_DX = 1;}else{DIR_DX = 0;};
PWM_DX = map(abs(constrain(PWM_SX, -100, 100)), 0, 100, 0, 255);

  digitalWrite(dir_a, DIR_SX); 
  digitalWrite(dir_b, DIR_DX);  
  
  
  analogWrite(pwm_a, PWM_SX);  
  analogWrite(pwm_b, PWM_DX);


Questo è quanto...
Ci potrebbero essere degli errori di sintassi, non ho potuto testare il codice.
Inoltre, ci sono alcune cose migliorabili nel codice, ma lascio sperimentare te e poi ci sentiamo più avanti dopo che hai fatto qualche test. Vediamo se riesci a migliorare il tutto
__________________
Il filo attaccato all'antenna non mente mai....Troppo vento, si torna a casa....
I miei circuiti elettronici autocostruiti: Postbruciatore per ventole intubate ; Circuito luci per aeromodello-elimodello ; Rallenta servo con protezione da corto circuito
Mrk89 non è collegato   Rispondi citando
Vecchio 28 marzo 20, 12:35   #10 (permalink)  Top
User
 
Data registr.: 03-08-2009
Residenza: Borgosesia
Messaggi: 247
Grazie! ho capito la logica delle miscelazioni ed in effetti è geniale (io avrò tante altre buone qualità ma proprio mi mancano queste intuizioni)

Però qualcosa non mi funziona, da serial monitor leggo i comandi della radio in modo corretto, sia i valori che le conversioni in % ma ho sempre un motore che gira in un senso e l'altro all'inverso. Agendo sugli stick non ci sono cambiamenti.

Sicuro ho scritto qualcosa di sbagliato, ho un sacco di dubbi anche dovuti alla ma scarsa conoscrnza della sintassi corretta.

Codice:
int channel_1_us;
int channel_2_us;
int channel_3_us;
int channel_4_us;
int channel_5_us;
int channel_6_us;

int channel_1_perc;
int channel_2_perc;
int channel_3_perc;
int channel_4_perc;
int channel_5_perc;
int channel_6_perc;


void loop() {

  //leggi la durata dell'impulso sui 6 pin
  channel_1_us = pulseIn (4, HIGH);
  channel_2_us = pulseIn (5, HIGH);
  channel_3_us = pulseIn (6, HIGH);
  //channel_4_us = pulseIn (5, HIGH);
  //channel_5_us = pulseIn (6, HIGH);
  //channel_6_us = pulseIn (7, HIGH);

  //limita la durata dell'impulso tra 1000 e 2000us e poi scalalo tra 0 e 100
  channel_1_perc = map(constrain(channel_1_us, 1000, 2000), 1000, 2000, 0, 100);
  channel_2_perc = map(constrain(channel_2_us, 1000, 2000), 1000, 2000, 0, 100);
  channel_3_perc = map(constrain(channel_3_us, 1000, 2000), 1000, 2000, 0, 100);
  channel_4_perc = map(constrain(channel_4_us, 1000, 2000), 1000, 2000, 0, 100);
  channel_5_perc = map(constrain(channel_5_us, 1000, 2000), 1000, 2000, 0, 100);
  channel_6_perc = map(constrain(channel_6_us, 1000, 2000), 1000, 2000, 0, 100);

  //stampa sul serial monitor i valori in microsecondi e in percentuale
  Serial.print("canale 1 microsec: ");
  Serial.println(channel_1_us);
  Serial.print("canale 1 %: ");
  Serial.println(channel_1_perc);

  Serial.print("canale 2 microsec: ");
  Serial.println(channel_2_us);
  Serial.print("canale 2 %: ");
  Serial.println(channel_2_perc);

  Serial.print("canale 3 microsec: ");
  Serial.println(channel_3_us);
  Serial.print("canale 3 %: ");
  Serial.println(channel_3_perc);

  Serial.print("canale 4 microsec: ");
  Serial.println(channel_4_us);
  Serial.print("canale 4 %: ");
  Serial.println(channel_4_perc);

  Serial.print("canale 5 microsec: ");
  Serial.println(channel_5_us);
  Serial.print("canale 5 %: ");
  Serial.println(channel_5_perc);

  Serial.print("canale 6 microsec: ");
  Serial.println(channel_6_us);
  Serial.print("canale 6 %: ");
  Serial.println(channel_6_perc);

  Serial.println("");

  delay (2000);
}
int pwm_a = 3;  //PWM control for motor outputs 1 and 2 
int pwm_b = 9;  //PWM control for motor outputs 3 and 4 
int dir_a = 2;  //direction control for motor outputs 1 and 2 
int dir_b = 8;  //direction control for motor outputs 3 and 4 

int DIR_SX;
int DIR_DX;
int PWM_SX;
int PWM_DX;



void setup() {

    Serial.begin (9600);
  pinMode (4, INPUT);
  pinMode (5, INPUT);
  pinMode (6, INPUT);
  //pinMode (5, INPUT);
  //pinMode (6, INPUT);
  //pinMode (7, INPUT);
  
  pinMode(pwm_a, OUTPUT);  //Set control pins to be outputs
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);

  digitalWrite(dir_a, LOW); //per andare avanti 
  digitalWrite(dir_a, HIGH); //per andare indietro

  analogWrite(pwm_a, 127);  
  analogWrite(pwm_b, 127);
  

  channel_1_perc = map(constrain(channel_1_us, 1000, 2000), 1000, 2000, -100, 100);
  channel_2_perc = map(constrain(channel_2_us, 1000, 2000), 1000, 2000, -100, 100);

PWM_SX = channel_1_perc + channel_2_perc/1;
PWM_DX = channel_1_perc - channel_2_perc/1;

if (PWM_SX>=0){DIR_SX = 1;}else{DIR_SX = 0;};
PWM_SX = map(abs(constrain(PWM_SX, -100, 100)), 0, 100, 0, 255);
if (PWM_DX>=0){DIR_DX = 1;}else{DIR_DX = 0;};
PWM_DX = map(abs(constrain(PWM_SX, -100, 100)), 0, 100, 0, 255);

  digitalWrite(dir_a, DIR_SX); 
  digitalWrite(dir_b, DIR_DX);  
  
  
  analogWrite(pwm_a, PWM_SX);  
  analogWrite(pwm_b, PWM_DX);

  }
ah p.s. non voglio approfittare troppo del tuo tempo, non sertiti obbligato
Ch3ch2oh 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
Carro armato chetto1965 Compro 1 05 marzo 15 19:19
carro armato rc dadoelella Compro 4 12 febbraio 12 00:23
carro armato Bontempogiovanni Compro 3 05 settembre 11 12:13
carro armato simone maddy Modellismo 7 03 luglio 11 22:12
Carro armato scala 1:12 ale2001 Mezzi Corazzati 23 30 agosto 09 22:59



Tutti gli orari sono GMT +1. Adesso sono le 17:11.


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