Ciao ragazzi, sto per completare il mio progetto del robot che è in grado di muoversi, misurare temperatura, umidità e distanza. Tuttavia mi piacerebbe creare una slider orizzontale (barra orizzontale) nella interfaccia tramite Qt per cui poter variare la velocità del motore in qualsiasi momento.
Come potrei fare per "far capire" ad Arduino questa cosa?
docdoc:
Spiegati meglio, cosa è una "interfaccia tramite Qt"?
Qt è un ambiente di programmazione (in c++ per quanto mi riguarda) attraverso cui sto creando l'interfaccia tra il pc e arduino e vorrei inserire una slider per poter modificare la velocità del motore
Suppongo tu non stia parlando di un banale potenziometro lineare "fisico", giusto ? ... cos'e', un pannello touch a sezioni, lo slider di un sensore capacitivo, lo schermo touch di un display dedicato, lo schermo di un tablet o smartphone ? ... dispositivi diversi hanno, di solito, funzionamenti e soluzioni diverse ... e se non dici neppure queste cose basilari, anche chi se ne intende e volesse aiutarti, non puo farlo ...
Immaginavo.
Ma questo è il forum di Arduino, non possiamo darti consigli su Qt...
Come implementare uno slider e quindi fare in modo che questo mandi l'informazione ad Arduino dovresti chiederlo all'interno di forum dedicati a quel toolkit. Una volta che avrai chiaro questo, qui potrai chiedere come implementare lato Arduino l'esecuzione dei comandi che ricevi via Qt (ma devi anche spiegare cosa e come riceve queste info).
... non credo che l'OP stesse chiedendo consigli su Qt e come fare lo slider, credo volesse sapere come inviare il valore scelto ad Arduino ... :
>fra_meccatr: se il PC è collegato via USB ad Arduino, dal tuo programma devi prendere il valore a cui hai posizionato lo slider, trasformarlo in un numero tra 0 e 255 e, via porta seriale, trasmetterlo ad Arduino che lo applicherà al PWM.
Etemenanki:
Suppongo tu non stia parlando di un banale potenziometro lineare "fisico", giusto ? ... cos'e', un pannello touch a sezioni, lo slider di un sensore capacitivo, lo schermo touch di un display dedicato, lo schermo di un tablet o smartphone ? ... dispositivi diversi hanno, di solito, funzionamenti e soluzioni diverse ... e se non dici neppure queste cose basilari, anche chi se ne intende e volesse aiutarti, non puo farlo ...
E' uno slider digitale che si trova nel programma che sto creando sul pc. E' semplicemente una barra per cui spostando il cursore verso destra aumenta la velocità e spostandola verso sinistra diminuisce, il tutto, ovviamente, con dei valori limite di minimo e di massimo.
gpb01:
... non credo che l'OP stesse chiedendo consigli su Qt e come fare lo slider, credo volesse sapere come inviare il valore scelto ad Arduino ... :
>fra_meccatr: se il PC è collegato via USB ad Arduino, dal tuo programma devi prendere il valore a cui hai posizionato lo slider, trasformarlo in un numero tra 0 e 255 e, via porta seriale, trasmetterlo ad Arduino che lo applicherà al PWM.
Guglielmo
Si esattamente Guglielmo, grazie. Sto cercando di capire come far interagire Arduino e Qt e quindi come programmare il robot.
Il robot è al momento collegato via USB ma funzionerà via bluetooth, tuttavia non credo ci siamo differenze.. :
Comunque non ho PWM al momento sul mio robot. Sono motori normali, non servo perciò sono riuscito a farli funzionare senza PWM.
In termini di codice dovrei definire una variabile per il controllo della velocità?
Se vuoi variare la velocità dei motori ti servirà per forza il PWM (... per altro utilizzabile SOLO su alcuni pin).
Non so che range di valori ti da il tuo slider, comunque dovrai trasformarlo in un numero da 0 a 255 e trasmettere tale numero sulla seriale del PC ... lato Arduino dovrai utilizzare la classe Serial ed i suoi metodi per ricevere tale numero, salvarlo in una variabile ed usarlo per regolare il PWM.
fra_meccatr:
Il robot è al momento collegato via USB ma funzionerà via bluetooth, tuttavia non credo ci siamo differenze.. :
Quindi attualmente comunichi via seriale, ok, ma quindi usi un tuo protocollo o codifica di comandi esistenti? Quindi il "come inviare i dati ad Arduino" significa estendere questo tuo protocollo di comunicazione (che so, un comando "Vxxx" indica "Velocità xxx" (3 cifre, da 000 a 255) e che utilizzerà il robot quando deve muoversi.
E' questo che intendevo dire, ma se invece volevi chiedere come variale semplicemente la velocità di un motore via PWM, scusa ma tutta la premessa su Qt eccetera era superflua e soprattutto non hai posto la domanda in modo esplicito non ti pare?..
docdoc:
Quindi attualmente comunichi via seriale, ok, ma quindi usi un tuo protocollo o codifica di comandi esistenti? Quindi il "come inviare i dati ad Arduino" significa estendere questo tuo protocollo di comunicazione (che so, un comando "Vxxx" indica "Velocità xxx" (3 cifre, da 000 a 255) e che utilizzerà il robot quando deve muoversi.
E' questo che intendevo dire, ma se invece volevi chiedere come variale semplicemente la velocità di un motore via PWM, scusa ma tutta la premessa su Qt eccetera era superflua e soprattutto non hai posto la domanda in modo esplicito non ti pare?..
L'ho posta sulla base delle mie conoscenze e della mia preparazione in tale ambito. Purtroppo non sono abbastanza esperto, anzi direi per niente esperto. Comunque la prossima volta cercherò di essere più dettagliato
gpb01:
Se vuoi variare la velocità dei motori ti servirà per forza il PWM (... per altro utilizzabile SOLO su alcuni pin).
Non so che range di valori ti da il tuo slider, comunque dovrai trasformarlo in un numero da 0 a 255 e trasmettere tale numero sulla seriale del PC ... lato Arduino dovrai utilizzare la classe Serial ed i suoi metodi per ricevere tale numero, salvarlo in una variabile ed usarlo per regolare il PWM.
Guglielmo
Allora credo di non poterlo fare in quanto ho già riempito tutti i pin. Peccato, mi sarebbe piaciuto creare un comando variabile.
Ti ringrazio comunque Guglielmo, gentilissimo come sempre.
fra_meccatr:
L'ho posta sulla base delle mie conoscenze e della mia preparazione in tale ambito. Purtroppo non sono abbastanza esperto, anzi direi per niente esperto. Comunque la prossima volta cercherò di essere più dettagliato
Ok, quindi sai già come fare lo slider e come quindi inviare il relativo valore via seriale ad Arduino, ma devi implementare nel tuo robot la variazione di velocità.
Allora credo di non poterlo fare in quanto ho già riempito tutti i pin. Peccato, mi sarebbe piaciuto creare un comando variabile.
Ma aspetta, continuo a non capire, quindi il robot lo hai già costruito (seppure in prototipo) no? E il motore lo gestisci (per ora alla massima velocità), oppure no? E come?
Insomma, non è detto che non si possa fare quello che cerchi ma per darti un consiglio più concreto dovresti dirci gli elementi del tuo robot ossia quali motori, come sono collegati, come attualmente li controlli, e magari anche lo sketch che usi così capiamo. Il problema dei pin "pieni" ad esempio mi pare strano per un robot che suppongo sia a 2 motori e qualche sensore, non è che hai altre cose collegate come ad esempio display LCD (e che quindi con una interfaccia I2C riduci a soli 2 pin)?
docdoc:
Ok, quindi sai già come fare lo slider e come quindi inviare il relativo valore via seriale ad Arduino, ma devi implementare nel tuo robot la variazione di velocità.
Ma aspetta, continuo a non capire, quindi il robot lo hai già costruito (seppure in prototipo) no? E il motore lo gestisci (per ora alla massima velocità), oppure no? E come?
Insomma, non è detto che non si possa fare quello che cerchi ma per darti un consiglio più concreto dovresti dirci gli elementi del tuo robot ossia quali motori, come sono collegati, come attualmente li controlli, e magari anche lo sketch che usi così capiamo. Il problema dei pin "pieni" ad esempio mi pare strano per un robot che suppongo sia a 2 motori e qualche sensore, non è che hai altre cose collegate come ad esempio display LCD (e che quindi con una interfaccia I2C riduci a soli 2 pin)?
Il robot l'ho già costruito ed è quasi completo. Si, ho altri sensori collegati quali distanza, temperatura e umidità e un cicalino oltre al led. Inoltre ho collegato il bluetooth che mi permetterà il controllo finale. I motori li controllo attraverso una scheda di controllo. Ho i pin, sia digitali che analogici, tutti pieni per questo motivo.
fra_meccatr:
... I motori li controllo attraverso una scheda di controllo ...
Per cui (tiro ad indovinare, non avendo il tuo robot davanti), presumo che gia adesso, tu mandi dei comandi alla scheda di controllo dicendogli quale motore accendere, in quale senso, ed a che velocita' ... dovrai semplicemente modificare lo sketch per fare in modo che arduino mandi tali comandi in base ai valori prodotti dal tuo slider, quindi ...
Etemenanki:
Per cui (tiro ad indovinare, non avendo il tuo robot davanti), presumo che gia adesso, tu mandi dei comandi alla scheda di controllo dicendogli quale motore accendere, in quale senso, ed a che velocita' ... dovrai semplicemente modificare lo sketch per fare in modo che arduino mandi tali comandi in base ai valori prodotti dal tuo slider, quindi ...
I motori funzionano sempre insieme però si, decido la direzione e io vorrei poter impostare loro la velocità tramite sliders o un menù a tendina con valori di velocità già impostati tra cui scegliere.
fra_meccatr:
La velocità l'ho impostata nel codice (100) e la scheda di controllo dovrebbe essere la TB6612FNG se non ricordo male
Scusa è ... ma prima di montarla ed usarla, ti sei studiato come funziona ? ? ? :o Perché usa il PWM ... quindi stai già facendo la regolazione della velocità, solo che l'hai impostata fissa.
gpb01:
Scusa è ... ma prima di montarla ed usarla, ti sei studiato come funziona ? ? ? :o Perché usa il PWM ... quindi stai già facendo la regolazione della velocità, solo che l'hai impostata fissa.
Vale quanto ti ho già detto sino ad ora.
Guglielmo
In termini di codice dovrei definire la velocità come variabile? Non capisco..