With Instructables you can share what you make with the world, and tap into an ever-growing community of creative experts.
I didn't see the two DACs, that's cool! If they can be set/latched synchronously, the mcp4822 would not be required... Let me know it that works! Regarding the analyzer, I would prefer to clean the code up a bit before putting it to Github. And I had to patch the FFT of the audio library to remove timing glitches.
I cleaned the code up and uploaded it to:https://github.com/DeltaFlo/LaserProjector/tree/ma...I did not try to run it again, since I don't have an audio source right now, but I think it should work. You need to create a small audio input conversion circuit if you want input from a normal RC jack, look here:https://github.com/PaulStoffregen/Audio/blob/maste...I myself used the DAC output of a WTV020sd16p, so I did not need that conversion.For the best performance, you need to get my patch of the Audio library, I linked it in the .ino file.
Yes, but since it is an analog signal, this just means that the galvo will not be moved to the maximum position/angle. So instead of a full 10V positioning range, we just move in a 4.096V range. No harm, just a smaller projection aperture/angle.
ah and regarding the batteries, that can be tricky, since the Galvos need bipolar power -15 to 15V. Probably you could build it with two 12V batteries and take ground from the center of the batteries connected in series. But I don't know if the galvos driver cards will accept 12V instead of 15V...
Its mainly the cost of the galvos (100 Euros on Ebay), DAC 4 Euro, Laser Pointer 5-20 Euro, Arduino Nano (clones start at 8 Euros). When building the amplifier board, add 20 Euros for those parts. I'm not available to build it for you, sorry!
I am wondering if this motor would work:http://www.ebay.de/itm/2430-7200KV-4P-Sensorless-B...with 2mm to 5mm adapter and then 5mm to 8mm coupler?I have trouble finding a cheap brushless motor with 5mm shaft on ebay.de
I used a 3.2, but you should get a 3.5, I think. There is no reason to get a Teensy 3.2, because it is not much cheaper than the 3.5. The source code for the Laser works out of the box, the only difference is that the Teensy is 3.3V so you need to change the gain in Laser.cpp and you need to change the timings because the Teensy is much faster.Regarding the spectrum analyzer, I don't have plan for an instructable at the moment, but I can send you the source via private mail if you want.
That's really nice of you! But I don't really need it since I am not going to build another one. Big thanks anyways!
Cool! I like the oscilloscope idea!
You can also invert x in the code, there is a #define in Laser.h to flip in x and y direction.Funny, I actually did the same, the projector shows date/time, weather report and per date infos onto my bed room wall. I added Wifi so that it can get weather and other infos from the web.
You can draw multiple lines using multiple calls toDrawing::drawString(text, x, y);inside of a loop. The more you draw, the slower it gets ofcourse.
By the way, I really like the PCB you designed. That is completely outside of my skills!
A faster micro controller helps a bit, I am using a Teensy 3.3 (or nowadays a 3.5). The nice thing is that it is almost 100% compatible with the arduino. But don't expect it to get much smoother (maybe a factor of two faster), the final limit are the galvos. When they are driven too fast, the lines get non-linear. You can try that with the Arduino already, if you change the quality parameter in Laser.h it will send less intermediate points and you can see the non-linear movement.A Teensy works very nice to communicate with the esp over serial because it has two hardware serial lines.
Cool project! I am thinking of using a Teensy 3 (fast arduino compatible micro controller) instead of the propeller... Is it really required to use two SPIs to control the two strips, or would it work to use a single SPI and controll all LEDs with it (and keep the LED strips connected in a row)? I also saw there are APA102 strips with 144 LEDs per meter, I hope I can use such a strip to increase the resolution further.What do you think?By the way, do you stream the image from the SD card or do you read it fully into the memory of the propeller?
I just saw that the Teensy 3 can do 2 or even 4 SPI outputs for APA102 at the same time using FastLED, as given here:https://github.com/FastLED/FastLED/wiki/SPI-Hardware-or-Bit-banging
Congratulation! Regarding the pin 1, you are right, that is always on the left of the half circle (or directly indicated by the dot). The name is flipped by the Fritzing tool automatically.
The Nano does not have enough memory and is too slow to handle the interactive part. I did some experiments with a Teensy 3.2 and an ESP8266 so that you can draw something on a HTML page and it sends the drawing via HTTP post. That works but is not fast enough to run at interactive framerates.Maybe a Photon with buildin Wifi would be fast enough. Alternatively it surely can be done with a RasberryPI.
Well, the laser can only draw lines, so you will have to create lines in Processing and send those back to the Arduino. The Mega has 8 KB SRAM, so if you can use maybe 4KB of it for a buffer, it can store 1000 points (4 bytes per point). Since you want to communicate with Processing while drawing with the laser, it might get tricky to communicate via serial and at the same time draw with the laser. Maybe you could rewrite the laser drawing code to run in an interrupt, but I doubt the Mega is fast enough. I guess upgrading to a Teensy would do the job, but would still require some interrupt magic to get both serial and laser running in 'parallel'.
Yes, I2C is too slow and a dual channel DAC is easier to latch synchronously. And with the MCP 4822 no extra components are needed. Thanks for the details!
Great! Which galvos/laser pointer did you use?
I cleaned up the script a bit and added it to Github, I hope it helps you guys:https://github.com/DeltaFlo/LaserProjector/blob/master/Scripts/convertGCode.py
I will see what I can do... It is not very generic nor cleaned up. I guess without cleanup it raises more questions than it helps.
I upgraded to 1.6.12 and worked around the problem, which indeed is a compiler bug. The fixed version is on GitHub.
Look for a laser pointer powered by three 1.5v coin cell batteries. I did not buy mine, it was an advertisement present.
To get nice 'linear' lines, I have to split each line into small segments, otherwise the galvos move non-linear and too fast. So although my objects have less than 800 points, the overall positions that the galvos move to are more than 800 points on many objects. Another thing to consider is that the laser on/off delay is 400ns (for my laser pointer), so each separate contour cost extra on/off time.And the 20k does not really mean that you can go 20k from 0 to 4096, it only means moving 20k times in small fractions.
The nodal points are less visible to the human eye than to the camera. The reason for them is that the laser pointer stays longer at these points. It is all a tradeoff between speed and visible quality. You can play around with the parameters in Laser.h. If you reduce the waiting time, you will get less straight lines but also less nodal points. Upgrading to a faster microcontroller also helps, e.g. a Teensy 3.2 can be used as a drop-in replacement.
I wrote a Python script that transforms gcode to my hex code. The hex code is really simple, just 15bit for x and 16bit for y and one bit for laser on/off.
Arduino Laser Show with rea...View Instructable »
Join 2 million + to receive instant DIY inspiration in your inbox.
© 2016 Autodesk, Inc.