07 agosto 19, 15:40 | #1 (permalink) Top |
User Data registr.: 20-06-2010 Residenza: riccione
Messaggi: 849
| 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 |
07 agosto 19, 18:44 | #3 (permalink) Top |
User |
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 |
07 agosto 19, 22:16 | #4 (permalink) Top |
User Data registr.: 20-06-2010 Residenza: riccione
Messaggi: 849
|
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?
|
08 agosto 19, 00:18 | #5 (permalink) Top |
User |
Esatto e per fare il girotondo uno avanti e uno indietro.......
__________________ I miei modelli |
24 marzo 20, 23:06 | #6 (permalink) Top |
User Data registr.: 03-08-2009 Residenza: Borgosesia
Messaggi: 260
|
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. |
25 marzo 20, 03:03 | #7 (permalink) Top | |
User Data registr.: 29-05-2006 Residenza: Catania
Messaggi: 2.933
| Citazione:
__________________ 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 | |
27 marzo 20, 21:57 | #8 (permalink) Top |
User Data registr.: 03-08-2009 Residenza: Borgosesia
Messaggi: 260
|
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 |
27 marzo 20, 22:49 | #9 (permalink) Top |
User Data registr.: 29-05-2006 Residenza: Catania
Messaggi: 2.933
|
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); } 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); Codice: digitalWrite(dir_a, LOW); //per andare avanti digitalWrite(dir_a, HIGH); //per andare indietro Codice: analogWrite(pwm_a, 127); analogWrite(pwm_b, 127); 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); Codice: PWM_SX = channel_1_perc + channel_2_perc/1; PWM_DX = channel_1_perc - channel_2_perc/1; 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 |
28 marzo 20, 14:35 | #10 (permalink) Top |
User Data registr.: 03-08-2009 Residenza: Borgosesia
Messaggi: 260
|
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); } |
Bookmarks |
| |
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
Carro armato scala 1:12 | ale2001 | Mezzi Corazzati | 25 | 17 aprile 20 20:11 |
Carro armato | chetto1965 | Compro | 1 | 05 marzo 15 21:19 |
carro armato rc | dadoelella | Compro | 4 | 12 febbraio 12 02:23 |
carro armato | Bontempogiovanni | Compro | 3 | 05 settembre 11 14:13 |
carro armato | simone maddy | Modellismo | 7 | 04 luglio 11 00:12 |