No video

DIY Laser Projector - Built from an old hard drive

#diy #laser #arduino #technology #programming
In this video I design and build a portable laser text projector. It's battery operated and can display messages over 90 feet away. I can even connect to it wirelessly using bluetooth.
Original code and 3D files:
github.com/BenMakesEverything...
Better code:
github.com/BenMakesEverything...
Intro music: Artificial Intelligence - Cyberwalker (via KZread Creator Music)
Music in coding section: Stay Retro - AlexiAction (via Pixabay)

Пікірлер: 1 400

  • @RealNovgorod
    @RealNovgorod Жыл бұрын

    Interrupts on Arduino introduce random ~10µs jitter, which is roughly consistent with the jitter amount in your tests. For tight timing, try to disable interrupts during the laser toggling and instead wait for the sync pulses from the photodiode by directly reading the pin register in a blocking while loop. The serial communication can be done between frames while waiting for the frame sync (if necessary, this will add one more disk rotation with laser off as a "blanking" interval).

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Thanks for the info. I definitely need to optimize the code - I'm still pretty inexperienced with the more advanced features of Arduino. Looks like I have some reading to do.

  • @RealNovgorod

    @RealNovgorod

    Жыл бұрын

    @@benmakeseverything Yeah, I was also surprised by this "easter egg" when trying to find out why my pulses randomly become 10us longer a few percent of the time, which is pretty bad for time-critical bit-banging. Turns out it's a known issue, but it's pretty straight-forward to disable interrupts around the time-critical part of the code. Just be aware that you can't use timing functions (except microsecond delay) when interrupts are disabled, so the code has to be very "basic" in terms of execution flow (wait for trigger, write out the laser pulses, repeat; and do the "smart" stuff only after the frame has finished).

  • @bazoo513

    @bazoo513

    Жыл бұрын

    What is the cause of that jitter? I don't think that IRQ and NMI even on ancient 1mHz 6502 were that "sloppy".

  • @greatbullet7372

    @greatbullet7372

    Жыл бұрын

    @@benmakeseverything im opting for a collab of you guys! as a C/C++ Engineer i could see a potential breaktrough in quality

  • @RealNovgorod

    @RealNovgorod

    Жыл бұрын

    @@bazoo513 No idea, but most likely it's the Arduino bootloader implementation. Interrupts are used to keep track of the internal timers among other things.

  • @martyp7401
    @martyp7401 Жыл бұрын

    Hey great video, i'm just a layman hobbyist but the way you work through your project outlining the errors and mistakes you encounter along the way and rectify them (rather than editing them out) really makes your content shine with extra value for me!

  • @Pseudothink

    @Pseudothink

    10 ай бұрын

    Agreed! I got value from this in the first minute or two when you talked about mirror galvanometer systems being too imprecise for text. I'd been thinking of prototyping one for a while, and you saved me that wasted time. The rest of your own journey was really well documented and interesting. How long did the whole process take you?

  • @sterling_max

    @sterling_max

    9 ай бұрын

    agree!

  • @alexandredevert4935
    @alexandredevert4935 Жыл бұрын

    Showing the prototypes and their issues is very educational. Great job !

  • @mfx1
    @mfx1 Жыл бұрын

    Two camera setups where the presenter only looks at/talks to one camera just look weird and I find them off putting.

  • @NonEuclideanTacoCannon
    @NonEuclideanTacoCannon Жыл бұрын

    When I was a kid, my dad built a cool persistence of vision display with LEDs. Not a projector, but it made it look as though a LED marquee display was floating in the air over the device. It used those same optical transistor switches. This was in the early 90's, he envisioned miniaturizing it into a small ball to be used as a christmas tree ornament. He never moved further than the prototype, and a few years later similar devices were available retail.

  • @LeoInterVir

    @LeoInterVir

    Жыл бұрын

    He should have stuck with it, could have made money on it. So many people give up on ideas even when they have the market beat. I've done the same and missed my chance.

  • @randomdosing7535

    @randomdosing7535

    Жыл бұрын

    ​@@LeoInterVir hopefully i will be able to cash in my innovation that is very similar to this projector. But also sad that there is always someone in the world who steel my ideas

  • @mon4d

    @mon4d

    Жыл бұрын

    @@LeoInterVirIf you do stuff like this as a hobby it happens constantly. I used to think „I should have went with that idea“, but the reality is that at some point the boring stuff begins. Creating a prototype is exciting and sort of „easy“ or at least what drives me. But once you have to wrap your head around scalability, production, financing, marketing, distribution, legal stuff like patents or even licensing from others, it quickly get‘s a whole lot more boring. And still if you go through that effort, someone else can beat you at it. I‘m not trying to discourage people from developing consumer hardware, but don‘t feel bad for not sticking to a project. Ideas will come and go and eventually you will have a project where you will feel the need to share it in the community or even build a business around it! Until then it‘s an awesome hobby where you keep advancing and learning and having fun :)

  • @mr_ambo24
    @mr_ambo24 Жыл бұрын

    I love finding new channels like this. I can’t wait to see what he makes. It’s really fun watching a channel evolved from just a few videos

  • @hiteshhere
    @hiteshhere Жыл бұрын

    Dude, This is AWESOME !! To me the flickering and wobbling add a special sci-fi vibe to your texts rather than a flaw. Loved it. All the best. Keep going.

  • @D1zZit
    @D1zZit Жыл бұрын

    This is a super well done video! Extremely informational, but you did a great job of breaking down some of the more advanced concepts and presenting them in an easy to understand manner. Such an incredibly cool project as well!

  • @ShipwreckedMonki
    @ShipwreckedMonki Жыл бұрын

    Really neat project, thanks for sharing- the parallax effect when shining it into the corner of the room was especially neat, really different to how a normal projector looks

  • @Gold171
    @Gold171 Жыл бұрын

    Excellent production quality for a small KZread channel. Engaging and interesting from beginning to end. Nice work.

  • @makergiovanni
    @makergiovanni Жыл бұрын

    One of the best projects I have seen in the last months. Amazing!

  • @ed.puckett
    @ed.puckett Жыл бұрын

    This is a fascinating project. I also wanted to mention that your style of code walkthrough was very effective. Best wishes to you, and keep up the good work!!

  • @makebreakrepeat
    @makebreakrepeat Жыл бұрын

    Nice work! I love seeing the process. As satisfying as a 30 second montage is, it's important that people see that big projects take time and patience. Take my sub good sir, I look forward to what you're going to make next :D

  • @mjodr

    @mjodr

    Жыл бұрын

    Even though shorts/reels have completely taken over I, too, enjoy the longer format stuff.

  • @iananderson267
    @iananderson267 Жыл бұрын

    Awesome. Great to see how this may develop in the future. Keep the ideas coming, Ben,

  • @dennisdecoene
    @dennisdecoene Жыл бұрын

    Love this. Also kudo's for explaining your struggles to get this going and for your tenacity.

  • @raveltammeleht6278
    @raveltammeleht62785 ай бұрын

    Instantly one of my favorite channels now! You know what? Make a hologram with it? Some holographic projectors use an array of speakers on top and bottom, to create a levitation field. Then they use a small white bead(sphere) as a "pixel" representation. Then there is a camera that tracks the small sphere and projects a laser light on it. The resulting image is a actual physically interactable 3D hologram!

  • @defenestrated23
    @defenestrated23 Жыл бұрын

    I love the retrofuturistic cyberpunk aesthetic of the scan lines and slight wobble. There's also a lot of tricks in both software and hardware to get better resolution. Definitely look into faster chips, the ESP32 is great in that regard. You could also use a shift register or serial control chip and external clock to control the beam pwm. Basically write your bytes into a register, and clock out bit by bit directly to the beam control. That will give tighter temporal accuracy as well.

  • @darylfortney8081

    @darylfortney8081

    Жыл бұрын

    ESP32 is a great chip, highly recommended. Also better to run it to the wire instead of on top of an operating system regardless of it being a real-time operating system or not.

  • @Noubers

    @Noubers

    Жыл бұрын

    I was going to suggest he tear their hair out and just get a small FPGA dev board. Good excuse to learn some HDL if anything and really can get extremely tight timings even on low end chips.

  • @darylfortney8081

    @darylfortney8081

    Жыл бұрын

    @@Noubers Yeah that would actually be the 'right' approach for flawless timing. To get it perfect each mirror also needs programmable nanosecond scale offsets to account for slight angle variations.

  • @Noubers

    @Noubers

    Жыл бұрын

    @@darylfortney8081 clearly just needs to minaturize the JWST mirror accutators ;)

  • @sheshankutty8552

    @sheshankutty8552

    Жыл бұрын

    Too much promotion of a CHINESE product ESP32. How much are you paid for ?

  • @claws61821
    @claws61821 Жыл бұрын

    This is a really awesome project, Ben, and a nice combination of old and new projection techniques! I can tell you that one part of the causes for the shuttering effect you noted actually is the carousel that you built, as each transition causes the image to "break" for a split second. You'll also get closer and more uniformly focused lines if you anchor the pivot point for your mirrors at the center height of those mirrors and in line with your laser. An interesting point to note is that a lot of larger home theater projectors use micromirror devices with broad 2D micromirror arrays within, one for each raster pixel art either the intended full resolution or some simple fraction thereof (and then vertical and horizontal servos in the latter case to multiply the apparent pixels); but many pico projectors use a module with just a single micromirror on centered vertical and horizontal pivots. My own limited understanding says that's identical in concept to the galvos in light show projectors and they just use tighter control. It might be fun to see what you can do with that knowledge.

  • @komojo
    @komojo Жыл бұрын

    I've seen a few different variations of this type of design, and I actually tried to make my own a few years ago! At one point I used a mini disco ball to get the mirrors. The version I made was wobbly with similar problems to your first prototype but I never took the next step to fix all the issues. I'm impresses that you stuck with it and actually got it working that well. Nice work!

  • @CharonSin
    @CharonSin Жыл бұрын

    I love the gritty analog look and the wobble effect!! Very retro sci-fi.

  • @awardfoto1
    @awardfoto1 Жыл бұрын

    Content like this still makes KZread great.

  • @WistrelChianti
    @WistrelChianti Жыл бұрын

    Thanks! Been pondering trying this very technique for a while. Very interesting to see the issues and the design iteration re angling of the mirrors.

  • @Foga001
    @Foga001 Жыл бұрын

    Love it! Reminds me of the old monochrome green phosporous crt displays, what i always found very nice!

  • @dennistucker1153
    @dennistucker1153 Жыл бұрын

    One of the first projects I thought of was a laser projector. Love it.

  • @Scrogan
    @Scrogan Жыл бұрын

    If you don’t use tarduino delay functions but rather use noops and direct port writing you should be able to get a laser toggle every 2-4 clock cycles. You may want to invest in a MOSFET gate driver IC though.

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Interesting. I did not know that. I'll have to look into that further!

  • @philippegauthier1776

    @philippegauthier1776

    Жыл бұрын

    @@benmakeseverything You can also use a timer compare output to get a 1 clock cycle. As long as the total ON-OFF loop is greater than what you need to reload the next loop which is around 16 clock to load 2x 1 byte from an array and increment index. Also by default an ISR call will push and pop many things when called and it takes around 30 cycles to do it, plus the ISR call isn't constant, I don't remember all but it's something between 3 and 7 cycles depending on what instruction is currently executing. Might be worth checking for ex rising edge call ISR, then in ISR wait for falling edge in a loop. That way you have a 1-2 cycles jitter max. Overall great project very well done. I'm impressed by the results, keep the good work. Are you planning on publishing the code?

  • @AshleyGittins

    @AshleyGittins

    Жыл бұрын

    @@philippegauthier1776 I had a feeling the jitter was likely down to the software, ISR timing makes complete sense. I guess one could also take the timing pulse and smooth it, but your suggestions sound more likely to be based in experience and thus more likely to work :-)

  • @thomzz3449

    @thomzz3449

    Жыл бұрын

    I also this it is an ISR issue, but rather coming from the timer interrupt. Arduino, by default, has its timer0 configured for millis() and micros(). The call to the timer0 overflow interrupt basically inserts small delays in the execution of your main code, causing jitter in your pulses. You might want to try disabling timer0. Or reprogram the timer with custom settings for your needs. (also, if the external interrupts turn out to be a problem, you could get away with a single pulse per rotation. Because the rotation speed won't change much within one revolution, it is safe to divide the time by the number of mirrors)

  • @ByteBitTV

    @ByteBitTV

    Жыл бұрын

    ​@@thomzz3449 Actually they could configure one of the MCU timers to count automatically in hardware on external interrupt and overflow after a certain number (amount of mirrors). The counter could still be initialized to zero by a software interrupt on the second ext int pin, but I would disable it after the initial position is known to save cycles (since I would not expect it to ever skip a mirror).

  • @AJMansfield1
    @AJMansfield1 Жыл бұрын

    Impressive results! I wouldn't have expected a 3D print to be stable enough, it's nice to see that a commercially-made polygonal mirror isn't the only option. But you don't actually need a faster CPU: The arduino you're using would be perfectly capable of precise 62.5 ns resolution pulses -- i.e. the full 16 MHz system clock rate -- if you exploited the Atmega328p's powerful Timer/Counter peripherals for the task. Here's how I'd do it: - Set up the 16-bit Timer1 peripheral in free-running mode (WGM mode 0) and with full system clock rate (i.e. no clock divider). This timer will just count up continuously; the fact it'll overflow from 0xFFFF back to zero every 4.096 ms is of no consequence as long as that's longer than a single scan line. - Wire the per-scan-line trigger to the ICP1 pin. This way, the input capture module can record the exact "start time" for each scan line _in hardware_ before triggering the input capture interrupt to set up at the start of the scan line. - Wire the laser to an additional XOR gate, whose inputs are wired to the OC1A and OC1B pins. The output compare channels will be used in 'toggle' mode so that, in conjunction with the XOR gate, they can effectively act as a single output with a two-element buffer, rather than two separate outputs with only single-element buffers. - The main task of the input capture interrupt (TIMER1_CAPT) is to copy ICR1 into a register, and then copy of the next line of the image into a separate buffer, adding that ICR1 value to each element of the buffer to offset it to the measured start time of the scan line (using 16-bit unsigned arithmetic so it overflows back to zero the same way the timer does). Aside from that, it's just a bit of bookkeeping at the start to reset the outputs to a known state (set COM mode to 'clear' and trigger FOC), and a bit more at the end to prime the output compare modules (set OCR1A and OCR1B with the first two values from the buffer, set COM modes back to 'toggle', and enable both compare match interrupts). - The compare match interrupts (TIMER1_COMPA and TIMER2_COMPB) then have a very simple task: each time their channel finishes triggering, retrieve the next value from the scan buffer and put it in their OCR register. That should be the absolute first thing the interrupts do, and then after that there's only some light bookkeeping, to clear their interrupt enable bit if the _next_ next value would be past the end of the buffer. - The interrupt for the index trigger is even simpler still: all it needs to do is reset the value of the row counter back to zero... and I guess you could flop image buffers here too; change the pointer the scan line interrupt uses to find the image to point to the frame that was being rendered while the previous frame was being displayed. The way I'm proposing to use the interrupts here is in a sense the most fundamental design pattern used for serious interrupt-driven embedded programming. Almost all hardware peripherals are specifically designed around this usage pattern, understanding that fact can make the rationale for their designs much easier to understand. Even though an interrupt seems instant compared to polling, there's still too many sources of jitter to rely on them to take actions that require precise timing. Rather, their responsibility is just to refill a hardware buffer from a software buffer before the hardware runs dry, or empty an hardware buffer before it overflows -- something that still has to be done "right away" rather than "next time the control loop feels like checking", but that way an extra microsecond or two of delay waiting for another interrupt to finish doesn't compromise the timing accuracy. This pattern is actually used twice as I describe it above, both copying data from the ICR1 register to use to populate the scan buffer, and of course moving data from the scan buffer to the OCR registers. With the design, you'd inherently have the full 62.5 ns precision of the full-speed system clock, and using both channels together means pulses could be as short as a single clock cycle, too. The interrupt execution time would limit the rate at which you could continuously switch it on and off, but even with minimal effort I'd expect at least 100 kHz. With high effort (i.e. implementing the compare match interrupts with hand-written assembly code) it'd be entirely plausible to achieve a maximum continuous pulse rate better than 1 MHz.

  • @stephanc7192

    @stephanc7192

    Жыл бұрын

    Wow!

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    I really appreciate the info! I'll see what I can do about rewriting the code when I have time.

  • @Stabby666

    @Stabby666

    Жыл бұрын

    Yes I was going to write this. I've made some POV displays, and found it's stable if you just use the position trigger to restart a timer set to fire X times (X being the horizontal resolution you want) with the timer counter set based upon the amount of time it took for the previous revolution. So if the previous rotation took 1 second, and X is 16, you set the timer to fire at (16/1)hz - if it took .1 second, it'd be (16/0.1)hz etc. Basically it'll automatically adapt to the speed of the motor. The timer interrupt then just turns the lazer on/off as needed. You won't get a steady image in hte main thread, as the code is being interrupted at "random" intervals. In your case you'd further segment based on the number of mirrors. As long as the mirrors don't wobble it should be rock-steady :)

  • @sdgb5363
    @sdgb5363 Жыл бұрын

    Damnit brother, I wasn't halfway done with your video before I subscribed. You're relentless and I cannot stop getting enough! You're awesome!

  • @theblubus
    @theblubus11 ай бұрын

    Fantastic start to a channel! I'm eager to see what other projects you'll come up with :)

  • @MightyFloyd
    @MightyFloyd Жыл бұрын

    Really impressive Ben. Well done on the persistence too. couple of ideas for your future versions. 1) Not sure about the availability of red and blue laser diodes that could have their output balanced with this green one, but RGB would be awesome! 2) how about using the super-fast HDD heads arm in a vertical orientation, with a small mirror on the top. you could use it between the diode and the spinning mirrors to dynamically apply micro vertical adjustments by your microcontroller, so you could programatically control the up-down scanline sweep, rather than manual mirror adjustments?

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Thanks, I definitely want to try RGB, and more lines of resolution!

  • @Alexandrsssd
    @Alexandrsssd Жыл бұрын

    Great job! The wiggle of the text is similar to the splash screen of games on old computers like the ZX Spectrum. You can project your text or image onto a horizontal series of falling water drops or solid flowing water in the form of a flat waterfall so as not to fight the wiggle but to make it an "interesting feature" of your project.

  • @makers_lab

    @makers_lab

    Жыл бұрын

    My ZX80 back in the 80's glitched every time you typed a key because the video was done purely in software, throwing the generation off while it was doing something else. Using reverse engineered code for the PAUSE function though and if you timed things precisely in all the possible code paths, literally adding up the count of Z80 CPU instruction cycles and balancing them out for all code paths padding with NOPs if necessary, writing fairly simple games that would be flicker free was possible, a lot of fun and more interesting than schoolwork :)

  • @elliotmarks06
    @elliotmarks06 Жыл бұрын

    Super cool! I'm glad to see this project getting the attention it deserves!

  • @Electronics61
    @Electronics61 Жыл бұрын

    Good luck and all the hardwork that went into into the project

  • @AllToDevNull
    @AllToDevNull Жыл бұрын

    Cool project !!! Some suggestions: Use 2 hall sensors with embedded magnets for possition, less air resistance is less noise and vibration. And your unballenced extra arm.... I would use shims and a screw for tight compression together with lock tite that screw. The shims define your angle. You can make a stack of different thicknesses and adjust very precisely with no movement whatsover. You could use the remote controll engine of the ESP32 for laser controll + you get wifi and ble for free. You could offset different colors and adjustd the scanline for the laser offset or create a multi color single point first.

  • @sheshankutty8552

    @sheshankutty8552

    Жыл бұрын

    Why do you spam with Chinese ESP32 ?!?!?! Shameless

  • @kingofbingus468
    @kingofbingus468 Жыл бұрын

    18:36 this shot looks really cool. It looks like a simple image slapped on in post production but the reflections of the laser show you whats really going on

  • @cinajunior

    @cinajunior

    Жыл бұрын

    I thought the same thing

  • @RobCCTV
    @RobCCTV Жыл бұрын

    Magnificent project. Clear logical thinking. Very well done!

  • @kenworks6068
    @kenworks6068 Жыл бұрын

    Very nice work - thanks for letting us know what obstacles you found, as we all learn from each other. Some of us bold fail and build again. It is nice to see a win from time to time.

  • @Rouverius
    @Rouverius Жыл бұрын

    I just stumbled on this. Very cool. It reminds me a bit of the old mechanical televisions. What was wild is that your final design looks a bit like a "Mervyn 30 Line Mirror Drum". Another idea might be to look into a "mirror screw." At that point if you can get PWM driver for the laser, you could even display rough images.

  • @V8Power5300
    @V8Power5300 Жыл бұрын

    For switching the laser you should use the 16 bit timer and do a timer compare interrupt. Set the prescaler to something that gives you adequate range and accuracy. Then just update the compare register to get the laser pulses you need. Remember to set the timer to reset on compare match

  • @albertmagician8613

    @albertmagician8613

    8 ай бұрын

    That is how I i can generate a bit bang midi on an Msp430. Works really well. Timer interrupts are useful as long as there are other things to be done but the full attention of the cpu is superior.

  • @karthikeyajavangula8423
    @karthikeyajavangula8423 Жыл бұрын

    I've been wanting to make this since a very long time. It was fun to see you make it. I was thinking about adding a secondary rotating mirror for the vertical movement, but you made me realize I would only need one. Anyway, looking forward to a better version of this.

  • @apbosh1
    @apbosh1 Жыл бұрын

    I can imagine the level of persistance needed to finish it. Incredible stuff. earned a subscriber here!

  • @gtcollection6933
    @gtcollection6933 Жыл бұрын

    Congrats. I did a similar 32bits/line laser projector 3 or 4 years ago. The only way I managed to get it to work was by using "thermally stable materials" all around. Equally stable mats in the linear and non-linear domains too. Therefore no composites, lots of exotics, not to mention quite a bit of carbide endmills consumables and crashes. I liked the HDD silent motor idea! Good vid, keep it up.

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Interesting... I was just thinking an accurately machined aluminum block with X number of sides (chrome plated and polished to a mirror) would be perfect, but maybe it would still have issues.

  • @gtcollection6933

    @gtcollection6933

    Жыл бұрын

    @@benmakeseverything Wow. Never thought of polished surfaces! I've 4-ax the mirrors assembly on the rotary, pocketed holes and used mirrors you commonly find for co2 lasers. If machined clockwise only (i.e. no reversal/backlash) you should get within 5~10 microns all around. Okay for 100 meter! Side note; you couldn't possibly be using worst than the arduino platform latencies and overheads. Register level programming is of paramount importance for this project (stm32, cube ide here).

  • @dongiovanni1993
    @dongiovanni1993 Жыл бұрын

    Cool project! Decades ago I also had a notion to build something like that, but 256x192 (sinclair's screen, you know) with two rotors for frame and line respectively (50Hz, 16+KHz). MC's back then were too slow, but we already had some PLAs, so it wouldn't be a big deal. The main stopper was the mirrors fabrication precision needed. There was impossible to find needed machinery, so the project died far before any in-iron implementation. It's cool to see that now it's possible with no that much effort.

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Thanks! I would like to do another version with higher resolution - perhaps 16 mirrors and 4 lasers at slightly different angles, giving 64 "pixels" vertical resolution. The mirror array is definitely the hard part...

  • @sportbikeguy9875
    @sportbikeguy98759 ай бұрын

    dude, insane build.... this is wild. im impressed

  • @Luisvr05
    @Luisvr05 Жыл бұрын

    I really hope to see more of this project. Awesome work!

  • @ShawnHeil
    @ShawnHeil Жыл бұрын

    This is very similar to how the laser scanner assembly in a laser printer works. The laser is controlled by an analog video signal. Also, using front-surface mirrors may sharpen up the images.

  • @klauszinser

    @klauszinser

    Жыл бұрын

    A good point, Shawn. Maybe parts and ideas can be extracted from the laser scanner assembly in the laser printer (I suppose thats when the drum in the printer is activated to partially keep the toner) .

  • @nevernether3368
    @nevernether3368 Жыл бұрын

    I absolutely love this idea. And im wondering if you could use smaller mirrors and maybe stack them for multiple lines of text? I wanna build one as well but im limited by budget and knowledge of code lol so i hope you make another video

  • @Bigbrank
    @Bigbrank Жыл бұрын

    Really awesome project ! i like how you filmed and narrate the video, also you didn't give up and build comething that actually work. Good job and i hope you will make a project 4.0 and a video about it ! Another susbriber :3

  • @vinylcabasse
    @vinylcabasse Жыл бұрын

    very cool, unique project. excited to see what else you've done, subbed for sure.

  • @sybergoosejr
    @sybergoosejr Жыл бұрын

    You could possibly save and cut code complexity by only using one sync sensor (the top one for full rotation ) and divide the result down to x mirrors. This would probably net you a possible higher rotor speed and less power consumption by the motor for less resistance by the little fingers on the bottom.

  • @andresduranmolina7994
    @andresduranmolina7994 Жыл бұрын

    Muy bueno tu proyecto, yo soy nuevo en arduino y aunque no entendí muy bien, me pareció increíble seguí así 👌🏻

  • @ChristieNel
    @ChristieNel Жыл бұрын

    I wanted to build just this about 20 years ago. It was explained to me that it would be a bad idea compared to galvos, because the laser would spend a lot of time off, which means most of the light energy would be wasted and produce a relatively dim image. But how fun it is to see it working regardless.

  • @Afrotechmods
    @Afrotechmods28 күн бұрын

    This is great! I love how you managed to do it with a single laser and multiple mirrors at slightly different angles. Back in 2002 I tried to make a laser projector with 8 lasers, spinning mirrors and a parallel port. It didn't go so well 😂

  • @benmakeseverything

    @benmakeseverything

    28 күн бұрын

    Thanks! I found your video on constant current drivers really helpful when I was learning about how to power this, so thank you for making that! You may be interested to know I'm currently working on an improved version of this with much higher resolution and multiple colors. It will (hopefully) be done soon.

  • @ShawnHeil
    @ShawnHeil Жыл бұрын

    You can also glue small, front-surface mirrors to small speakers and bounce the laser off of them. By using the right combination of signals you can do, X-Y vector graphics and text.

  • @AndrijaKrstic
    @AndrijaKrstic Жыл бұрын

    Amazing project! :) You could try altering the mirror angles in a cross pattern, so the point of mass would be equalized by the point of mass of the mirror on the other side of the wheel. This would also mean your code would have to change to render the lines in alternating manner from top/down to middle, instead of just top to down. Try doing anything you can to reduce the vibrations. It will help with wobble a lot.

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Thanks! I think you are correct, the mirrors should be alternated in a different way to balance it out. If I build a second one, I'll try that.

  • @thatonesnowboarde

    @thatonesnowboarde

    Жыл бұрын

    @@benmakeseverything Would it be possible to put only 1 mirror and angle it with a stepper motor as it rotates around? It would require a Rotary Slip Ring but if you can programmatically adjust the mirror angle maybe you could get better results that way?

  • @critical_always

    @critical_always

    Жыл бұрын

    Very smart suggestion. Kind of interlacing right?

  • @AndrijaKrstic

    @AndrijaKrstic

    Жыл бұрын

    @@critical_always Yes, @thatonesnowboarde, the stepper motor could also be a good solution, Im just worried the steps might be too harsh for such small adjustments and lead to vertical wobble. An oscillating mirror attached to an electromagnet, like ones used for camera or dvd drive lens focusing might be a better option, but controlling it is very hard, especially if mirror is heavy.

  • @zoenagy9458

    @zoenagy9458

    Жыл бұрын

    @@benmakeseverything also balance out the rotating section

  • @ekojar3047
    @ekojar30479 ай бұрын

    I love the glitchy effect on the text, it's so real! I think ots perfect if you can just make it half as tall with smaller screws and 3d prints

  • @TylerSpurgeon
    @TylerSpurgeon2 ай бұрын

    I came across this video on Tic Toc and thought I'd go find the actual original content. Glad I did, thought it was a really cool idea/project. Arduino is something I have been wanting to learn how to use, I have had a project in mind that I have been wanting to work on for almost 10 years now. I queued up a few other videos and subscribed.

  • @benmakeseverything

    @benmakeseverything

    2 ай бұрын

    Thanks, I had no idea my stuff was being shared on TikTok, as I don't use that app. Appreciate you coming and watching the original. Arduino is definitely worth learning!

  • @drzboy101
    @drzboy101 Жыл бұрын

    You invented a paperless laser printer. 😋 But seriously great job.

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Haha I guess you are right! thanks

  • @randomelectronicsanddispla1765
    @randomelectronicsanddispla1765 Жыл бұрын

    Pretty impressive results! A couple of ideas to improve, I'm not sure if they would be practical to implement. To stop the wobble, use a fast photodiode and a mirror in the output path of the laser, to synchronise the laser switching with the actual position of the laser beam. Have it inside the housing, laser turned on until it hits the photodiode, then quickly turn it off before the beam reaches the start of the opening. The switch faster, use the hardware UART and encode the character table into bytes, that would limit you horizontally to 8 pixels per character, unless there is a mode that has no start nor stop bit

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Thanks for the input. I definitely think there is a lot of room for improvement in the code. I'm still learning Arduino.

  • @defenestrated23

    @defenestrated23

    Жыл бұрын

    A chain of shift registers would give you arbitrary width. Push bytes via the uart into the shift registers, then clock out bit by bit to control the beam.

  • @stephanc7192

    @stephanc7192

    Жыл бұрын

    I like the idea of getting the lazer position directly. Laser printers uses this method.

  • @anonymstpbeach
    @anonymstpbeach Жыл бұрын

    That was awesome. Thank you for the time and work.

  • @hermansims2296
    @hermansims2296 Жыл бұрын

    I've watched a lot of your videos. This one was so awesome I finally subscribed. Thanks for the program.

  • @BrianBoniMakes
    @BrianBoniMakes Жыл бұрын

    Wow well done Ben! It's pretty hard to challenge the cost of a large screen TV for a display system but for things that only need a one or two line display this might be the ticket. Sporting events? Business meetings? Directional signage?

  • @Dragn7
    @Dragn7 Жыл бұрын

    Cool project! To reduce the number of interrupts (and input sensors), perhaps you could omit the ISR_rev() function, and when you need to get the current mirror index, use a modulo-8 operation on mirrorFlag. This operation returns the remainder of a division rather than the actual result, which would be your current mirror index every time, regardless of the mirrofFlag count. Should be true even in the event of an integer overflow, as long as it's unsigned. Alternatively, what if you just reset the value to 0 in ISR_mirror() every time the value reached 8?

  • @_tealpaws
    @_tealpaws Жыл бұрын

    I would love to make my own! Feeling really inspired by your channel.

  • @chrisc.5032
    @chrisc.5032 Жыл бұрын

    Well done! I have been envisioning a very similar project for a couple years and never got around to it. This is a really clever implementation. +1 on the advice to ditch the Arduino. Maybe a Teensy 4 would be a good candidate, thanks to the Cortex M7. If you're feeling really ambitious, you could also switch to a hobbyist FPGA, like an Alchitry board or a TinyFPGA BX. Also, maybe you can order a planoconvex lens from ThorLabs or Newport to tighten up the resolution? Again, amazing stuff here!!

  • @benmakeseverything

    @benmakeseverything

    Жыл бұрын

    Thanks, the teensy seems like a decent option. Powerful specs at a decent price. I might use that on the next version.

  • @JensChrBrynildsen

    @JensChrBrynildsen

    11 ай бұрын

    Great project! I'd also recommend using a Teensy 4.0 to replace the Arduino. @600Mhz it'll give you everything you want.@@benmakeseverything

  • @makers_lab
    @makers_lab Жыл бұрын

    Very nice. To avoid the need for timing adjustments in code for the scan lines, and perhaps to fix the wobble, you could try a sensor assembly just before the output window. Its purpose would be to detect the beam and start timing based on that. A light guide of some kind to a single detector might work. Power the laser at the start of a sweep, wait for a signal from the detector, and then the horizontal position is time relative to that. Have a single adjustment in code to account for any skew in the detector, which could be set through a web interface if you later used an MCU with WiFi such as an esp32.

  • @tankerock
    @tankerock Жыл бұрын

    Your channel has potential. Keep it up Ben! 🙌

  • @heinerml2
    @heinerml2 Жыл бұрын

    Love the project, presentation and videography. Keep it up!

  • @coderentity2079
    @coderentity2079 Жыл бұрын

    Handheld barcode readers have a little mirror oscillating in them. Use that insted of the hard drive. To have multiple lines - use another one with a lens to restrict it's angle / or use 12 cheap lasers. Also switch to esp32 - much faster, has bluetooth already, can act as an AP to provide a webpage for settings. Good job!

  • @AshleyGittins

    @AshleyGittins

    Жыл бұрын

    I suspect repeatability would be an issue with the oscillating mirrors - might work well for a y axis though. Big benefit of the mirrorwheelofdeath is it acts as a flywheel to get pretty consistent speed, which is also (angularly) linear since it doesn't have to reverse direction at the ends - it's what the fixed barcode readers in supermarkets use (you probably knew that though, by the sound of it). Actually laser printers do too, at least the ones I've pulled apart used to :D

  • @dave7038
    @dave7038 Жыл бұрын

    You've probably already found what you need to fix the timing issues, but my suggestion would be to use the AVR timer/counter system directly rather than using the Arduino functions. Refer to the datasheet for the AVR model you are using for details. There are a variety of approaches to get what you want, but generally you would set the timer in countdown mode, enable the timer ISR, and set the compare output mode to toggle on compare match (PWM mode). In the ISR load the count for the next toggle time. The timer/counter configuration takes a bit of work to understand, but once you get it it's a very flexible and capable system that should be more than sufficient for what you're doing here.

  • @jacobhudec7817
    @jacobhudec7817 Жыл бұрын

    Love your channel. Can't wait to see what else create!

  • @imrek
    @imrek Жыл бұрын

    Cool stuff man, thanks for the video.

  • @roberttriner6242
    @roberttriner6242 Жыл бұрын

    Try repurposing the optical parts from a grocery store POS scanner. done.

  • @ivangutowski
    @ivangutowski Жыл бұрын

    ;Interesting project and very impressive. I've never really appreciated how fast code actually runs, but considering how insanely fast the lazer needs to be on an off.. yet you can easily add logic, variables etc. It shows how insanely fast processors are !!

  • @antoines1341
    @antoines1341 Жыл бұрын

    I've wanted to make this for so long. Good job !

  • @darkshadows65
    @darkshadows656 ай бұрын

    I don't have the time to invest in the learning curve to build this, but love the effect and would buy one right now if the product was available to purchase. Great work!

  • @madboyjv
    @madboyjv Жыл бұрын

    Excellent project and very well documented, it gives me very good tips to learn. Congratulations 👏 👏

  • @mjodr
    @mjodr Жыл бұрын

    Damn, hell of a project! I like how you handled the several mistakes that would have happened to me as well...such as the camera not focusing while everything else was falling apart lol

  • @londonnight937
    @londonnight937 Жыл бұрын

    Love the project!

  • @MARKE911
    @MARKE911 Жыл бұрын

    I am jealous at your knowledge and skills. I enjoy watching.

  • @robertoscalone8024
    @robertoscalone8024 Жыл бұрын

    Hello Ben! Excelent work! Its a amazong idea! Congratulations!

  • @SamiJumppanen
    @SamiJumppanen Жыл бұрын

    Excellent report, especially for the problems encountered. It's very important, in my opinion. Every development project faces issues. One that shines out is the lack of simple research like "would this thing turn on at this rate" and that info may be impossible to obtain for cheaper laser+controller combos. I know my own self, trying out things is great! Btw, in the end you said "in any ray" :D Spotted. Non-native here...

  • @divertechnology
    @divertechnology Жыл бұрын

    great video ben, ill see in future but im completely sure its a great add

  • @chakravarthyelumalai8408
    @chakravarthyelumalai840811 ай бұрын

    Extremely awesome video. I'm sure it was lot harder than you make it appear to be. You rockk.

  • @patrickvance7592
    @patrickvance7592Ай бұрын

    Absolutely fascinating, great job

  • @jeffreypomeroy6173
    @jeffreypomeroy617311 ай бұрын

    I built something similar a few years ago but it was for a diy laser projector. I instead had the lasers go through a dichroic mirror setup (for combined color), hit the mirror wheel, then hit a mirror that was attached to a planetary gear output with a motor that had a cui encoder (to control beam angle). I used an fpga though for controlling the drawing. I used a resin printer and didnt have to adjust my mirrors on my mirror wheel. I never finished the whole project due to lack of fpgas at the time (was trying for atleast 4k but was stuck at 2k due write limits due to fpga clock) and not correcting the beam sizes for the 3 laser diodes but this had definitely peaked my interest when i saw it.

  • @YousifFreestyle
    @YousifFreestyle Жыл бұрын

    This is an amazing feat! Well done!!

  • @iwanjirkuw8596
    @iwanjirkuw8596 Жыл бұрын

    DUDE! You deserve at least my Like and Follow! 👍🏻😉 Good experiment! Love it!

  • @lowellabeles5782
    @lowellabeles5782 Жыл бұрын

    One of the Coolest projects ive seen!!!

  • @Lucius.Hercules
    @Lucius.Hercules Жыл бұрын

    I figured he would use two sets of moving mirrors to achieve the raster effect like most show projectors but I'm impressed by the simplicity of the adjustable rotary mirrors.

  • @ericapelz260
    @ericapelz260 Жыл бұрын

    This is an interesting take on laser projection. I have thought about trying to build one, but always figured I would use two galvanometers (the head servo in the hard drive) one for X and one for Y. There is always more than one way to solve a challenge. Great work!

  • @lanceanthony198

    @lanceanthony198

    11 ай бұрын

    Why’re you pretending to be a chick

  • @xccell24
    @xccell24 Жыл бұрын

    Amazing job!

  • @qrak_1576
    @qrak_1576 Жыл бұрын

    "death star surplus parts" moment was an instant like for me 🤣 Anyway, awesome idea. I like it 👍

  • @Vinlaell
    @Vinlaell Жыл бұрын

    Great work man!

  • @ypoora1
    @ypoora1 Жыл бұрын

    The wobbling honestly looks awesome. Very cyberpunk. Personally i would space the lines just a little bit further so the letters can be a bit taller.

  • @s001software9
    @s001software98 ай бұрын

    I just subscribed listening to the intro music. Cool project btw.

  • @ardonjr
    @ardonjr Жыл бұрын

    Okay this project was awesome.. never seen this channel before but I immediatly subscribed.

  • @felixman9691
    @felixman9691 Жыл бұрын

    This is awesome thanks for sharing!

  • @abcdefghijk3168
    @abcdefghijk3168 Жыл бұрын

    Love the idea

  • @ra226gaming
    @ra226gaming8 ай бұрын

    I love it! I had an idea to do this myself years ago (even using multiple mirrors on a hard drive motor) but I couldn't crack it because of the complication of needing a second motor/mirror rig to get the vertical scan. Your solution of just using angled mirrors on a single motor is simple and elegant, very nicely done! Can I now throw a challenge at you? There are high power 650 nm Red and 445 nm Blue lasers available... RGB is your obvious next step!

  • @marklatimer7333
    @marklatimer7333 Жыл бұрын

    I vaguely remember reading something about holographic lens being used in Supermarket POS scanners doing a similar job of scanning a large area without the need of expensive optics.