scottbez1 / splitflap Goto Github PK
View Code? Open in Web Editor NEWDIY split-flap display
Home Page: https://scottbez1.github.io/splitflap
License: Other
DIY split-flap display
Home Page: https://scottbez1.github.io/splitflap
License: Other
On the shift_register branch (soon to be merged to master) the controller board plugs into an Arduino using the ICSP pins and pins D4-7, which leaves the board slightly unstable. Would be nice to add additional pin headers for a few analog pins opposite the digital pins so the shield has a more stable footing. Those pins don't need to connect to anything; just provide some additional support when plugged into an Arduino.
Would be nice to provide example code for how to make the display cycle through text without requiring a computer.
Should be fairly straightforward, and a great opportunity for someone to get involved in the project. Basically need an array of strings and then the code just needs to wait until all modules are idle before starting a timer that will advance to the next string.
Hey Scott,
I was wondering if I wanted to make it numbers based only. No characters. How would this affect the code and the size of the wheel hosting the cards and the entire mechanism?
Cheers,
Sam
Hi,
Is the experimental driver pcb safe to use ? The old 0.3 version is quit old and I can see there is a 0.5 tag :p
Moreover I ordered hall effect sensors, may I use it with the 0.3 design ? (it was my guess but it would be great to confirm it )
So as of today which version should I use?
Thanks :)
The sensor shift register's serial data input pin (attached to the "Exp. Out" connector) is left floating when no expansion board is connected. This isn't necessarily a problem (since we theoretically shouldn't be trying to read sensor input from modules that aren't connected), but can cause confusing behavior if you forget to lower the NUM_MODULES
value - the floating input will cause the control code to sporadically believe multiple "phantom" modules have missed or hit erroneous home positions (causing them to continuously try to re-calibrate).
However, for performance reasons, the control code only does certain things when ALL modules are idle (like update the LED status lights or read serial input), so if there are "phantom" modules that never go idle due to the floating sensor input then the controller may appear completely broken despite just a minor misconfiguration of NUM_MODULES
.
So it might be nice to just pull that pin low with a small pull-down resistor so that the controller won't freak out so much if you don't connect an expansion board and also forget to reduce NUM_MODULES
. Yes it's a $0.10 BOM increase for a resistor that's technically unnecessary, but considering the amount of confusion it may reduce, it's probably worth it.
I'd like to have the screen connected to ethernet so I can control it from the network. From what I see, it uses the spi bus from the ICSP connector. This prevent my ethernet shield from being compatible because it also need those SPI lines (I'm using a clone of this board: http://shieldlist.org/arduino/ethernet-v5). From what I read it could be possible to have it working by using SS pins (I have no experience with SPI bus). I'll try to work it out but if you have any tips for it feel free to share ;)
Now that a couple of kits have gone out, it could be cool to add another sidebar on the Wiki for users to add photos of their completed split flap projects (either from the kits, or from ordering their own parts)!
I think it would be pretty helpful for people embarking down this road to see how others have faired / see what variations people have added!
I will be working on mine over Christmas, so happy to kick this off after I have my finalized project if you think it's a good idea.
What do you think? (Love the project by the way :) )
As @mflmartin helpfully highlighted to me, the documentation around ordering the electronics components is somewhat outdated, and has a number of assumptions baked in that may not be obvious.
I see two main issues:
I've heard interest from a number of people about controlling a splitflap from wifi, and ESP8266 is the obvious default choice. It would be cool to see what's needed to get the code up and running on ESP8266 rather than an Uno, ideally with no hardware changes to the control board (at least initially; long term I could see a new revision of the control board that either takes an ESP board directly or plugs into something like a wemos d1 mini).
I spent a little time a while ago and got basic motor output working over hardware spi, but I recall having issues getting the sensor input working correctly over hardware spi but didn't investigate further. I also forget if I was running the control board at 3.3v or 5v.
In any case, opening this issue to centralize discussions around progress or investigations (cc @johnboiles)
Annoying issue but painful to fix correctly: early in the pcb design, the components were moved manually to a better location within the frame, but forgot to take into account the underlying grid when doing so. The outer dimensions are 48x48mm and the components are aligned to a 0.127mm (5 mil) grid, but there's no sane relationship between the board outline and the coordinates within the board! The board edges are X:46.584 -> 94.584, Y:23.546 -> 71.546. π’
Fixing this well will likely require a full re-layout, including traces which are mostly aligned to the grid, so this should probably wait until after the first prototype has been tested.
Probably makes sense to make the board edge aligned to the grid, so might want to resize it to an even multiple like 48.26mm (380 * 0.127), though keeping in mind that the mounting holes must remain exactly 40mm apart and the X-distance between the mounting holes and the GP2S60 sensor is important (though not precisely specified yet, see #9) based on the 3d model.
The press fit holes for the 5mm rod and motor shaft are slightly too small.
While the 5mm spool rod is nice (relatively low friction, can be cut flush with the enclosure walls), it's a little harder to find than M4 bolts and costs ~$1.
Might be interesting to instead use 2 M4 bolts pointed inwards from the left/right sides. This would prevent adjacent units from sitting flush next to each other, but this could actually help reduce some laser cutting costs since there would no longer need to be adjacent bolt head cutouts. The front piece could have an increased width to compensate for this so there isn't a visible gap from the front (maybe also extend the side tabs on the top/bottom pieces as well to keep the spacing consistent toward the back?). Depending on how supported the left side of the spool should be, might also need to increase the standard M4 bolt length past 12mm.
Additionally, this would remove two of three press-fit tolerance constraints, which should make for easier laser cutting.
I see the materials list includes:
5mmx100mm rod
but judging on the pieces I got from Ponoko, it seems like it should be 4.5mmx100mm.
Is this the case?
Hi Scott I've been reading the wiki and the instructions on the IMGUR websites but I still have some problems about the IR sensor.
Here some picture of the mark for the home position and how I placed the sensor:
I tried in this two way to make the sensor recognize the mark on the gear
Picture of the sensor
Picture of the sensor2
First mark on the gear using a screw
Second mark on the gear using black paint
They seems both of thems working, by now I'm using the second example with the black paint.
I place this mark close to the "D" letter but this is not what I wanted.
I have two question:
I also made a Video showing my problem when it is working.
If I type "@" the display seems work correctly because it spins until it reach the home position set to D letter but if then I type for example a letter which should be far from home position like "g", the display should spin for a while to reach the letter but it spin sometimes just 1 position and other time it spins again until home position.
I really don't get it where is the problem.
Here the video -> Video
Any help would be really helpful.
I'm really close to finish my first module and I would like to make others for my project but by now I'm stuck on this problem.
Thanks in advance for everithings.
Hey guys,
i already cut all the parts, mounted all together and I already pasted the vinyl.
I am thinking about the eletronics parts. and it's kind of expensive and takes too long to ship to brazil.
so i am wondering... Can i use more arduinos instead of the expansion board? has some way?
if i use the MEGA, could be possible to put more modules?
thanks!
I would like to help out with the project and can start with providing a Pokono-ready P2 sized svg file for v0.3.
order_v0.3_20d789c_P2.zip
Can't say I'd be much use on the programming and electrical side for now, but I am willing to flesh out the wiki and build documentation. I am very new to github but am willing to learn. :) -Daniel
Hi,
I assembled a board and tested it with one digit. Everything looks fine except the motor rotation which is reversed. A quick look in the code didn't reveal any setting for that. Any clue?
I have the 5v version by the way.
Github Splitflap Characters.pdf
This is more of a mental note for when I would make the jump to mass produce the split flaps.
I am intending on making a good number of these modules at work and is an understatement to say that I am not looking forward to making the cards. I have inquired at some vendors. I am waiting to hear back on all quotes, but ballpark seems to be ~$30/set @ 100 sets, ~$15/set @ 300 sets. As these modules are still experimental, I don't think it would make sense to buy these right now. That being said, I need to have these made sometime this year.
The main thing on my mind are these:
-Number of characters in a set (10, 40, 48, 52, 60 etc)
-Overall card shape (notch in the side like current design, or rectangle with just 1.5mm tabs sticking out)
-Overall card dimensions (size of bezel opening, spacing between spools, tab size, use of 3.2mm MDF)
Attempting to guess the future, I presume the spirit of being able to make these cards at home with only a badge punch and cutting jigs will mean the overall card dimensions stay the same. As far as guessing the number of characters in a set and card shape I see two paths:
I would opt to shift to a rectangle with tab sticking out design so that I wouldn't have to worry about spool sizes affecting the notch size and redesigning the front bezel (fit opening to new card width, add notch for spool to stick through) which wouldn't be a big deal. Would increase the perceived gap between characters.
Keep the current design shape and design the notch for a 60-character spool. Would maintain the current perceived gap between characters.
In order to detect the home position for closed-loop control, need to cut a hole/slot into the spool gear for the GP2S60 reflectance sensor to detect. This has worked well empirically with a hand-drilled hole (had to use a permanent black marker to color the inside), so just need to add it to the 3d model at the right location. A rough initial guess was accidentally committed with c2433e2, but the position should be double-checked against the finalized pcb layout.
I'm not sure the exact threshold, but in certain very bright direct-sunlight conditions the IR reflectance sensor seems to get saturated by ambient sunlight, preventing the modules from working correctly.
One fix might be to switch to using a hall effect sensor and magnet, rather than IR reflectance sensor. Some basic tests (not on an actual splitflap module, just a standalone test of magnet + sensor) of the AH1815-P-B ($0.70 at single quantity) paired with a 469-1027-ND Magnet Neodymium Iron Boron (NdFeB) N35SH 0.157" Dia x 0.098" H (4.00mm x 2.50mm) 5153G (Surface Gauss) ($0.41 at single quantity) were promising, and would also eliminate the small surface mount soldering required for the GP2S60 IR reflectance sensor ($0.93 at single quantity). It would add $0.18 of electronics cost.
With that combination, the AH1815-P-B activates reliably when the magnet is < 2.5mm away from the front surface of the sensor.
The hole in the spool would need to be made smaller for a good press-fit for the 4mm magnet.
This might also be a good time to consider moving the sensor board to the outside of the enclosure rather than inside, which would also resolve some clearance concerns between the flaps and the sensor board (the flaps currently can get very close to the 3-pin servo connector, which poses a risk of binding the spool). Given the sensitivity of the AH1815-P-B, this would require a cutout to allow the sensor to get close enough to the spool to activate, which would add a tiny cost for additional laser cutting. This would also make the sensor and spool visible from the outside, which would likely make initial sensor alignment easier.
Another sensor option would be to use the AH9250-P-B hall effect sensor instead, which is more sensitive, which reliably activates when the magnet is around 4.6mm away. That one also has a built-in pull-up resistor, which would eliminate the need for discrete pull-ups on the control board (saving a few cents). However, this is still probably not sensitive enough to go through the wall of the enclosure and gap to the side of the spool, meaning the enclosure wall still would need to be cut out. So it's probably better to just use the less sensitive sensor and put it closer to the spool/magnet for a more consistent/precise switching point.
There may be other usable hall effect sensors, but these were the two I happened to test.
When testing with the more sensitive AH9250-P-B sensor, I verified that it does not pick up any stray magnetic flux from the stepper motor during movement, even when held directly to the side/rear of the motor, so that shouldn't be a concern for either sensor.
I was looking at the design for gearless2, and I noticed the holes that are directly above and below the axle holes for the v0.3 design are no longer there. I presume the holes were for connecting modules together, but the gearless2 design lacks these holes? I can see that the lower holes had to go b/c the PCB was moved down there, but the upper holes likely could stay. Maybe the lower holes could be between the backstop bolt slot and the bottom plate holes?
Not sure if you had another idea in mind for connecting the modules, but I have added these holes back in my svg files.
Should be ~30-60 mil lower to hold flaps back a little longer before they flip down
Unfortunately the current PCB design is a little tricky for a beginner hobbyist to assemble due to the surface mount TQFP ATmega32U4 and micro USB connector which take some practice and patience to solder (the resistor pack is also tricky to solder, but that could easily be replaced by individual 0805s).
It might be interesting to design a variant that uses an Arduino Micro instead, with only through-hole parts. It would be more expensive but would make the electronics more approachable (Micro costs ~$25, minus the ~$8 you save by not purchasing the chip and peripherals standalone: resistors, capacitors, usb port, crystal, etc). I suspect it'd still be possible to fit within the 50x50mm desired size for low cost PCB production.
Hi, what are the pcb dimensions?
It seems the wiki hasn't been updated, it says the board is 48*96mm but what I quickly saw on gerber viewer is not corresponding (but as the board is not aligned with my grid I wasn't able to measure it properly).
Thanks :)
If setting up a standalone display, not driven by a computer connected via USB, the Arduino needs a power source. Since a 12V supply is already available for driving the motors, a simple solution would be to drop another pin header down from the control board to the VIN pin on the Arduino Uno. Then powering the 12V barrel jack on the control board would power the motors and the Arduino via its built-in 5V regulator.
Might want to add a jumper for this connection, so it can be disconnected if powering the Arduino via USB, though it is theoretically safe to connect both VIN and USB power at the same time: "The Arduino Uno board can be powered via the USB connection or with an external power supply. The power source is selected automatically"
I think it has to do with the way you export SVG from illustrator. You need to select the maximum decimal points.
Also the corners are slanted.
This makes this SVG, not suitable for production, whatever the method used (die cuts, laser, CNC).
Attatched corrected file, for future reference, in PDF. I would recommend to change it to PDF as well in your repository files. It is more reliable.
I also changed the corner radius to be just 3mm, as it is a good rounded measure, and it happens to coincide with my CR80 Cards. And the annotated 3mm is much clear to understand now.
[flapAnnotated_amended.pdf]
(Pending validation and approval by @scottbez1 )(https://github.com/scottbez1/splitflap/files/2406276/flapAnnotated_amended.pdf)
Hello,
I am trying to generate the svg file for laser cutting (I wanted to change thickness to 2.5mm, but it seems to be to small and it generates an error) so i kept 3.2mm but I am not able to get the expected size of 3.2mm insert holes. 3.2mm is not a standard size over here.
I am importing in fusion360 and it looks like 0.81mm.
I am no expert on Inkscape to find a precise measurement :(
Any idea why I cannot get it well imported in fusion360?
I will try on illustrator tomorrow.
Thank you,
I see the wiki shows and mentions you should have 3 bushings, but the design shown in the readme under "Latest Laser Cut Vector File: svg" only has 1
While receiving the parts for the project, I came across the power supply and I was wondering how many modules the 12V-6A power supply called out in the readme could safely support. Has someone measured the peak amount of amperage and total amount of energy the modules use when a module moves 39 characters forward (worst case regular operation, for example from 'B' to 'A')?
I am still waiting for my PCBs to arrive from seeedstudio, and would be interested in seeing the energy requirements of an individual module so that I could later extrapolate power requirements for large boards or determine the feasibility of a indoor/outdoor solar powered split flap display.
The Arduino should be able to provide its status updates (current state of each module and error counters) as a simple JSON object on a single line, to make it easier for control software to interpret and respond to it.
Also need to document the serial protocol in both directions.
The updated "space invaders" inter-module connector piece is too thin and snaps easily when trying to install it:
Will need to iterate on this to figure out a simple strong connection.
One idea is to use a rounded nub, rather than square, which should reduce the likelihood of damaging the nub when installing it. Might also be nice to make it slide into place along the flat axis (think retaining clip style) rather than trying to install it vertically down into place.
Was discussing support for Particle boards with someone over email; moving to the issue tracker to make that discussion public and keep a running log of progress/pitfalls of getting a splitflap running on Particle in place of an Uno.
Assuming they can be programmed with the Arduino IDE and they have hardware spi that's at least as fast as an Uno I think it should be doable.
The control board connects to the Arduino Uno by plugging into the ISP connector (for hardware spi access) and 3 digital pins (there's nothing particularly special about the choice of those pins IIRC). It also plugs into the VIN and GND pins, but you won't need to connect those (there's a ground connection on the ISP header, so no real need for another one, but it made sense to use a 2pin header rather than a single pin header for VIN by itself) - that just allows the motor power supply to optionally be fed to the Arduino's VIN if JP1 is installed, which makes it easy to run the Arduino without a computer connected via USB.
I just remembered that you'll probably need to edit spi_io_config.h since it currently interacts with the sensor and motor latch pins using pinMode as well as direct port manipulation. You might be able to get away with a digitalWriteFast or something to replace the direct port manipulation (OUT_LATCH_PORT and IN_LATCH_PORT), since I'm not sure if there's an easy drop-in replacement on particle boards.
Also, if you try running it on a particle and the motors end up missing steps, it might be worth trying a lower top speed by editing generate_acceleration.py to increase MIN_PERIOD_MICROS, and then run it to regenerate the acceleration curve (make sure the Arduino IDE is closed because it doesn't like files changing in the background).
The sensor input pins are on Port F, bits 4, 5, 6,7; however, by default JTAG is enabled, and according to the datasheet:
Port F also serves the functions of the JTAG interface. If the JTAG interface is enabled, the pull-up resistors on pins PF7(TDI), PF5(TMS), and PF4(TCK) will be activated even if a reset occurs
This seems mostly fine, as we can disable the JTAG mode at runtime using
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
However, experimentally it seemed like PF6 was also at 5V at startup, which is the TDO (JTAG Test Data Output) pin. If during reset this pin is driven high as an output (unlike the other JTAG pins which should be configured as inputs with the internal pull-ups enabled), this could prove disastrous for the GP2S60, which has a maximum collector current of 20mA whereas the ATmega32U4 can source up to 40mA. Two possible fixes are either to change the JTAGEN fuse (requires ISP header pins and a programmer which adds a lot of complexity) or modify the pcb to add a series resistor between the GP2S60 collector and PF6 to limit the maximum current if the pin is set as a high output during reset.
Its possible to save costs in Ponoko and other laser cutters by removing unneeded lines.
If two lines overlap then one can be removed.
I use the inkscape svg templates from Ponoko which scale well (rather than Illustrator tags).
In any case there are a number of lines that are redundant and only one needs to be cut.
Not sure best way to detect and remove from SVG or on export from openSCAD.
I suspect a separate process to remove manually identified lines might be simplest.
Hi Scott, I read through the 10-card numbers only issue and it got me to thinking about increasing the number of cards so that a user could have a number of reserved cards for symbols, colors, etc. It seems to me that the limitation is the physical size of the spool, and that the whole unit would have to be upsized to accommodate this. I may do a fork for a splitflapXL type project and mess around with the SCAD files a bit but I'm wondering if you have any thoughts or tips before I get into it.
This is a question about sending a message over serial to the units, hoping to get some clarification. Mostly code-related.
We have assembled everything we need to control one node/character from the Arduino. Upon powering up the unit, the purple lights flash and return to orange, giving us the message: 'gave up looking for homeβ. I've tested our sensor on a separate device and know that it functions. We can also get our single motor to rotate when we enter a '@' into serial. I assume the problem is that the sensor is not assembled behind the gear yet.
The question is, is that assumption correct? Also, do we need a minimum amount of nodes/motors attached for it to function properly?
Also, more importantly, how is the serial communication intended to be used? (i.e. what order did you intend the characters to be sent, eg. the '=').
Really appreciate your work in making a Split Flap Display!
hey guys! where i can find the pdf with the card updated and ready for cut?
i download this pdf in some post here but seems wrong size. (https://github.com/scottbez1/splitflap/files/1976770/Github.Splitflap.Characters.pdf)
anyone has the pdf of the sticker and the actual size for the pvc card (i am thinking in make with a laser cut in ps)
thanks!!
For ease of experimentation, especially for hobbyists who don't have the experience or desire to order custom PCBs, it would be nice to provide some sample Arduino code for driving a single splitflap module using a basic standard ULN2003A control board rather than the shift-register based custom PCB.
It should be pretty easy, as the SplitflapModule just operates on half of a uint8_t buffer for motor output and a single bit of a uint8_t buffer for sensor input:
SplitflapModule(
uint8_t &motor_out,
const uint8_t motor_bitshift,
uint8_t &sensor_in,
const uint8_t sensor_bitmask
);
inline void SplitflapModule::SetMotor(uint8_t out) {
motor_out = (motor_out & ~(0x0F << motor_bitshift)) | ((out & 0x0F) << motor_bitshift);
}
bool SplitflapModule::CheckSensor() {
bool cur_home = (sensor_in & sensor_bitmask) != 0;
bool shift = cur_home == true && last_home == false;
last_home = cur_home;
return shift;
}
It may even be possible to just instantiate a SplitflapModule
instance by directly passing e.g. PORTD
as the motor_out reference and e.g. PORTC
as the sensor_in reference, since SplitflapModule already safely writes all 4 bits to the motor_out reference in a single operation.
Would also be nice to provide a Fritzing circuit/breadboard diagram on the wiki for how to wire it up.
See if it's possible to use M4*12 button-head bolts for everything instead of having a mix of M3 and M4.
Hello,
Congratulations for your wonderful project !
I was wondering if it would not be easier to put the sticker before cutting the cards?
thanks
The electronics projects are currently Kicad 4, but Kicad 5 is the latest version.
It would be nice to update all of the files to Kicad 5 and then verify that the schematics, footprints, and pcbs, along with all the Travis CI integration, still work correctly.
It's possible for flaps to catch on the bottom of the window and jam up if they're swinging outward rather than hanging straight down.
Should add a backstop to prevent the lower flaps from swinging past 180 degrees - this prevents the swinging motion and helps get a louder "flap" noise. Currently using a roll of pennies (19.2mm diameter) resting on the bottom, with the center of the roll ~61 mm forward from the back wall.
Can make this with a perpendicular piece held in place with a bolt/captive nut coming up from the bottom, and tabs with extra long slots so that it can be adjusted forward/backward.
Hi friend, could you explain the code for your home sensor? I'm using a nema 17 engine instead of yours. I want help to understand the code of your home sensor. Could you explain me. Congratulations on the project.
I see the combined preview and splitflap.scad have been updated but no new release. as someone who hates openscad with a passion and wants to use fusion i need a svg or dxf to modify files, I am working on a smd version of the board and want to use the gear-less version of this, but the files seem to be missing?
I'm trying to export dxf/svg's from scad but it seems to be a very different scale.
hey guys, i am trying generate the svg from the py, but it shows:
splitflap znb$ 3d/generate_2d.py
Traceback (most recent call last):
File "3d/generate_2d.py", line 27, in
from svg_processor import SvgProcessor
File "/Users//splitflap/3d/svg_processor.py", line 16, in
from svg.path import (
ImportError: No module named svg.path
:splitflap znb$ 3d/generate_2d.py
Traceback (most recent call last):
File "3d/generate_2d.py", line 27, in
from svg_processor import SvgProcessor
File "/Users//splitflap/3d/svg_processor.py", line 16, in
from svg.path import (
ImportError: No module named svg.path
Hey, why are two main versions of the mechanics, in the download area?
one, in the zip, and other in a single svg?
it's very frustating, after spend some days cutting the mechanics, discover that is a slight different version in the same release.
https://github.com/scottbez1/splitflap/releases/download/v0.2-mechanics/combined.svg
https://github.com/scottbez1/splitflap/archive/v0.2-mechanics.zip
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.