
![]() | #1 (permalink) Top |
User Data registr.: 16-05-2006 Residenza: Firenze - Augusta
Messaggi: 1.148
| switch ppm con Arduino, possibile?
Buona sera a tutti. Ho un piccolo questito da porre a chi arduino lo conosce bene. Purtroppo io devo ancora addentrarmi in questo nuovo mondo. Per elettronica nessun problema, sulla programmazione sono in alto mare. Veniamo al dunque: Ho la necessità di switchare il segnale ppm proveniente dalla ricevente, da una batteria di 4 servi ad un'altra sempre da 4 servi. Inizialmente volevo usare dei semplici switch, ma ho pensato che con questo progetto potessi cominciare realmente ad addentrarmi in Arduino. Come dovrà funzionare: Il passaggio dai primi 4 servi ( collegati uno per canale rx) a gli altri avverà tramite un'interruttore della radio. Devo avere la possibilità di inserire un delay in attivazione e disattivazione su ogni canale in modo da poter ritardare le varie uscite. Domande: potrò incorrere in interferenze? Potrò avere degli sfarfallii ai servi? Che tipo di arduino mi consigliate? Io posseggo già una uno pronta per essere sverginata. Il progetto è fattibile secondo voi? Grazie mille e a presto.
__________________ Danny |
![]() | ![]() |
![]() | #2 (permalink) Top |
User |
Secondo me è fattibilissimo. Nel loop con il digitalread rilevi constantemente il segnale pwm in ingresso dalla rx, lo attribuisci ad una variabile, lo restituisci ad una batteria di servi if(canale dello switch> di un certo valore and millis > delay), lo restituisci all'altra batteria altrimenti. Non so se sono stato chiaro anche perché ci vuole un minimo di conoscenza di linguaggio arduino/c. Se vuoi posso provare a buttare giù il codice. |
![]() | ![]() |
![]() | #3 (permalink) Top |
User Data registr.: 16-05-2006 Residenza: Firenze - Augusta
Messaggi: 1.148
|
grazie mille per l'aiuto. Si mi farebbe piacere che te mi aiutassi con il codice ma a me interessa anche capire. Intanto posso usare la uno che ho già in casa? Grazie mille ancora, spero io riesca a fare ciò che ho in mente. A presto.
__________________ Danny |
![]() | ![]() |
![]() | #4 (permalink) Top | |
User | Citazione:
Alla fine i pin di cui hai bisogno sono: 8 uscite ai servi, 4 ingressi dalla rx e un ingresso sempre dalla ricevente per il canale dello switch. La meglio cosa per capire è leggerti un pò di informazioni su come gestire i segnali pwm con arduino! Ce ne sono molte sul sito o nella wiki. Sei proprio a zero o già sai come fare per dichiarare variabili, fare confronti ecc ecc.? Intanto io butto giù un pò di codice. | |
![]() | ![]() |
![]() | #5 (permalink) Top |
User Data registr.: 16-05-2006 Residenza: Firenze - Augusta
Messaggi: 1.148
|
Ho letto il libricino "primi passi" solo che non ho mai messo le mani in pasta. Devo partire da zero con tutti i linguaggi.... Comunque domani mi metto a studiare sul pwm . Ciao e grazie ancora.
__________________ Danny |
![]() | ![]() |
![]() | #6 (permalink) Top |
User Data registr.: 16-05-2006 Residenza: Firenze - Augusta
Messaggi: 1.148
|
Buongiorno Allora..... Ho ripreso in mano il libro di arduino e ho ricominciato a dare una lettura. Ho scritto uno sketch sicuramente sbagliato ma devo pur cominciare...... Quello che m'interessa al momento è sapere se il concetto scritto è giusto, non m'interessa sapere se è correttamente scritto o se funzionera'. Questo è quanto scritto: int ch1 = 1; int ch2 = 2; int ch3 = 3; int ch4 = 4; int ch8 = 5; int ch1(2) = 6; int ch2(2) = 7; int ch3(2) = 8; int ch4(2) = 9; int ch1(3) = 10; int ch2(3) = 11; int ch3(3) = 12; int ch4(3) = 13; void setup() { pinMode(ch1, INPUT); pinMode(ch2, INPUT); pinMode(ch3, INPUT); pinMode(ch4, INPUT); pinMode(ch8, INPUT); pinMode(ch1(2), OUTPUT); pinMode(ch2(2), OUTPUT); pinMode(ch3(2), OUTPUT); pinMode(ch4(2), OUTPUT); pinMode(ch1(3), OUTPUT); pinMode(ch2(3), OUTPUT); pinMode(ch3(3), OUTPUT); pinMode(ch4(3), OUTPUT); } void loop() { // read the value from the sensor: ch1 = analogRead(ch1); ch2 = analogRead(ch2); ch3 = analogRead(ch3); ch4 = analogRead(ch4); ch8 = analogRead(ch8); if ch8= LOW digitalWrite(ch1(2), Valore letto da ch1 ); digitalWrite(ch2(2), valore letto da ch2 ); digitalWrite(ch3(2), valore letto da ch3 ); digitalWrite(ch4(2), valore letto da ch4 ); else digitalWrite(ch1(3), valore letto da ch1) ; digitalWrite(ch1(3), valore letto da ch2) ; digitalWrite(ch1(3), valore letto da ch3) ; digitalWrite(ch1(3), valore letto da ch4) ; In pratica sto cercando di dire ad arduino che i 4 canali principali CH1,2,3,4 devono leggere il segnale proveniente dalla rx. Se ch8 ha un segnale basso ( switch radio basso) il segnale deve uscire dalla batteria di canali CH 1,2,3,4 (2) altrimenti uscire dall'altra batteria ch1,2,3,4 (3). E' la prima volta che scrivo un codice non mi massacrate ![]()
__________________ Danny |
![]() | ![]() |
![]() | #7 (permalink) Top |
User Data registr.: 16-05-2006 Residenza: Firenze - Augusta
Messaggi: 1.148
|
Accortomi delle cavolate stratosferiche scritte sopra, voglio rincarare la dose. Aiutandomi con sketch degli esempi trovati sul programma ide, è venuto fuori questo #include <Servo.h> int ch1 = A0; int ch2 = A1; int ch3 = A2; int ch4 = A3; int ch8state = 0; Servo esc1; Servo esc2; Servo esc3; Servo esc4; Servo servo1; Servo servo2; Servo servo3; Servo servo4; int val1; int val2; int val3; int val4; void setup() { esc1.attach(6); esc2.attach(7); esc3.attach(8); esc4.attach(9); servo1.attach(10); servo2.attach(11); servo3.attach(12); servo4.attach(13); } void loop() { val1=analogRead(ch1); val2=analogRead(ch2); val3=analogRead(ch3); val4=analogRead(ch4); if (ch8state == 0) { esc1.write(val1); esc1.write(val2); esc1.write(val3); esc1.write(val4); servo1.write(511); // posizione servo a 0° servo2.write(511); // posizione servo a 0° servo3.write(511); // posizione servo a 0° servo4.write(511); // posizione servo a 0° } else { esc1.write(0); // esclusione esc esc1.write(0); // esclusione esc esc1.write(0); // esclusione esc esc1.write(0); // esclusione esc servo1.write(val1); servo2.write(val2); servo3.write(val3); servo4.write(val4); } }
__________________ Danny |
![]() | ![]() |
![]() | #8 (permalink) Top |
User Data registr.: 08-10-2014 Residenza: Verona
Messaggi: 420
|
se vuoi dilettarti con Arduino, fai pure (anch'io lo uso raramente). Tuttavia esiste già un circuito che fa il caso tuo: 4 canali: http://www.hobbyking.com/hobbyking/s...ntroller_.html 8 canali: http://www.hobbyking.com/hobbyking/s...ntroller_.html Il funzionamento non è molto chiaro, rispetto quello che vorresti fare tu, non mi pare che la commutazione fra i 2 canali sia gestita tramite uno switch della radio. Penso che una radio sia il Master e una lo Slave: quando la Master smette di trasmettere (si può semplicemente decodificare la qualità dell'informazione ricevuta... io l'ho implementato sul mio tosaerba radiocomandato) entra in gioco lo Slave. Michele Praga dovrebbe avercelo. Prova a chiedere a lui. Per quanto riguarda la programmazione con Arduino, io (proveniendo da anni di programmazione schede elettroniche a microcontrollore) soffro molto la mancanza di un vedo debugger. Con Arduino, potresti impazzire per cercare di capire alcuni errori nella scrittura del software: il debugger su seriale di cui dispone, non ti permette di avere accesso diretto ai registri del microcontrollore. Ecco perchè la sua diffusione è ancora prerogativa degli ambienti hobbistici e non di quelli professionali. Quando i signori di Arduino riusciranno ad integrare nel loro IDE ad esempio il Dragon dell'Atmel, allora invaderanno il mercato embedded! Per quanto riguarda la tua applicazione, anche se concettualmente sembrerebbe molto semplice, potrebbe risultare più sofisticata del previsto a causa delle limitate prestazioni del microcontrollore Atmel AT328 di Arduino UNO (ridotta velocità di esecuzione del programma e gestione interrupt). Magari ci riuscirai anche, tuttavia se devi iniziare a fare dei filtraggi veloci sul segnale in ingresso, ti accorgerai di questo aspetto. Fammi sapere se riuscirai ad implementare con successo la tua applicazione! |
![]() | ![]() |
![]() | #9 (permalink) Top |
User Data registr.: 16-05-2006 Residenza: Firenze - Augusta
Messaggi: 1.148
|
Grazie mille per la risposta e per i link. Volevo sfruttare questo progetto per cominciare con arduino, banalmente potrei fare con 4 switch e un servo..... Una domanda cos'è l'interrupt? Provo a mettere il progetto sul forum di arduino vediamo se incrociando le ricerche riesco a far muovere qualcosa. Se funziona l'applicazione sarai il primo a saperlo ![]()
__________________ Danny |
![]() | ![]() |
![]() | #10 (permalink) Top |
User Data registr.: 08-10-2014 Residenza: Verona
Messaggi: 420
|
forse è meglio che frequenti un po' di più il forum di Arduino. L'interrupt è una routine software di gestione asincrona di eventi (cambio di stato di un pin, variazione di un bit di un registro, scadenza di timer, ...). Serve per gestire eventi veloci facendo uso di risorse hardware dedicate. |
![]() | ![]() |
![]() |
Bookmarks |
| |
![]() | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
Miscelare segnali PPM con arduino | felis | Circuiti Elettronici | 16 | 12 aprile 16 18:03 |
Collegamento ppm da radio a ricevente diretto, possibile? | EnriVincenzi | Radiocomandi | 25 | 16 settembre 14 09:22 |
Emulare con Arduino un segnale PPM | baccothe | Circuiti Elettronici | 17 | 11 febbraio 14 19:10 |
aiuto con arduino e ppm | alex-military | Circuiti Elettronici | 0 | 22 febbraio 13 13:52 |