How Rotary Encoder Works and How To Use It with Arduino

Поделиться
HTML-код
  • Опубликовано: 25 авг 2024

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

  • @jp040759
    @jp040759 3 года назад +15

    WOW. Finally I understand the rotary encoder logic. Best explanation I have run into in 10 years. Your description turned on the big light bulb on in my brain and I understand it now. The code is so simple too. THANX!!!!!

  • @fanBladeOne
    @fanBladeOne 5 лет назад +7

    Thanks once again for a greatly instructional video. After watching not only do you understand the principle behind it, you also have a piece of working code at the ready. Thanks alot :)

  • @camilo7087
    @camilo7087 7 лет назад +39

    please no stop .. you explain so good

  • @sub-arts128
    @sub-arts128 3 года назад +2

    well done. thats the best explanation for rotary encoder i ve seen so far

  • @mrcalico7091
    @mrcalico7091 7 лет назад +14

    Great Job, articulate and directly to the point. Thank You!

  • @sgtrumbi2265
    @sgtrumbi2265 5 лет назад +9

    Just plain and simple explanation. Great video, exactly what I was looking for. Thank you so much! 😊

  • @badbush5
    @badbush5 6 лет назад +2

    Fantastic! Looking at pictures of waves just didn't do it for me. This video completely cleared it up. Thank you! Subscribed.

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

    Many thanks for the clear guide on how encoders work, I found the animated graphics particularly useful.

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

    This is better than searching for confusing datasheets on the website. THANK YOU A LOT

  • @bcinsteadof3
    @bcinsteadof3 6 лет назад +4

    Wow, such elegant code...My overly complex code didn't work well when I spun the encoder quickly, this works flawlessly. Thanks!

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

      It's not that elegant tbh, it should be implemented with hardware comparators and interrupts

    • @jimwithheld7217
      @jimwithheld7217 3 месяца назад

      @@TheChrisey Agree: the example in the vid is fine
      for slow speeds, and when there is feedback, such that if a count is missed, or extra, the user will self-correct, and everything is fine. For higher speeds, you need some hardware and maybe counters, which take care of the counts, and the main software just reads the counter any time it needs the values. Some of the Microchip PIC family have a hardware module built in. A quadrature Decoder. But you can also craft with some of the "soft" progamable gates, e.g. CLB and such.
      For very high speeds, e.g. motors at thousands of RPM, you can't really just poll the pins in a loop: you need hardware assist. Or very fast interupts might get you some of the way.
      But again: the example is fine for the right kinds of slower stuff.
      Also: switch-bounce shaping on the pins can be important, so you only get 1 count per count, not many. I did not look too deep at the code to see if maybe its state always handles that OK enough. A resistor and a cap might be enough, depending on the encoder used.

  • @OMNI_INFINITY
    @OMNI_INFINITY Год назад +1

    *Thanks! Recommend making a video on controlling position of a continuous servo using a continuous rotary encoder!*

    • @HowToMechatronics
      @HowToMechatronics  Год назад +1

      Currently working on such a video. I will publish it next week.
      Cheers

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

      Oh, thanks in advance!@@HowToMechatronics

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

      Another recommendation that is likely easy is a record and playback motion robot arm using servos. Bonus points for making it a pick and place machine with OCR!@@HowToMechatronics

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

    You are my savior in ELECTRONICS.

  • @cdweng840
    @cdweng840 6 лет назад +3

    Brilliantly explained from theory to application. Well done!

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

    Thanks Mechatronics for your time and work. From Sydney all the best. 👍

  • @vnesterov1817
    @vnesterov1817 7 лет назад +6

    You are the Man! Thank you: very clear and very consecutive instructions and video. Great job.

  • @waterman7733
    @waterman7733 6 лет назад

    your explanations are so clear, makes it easier to understand how this works. thank very much!

  • @256k_
    @256k_ 2 года назад

    Great stuff! I was initially looking at some library to handle this but it’s so easy thanks to your explanation I’ll just handle it myself

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

    Can you do a video on measuring the angle of rotation of the stepper if connected the encoder to the shaft of the stepper and if the shaft is rotated manually?

  • @mirkomueller3412
    @mirkomueller3412 8 лет назад

    Great tutorial !!! Helps me so much doing my current project. BIG THUMBS UP

  • @loucostello3111
    @loucostello3111 6 лет назад

    This guy is the greatest.

  • @fouzaialaa7962
    @fouzaialaa7962 8 лет назад

    awesome seeing your videos again its been a long time since you uploaded a video !!

  • @endingalaporte
    @endingalaporte 6 лет назад +1

    suscribed, videos are very good, I'm studying mechanical engineering, have to choose If I want to specialise in Mechatronics, your videos help me a lot in my choice, very cool

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

    Thank you 🙏

  • @HellaFunnyShorts
    @HellaFunnyShorts 8 лет назад

    great video. simply and to the point explanation

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

    Thank you friend!

  • @RunningRunner46
    @RunningRunner46 8 месяцев назад +1

    Would be better if you used interrupts to accurately get only the falling edge of the output A's clock

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

    Very good explanation

  • @boharihamen
    @boharihamen 6 лет назад

    Thanks for the video. Great Job and effort to produce it.

  • @Three2NineProject
    @Three2NineProject 7 лет назад

    Simple and good explanation

  • @cakdham4607
    @cakdham4607 8 лет назад

    Awesome explaination.. Regards from Indonesia

  • @dunamiscrisostomo5441
    @dunamiscrisostomo5441 5 лет назад +2

    2:47 that pitch tho

  • @voxellab4339
    @voxellab4339 7 лет назад +2

    Dejan, Great video! thank you. Got it to work. If I turn the dial to quick the nema jump, not smooth and has a pause when reveres. I've tried trimming the drive board and the delay times. Any idea?, thanks again for all you great work.

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

    Dear Friend, pls, upload another ligh & simply tutorial like this, I loved it, Thx You !

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

    Very informative! Thanks!

  • @glowpon3
    @glowpon3 3 месяца назад

    Such a simple logic to test direction. I finally get it. Thanks so much ^,.'.,^

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

    Great video, short and to the point :)

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

    thanks, the best explication!!!

  • @armaky4962
    @armaky4962 29 дней назад

    Thank you very much for the information " Hugs

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

    Great job bro, thanks for everything.

  • @0sekful706
    @0sekful706 4 года назад +1

    Amazing, thank's a lot!

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

    Thanks that was amazing...

  • @heshteach8212
    @heshteach8212 7 лет назад

    Grate job.. It was really effective for me.. thx alot and carry on..

  • @Sasch600xt
    @Sasch600xt 7 лет назад

    Thank you very much !!! Now i understand it :)

  • @GabrielSousa-hw4mg
    @GabrielSousa-hw4mg 6 лет назад

    omg you explain so good thanks

  • @jeffbeck6501
    @jeffbeck6501 6 лет назад

    Thank you. Your code worked. I thought that Kevin Darrah's code using interrupts was working for me but it was not. It was skipping all around but your code works perfectly for me with no skipping at all. How u do dat? Thanks man.

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

    great explanation! Thanks a lot.

  • @SajalRajGautam
    @SajalRajGautam 8 лет назад

    Very helpful! Thank you so much! :)

  • @afzalqureshi8091
    @afzalqureshi8091 6 лет назад +2

    output is different from the code it gives only negative values on CW or CCW direction.

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

    That's What I Want To Know Thanks

  • @apbosh1
    @apbosh1 7 лет назад

    great tutorial thank you.

  • @kamranalidoosti9799
    @kamranalidoosti9799 6 лет назад

    Thank you Dejan. You are a good teacher. Go on!

  • @dgb5820
    @dgb5820 6 лет назад

    Great instructional video

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

    Nice video thank you!

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

    Huge thanks

  • @Keith12001
    @Keith12001 6 лет назад

    Excellent videos, thank you

  • @thomashvnmusic
    @thomashvnmusic 7 лет назад

    Really helpful, thanks.

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

    You are the man!

  • @cdersch636
    @cdersch636 7 лет назад +3

    Do you know the maximum speed of the decoder? Can it turn up to 200 rounds per minute? I tested once and it was not counting correctly - so the question is - was a problem with Arduino or with the mechanic of the decoder?
    Thanks you

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

    So great, thanks!

  • @yoramstein
    @yoramstein 6 лет назад

    Good explanation, thank you.

  • @Anton-wc7lb
    @Anton-wc7lb 11 месяцев назад

    Awesome video, thanks! :)

  • @karlklops3810
    @karlklops3810 7 лет назад

    very nice and short video keep it up 😊👍👍

  • @salmaelasmai5065
    @salmaelasmai5065 7 лет назад

    thank you this was very helpful, but you didn't talk about the difference beetwen absolute and incremental encoders..

  • @arjunjanardhanan3301
    @arjunjanardhanan3301 8 лет назад

    Again nice one ! Can you make a separate video on ADXL345?

  • @Bianchi77
    @Bianchi77 10 месяцев назад

    Nice info, thanks for sharing with us, well done :)

  • @_bluespider5470
    @_bluespider5470 6 лет назад

    Great video!

  • @er.jugalmandal7736
    @er.jugalmandal7736 7 лет назад +9

    CAN U MAKE A VIDEO WITH IN MENU USING 16x2 LCD DISPLAY ???

  • @last-zura8899
    @last-zura8899 Месяц назад

    Thanks you

  • @m0gga
    @m0gga 7 лет назад +4

    Hi Dejan, thanks for sharing this helpful tutorial,I would like to use a rotary encoder to replace the menu navigation buttons in my project, your video is very useful.
    I notice that you did not appear to implement any software de-bouncing techniques to overcome the switch noise, yet your example did not appear to suffer from switch bounce. Did you use a hardware filter of some sort?
    Thanks.

    • @krallopian
      @krallopian 6 лет назад +1

      Yeah I was wondering about that. My encoder skips when I move it then when it clicks. So each "notch" counts as TWO. 0... 1,2... 3,4.... 5,6.... I suppose I can code accordingly but, slightly annoying.

    • @Xanty55
      @Xanty55 6 лет назад

      Yes, my encoder produces the same behavior.

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

      Maybe the two Serial.print() statements in the loop slow it down sufficiently that the chatter has stopped by the time it looks around again. With a faster arduino like an ESP32 the bouncing may be seen again. Havent tested it but just a thought!

  • @ngobachduong
    @ngobachduong 7 лет назад +1

    Nice explanation and animation.
    But in your code, it will be more accurate if you use interrupt function to detect the change of signal.

  • @pkteguh8199
    @pkteguh8199 8 лет назад

    thanks for your tutorial, it helps,regards

    • @pkteguh8199
      @pkteguh8199 7 лет назад

      referring your tutorial,so is it possible to synchronize two surface speed of conveying belt/goods ?, since the encoder rotated by a surface speed and give the signal as a control to a motor that can produce similar surface speed to another conveyor for example, thanks for your feedback,regards

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

    Thanks for uploading the video.
    For some modules above program functions only when INPUT_PULLUP is defined for CLK and DT pins

  • @dawidwilk7488
    @dawidwilk7488 5 лет назад +4

    Your code working well but you must put it into interrupt event from rising and falling edge caused by A and B signals.

  • @bekhzodkh
    @bekhzodkh 8 лет назад +1

    Nice and clear explanation, thanks for the video. I wonder is it possible to control the LED light intensity using this encoder?

  • @lukaszM46
    @lukaszM46 6 лет назад

    in this example was the encoder connected to 5v at the common pin and then pins A and B were connected to digital pins with pulldown resistors?

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

    some tutorials put input pins as INPUT_PULLUP. What's the difference?

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

    Why it need vcc and gnd if it is passive type?!

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

    GOOD WORK BRO..

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

    What is the least angle it can move ?
    For example
    If I connect it to a shaft of a robotic arm will it give 30 counts with 30 degree change ?

  • @airfilm_it
    @airfilm_it 6 лет назад

    i would like to build a wireless follow focus for cine lens, what's your suggest?

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

    Hello How To Mechatronics, Keyes Rotary Encoder Module can connect to stm32f103 to control?

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

    Can we bind a rotation to a key? For example if i turn it clockwise with every step it will press 'A'.

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

    The best one at yutub ¡

  • @jugnu361
    @jugnu361 7 лет назад

    Great Work

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

    would you please can you show the circle diagram for stepmotor section, is LCD connection I2C ? thank you

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

    Now I understand.

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

    Very good

  • @ElectronGordo
    @ElectronGordo 7 лет назад

    Thanks!

  • @joost199207
    @joost199207 6 лет назад

    Great explanation, everything i needed to know.

  • @shubhamdubey3585
    @shubhamdubey3585 6 лет назад

    Nice video buddy keep it up :)

  • @djy.ainthemix1878
    @djy.ainthemix1878 3 года назад

    Very nice

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

    how to set position to 0 dge , I Should have insert sensor ?

  • @balajijk52
    @balajijk52 7 лет назад

    Is it possible to design detent switches along with continous rotary knob? and how if its possible?

  • @ahmedboudi1808
    @ahmedboudi1808 6 лет назад

    thank you

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

    Does the rotary encoder have a limited amount of full turns you can make before it needs to be turned in the opposite direction?

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

      They doesn't, you can turn them infinity.

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

    Can it continue to increment after more than one revolution please ? Thanks for answering.

  • @navtejsinghsaini4945
    @navtejsinghsaini4945 7 лет назад +1

    which animation tool did you use?
    Thanks

  • @gvinodkumar4224
    @gvinodkumar4224 6 лет назад

    very super and good teching

  • @eligijuspranskunas3509
    @eligijuspranskunas3509 5 лет назад +3

    Hi, I'm getting double count, for ex: did one turn - result: 1,2. one more turn: 3,4. and so on. How to fix that? :/

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

      I had this problem too. it was counting on, both, the falling and rising edge since the initial "if" was "if(current != previous){other statements}". to fix it it, just add a second condition, like this "if ( current != previous && previous ==1){other statemetns}". i simplified it further and just ended up with "if( previous==1 && current =0){other statements}". this will only run the condition on the falling edge.

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

      I just don't know what you mean by current and previous is it like aState and aLastState in the code

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

      Thank you Its finally working!!! :)

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

    I made something similar using a potentiometer