DIY Laser Projector - Built from an old hard drive

  Рет қаралды 1,427,648

Ben Makes Everything

Ben Makes Everything

Күн бұрын

Пікірлер: 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".
@PflanzenChirurg
@PflanzenChirurg Жыл бұрын
@@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 Жыл бұрын
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 Жыл бұрын
agree!
@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 :)
@awardfoto1
@awardfoto1 Жыл бұрын
Content like this still makes KZbin great.
@alexandredevert4935
@alexandredevert4935 Жыл бұрын
Showing the prototypes and their issues is very educational. Great job !
@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.
@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 ?
@CharonSin
@CharonSin Жыл бұрын
I love the gritty analog look and the wobble effect!! Very retro sci-fi.
@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 :)
@mfx1
@mfx1 Жыл бұрын
Two camera setups where the presenter only looks at/talks to one camera just look weird and I find them off putting.
@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).
@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
@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.
@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
@raphanunu6912
@raphanunu6912 8 ай бұрын
Just one precision regarding the use of constant current for driving Leds. Led's behaviour is similar to Zener diodes, it "limits" its own voltage generating lot of heat after the elbow is reached, this is why controling the current is much more practical.
@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.
@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.
@Gold171
@Gold171 Жыл бұрын
Excellent production quality for a small KZbin channel. Engaging and interesting from beginning to end. Nice work.
@lowellabeles5782
@lowellabeles5782 Жыл бұрын
One of the Coolest projects ive seen!!!
@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 :)
@raveltammeleht6278
@raveltammeleht6278 9 ай бұрын
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!
@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.
@Afrotechmods
@Afrotechmods 4 ай бұрын
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 4 ай бұрын
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.
@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...
@MARKE911
@MARKE911 Жыл бұрын
I am jealous at your knowledge and skills. I enjoy watching.
@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!
@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!
@makergiovanni
@makergiovanni Жыл бұрын
One of the best projects I have seen in the last months. Amazing!
@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 Жыл бұрын
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!
@iananderson267
@iananderson267 Жыл бұрын
Awesome. Great to see how this may develop in the future. Keep the ideas coming, Ben,
@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.
@redusercolor
@redusercolor Жыл бұрын
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?
@redusercolor
@redusercolor Жыл бұрын
@@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
@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.
@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.
@TheBaldr
@TheBaldr Жыл бұрын
I love the wobbling effect, it looks like this thing came from the Matrix.
@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 11 ай бұрын
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.
@dj13579100
@dj13579100 Жыл бұрын
DVD burner lasers have excellent beam quality. They emit red light and are quite powerful.
@drzboy101
@drzboy101 Жыл бұрын
You invented a paperless laser printer. 😋 But seriously great job.
@benmakeseverything
@benmakeseverything Жыл бұрын
Haha I guess you are right! thanks
@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.
@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.
@Electronics61
@Electronics61 Жыл бұрын
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) .
@ra226gaming
@ra226gaming 11 ай бұрын
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!
@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.
@ThatGuy_33
@ThatGuy_33 Жыл бұрын
This is basically an analog CRT display and it’s incredible
@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).
@apbosh1
@apbosh1 Жыл бұрын
I can imagine the level of persistance needed to finish it. Incredible stuff. earned a subscriber here!
@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
@ekojar3047
@ekojar3047 Жыл бұрын
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
@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.
@elliotmarks06
@elliotmarks06 Жыл бұрын
Super cool! I'm glad to see this project getting the attention it deserves!
@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
@RinoaL
@RinoaL Жыл бұрын
This is really cool!
@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.
@ladronsiman1471
@ladronsiman1471 Жыл бұрын
Very nice I designed a similar device 20 years ago ..I could not get the mirrors flat on the faces faces of the octagonal wheel ..So i decided to go with the galvanometer solution.Back in the day there was no 3D printing .I i had to do all by hand ..and a small lathe .It got me nowhere ..So i commend you for your effort
@RobCCTV
@RobCCTV Жыл бұрын
Magnificent project. Clear logical thinking. Very well done!
@anduranm
@anduranm Жыл бұрын
Muy bueno tu proyecto, yo soy nuevo en arduino y aunque no entendí muy bien, me pareció increíble seguí así 👌🏻
@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?
@stevesloan6775
@stevesloan6775 Жыл бұрын
I love that you said you have to see it in real life. Everyones sees it differently.
@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?
@dennisdecoene
@dennisdecoene Жыл бұрын
Love this. Also kudo's for explaining your struggles to get this going and for your tenacity.
@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 Жыл бұрын
Great project! I'd also recommend using a Teensy 4.0 to replace the Arduino. @600Mhz it'll give you everything you want.@@benmakeseverything
@TylerSpurgeon
@TylerSpurgeon 6 ай бұрын
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 6 ай бұрын
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!
@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.
@Foga001
@Foga001 Жыл бұрын
Love it! Reminds me of the old monochrome green phosporous crt displays, what i always found very nice!
@roberttriner6242
@roberttriner6242 Жыл бұрын
Try repurposing the optical parts from a grocery store POS scanner. done.
@coose7448
@coose7448 Жыл бұрын
Its kinda cool how it jitters a little bit back and forth. Gives it cyberpunk vibe
@pyne1976
@pyne1976 Жыл бұрын
If you were on the stock market... i'd buy shares.
@Masterpj555
@Masterpj555 3 ай бұрын
cool raster scanning!
@adamcartermi5
@adamcartermi5 Жыл бұрын
I have been doing some thinking. It is possible to synthesize excited bromide in an argon matrix. Yes, it's an excimer frozen in its excited state. It's a chemical laser but in solid, not gaseous, form. Put simply, in deference to you, it's like lasing a stick of dynamite. As soon as we apply a field, we couple to a state that is radiatively coupled to the ground state. I figure you can extract at least ten to the twenty-first photons per cubic centimeter which will give one kilojoule per cubic centimeter at 600 nanometers, or, one megajoule per liter.
@jeffreypomeroy6173
@jeffreypomeroy6173 Жыл бұрын
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.
@lalbabugupta8380
@lalbabugupta8380 Жыл бұрын
first time i will blame youtube for showing this awsome dude after years..
@jefgirdler7232
@jefgirdler7232 Жыл бұрын
I love the complete lack of any sort of distortion, de-focus or other destruction of the image when you move the text around, even around corners. It makes it almost holographic in nature.
@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 !!
@P8FPV
@P8FPV Жыл бұрын
The intro music kinda reminds me of Airwolf!! Cool project for sure 👍
@dnitchke
@dnitchke Жыл бұрын
you said that you have a CNC mill. you will get more stability if you make the spinning parts out of Aluminum instead of plastic. You already made proof of concept. Also the Al part can be made with thinner wall thicknesses. balancing the spinning part you made would be easy.
@SetTheCurve
@SetTheCurve Жыл бұрын
Imagine “I should make a laser scrolling device” and actually spending the rest of the year making it instead of doing something else
@sportbikeguy9875
@sportbikeguy9875 Жыл бұрын
dude, insane build.... this is wild. im impressed
@ted_van_loon
@ted_van_loon Жыл бұрын
as some advice for you if you make a future version to make it work better and much safer and cheaper. the simple solution is to use a powerfull led and 2 lenses(I actually used a similar method to get my
@IraQNid
@IraQNid Жыл бұрын
There are short throw SD and HD Pico Laser Projectors for watching movies and such. Some are standalone while others are incorporated into the chassis of a computer, smart phone, etc. It might not be what you were looking for but worth mentioning.
@darkshadows65
@darkshadows65 9 ай бұрын
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!
@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!
@Rob_65
@Rob_65 Жыл бұрын
The idea of creating horizontal scanlines is mind blowing. Coming up with this means you must be some ingenious mind 🤭 All fun aside; it won't be long before young kids don't even realize that it all started with scanned images, although the original Nipkow disc used to have vertical scan lines instead. This is a cool build and definitely not an easy project to complete 👍
@anonymstpbeach
@anonymstpbeach Жыл бұрын
That was awesome. Thank you for the time and work.
@Poult100
@Poult100 Жыл бұрын
I actually like the jitter. It reminds me of the original hand-drawn cartoons where moments of stillness were diliberately given 'emotional tremor' 😊. Anyway, I think for an arduino, you have hit the best out of it and maybe an ESP, same price now(ish) and would help you out. Well done. A lovely project well described!
@marko-master
@marko-master Жыл бұрын
Hi, My name is Serg, and I'm from Russia. Sorry for my bad english. I also like to invent various devices, but I don't have the resources to implement my inventions. I watched this video, and in the past I've same idea) You have 3D printer, and milling machine and have middle result... Sorry, but I think you can do this beter. My idea, you need have 2 drive from HDD. 1st for X-axis, 2nd for Y axis. And you need throw out the encoder and create more accurate positioning system. Use magnet from neodim with diametrically magnetized, and couple analog hole detectors, for each drive. You need install hole detector 90 degrees apart. Also you need use microcontroller for each position system. Addition microcontrollers helps callculate position, and send result for parallel interface on main microcontroller. The main microcontroller gets angles from two microcontrollers X and angle Y, and understand position of the laser beam. Also you can use RGB prisma, and connecting Red, Green, Blue laser. But for main microconntroller need use chip with big memory, for remember array. R(8 bit), G(8 bit), B(8 bit) = 640 x 320 pixels (614400 byte for ich frame), x 25 frames par second = equals = 15360000 bytes (or 14,6484375 Mbyte = for 1 second animate).
@benmakeseverything
@benmakeseverything Жыл бұрын
Hi Serg, thank you for your suggestions. I am looking at ways to improve this design in the future. I might use multiple lasers in the next version for additional resolution. I did consider using multiple motors, but one of the advantages of this design was only having one moving part.
@TqSNv9R0iG5Ckxew
@TqSNv9R0iG5Ckxew Жыл бұрын
I wish KZbin was set up like the New York Stock Exchange because this channel has a bright future.😎
@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.
@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!!
@TheWorldBelow360
@TheWorldBelow360 Жыл бұрын
Building an approximate inverse of the JWSP is bound to have some bland imperfections along the way. Very relatable explanations!
@OfficialyMax
@OfficialyMax Жыл бұрын
I'd love to see a sort of laser show being done with this sort of thing, having it react to music and do effects based on its frequency and such.
@EmmanuelJonathan-sk5iy
@EmmanuelJonathan-sk5iy 16 күн бұрын
i love the project its really helped me with mine
@notamouse5630
@notamouse5630 Жыл бұрын
Awesome project, but the safety briefing is missing something. Green DPSS lasers have an infrared pump that is often not filtered because the manufacturer was a cheapskate. it will still burn retinas with that infrared and that infrared is more powerful than the laser typically. Fortunately many green laser glasses filter that, but a 5mW green laser might not be as safe as it seems.
@benmakeseverything
@benmakeseverything Жыл бұрын
You're correct. In the end I used a non-DPSS green diode, but yes, I'm aware that the DPSS ones emit IR.
@madboyjv
@madboyjv Жыл бұрын
Excellent project and very well documented, it gives me very good tips to learn. Congratulations 👏 👏
@SatellaNNW
@SatellaNNW Жыл бұрын
Very interesting prototype. It would be something usefully in the near future. Thanks for sharing this toys.
@feintha
@feintha Жыл бұрын
Honestly, the jitter kinda gives it its own charm. You should keep it!
@andrewlee2344
@andrewlee2344 Жыл бұрын
Wow that was an Amazing amount of hard work and effort, love the Concept, Reminds me of the Movie Hardware, that sort of 80s Sci-Fi Perspective of the World, im looking at making a Miniature GDI Mech, Titan from C&C Tiberium Sun, so lots of servos, i bought a small laser diode for the Cannon, I really enjoy the Creativity of the People on KZbin.
@qrak_1576
@qrak_1576 Жыл бұрын
"death star surplus parts" moment was an instant like for me 🤣 Anyway, awesome idea. I like it 👍
DIY Laser Image Projector (100ft+ Range!)
20:08
Ben Makes Everything
Рет қаралды 466 М.
How to make PROJECTOR Full HD
6:23
HAMMERLAND
Рет қаралды 3 МЛН
За кого болели?😂
00:18
МЯТНАЯ ФАНТА
Рет қаралды 3,1 МЛН
МЕНЯ УКУСИЛ ПАУК #shorts
00:23
Паша Осадчий
Рет қаралды 5 МЛН
ТВОИ РОДИТЕЛИ И ЧЕЛОВЕК ПАУК 😂#shorts
00:59
BATEK_OFFICIAL
Рет қаралды 6 МЛН
KVANT Clubmax 2000 & TARM2 I MIROXX LaserShow I 2017
1:13
miroxxLASERSHOW
Рет қаралды 91 М.
Making a floating display
14:45
Maker Mac70
Рет қаралды 89 М.
Bizzare Shifter
18:04
upir
Рет қаралды 410 М.
How to make a 16x16x16 LED CUBE at home with Arduino platform
20:09
Malt Whiskey
Рет қаралды 4,3 МЛН
Rotating Display pico - how to make a POV display controlled by a Raspberry Pi Pico. DIY.
16:35
Making a PCB Motor spin 30,000 RPM FASTER
13:41
Carl Bugeja
Рет қаралды 1,8 МЛН
Automated Hydrogen Generator
17:21
Hyperspace Pirate
Рет қаралды 1,6 МЛН
ESP32 Laser Projector with stepper motors | StanleyProjects.com
11:52
StanleyProjects
Рет қаралды 245 М.
Smallest 4K 120fps Camera Possible
27:10
BPS.space
Рет қаралды 85 М.
A Combat Robot Weapon that NEVER STOPS SPINNING
14:30
Maker's Muse
Рет қаралды 344 М.
За кого болели?😂
00:18
МЯТНАЯ ФАНТА
Рет қаралды 3,1 МЛН