CONTROLLO VELOCITA' MOTORE DC CON JOYSTICK E ARDUINO
HTML-код
- Опубликовано: 27 мар 2019
- Usiamo Arduino Uno per controllare la velocità e la direzione di rotazione di un motorino dc esaminando i dati del joystick ed usandoli per gestire sia la velocità che il senso di rotazione.
Utilissimo per comandare mezzi motorizzati.
files, sketch, appunti,help online su Patreon:
/ alessio_romanelli
SKETCH PER IL CONTROLLO DEL MOTORE DC CON JOYSTICK:
// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output joystck
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
int stick = 0; // variabile con valore lettura joystick
int velocita = 0; // calcolo velocita joystick
int dir = 0; // direzione rotazione
int velpos = 0; // velocità rotazione positiva, con joystick verso alto
int velneg = 0; // velocità rotazione negativa, con joystick verso basso
#define ENABLE 5 // enable motore e velocita
#define DIRA 3 // senso rotazione
#define DIRB 4 // senso rotazione
void setup() {
pinMode(2, INPUT);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
digitalWrite(SW_pin, HIGH);
//---set pin direction
pinMode(ENABLE,OUTPUT);
pinMode(DIRA,OUTPUT);
pinMode(DIRB,OUTPUT);
Serial.begin(9600);
}
void loop() {
stick = analogRead(A0); // leggo valore joystick ( tra 0 e 1023, 512 è al centro, motore fermo)
if (stick < 512 ){ // se stick < 512 il joystick punta in basso, quindi ruota antiorario
dir = 0; // senso antiorario
velneg = stick;
velocita = 255 - (constrain(velneg,0,255)); // riporto veocità tra 0 e 255 e ne inverto i valori
}
else{
dir = 1; // senso orario
velpos = stick-512; // riduco la velocità da 512-1023 a 0-512
velocita = constrain(velpos,0,255); // riporto velocità tra 0 e 255
}
analogWrite(ENABLE,velocita);
digitalWrite(DIRA,dir);
digitalWrite(DIRB,!dir);
}
Artigiano 2.0 - Alessio Romanell
👍👍grazie
Piccola precisazione: 0-1023 sono 1024 valori (devi contare anche lo 0) pertanto in linea con i 10bit utilizzati. In generale con n bit puoi visualizzare 2^n-1. Quindi il valore 1023 è corretto.
Ciò che dice Andrea Romano è sacrosanto
Ottimo.......Grazie!!!
Bravo!
Bellissimo video complimenti!! bravissimo!
Ciao grazie mille!
SKETCH PER IL CONTROLLO DEI VALORI DEL JOYSTICK:
// Arduino pin numbers
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
void setup() {
pinMode(2, INPUT);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
}
void loop() {
Serial.print("Switch: ");
Serial.print(digitalRead(2));
Serial.print("
");
Serial.print("X-axis: ");
Serial.print(analogRead(A0));
Serial.print("
");
Serial.print("Y-axis: ");
Serial.println(analogRead(A1));
Serial.print("
");
delay(500);
}
Scusa, ma è da poco che mi sono avventurato nel campo Arduino; come è da intendere "modificato" , che il primo non va bene?
@@biagiochila3817 ciao, va benissimo, ho tolto dei commenti e basta!! ;)
Un progetto completo e fatto perbene. Ottimo sotto tutti i punti di vista, sia per l'audio che il video anche la spiegazione ottima.
Gentilmente, chiedo, se possibile, un progetto sempre con un motore DC comandato da un potenziometro. A metà corsa il motore è fermo
a sx rotazione sx, a dx rotazione dx, logicamente con aumento e diminuzione della velocità. Saluti e ringraziamenti.
Ciao santolo, piacere!
Ti ringrazio per i complimenti, sono contento ti sia piaciuto!
Io eseguo questi lavori, peraltro molto semplici, o dietro compenso, oppure trovi disponibili gli sketch e gli schemi sulla mia pagina parteon, dove è possibile contribuire con piccoli contributi alla produzione di questi video e di tutti i contenuti digitali connessi, come shemi, sketch, liste di materiali o qualunque altra cosa possa esserti utile.
Ovviamente c'è anche la mia asistenza.
Se ti va visita la pagina
www.patreon.com/alessio_romanelli
bravissimo!
Bravissimo
Grazie!
Grazie mille
Chiedo scusa ma secondo la guida di riferimento di arduino la funzione constrain(358, 0, 255) dovrebbe restituire 255 non 182, mentre constrain(213, 0, 255) restituisce 213 e non 105 [minuto 24:40 del video]. Per fare quello che dice lei credo serva la funzione map, o sbaglio?
Ottima spiegazione
Grazie!!
Una domanda, questo è l'unico modo per permettere al motore di girare in senso orario o antiorario , nello specifico questa cosa non potrebbe essere stata raggiunta tramite l'utilizzo di un mofset giusto?
Buon giorno. Mi potrebbe dire il modello di joystick usato? E' molto interessante il fatto di avere il segnale SW per determinare in che direzione si vuol far girare il motore.
Grazie mille
Ciao Alessio dopo avere incollato tutte e 2 gli sketch mi viene un errore nell'algoritmo per il controllo del motore dc con joystick precisamente in questa riga (const int SW_pin = 2; // digital pin connected to switch output joystck) dove mi dice la seguente frase (redefinition of 'const int SW_pin').
Mi potresti aiutare, grazie mille e buona serata.
Ciao, per aiutarti dovresti inviarmi lo sketch che hai creato.
Invialo ad alessiohd@hotmail.com e lo controllo!! ;)
Ciao, ho letto nelle istruzioni del mio arduino che quando si usa lo stepper motor, è consigliabile usare una power supply da attaccare alla breadborard per non danneggiare la scheda UNO... cosa succede se attacco direttamente i pin alla scheda?
tecnicamente non succede niente finche non aumenta il carico sul motore il che tende a assorbire più corrente e quindi va in sovraccarico. Io per le prove non ho mai utilizzato un power supply e non è successo niente, ma comunque ti consiglio di utilizzarlo pechè potrebbero esserci problemi col motore in se
Buonasera, ho visto questo video e lo reputo interessante quanto molto utile...ho problemi però riguardo il funzionamento del programma e probabilmente anche del circuito sebbene io li avessi collegati esattamente come nel video. Non so se uso libreria diversa ma mi potrebbe dare un chiarimento riguardo il collegamento dell' integrato L293 D, oltre che del programma, grazie mille.
buon giorno si chiede gentilmente un assistenza al montaggio della presente scheda SHIELD ARDUINO CONTROLLO SERVO RC servirebbe uno schema di montaggio con programmazione da lanciare al programma arduino.cc
grazie saluti
Salve bel video.. le scrivo riguardo ad un problema che ho con un cdj 200 che non riesco a utilizzare il jogwheel
Buonasera, intanto complimenti per il canale. Avrei una domanda, io vorrei modificare il codice in modo tale che ogni volta che metto lo stick tutto avanti (1023) o tutto indietro (0), funzioni a velocità massima per 1 secondo.
Voglio il motore parta solo se arriva ai due estremi.
Il loop() così modificato è corretto?
void loop () {
if (stick = 0) {
dir =0;
velocita = 255;
}
if (stick = 1023){
dir =1;
velocita = 255;
}
analogWrite(ENABLE,velocita);
digitalWrite(DIRA;dir);
digitalWrite(DIRB;!dir);
delay(1000);
analogWrite(ENABLE,0);
}
Grazie in anticipo!
UP
Ciao buongiorno, grazie!!
Non uso la libreria che stai usando tu per pilotare il motore, suppongo che una volta fatta la digitalwrite il motore parte finché non lo fermi con un altra digitalwrite?
Perché non mi spiego il delay(1000) altrimenti.
Detto questo va bene controllare il valore massimo e minimo, anche se io avrei controllato se il valore supera 1000 su 1023, e se va sotto 10 invece che a zero, perché a volte i joystick danno valori non perfetti quando spinti in cima o in fondo.
Spero di essere stato chiaro... :)
@@Artigiano20AlessioRomanelli grazie per la risposta, si con il secondo analogWrite(ENABLE, 0) spengo il motore dopo 1 s di funzionamento. 👍
Ciao Alessio complimenti. mi sto avvicinando ad arduino da pochissimo e avrei un progetto da farti realizzare se hai tempo dove posso contattarti via mail?
Ciao, certo!!
Scrivimi ad alessiohd@hotmail.com, grazie mille!!!
Ciao bel tutorial ! Voglio chiederti una cosa ma io posso controllare la velocità e la direzione senza il joystick ? C'è un alternativa ?
Buongiorno, sarebbe possibile pilotare 2 motori con lostesdo sistema, 1 per il verso orario e uno per l antiorario? Grazie
Ciao Matteo, certo, possibile, cosa ti serve sapere?
@@Artigiano20AlessioRomanelli ciao, intanto grazie per la risposta, scusami il ritardo, sono alle prese con una tettoia autoportante da finire..... A dire la verità, dovrei comandare due bobine per elttrovalvole idrauliche 12volt circa 3 Amp, comandate entrambe in PWM con comando tramite jioystik bidirezionale e "proporzionale" (muovendolo di poco mi apre appena la valvola e spostandolo di più aumenta la frequenza degli impulsi fino a completa apertura, questo per entrambe i sensi di marcia)
Buongiorno, potrebbe realizzare un video per controllare 4 motori dc con un driver l28n e un joystick, grazie mille
Come vorresti che si muovessero i 4 motori?
Uno per ogni asse?
@@Artigiano20AlessioRomanellicredo di si😅 devo fare una macchina
@@matteolicciardi2554 e i quattro motori che cosa devono muovere rispettivamente?
@@Artigiano20AlessioRomanelli le ruote
@@matteolicciardi2554 è la prima volta che sento dire di un motore per ciascuna ruota.
Fammi capire se spingo il joystick in avanti tutte e quattro le ruote vanno avanti se spingo il joystick indietro tutte e quattro le ruote vado vanno indietro ma se io curvo leggermente a destra leggermente a sinistra fai sterzare la macchina cambiando la velocità delle ruote?
Mi sembra molto strano quello che vuoi fare Io sinceramente per una macchina quattro ruote motrici avrei predisposto un unico motore che spinge tutte e quattro le ruote avanti o indietro ed un servo meccanismo che gestisce lo sterzo
perdonami alessio gnd e il negativo o la messa a terra ?
Gnd si intende il gnd di arduino.
Quando di usa un alimentatore esterno esso si collega alla rete(220) con fase,neutro e terra. Non ha nulla a che vedere con la gnd di arduino e di tutti i dispositivi che controlla.
@@Artigiano20AlessioRomanelli grazie ale
non capisco perchè ma il motore mi gira in una sola direzione
Mi fai vedere lo sketch?
salve, il video è grandioso ma il mio motore non funziona, per favore mi può aiutare.
E' URGENTE E' PER IL MIO ESAME
Il motorino gira a fatica, quasi non parte che succede?
Stessa cosa
Intorno al minuto 5:30 inizi a parlare di un leggerissimo errore che poi ti riporti avanti per un po' tutto il video... ma credo che l'errore sia tuo, non della macchina... forse non hai considerato che se il valore finale fosse 1024, avresti a che fare in realtà con 1025 bit, dato che anche lo zero va considerato nel conteggio... per questo stesso motivo, è corretta anche la lettura a riposo di 513, che tiene conto dei 512 della prima metà, più lo zero...
Ciao!
Perdonami ma non sono d'accordo.
I valori che otteniamo sono da 0 a 1023 (1024 totali), se la metà fosse giusta sarebbe 511,5 (se ci fossero i decimali), quindi al massimo 512, sicuramente non 513, che dovrebbe essere il primo valore che troviamo spostando il joystick in alto.
@@Artigiano20AlessioRomanelli hai ragione, in effetti il 512 sarebbe il primo valore della seconda metà... effettivamente non esiste un valore corrispondente al joystick in posizione di riposo dato che abbiamo a che fare con 1024 bit, quindi un valore pari... c'è qualcosa che ci sfugge anche in questo caso... 😐
Non si capisce niente dallo schema