
![]() | #11 (permalink) Top | |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| OK grazie romoloman
ciao Romoloman.. sei un grande! ..scusa ma te lo devo dire... seguendo i tuoi preziosi consigli, ho voluto osare di più.. dunque ho fatto la tua prova, e inoltre ho fatto la prova del 9, ovvero ho messo i servo! quindi nel caso dell'uso della pulseIn i servo tremano, troppo diciamo inutilizzabili. invece nel caso in cui uso l'interrupt i servo tremano molto meno... sono piu stabili e sicuramente utilizzabili.... nel caso di voler realizzare un drone o un sistema di miscelazione... la soluzione è ARDUINO LEONARDO e l'uso degli interrupt . di seguito il codice che legge dalla ricevente e invia ai servo senza un'elaborazione, diciamo che è il software di base. una riflessione.. secondo me occorre comunque aggiungere un circuito che porta i 4 canali in un unico bus.. dopo aver letto i 4 canali, il software può approfittare della lunga pausa di 20 mS per compiere tutte le elaborazioni e poi applicare eventuali modifiche ai segnali entranti.. per poi inviarli ai servo- #include <Servo.h> Servo myservo1, myservo2, myservo3, myservo4; const int ch1 = 3; // interrupt 0 const int ch2 = 2; // interrupt 1 const int ch3 = 0; // interrupt 2 const int ch4 = 1; // interrupt 3 volatile unsigned long microseconds_1; volatile unsigned long microseconds_2; volatile unsigned long microseconds_3; volatile unsigned long microseconds_4; volatile byte index =0; volatile unsigned long ch1_val; volatile unsigned long ch2_val; volatile unsigned long ch3_val; volatile unsigned long ch4_val; void setup() { pinMode(ch1, INPUT); pinMode(ch2, INPUT); pinMode(ch3, INPUT); pinMode(ch4, INPUT); myservo1.attach(9); myservo2.attach(10); myservo3.attach(11); myservo4.attach(12); Serial.begin(9600); attachInterrupt(0, CH1_val, CHANGE); // questo sul pin3 attachInterrupt(1, CH2_val, CHANGE); // questo sul pin2 attachInterrupt(2, CH3_val, CHANGE); // questo sul pin0 attachInterrupt(3, CH4_val, CHANGE); // questo sul pin1 } //__________________________________________________ ______________ void loop() { myservo1.write(map(ch1_val, 1000 ,2000, 0, 180)); myservo2.write(map(ch2_val, 1000 ,2000, 0, 180)); myservo3.write(map(ch3_val, 1000 ,2000, 0, 180)); myservo4.write(map(ch4_val, 1000 ,2000, 0, 180)); delay(15); /* Serial.println(ch1_val); Serial.println(ch2_val); Serial.println(ch3_val); Serial.println(ch4_val); Serial.println("......."); delay(1); */ } //__________________________________________________ _______ void CH1_val() { if(digitalRead(ch1) == HIGH) microseconds_1 = micros(); else ch1_val = micros() - microseconds_1; } //__________________________________________________ _______ void CH2_val() { if(digitalRead(ch2) == HIGH) microseconds_2 = micros(); else ch2_val = micros() - microseconds_2; } //__________________________________________________ _______ void CH3_val() { if(digitalRead(ch3) == HIGH) microseconds_3 = micros(); else ch3_val = micros() - microseconds_3; } //__________________________________________________ _______ void CH4_val() { if(digitalRead(ch4) == HIGH) microseconds_4 = micros(); else ch4_val = micros() - microseconds_4; } Citazione:
| |
![]() | ![]() |
![]() | #12 (permalink) Top | |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
| Citazione:
Anche la generazione del PPM verso i servi andrebbe fatta in un interrupt con una temporizzazione fissa, altrimenti il periodo complessivo dell'impulso ppm dipende troppo da quanto valgono i canali... Con 4 canali ci sono 4ms che ballano.
__________________ Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo Grazie "TRANQUILLO" FAI 15766 | |
![]() | ![]() |
![]() | #13 (permalink) Top | |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| Ok
ok romoloman... ..ci tengo a sottolineare che è sempre un piacere scambiare opinioni e suggerimenti con te. Attraverso la funzione map .... map( valore, range_min_in, range_max_in, 0, 180) ...posso smorzare l'effetto traballante.. agendo sui valori range_min_in e range_max_in loro realizzano una sorta di discretizzazione, ovvero se hai un valore che oscilla tra 1973uS 1970uS il sistema map lo discretizza comunque fermo a 1970 per questo ho dei servo piuttosto stabili, diciamo utilizzabili. Tuttavia come suggerisci tu posso fare a meno della libreria Servo utilizzando la funzione DelayMicrosenconds, la libreria Servo utilizza Timer1, cosa che potrebbe essere utile Per il momento voglio creare il sistema per convogliare i pin dei 4 canali della ricevente in un unico bus e farlo catturare ad Arduino in uno dei 5 pin predisposti con gli Interrupt come già visto negli esempi precedenti Citazione:
| |
![]() | ![]() |
![]() | #14 (permalink) Top | |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
| Citazione:
__________________ Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo Grazie "TRANQUILLO" FAI 15766 | |
![]() | ![]() |
![]() | #15 (permalink) Top |
User |
@faustog_2: se fai tutto a scopo didattico od arricchimento personale ok, anche se Arduino per certe cose non è il massimo, altrimenti diventi membro onorario del UCAS. ![]() Naturalmente con simpatia. ![]()
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) ![]() |
![]() | ![]() |
![]() | #16 (permalink) Top |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| Ucas !!!!
Ufficio Complicazioni Affari Semplici !! hahhahah me lo ricordo... .me lo diceva il mio professore di costruzioni al geometra! ..si confermo tutto a scopo didattico... so che ci sono alternative pronte a costi piu bassi.. ne abbiamo già parlato.. il piacere è lavorarci e metterci le mani... ..per quello che concerne le miscelazioni, io nn ho tanto l'esigenza.. quando il discorso d prendere i segnali dalla ricevente poterli manomettere facendo interaggire con un accelerometro ,ggyro eccc.. |
![]() | ![]() |
![]() | #17 (permalink) Top |
User Data registr.: 13-01-2016 Residenza: Città di Castello
Messaggi: 4
|
salve a tutti, è stato portato avanti con successo il discorso qui trattato oppure è rimasto a limite teorico??? Sono interessato ma ancora non ho iniziato a metterci le mani, potrei anche leggere un solo canale in quanto ho la possibilità di montare anche 2 arduino , andranno montati su un rover tra un apm arducopter e la scheda motori in quanto per l'autopilota devo tenere conto di eventuali ostacoli e quindi interagire con sensori ultrasuoni e altro..... |
![]() | ![]() |
![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
Emulare con Arduino un segnale PPM | baccothe | Circuiti Elettronici | 17 | 11 febbraio 14 20:10 |
aiuto con arduino e ppm | alex-military | Circuiti Elettronici | 0 | 22 febbraio 13 14:52 |
Aiuto Miscelare canali con JR MX 22 | saviothecnic | Radiocomandi | 16 | 17 novembre 08 18:33 |
Miscelare 2 servi per il profondità con Tx X3810 | verio77 | Aeromodellismo | 1 | 07 agosto 07 11:18 |