DIY Laser Projector - Built from an old hard drive

  Переглядів 1,360,651

Ben Makes Everything

Ben Makes Everything

Рік тому

#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 UKposts 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.
@alexandredevert4935
@alexandredevert4935 Рік тому
Showing the prototypes and their issues is very educational. Great job !
@mr_ambo24
@mr_ambo24 9 місяців тому
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
@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 7 місяців тому
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 6 місяців тому
agree!
@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
@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 :)
@makergiovanni
@makergiovanni Рік тому
One of the best projects I have seen in the last months. Amazing!
@CharonSin
@CharonSin 9 місяців тому
I love the gritty analog look and the wobble effect!! Very retro sci-fi.
@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).
@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!
@ed.puckett
@ed.puckett 9 місяців тому
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!!
@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.
@awardfoto1
@awardfoto1 10 місяців тому
Content like this still makes UKposts great.
@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 ?
@dennisdecoene
@dennisdecoene Рік тому
Love this. Also kudo's for explaining your struggles to get this going and for your tenacity.
@dennistucker1153
@dennistucker1153 Рік тому
One of the first projects I thought of was a laser projector. Love it.
@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.
@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.
@komojo
@komojo 11 місяців тому
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!
@Foga001
@Foga001 Рік тому
Love it! Reminds me of the old monochrome green phosporous crt displays, what i always found very nice!
@Gold171
@Gold171 Рік тому
Excellent production quality for a small UKposts channel. Engaging and interesting from beginning to end. Nice work.
@iananderson267
@iananderson267 Рік тому
Awesome. Great to see how this may develop in the future. Keep the ideas coming, Ben,
@raveltammeleht6278
@raveltammeleht6278 2 місяці тому
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!
@ekojar3047
@ekojar3047 6 місяців тому
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
@WistrelChianti
@WistrelChianti 11 місяців тому
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.
@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!
@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!
@Luisvr05
@Luisvr05 Рік тому
I really hope to see more of this project. Awesome work!
@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 :)
@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.
@theblubus
@theblubus 8 місяців тому
Fantastic start to a channel! I'm eager to see what other projects you'll come up with :)
@sportbikeguy9875
@sportbikeguy9875 6 місяців тому
dude, insane build.... this is wild. im impressed
@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 :)
@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.
@apbosh1
@apbosh1 9 місяців тому
I can imagine the level of persistance needed to finish it. Incredible stuff. earned a subscriber here!
@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.
@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 9 місяців тому
I thought the same thing
@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 5 місяців тому
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.
@elliotmarks06
@elliotmarks06 11 місяців тому
Super cool! I'm glad to see this project getting the attention it deserves!
@ChristieNel
@ChristieNel 11 місяців тому
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.
@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
@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
@jeffreypomeroy6173
@jeffreypomeroy6173 8 місяців тому
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.
@heinerml2
@heinerml2 Рік тому
Love the project, presentation and videography. Keep it up!
@dongiovanni1993
@dongiovanni1993 11 місяців тому
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 11 місяців тому
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...
@gtcollection6933
@gtcollection6933 11 місяців тому
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 11 місяців тому
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 11 місяців тому
@@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).
@darkshadows65
@darkshadows65 3 місяці тому
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!
@tankerock
@tankerock 9 місяців тому
Your channel has potential. Keep it up Ben! 🙌
@drzboy101
@drzboy101 Рік тому
You invented a paperless laser printer. 😋 But seriously great job.
@benmakeseverything
@benmakeseverything Рік тому
Haha I guess you are right! thanks
@andresduranmolina7994
@andresduranmolina7994 Рік тому
Muy bueno tu proyecto, yo soy nuevo en arduino y aunque no entendí muy bien, me pareció increíble seguí así 👌🏻
@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.
@Electronics61
@Electronics61 11 місяців тому
Good luck and all the hardwork that went into into the project
@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) .
@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
@RobCCTV
@RobCCTV Рік тому
Magnificent project. Clear logical thinking. Very well done!
@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.
@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.
@Dragn7
@Dragn7 9 місяців тому
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?
@ivangutowski
@ivangutowski 10 місяців тому
;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 !!
@hermansims2296
@hermansims2296 Рік тому
I've watched a lot of your videos. This one was so awesome I finally subscribed. Thanks for the program.
@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.
@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?
@plhebel1
@plhebel1 4 місяці тому
Nice project, thanks for making the video.
@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 8 місяців тому
Great project! I'd also recommend using a Teensy 4.0 to replace the Arduino. @600Mhz it'll give you everything you want.@@benmakeseverything
@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
@jacobhudec7817
@jacobhudec7817 11 місяців тому
Love your channel. Can't wait to see what else create!
@_tealpaws
@_tealpaws Рік тому
I would love to make my own! Feeling really inspired by your channel.
@dave7038
@dave7038 9 місяців тому
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.
@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.
@vinylcabasse
@vinylcabasse Рік тому
very cool, unique project. excited to see what else you've done, subbed for sure.
@Bigbrank
@Bigbrank 9 місяців тому
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
@anonymstpbeach
@anonymstpbeach 11 місяців тому
That was awesome. Thank you for the time and work.
@antoines1341
@antoines1341 Рік тому
I've wanted to make this for so long. Good job !
@ericapelz260
@ericapelz260 9 місяців тому
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 8 місяців тому
Why’re you pretending to be a chick
@chakravarthyelumalai8408
@chakravarthyelumalai8408 8 місяців тому
Extremely awesome video. I'm sure it was lot harder than you make it appear to be. You rockk.
@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
@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.
@saemranian
@saemranian 7 місяців тому
Awesome, Thanks for sharing
@qrak_1576
@qrak_1576 11 місяців тому
"death star surplus parts" moment was an instant like for me 🤣 Anyway, awesome idea. I like it 👍
@divertechnology
@divertechnology 10 місяців тому
great video ben, ill see in future but im completely sure its a great add
@mbuter2553
@mbuter2553 Рік тому
Awesome video Ben! Can’t wait to see what ur making next.
@imrek
@imrek 11 місяців тому
Cool stuff man, thanks for the video.
@stevesloan6775
@stevesloan6775 Рік тому
I love that you said you have to see it in real life. Everyones sees it differently.
@robertoscalone8024
@robertoscalone8024 11 місяців тому
Hello Ben! Excelent work! Its a amazong idea! Congratulations!
@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.
@cylosgarage
@cylosgarage 2 місяці тому
This is dope. Love it
@iwanjirkuw8596
@iwanjirkuw8596 Рік тому
DUDE! You deserve at least my Like and Follow! 👍🏻😉 Good experiment! Love it!
@s001software9
@s001software9 5 місяців тому
I just subscribed listening to the intro music. Cool project btw.
@sterling_max
@sterling_max 6 місяців тому
excellent project!!! thanks for all the time you invested.
@scoggzap
@scoggzap 9 місяців тому
Man o man you are a genius! That seemed like a headache of a project.
@ardonjr
@ardonjr Рік тому
Okay this project was awesome.. never seen this channel before but I immediatly subscribed.
@coose7448
@coose7448 9 місяців тому
Its kinda cool how it jitters a little bit back and forth. Gives it cyberpunk vibe
@nosferatuohnezahn6630
@nosferatuohnezahn6630 Рік тому
Damn wtf that's awesome!! I grief for MORE!
@YousifFreestyle
@YousifFreestyle 11 місяців тому
This is an amazing feat! Well done!!
@P8FPV
@P8FPV 11 місяців тому
The intro music kinda reminds me of Airwolf!! Cool project for sure 👍
@TheBaldr
@TheBaldr Рік тому
I love the wobbling effect, it looks like this thing came from the Matrix.
@0p3nh4ym3r
@0p3nh4ym3r Рік тому
Great video and project! Good job, dude.
@londonnight937
@londonnight937 Рік тому
Love the project!
@SobujKhan-xj9cs
@SobujKhan-xj9cs 11 місяців тому
respect for your hard work
@TheOneG36
@TheOneG36 Рік тому
This intro was epic loved the sound ;)
Building a TRUE 4k home cinema projector (it’s awesome)
28:20
DIY Perks
Переглядів 9 млн
Forget WiFi! This Wireless Method is WAY Better?
12:14
GreatScott!
Переглядів 276 тис.
Дурнєв дивиться сторіс ZОМБІ #47
53:48
Aleksey Durnev
Переглядів 724 тис.
Eurovision Song Contest 2024: First Semi-Final (Live Stream) | Malmö 2024 🇸🇪
2:23:45
Что будет с кроссовком?
00:35
Аришнев
Переглядів 2,5 млн
Unlock the Potential of Your Old Hard Drives: Build a Drone Engine!
8:12
Hacking a weird TV censoring device
20:59
Ben Eater
Переглядів 2,9 млн
ESP32 Laser Projector with stepper motors | StanleyProjects.com
11:52
StanleyProjects
Переглядів 224 тис.
DLP & LCD & Laser PROJECTOR - How They Work + TEARDOWN
13:25
Electronoobs
Переглядів 369 тис.
Homemade PCBs with Fiber Laser - 0.1mm Clearance
44:57
Electronoobs
Переглядів 216 тис.
I tried to make a camera sensor
30:00
Breaking Taps
Переглядів 262 тис.
Try these 16 Brilliant ESP32 projects!!!
11:18
ToP Projects Compilation
Переглядів 513 тис.
Automated Hydrogen Generator
17:21
Hyperspace Pirate
Переглядів 1,2 млн
Vortex Cannon vs Drone
20:44
Mark Rober
Переглядів 13 млн
iPhone - телефон для нищебродов?!
0:53
ÉЖИ АКСЁНОВ
Переглядів 3,8 млн
С Какой Высоты Разобьётся NOKIA3310 ?!😳
0:43
Airpods’un Gizli Özelliği mi var?
0:14
Safak Novruz
Переглядів 861 тис.
Vortex Cannon vs Drone
20:44
Mark Rober
Переглядів 13 млн