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

Комментарии • 62

  • @Artigiano20AlessioRomanelli
    @Artigiano20AlessioRomanelli  5 лет назад +6

    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);

    }

    • @jeanmi54
      @jeanmi54 4 года назад

      Artigiano 2.0 - Alessio Romanell

    • @monkey70.
      @monkey70. 4 года назад

      👍👍grazie

  • @Andreid22
    @Andreid22 3 года назад +9

    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.

  • @tizianomarasca1508
    @tizianomarasca1508 4 года назад

    Ottimo.......Grazie!!!

  • @stefanominto7762
    @stefanominto7762 4 года назад

    Bravo!

  • @sardegnainmoto1
    @sardegnainmoto1 3 года назад +1

    Bellissimo video complimenti!! bravissimo!

  • @Artigiano20AlessioRomanelli
    @Artigiano20AlessioRomanelli  5 лет назад +1

    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);
    }

    • @biagiochila3817
      @biagiochila3817 5 лет назад

      Scusa, ma è da poco che mi sono avventurato nel campo Arduino; come è da intendere "modificato" , che il primo non va bene?

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  5 лет назад

      @@biagiochila3817 ciao, va benissimo, ho tolto dei commenti e basta!! ;)

  • @santologaito3480
    @santologaito3480 3 года назад +1

    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.

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  3 года назад

      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

  • @totisans319
    @totisans319 23 дня назад

    bravissimo!

  • @patriziocrispino
    @patriziocrispino 7 месяцев назад +1

    Bravissimo

  • @matteonicchio758
    @matteonicchio758 2 года назад

    Grazie mille

  • @gmarracchi
    @gmarracchi 3 года назад +2

    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?

  • @THELUMBERJACKGREEN
    @THELUMBERJACKGREEN 3 года назад +1

    Ottima spiegazione

  • @stefanominto7762
    @stefanominto7762 4 года назад

    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?

  • @fmezzo
    @fmezzo 4 года назад

    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

  • @_cavina_5215
    @_cavina_5215 4 года назад +2

    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.

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  4 года назад

      Ciao, per aiutarti dovresti inviarmi lo sketch che hai creato.
      Invialo ad alessiohd@hotmail.com e lo controllo!! ;)

  • @giacomo1287
    @giacomo1287 3 года назад

    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?

    • @barackobama423
      @barackobama423 7 месяцев назад

      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

  • @mihail_bove
    @mihail_bove 2 года назад

    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.

  • @andreavacirca3059
    @andreavacirca3059 3 года назад

    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

  • @prospeed87
    @prospeed87 Год назад

    Salve bel video.. le scrivo riguardo ad un problema che ho con un cdj 200 che non riesco a utilizzare il jogwheel

  • @ludovicomariottini7671
    @ludovicomariottini7671 3 года назад +1

    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!

    • @ranzulen93
      @ranzulen93 3 года назад

      UP

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  3 года назад +1

      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... :)

    • @ludovicomariottini7671
      @ludovicomariottini7671 3 года назад +1

      @@Artigiano20AlessioRomanelli grazie per la risposta, si con il secondo analogWrite(ENABLE, 0) spengo il motore dopo 1 s di funzionamento. 👍

  • @trappolo72
    @trappolo72 3 года назад +1

    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?

  • @SebastianoAgnello-ve9be
    @SebastianoAgnello-ve9be 22 дня назад

    Ciao bel tutorial ! Voglio chiederti una cosa ma io posso controllare la velocità e la direzione senza il joystick ? C'è un alternativa ?

  • @matteonicchio758
    @matteonicchio758 2 года назад +1

    Buongiorno, sarebbe possibile pilotare 2 motori con lostesdo sistema, 1 per il verso orario e uno per l antiorario? Grazie

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  2 года назад

      Ciao Matteo, certo, possibile, cosa ti serve sapere?

    • @matteonicchio758
      @matteonicchio758 2 года назад

      @@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)

  • @matteolicciardi2554
    @matteolicciardi2554 4 года назад +1

    Buongiorno, potrebbe realizzare un video per controllare 4 motori dc con un driver l28n e un joystick, grazie mille

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  4 года назад

      Come vorresti che si muovessero i 4 motori?
      Uno per ogni asse?

    • @matteolicciardi2554
      @matteolicciardi2554 4 года назад

      @@Artigiano20AlessioRomanellicredo di si😅 devo fare una macchina

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  4 года назад

      @@matteolicciardi2554 e i quattro motori che cosa devono muovere rispettivamente?

    • @matteolicciardi2554
      @matteolicciardi2554 4 года назад

      @@Artigiano20AlessioRomanelli le ruote

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  4 года назад

      @@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

  • @sasakingsoft
    @sasakingsoft 3 года назад +1

    perdonami alessio gnd e il negativo o la messa a terra ?

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  3 года назад +1

      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.

    • @faidatehobby7834
      @faidatehobby7834 3 года назад +1

      @@Artigiano20AlessioRomanelli grazie ale

  • @lucadrago96
    @lucadrago96 3 года назад +1

    non capisco perchè ma il motore mi gira in una sola direzione

  • @sofianbenramy1981
    @sofianbenramy1981 3 года назад +1

    salve, il video è grandioso ma il mio motore non funziona, per favore mi può aiutare.
    E' URGENTE E' PER IL MIO ESAME

  • @gregorioorsini2152
    @gregorioorsini2152 3 года назад

    Il motorino gira a fatica, quasi non parte che succede?

  • @il_matto
    @il_matto 5 лет назад +1

    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...

    • @Artigiano20AlessioRomanelli
      @Artigiano20AlessioRomanelli  5 лет назад

      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.

    • @il_matto
      @il_matto 5 лет назад

      @@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... 😐

  • @onegocode1184
    @onegocode1184 2 года назад

    Non si capisce niente dallo schema