EEVblog

Sdílet
Vložit
  • čas přidán 3. 08. 2024
  • How to capture and reverse engineer an infrared IR code and use an Arduino or other microcontroller to replay the command.
    Oscilloscope and logic analyser capture, coding, troubleshooting, tounge angle, it's all here.
    In this instance Dave captures the NEC (Japanese) code from his Canon video camera remote control on the digital oscilloscope, figures out all the bits and encoding, and writes an Arduino library to replay the code back, and verifies it with his Saleae Logic logic analyser.
    Previous simple hack video: • EEVblog #505 - IR Lear...
    CODE: gist.github.com/EEVblog/6206934
    Forum: www.eevblog.com/forum/blog/eev...
    EEVblog Main Web Site:
    www.eevblog.com
    EEVblog Amazon Store:
    astore.amazon.com/eevblogstore-20
    Donations:
    www.eevblog.com/donations/
    Projects:
    www.eevblog.com/projects/
    Electronics Info Wiki:
    www.eevblog.com/wiki/
  • Věda a technologie

Komentáře • 289

  • @unebonnevie
    @unebonnevie Před 8 lety +24

    Btw, just to be clear for folks, the 26ms that you divided by in your IRcarrier() function is THE PERIOD of the 38Khz. Freq = 1/Period, which means Period = 1/Freq = 1/38Khz = 0.0000263157 sec = 0.0263157msec = 26.3157usec, which is roughly 26usec.
    So, your code wanted 9000usec of 38Khz carrier freq means that "how many periods of 26usecs do I need to generate?", which means 9000usec/26usec = 346 periods, that is, 346 iterations of the loop in your IRcarrier() function.
    That's how the 38Khz carrier frequency is generated with an I/O pin.

  • @GuardedDragon
    @GuardedDragon Před 10 lety +56

    "The old fashioned way" : A digital oscilloscope. :D

    • @debasish2205
      @debasish2205 Před 3 lety

      I understand your concern, his perception is relativistic

  • @cbranalli
    @cbranalli Před 9 lety +7

    great work Dave.
    i'm an electrical engineer who has been out of the technical loop for 25 years.
    your videos are perfect for bringing somebody like me up to date.

  • @benwolfe1301
    @benwolfe1301 Před rokem

    Thanks for this video Dave! Your code is much more elegant and easier to understand than any of the IR libraries online. I was able to modify it to duplicate a Sony AV remote and it worked!

  • @carlarrowsmith
    @carlarrowsmith Před 8 lety +7

    Brilliant, explained so well and in just the right level of detail. Thanks Dave!

  • @kf7tkj
    @kf7tkj Před 11 lety +1

    Dave thank you for this video, I just got my first oscilloscope and this made my day for another semi beginner! The protocol explanation was great it helps me put what I have learned about protocols into real world examples! Thanks again!

  • @ShopperPlug
    @ShopperPlug Před rokem

    Excellent explanation, thanks for showing how things actually work by theory using the oscilloscope.

  • @msaad42
    @msaad42 Před 4 lety

    Again got help from here after so many years, thanks Dave , you are a legend.

  • @87knox
    @87knox Před 11 lety

    Amen to that. This channel is really getting good with all the how-tos as opposed to teardowns, mailbags, and rants (not that those aren't appreciated).

  • @StephenArsenault
    @StephenArsenault Před 3 lety +1

    David - it’s an older video but I found it really useful! I’ve been recording a custom protocol used on original Macintosh keyboards (pre ADB) and plan to do an Arduino implementation. Your segment about using the Arduino and pitfalls to be mindful of confirmed the best practices I was anticipating - thank you!

  • @sagaertj
    @sagaertj Před 10 lety +59

    If you don't have a digital scope, just connect the output of a photo diode to your line input of your pc's audio card and record the data.

    • @daver2355
      @daver2355 Před 10 lety +1

      thats a great idea!!

    • @macguionbajo
      @macguionbajo Před 10 lety +11

      Dave R Good idea indeed but there's a limitation. The standard audio cards are made to sample from around 20Hz to 20000 Hz. That's not enough to see the actual carrier frequency, but its totally good enough to decode each button code. I just made this a couple of days ago, and I was able to decode every single button :D. Btw I used a free software that plots the mic input and lets you visualize interesting stuff like frequency gains.

    • @Inspironator
      @Inspironator Před 7 lety +2

      What was the name of that free software you used, please?

    • @Chriva
      @Chriva Před 7 lety +1

      There are soundcards capable of 24 bit @ 192khz. That ought to be enough for things like this :)

    • @marlonmartins82
      @marlonmartins82 Před 7 lety +6

      I just did this, as my receivers did not make a proper capture of the signal. using a standard sound card was able to clearly see the codes with a simple ir receiver (2 pin on mic input). my air conditioner had a 36-bit code, so I made a few modifications to the code posted here, adjusted the initial timings (assumed a 38khz carrier) and bam! working fine! captured the output to match the original remote, and from there I refined the timings. (i did not have an oscilloscope). an arduino pro mini 3.3v did the job perfectly

  • @TheBananaPlug
    @TheBananaPlug Před 11 lety +1

    This is exactly how a fundamentals video should be done. Well played Dave, a great combination of theory, practical and how to salvage stuff from everyday consumer junk. I dont have enough thumbs to put up.

  • @MrRoyzalis
    @MrRoyzalis Před 10 lety +2

    It's easy to throw a video onto CZcams. Not as much when you take the extra time to make the video concise yet meaty - like this video; well done.

  • @MikeSims70
    @MikeSims70 Před 4 lety

    By far one of the best explanations of IR signaling I've ever seen or read ... I definitely understand it 50% better than I did before watching the video ... but I am still uncertain how this knowledge can be applied to different protocols such as Sanyo, Sony etc. I'm going to power up the scope and see what I can figure out. Thank you for once again producing a quality electronic tutorial.

  • @johnnyboy2000
    @johnnyboy2000 Před 7 lety

    That's a great job done. I had been trying to do this in software on an ESP8266. Thanks to your informative video, especially the debug part, I am able to send IR from the ESP8266 and ultimately anywhere in the world!

  • @Vorsteven
    @Vorsteven Před 11 lety

    Thanks Dave! You managed to put so many different topics into a simple project like this and kept it easy enough for starters to follow. Great Video, I really enjoyed it :)

  • @gummansgubbe6225
    @gummansgubbe6225 Před 5 lety

    Thanks so much for this. With this code and some remote control codes I found on the web I managed to regain remote control of my amplifier. It worked on the first try.

  • @VintageLabSilvioPinheiro

    Dear Dave Master,
    Thank you for sharing your vast knowledge with us so enthusiastic and smart.

  • @PA3CSX
    @PA3CSX Před 2 lety

    Thanks Dave!
    i used your code to make a AC ON/OFF control for the Dometic HB2500 Airco. As far as i known no replacement remote controls are available for this Dometic HB2500 so i am making my own to help out a neighbour. He was told to buy a new Airco for his RV when his remote control broke down.
    Greetings from the low lands :-)

  • @NiranjanaMurthyC
    @NiranjanaMurthyC Před 9 lety

    Really impressive, informative with full clarity. Thank you.

  • @elboa8
    @elboa8 Před 11 lety

    Really makes a nice change from teardowns. Nce job. Thanks Dave.

  • @plecto1234
    @plecto1234 Před 11 lety +1

    I recently made a remote control and IR receiver for dimming six leds individually. Used a timer to create the carrier signal and used the UART with a baud rate of 2400 to send the information, worked liked a charm :D Each transfer consisted of four bytes, the first and last byte are address bytes, I hardly get any bit error :)

  • @TheBadFred
    @TheBadFred Před 11 lety

    Great video! I like the fact that you use the arduino platform, because it is easier to write code for than the usual development systems from AVR or Microchip.

  • @EngineeringVignettes
    @EngineeringVignettes Před 11 lety

    A good little bit on reverse engineering. I like the fact that you pointed out something that not many newcomers (to programming) catch; the fact that subroutine calls do not take zero time to execute, especially when they have to change registers or interface to the real world... usually not a big deal, unless you are writing tight timing loops, and then it really matters. Good job.

  • @foldi001
    @foldi001 Před 10 lety

    Hello Dave,
    a great video!!
    For me it was always something mystical, when I read of decoded protocols. Thanks for your explanations.

  • @CryptoWorld2
    @CryptoWorld2 Před 4 lety

    Always great videos...ive watched you even before i started engineering and you're the real deal!

  • @JuanMaEle
    @JuanMaEle Před 3 lety

    Great video, just what I needed to understand how IR remote controls work :)

  • @alexanderet98
    @alexanderet98 Před 11 lety

    This wold make a great new weekly segment! Great video :)

  • @Sinusoidal
    @Sinusoidal Před 11 lety

    Huge thumbs up. I actually wanted to do a very similar project just the other day, I needed to clone a flimsy remote control. Thanks for the info, now I think I can tackle the task.

  • @EEVblog
    @EEVblog  Před 11 lety

    As you saw in the previous video, I am using the Arduino for the matrix display, it came with an Arduino driver and connection board.

  • @undercrackers56
    @undercrackers56 Před 11 lety

    Really interesting and informative. I am sure that various experts can take pot-shot criticism at various details. However it takes real cojones to produce and share this. Thank you.

  • @kevincozens6837
    @kevincozens6837 Před 11 lety

    Thanks for the video, Dave. My cable TV provider is going all digital so I need to use an external digital decoder box to be able to pick up all the old channels. I've been wanting to make a device that can send the IR codes to the external box. This video has certainly helped me to work out how to decode the IR signals sent by the remote.

  • @timfairfieldAETestandMeasure

    Well explained and from many ways of capturing!!!

  • @eddraper
    @eddraper Před 11 lety

    Well done Dave. This video is really useful. The setup and execution is a lot harder on your end I'm sure, but we get real meat - soup to nuts! Thank you for your efforts and please do many more like this. This is 100 times more valuable than a review video...

  • @dmastuff
    @dmastuff Před 11 lety

    I miss this kinda thing, awesome vid

  • @r1obyscar
    @r1obyscar Před 5 lety +1

    the BEST EVER tutorial about IR works. TOP! thanks!

  • @tocsa120ls
    @tocsa120ls Před 11 lety

    Excellent video Dave, also a representation why I use AVR Studio and native C to do my projects. When you do a simple loop, toggling an output on the uC, the Arduino sketch gives about ~200kHz square, compared to a C loop's ~3MHz! Much faster and not much more complicated. Cheers!

  • @Tigrou7777
    @Tigrou7777 Před 7 lety

    Great video. For solving the timing issues what about :
    1) Generating the signal inside an ISR with proper timer setup. Signals might be a little bit too late (because of the delay between the ISR and the signal is finally outputted on the pin) but at least it wont drift over the time.
    2) using UART

  • @frollard
    @frollard Před 11 lety

    I ran into this style problem (the timing of a carrier frequency) when driving led strands over software spi; I learned a valuable lesson about digitalWrite that day. Very cool stuff. I would really like to have seen a quick note in the video reminding people that the more human friendly code is REALLY time-inefficient on these limited platforms. At least the reminder is in there about what caused the problem.

  • @scancool
    @scancool Před 11 lety

    this is pretty cool, when I got my first car, I used my remote control watch to start my car and open the doors, I didnt know about NEC protocol so I was decoding hex code, it was working pretty well, but I wish I had new about this decoding technique

  • @Inspironator
    @Inspironator Před 7 lety +3

    What I enjoyed about this video is not the programming, although that is always instructive, but the reverse engineering of the raw pulses into a carrier freq., pulse codes, NEC standard... Big thumbs up video for newbie hackers and those who just want to understand how things work! Are there many major IR coding standards besides NEC?

    • @benverdel3073
      @benverdel3073 Před 5 lety

      Another very well known one is RC-5 (wikipedia.org/wiki/RC-5). It runs offically on a carrier of 36kHz, but a lot of manufacturers used 38 due to being misinformed or lazyness. It works anyhow. The bits are a fixed lenght where the direction (rising or falling) of the slope in the middle defines it's value.
      The toggle bit Dave talks about is used for ch+ and ch- for example. It prevents to skip 5 channels if you keep the button a bit to longue.

  • @TheJMan11000111
    @TheJMan11000111 Před 11 lety

    What a bloody great video Dave.

  • @GameInterest
    @GameInterest Před 5 lety

    Thanks for this! I love tutorials like this.

  • @kevinjohansson3923
    @kevinjohansson3923 Před 3 lety

    Amazing video with some nice tips here and there. Great stuff.

  • @HeyBirt
    @HeyBirt Před 8 lety

    If you want to see some truly twisted IR encoding look at the MILES 2000 a.k.a. military laser tag. The older system used a relatively slow IR signal and when they decided to update things they still wanted to be able to use the old gear so they snuck in the new bits inside the existing bits. As I recall it was something like they split up the high time from one 'long' bit for the old system to many short bits for the new system. The old receivers would filter out the new fast bits and still work just fine and the new receivers would be able to 'see' the additional data.
    Since it did not add value to the project we were working on at the time to decode the actual MILES 2000 signals we skipped it (we were adding haptic feedback to the soldiers gear so they would feel where they were hit.)

  • @jamesrbrindle
    @jamesrbrindle Před 11 lety

    Mega thumbs up! amazing explanation for a semi-new player.

  • @claudiupanoiu6064
    @claudiupanoiu6064 Před 11 měsíci

    Thank you for this video, it was explained very easily and simply. 🤝

  • @davidmarks509
    @davidmarks509 Před 7 lety

    We are going to do it the old fashion way ... Let me grab my digital scope lol. Good fun tutorial I think I have a few remotes I can play around with here.

  • @dalenassar9152
    @dalenassar9152 Před 6 lety

    Dave, there exists (or did) an IR receiver with a carrier frequency of 455kHz. I have succeeded in sending audio over this IR module (something like a TL9000--but I seriously doubt that's the exact part number since it's been so long). Most interesting of all is I managed to send DTMF codes over it (to a DTMF decoder) for remote control applications, and even multiplexed and patented it after I added a feature that allowed more than one DTMF encoder button to be pressed and held continuously with a receiver modification to match. Then this wonderful high frequency IR decoder was discontinued--go figure. I think I got all mine from Vishay...still got a few of them though.

  • @EEVblog
    @EEVblog  Před 11 lety

    Yeah, I deliberately wanted to do that, and was hoping the digitalWrite routine would be slow enough to show that. It didn't let me down!

  • @mike94560
    @mike94560 Před 9 lety +11

    I have been experimenting a LOT with this crap. It's a real pain in the butt to get enough documentation to know what the heck to do. I have spent a lot of time accumulating documentation.
    I'm doing it with a PIC chip. Specifically a PIC16F1503. I'm so close I can taste it. I have a handheld Qunda IR Remote Control Decoder. It sees and decodes my PIC's IR output but the TV is not. More tweaking needed.
    One thing I noticed is that you assume is that the 38Khz duty cycle is 100%. ie., 50% ON, 50% OFF. It's not.
    33% on time is more like it. Keeps LED's from burning up. They are usually pulsed at some insanely high currents.
    I could write a book. Argh. Thanks for the video!

    • @yalilboya
      @yalilboya Před 5 lety

      mike94560 I’m also working on a project that deals with a PIC16F883 and IR , how far did you get !? Can I see your results and how you got to where you wanted

  • @zhaldorian
    @zhaldorian Před 11 lety

    I quite liked that video. Thanks, Dave.

  • @benoitdebrueker2500
    @benoitdebrueker2500 Před 8 lety

    Thanks for the explanation and code.

  • @Ruddy761
    @Ruddy761 Před 10 lety

    You could use one of the AVR timers to generate the carrier with an isr routine to blink the led, then just enable/disable the blinking in the isr for your bit times.

  • @electronicsNmore
    @electronicsNmore Před 10 lety

    Excellent video.

  • @chemtype
    @chemtype Před 11 lety

    More logic analyser videos!!!
    I'd love to see you decode some code on an older videogame console or an old PC.

  • @Undeworld667
    @Undeworld667 Před 10 lety +4

    Very interesting for a beginner - thank you!

  • @Stjaernljus
    @Stjaernljus Před 11 lety

    more of this style of video, please.

  • @EEVblog
    @EEVblog  Před 11 lety

    An Arduino sketch IS in native C. It's just calling an abstracted routine to write to the IO pin. You can simply bypass that if you want and the sketch will give you the exact same speed as AVR studio.

  • @GfastGao
    @GfastGao Před 11 lety

    Great, at last totally understand! Thanks again!

  • @EEVblog
    @EEVblog  Před 11 lety

    As I pointed out to countless people, yes the previous hack was much simpler and faster, that's why I did it originally. But this isn't too hard, even if you have to write your own IR library as I showed, but yes, you need at least some programming knowledge. You can just cut'n'paste code though of course.

  • @DJSolitone
    @DJSolitone Před 11 lety +1

    Excellent video. You even managed to review some code!! ;-) Great complete implementation of a smart solution to your specific need. But yeah I'm always a bit wondering as how fast these Arduino can actually deal with "real time" processing.

  • @Vorsteven
    @Vorsteven Před 11 lety

    That would be the more efficient approach, but I think that this video is more about how to use your gear to reverse-engineer or diagnose a serial protocol and how to implement it in A microcontroller. The IR protocol is just a special case and Dave did a good job by not introducing PWM here...

  • @romanieo
    @romanieo Před 8 lety +3

    Made me subscribe. Great job.

  • @EdBordin
    @EdBordin Před 7 lety

    I know this is an old video, but for anyone watching that's having trouble getting the carrier frequency right, another approach would be to use a PWM channel and toggle it on and off rather than "bit banging" the carrier. The IR libraries Dave mentioned at the start likely do this. I'm sure Dave just chose this method because the code is easier to understand

    • @johnnyboy2000
      @johnnyboy2000 Před 7 lety

      I couldn't get any IR libraries to work on the ESP8266

  • @aev-g8c
    @aev-g8c Před 11 lety

    According to the C11 standard: "The result of E1

  • @iamnocnoc7536
    @iamnocnoc7536 Před 11 lety

    Thank you. Very useful video. Maybe I can use this knowledge to make an Arduino talk to my Fluke

  • @TheCrazyInventor
    @TheCrazyInventor Před 11 lety

    I really like this video, Dave. Very complete and everything. :)

  • @aswahd
    @aswahd Před 5 lety

    Thanks! Very clear explanation.

  • @sandermans15
    @sandermans15 Před 11 lety

    Aah I see! thx for your explenation and fast response! I learned a lot about the code and how to send it. I allready knew a bit of IR but not how to send the codes. I only used my arduino once to decode IR and turn a LED on and off via my logitech harmony wich i programmed for a old sony VCR wich are the easiest to decode. anyways thank you very much for the video and your quick respose really apreciate it : )

  • @EEVblog
    @EEVblog  Před 11 lety

    IR LED's draw as much current as you give them, they don't "take" or "draw" current. You force the required current into them with a suitable dropper resistor.

  • @joe72205
    @joe72205 Před 11 lety

    I guess the long burst up front is for the receiver to set its AGC.
    And the stop bit so every bit is followed by a leading edge, so you can just measure the time between leading edges.
    Its interesting to think about how the transmission is often designed for the receiver to receive it cheaply and reliably, rather than for the ease of the transmitter

  • @beastlt12
    @beastlt12 Před 10 lety

    Great all around video.

  • @BlensonPaul
    @BlensonPaul Před 7 lety

    Nicely done .. Loved it

  • @KananDethin
    @KananDethin Před 9 lety

    Great Master, thank you. I am still searching for GPX-Device signals.

  • @ZambitisFinest
    @ZambitisFinest Před 11 lety

    Thank you Dave!

  • @HansVanIngelgom
    @HansVanIngelgom Před 10 lety +1

    a) I would have used a PWM signal to generate at least the clock signal, so you don't have to tweak the timing. The 'professional way' would be to write the whole IR-signal generating code in the overflow interrupt of the PWM timer. But don't worry, for a demo your code is more than adequate.
    b) It could have used a little more cowbell.

  • @shodanxx
    @shodanxx Před 11 lety

    That's a really great video, "real world" problem solving neat !

  • @VintageLabSilvioPinheiro

    Andy Collinson in your blog have a nice ir project.

  • @jhyland87
    @jhyland87 Před 6 lety

    Great video! Very helpful - Thank you.
    Subscribed!

  • @ben_r_
    @ben_r_ Před 11 lety

    Thank you! This was very helpful!

  • @lordzeppo
    @lordzeppo Před 11 lety

    Excellent point! Would you mind making a video about this particular topic? I was wondering how exactly to "port" a Arduino IDE sketch into using base functions instead.

  • @EEVblog
    @EEVblog  Před 11 lety +2

    Well, when it takes 3.5us to write to an output pin using the recommended method, that could best be regarded as "dog slow"

  • @liviuoros1184
    @liviuoros1184 Před 11 lety

    Where is the Double LIKE / Double Thumb UP button ? :) I need to discover the code for a function of the remote and had not a clue how to do it. You saved me hours of head scratching. An now i know to emulate the command. Thank you !

  • @EEVblog
    @EEVblog  Před 11 lety

    This is a library, and I think it's simple enough beginners can use it.

  • @Slavko_Husam
    @Slavko_Husam Před 7 lety

    Yes, great job !

  • @sysmatt
    @sysmatt Před 11 lety

    Great real world project, simple approach. Loved it. Brace yourself for 1000 alternate opinions on how everyone else wants you to skin that cat.

  • @Laogeodritt
    @Laogeodritt Před 11 lety

    To be precise, two clock cycles on the Atmega328, if the register and bit to set are immediate/constant. SBI instructions are nice. =]

  • @0LoneTech
    @0LoneTech Před 11 lety +1

    The other fix would be to replace Arduino's digitalWrite routine with one that optimizes down to the single machine instruction it should be. Considering the "digitalwritefast" implementation is entirely source compatible and has been around for years, I've no idea why the Arduino team hasn't already included it.

  • @suicollector
    @suicollector Před 11 lety

    awesome , and fun to play with! thanks

  • @nathanschenk8886
    @nathanschenk8886 Před 6 lety

    I've done this once. My solution for the carrier was to use the PWM module in the PIC I was using at the time to generate it. One side of the LED went to the PWM output pin, the other went to a pin with the data.

    • @nathanschenk8886
      @nathanschenk8886 Před 3 lety

      @Peter Mortensen The led was sourced from the data pin, and sinked into the pwm pin. Two pins, one driving the high side, the other driving the low.

  • @Nikkuuu69
    @Nikkuuu69 Před 11 lety

    Thanks Dave!

  • @dahappiehippie
    @dahappiehippie Před 11 lety

    Really liked this video!! Really helpful :) thanks!

  • @worldgeektube
    @worldgeektube Před 11 lety

    Thanks @Vorsteven for the clarification. Yes I was confused by reading that the IDE is based on the Processing IDE and that Wiring was influenced by the Processing language. My bad, sorry.

  • @worldgeektube
    @worldgeektube Před 11 lety

    You beauty! Great explanations and even pretending to make a mistake ;)

  • @Blaff3tuur
    @Blaff3tuur Před 11 lety

    For starters Arduino is perfect and I think a big part of viewers are starters so yeah. Not everyone is an electronics expert like you.

  • @N1CH0LAS12
    @N1CH0LAS12 Před 11 lety

    Once again. Thank you for the awesome video :-)

  • @neoneggplant5724
    @neoneggplant5724 Před 9 lety

    very helpful! thank you

  • @EEVblog
    @EEVblog  Před 11 lety

    So that people can just cut'n'paste setup routine into other code, it's more portable. setup is an Arduino specific thing. The while loop at the end stops it from running more than once. It's example code.

  • @thomaslenarz3195
    @thomaslenarz3195 Před 11 lety

    Thanks a lot Dave! Awesome video :-). I was surprised that connecting the IR LED directly to the output pin actually works. My readings said that one has to use a transistor, because IR LEDs draw more current than normal LEDs. So I went directly for a transistor circuit, but never brought it to work. Does your LED light up as bright as the original remote-control, when filmed with a digicam? I thought the brightness was my problem, but now I think I should look for the problem in the IR-Code...