Results 21 to 30 of 72
-
03-13-2014, 08:49 AM #21
- Join Date
- Oct 2013
- Posts
- 219
peachy2.jpg
Have completed the PICAXE version of the light switch. All of it is completely alterable by changing the software. Runs great in the simulator................ it's a dynamic simulator and altering the LDR above and below a threshold switches the relay on and off alternately. Pushing the mode select push button turns the relay OFF and generates a nice little square wave which would drive the mirrors for scanning. Pushing the button again, puts it back into drip-valve mode. The PAUSE statements in the software will need altering to suit the real setup. The chip is programmed using a serial link. The transistor and relay can be replaced with a FET switch circuit of your choice. The software follows:-
low 0 'initialise outputs to OFF
low 4
main:
readadc 1, b1 'read value on pin 1 into variable b1
if b1 > 100 then 'if laser pointing at LDR
pause 1000
goto onoff 'turn the drip valve ON
endif
if pin3 = 1 then ' if button pressed scan-mode required
goto scanmode
endif
goto main
onoff:
high 2 'turn transistor ON
readadc 1, b1 'check if laser is demanding OFF
if b1 > 100 then 'only exit this loop if laser fires again
pause 1000
low 2 'turn transistor OFF
goto main
endif
goto onoff ' back around if no OFF signal from laser
scanmode:
pause 2000 'wait to prevent bounce
low 2 ' make sure drip valve is OFF
high 4 ' set mirror squarewave drive on pin 0
pause 100 ' alter this to suit the mirror slew rate
low 4 ' mirror square wave 0
if pin3 = 1 then
pause 1000
goto main 'exit scanmode if mode pushbutton pressed
endif
goto scanmode
-
03-13-2014, 12:36 PM #22
- Join Date
- Oct 2013
- Posts
- 219
peachy555-1.jpghere's the 555 light toggle switch. Just substitute a FET of your choice and the valve as load on pin 3 in place of the 2n2222. This circuit also works well in the simulator. Unfortunately the allowed file sizes are rather small. so it's only just legible. Compared with the first circuit, it's completely analogue.
-
03-13-2014, 05:45 PM #23
- Join Date
- Sep 2013
- Posts
- 308
Perfect!
Thanks Mike!!
I plan to give them a try soon!
-
03-13-2014, 06:02 PM #24
- Join Date
- Sep 2013
- Posts
- 308
Ok
I got the open scad of the o-ring valve done ( or close enough to try it)
here are some pics
Screenshot-1.jpgScreenshot-2.jpg
a few notes
- By placing a soft iron washer on the inside of each coil wire the moving magnet should stick to ether the closed position or the open position with no current.
In other words only a pulse of current is needed to switch the valve, after which no holding current is needed.
- The hole valve can be cut out of disks of plastic on a laser cutter or cnc router, each disk being stacked and glued to the next, making this a very hackable valve.
- I attempted to make everything driven by the variables at the beginning of the file, you can change things like magnetOD, wallThickness, TubingID etc.
alto i can see a few places that need improvement here.
- The hole thing can be cut out of clear acrylic allowing you to see the valve operate.
- the valve splits in 2 at the centre for easy cleaning.
- the valve coils should be wound or wired in oposite directions and wired together in series.
When driven with and h bridge they should push and pull on the magnet alternately.
So forward current looks like this SN >-ns-> NS
and revers current looks line this NS <-ns-< SN
Where the capitals are the coils and lower case is the magnet.
Here is the new code!!
Code:// ID and OD stand for inside and ouside diameter*** Ops all D should be R for radius!! my bad. explodeDistance = 1;// 1+5*$t; split = 3;//1+1*$t; laserCutterBuffer = 1; IDClearTubing = 4; wallThickness = 3;//+1*$t; tubingConnectorLength = 9; magnetThickness = 3; magnetOD = 6; coilWidth = 3; coilID = 4; coilOD = 8; pinOD = 1; pinLength = 10; pinThickness = .5; flowHoleID = 1; flowHoleOffset = 2; valveORingID = 3; valveORingOD = 4; valveORingThickness = (valveORingOD-valveORingID)/2; housingORingID = magnetOD+1+.5; housingORingOD = housingORingID +1; housingORingThickness = (housingORingOD-housingORingID)/2 ; outerORingGap = .5; lt3 = 0; lt4 = 0; module tubingConnector() { difference() { cylinder(tubingConnectorLength,IDClearTubing,IDClearTubing,center= true); cylinder(tubingConnectorLength+1,IDClearTubing-wallThickness+1,IDClearTubing-wallThickness+1,center = true); } } module magnet() { color("green",.9) cylinder(magnetThickness,magnetOD,magnetOD, center = true); } module pin() { color("purple",.9) union() { cylinder(pinThickness,magnetOD,magnetOD, center = true); translate([0,0,pinLength/2]) cylinder(pinLength,pinOD,pinOD,center = true); } } module pinAndFlowHole() { cylinder(10,pinOD,pinOD,center = true); translate([flowHoleOffset,0,0]) cylinder(10,flowHoleID,flowHoleID,center = true); } module coilSpoolWall() { difference() { color([0,1,0,0.5])cylinder(wallThickness,coilOD,coilOD, center = true); pinAndFlowHole(); } } module inerCoilShaft() { difference() { color([0,0,1,0.8]) cylinder(coilWidth,coilID,coilID, center = true); pinAndFlowHole(); } } module coilSpool() { union() { coilSpoolWall(); translate([0,0,wallThickness/2+coilWidth/2]) { inerCoilShaft(); translate([0,0,coilWidth/2+wallThickness/2]) coilSpoolWall(); } } } module valveORing() { difference() { cylinder(valveORingThickness+wallThickness,valveORingOD,valveORingOD, center= true); //cylinder(100,valveORingID,valveORingID,center= true); } } module inerFacePlate() { difference() { cylinder(wallThickness,magnetOD+1+wallThickness,magnetOD+1+wallThickness,center= true); pinAndFlowHole(); valveORing(); } } module outerFacePlate() { difference() { cylinder(wallThickness,magnetOD+1+wallThickness+wallThickness, magnetOD+1+wallThickness+wallThickness, center =true ); pinAndFlowHole(); } } module housingORing() { difference() { cylinder(housingORingThickness+wallThickness,housingORingOD+wallThickness,housingORingOD+wallThickness, center= true); cylinder(8,housingORingID,housingORingID,center= true); } } module housingORingSeat() { difference() { cylinder(wallThickness,magnetOD+1+wallThickness,magnetOD+1+wallThickness,center= true); cylinder(wallThickness+1,magnetOD+1,magnetOD+1,center= true); //pinAndFlowHole(); housingORing(); } } module inerHousing() { difference() { cylinder(wallThickness,magnetOD+1+wallThickness,magnetOD+1+wallThickness,center= true); cylinder(wallThickness+1,magnetOD+1,magnetOD+1,center= true); } } module outerHousing() { difference() { cylinder(wallThickness,magnetOD+1+wallThickness+wallThickness, magnetOD+1+wallThickness+wallThickness, center =true ); cylinder(wallThickness +1, magnetOD+1+wallThickness+outerORingGap, magnetOD+1+wallThickness+outerORingGap, center= true); } } module assemble() { tubingConnector(); translate([0,0,tubingConnectorLength/2+wallThickness/2*explodeDistance]) coilSpool(); translate([0,0,tubingConnectorLength/2+wallThickness*2+wallThickness/2+coilWidth*explodeDistance]) { inerFacePlate(); translate([0,0,wallThickness*explodeDistance]) color("red",.5)housingORingSeat(); translate([0,0,wallThickness*2*explodeDistance]) inerHousing(); translate([0,0,wallThickness*3*explodeDistance]) { inerHousing(); } translate([0,0,wallThickness*3*explodeDistance+split/2]) { magnet(); translate([0,0,magnetThickness/2+pinThickness/2]) pin(); rotate([0,180,0])translate([0,0,magnetThickness/2+pinThickness/2]) pin(); } translate([0,0,split]) { translate([0,0,wallThickness*4*explodeDistance]) outerHousing(); translate([0,0,wallThickness*5*explodeDistance]) outerHousing(); translate([0,0,wallThickness*6*explodeDistance]) outerFacePlate(); translate([0,0,wallThickness*7*explodeDistance]) coilSpool(); translate([0,0,(wallThickness*8+wallThickness/2+coilWidth+tubingConnectorLength/2)*explodeDistance]) tubingConnector(); } //translate([0,0,housingORingThickness+10]) //housingORing(); //translate([0,0,housingORingThickness+6]) // magnet(); } } module layoutSpoolAndConnector() { for (i = [0:1:2]) { translate([-i*(IDClearTubing*2)-i*laserCutterBuffer,0,0]) tubingConnector(); } translate([0,IDClearTubing+coilOD+laserCutterBuffer,0]) coilSpoolWall(); translate([-(coilOD*2+laserCutterBuffer),IDClearTubing+coilOD+laserCutterBuffer,0]) coilSpoolWall(); translate([0,IDClearTubing+coilOD*2+coilID+laserCutterBuffer*2,0]) inerCoilShaft(); } module laserCutterLayout() { //projection(cut = false) // { translate([40,0,0]) { layoutSpoolAndConnector(); translate([0,40,0]) layoutSpoolAndConnector(); translate([25,0,0]) { inerFacePlate(); translate([0,(magnetOD+1+wallThickness)*2,0]) color("red",.5) housingORingSeat(); translate([0,(magnetOD+1+wallThickness)*4,0]) inerHousing(); translate([0,(magnetOD+1+wallThickness)*6+laserCutterBuffer,0]) { inerHousing(); } translate([25,0,0]) { outerHousing(); translate([0,(magnetOD+1+wallThickness+wallThickness)*2+laserCutterBuffer,0]) outerHousing(); translate([0,(magnetOD+1+wallThickness+wallThickness)*4+laserCutterBuffer*2,0]) outerFacePlate(); } } } // } } laserCutterLayout(); assemble();
Last edited by rylangrayston; 03-13-2014 at 06:18 PM.
-
03-13-2014, 10:26 PM #25
- Join Date
- Sep 2013
- Posts
- 13
Here's the design I made and tested yesterday. (It does something but not as well as I had hoped)
This picture is only missing the coil (the coil really blocks the view):
DSCF2849.jpg
The magnets push an aluminum tube that slides into a tight fitting larger aluminum tube. When they are overlapped enough there is a hole in the outer tube that gets blocked, closing the valve.
Closed:
DSCF2850.jpg
Open:
DSCF2851.jpg
The tubes fit surprisingly well but do not give you a full seal when closed. I was expecting that with a difference in restriction between open/closed, I could tune down the flow with a second valve until closed means almost no drip, and open is a decent speed drip.
As it turned out, when I turn the other valve down to the point where the closed position stops dripping, it doesn't get much more drips on the open position. I had to leave the other valve completely open and adjust the height of the reservoir until I found a spot where open means a fast drip and closed means a steady drip, barely on the slow side. It might be useful for some prints, or maybe there is a way to tune it better. But for now I'm looking at other designs and I'll keep you guys updated.
-
03-14-2014, 03:06 AM #26
- Join Date
- Oct 2013
- Posts
- 219
Rylan , forgot to say, for the double coil design, you need to use a relay for output, with one coil across the N/O contacts and the other across the N/C contacts.
Last edited by mike_biddell; 03-14-2014 at 03:43 AM.
-
03-14-2014, 12:18 PM #27
- Join Date
- Oct 2013
- Posts
- 219
It occurs to me that if we had a spring loaded valve (a cone shape with a soft iron pole piece and behind it a single coil, so that the coil pulls the soft iron against the spring and the cone away from the seal) so that 0 current is zero flow, we could have a variable flow rate in addition to ON/OFF. The first picaxe circuit I posted could accomplish variable flow using the PWM output to drive the coil. A small voltage just cracks the valve open, and full voltage opens it fully. The flow rate could be set by the laser pulsing on and off with say 0.5 second pulses. The picaxe would count the pulses so that 1 pulse just cracks the valve and 10 pulses opens it fully. Hold the laser on for greater than 1 second would close the valve and reset the valve count. In this way, we could demand ON and OFF and the flow rate. This could all be accomplished with the first circuit I posted with a software change and a couple of tweaks.
-
03-15-2014, 04:39 AM #28
- Join Date
- Sep 2013
- Posts
- 13
A couple more designs, one worked for a while until the coil broke unexpectedly
#1
DSCF2859.jpg
The water comes in from the back, just off the centre (the aligning pin that attaches to the magnet needs to be centre).
The orientation of the valve lets gravity hold the magnet off of the o ring while its flowing, until you pulse the coil to get the magnet to stick to the o ring. The flow direction sucks the magnet to the o ring, so it stays until you pulse the coil in the opposite direction to open it again.
DSCF2860.jpg
The parts: (they're not exactly right but close):
DSCF2863.jpg
The coil/magnet wasn't being used as efficiently as it could, so it will hopefully use less power. (this one took 15V and 0.5A) Although this was only a pulse to get it to go from open to closed and vise versa. But the next one I tried pushing the limits of low power.
#2
DSCF2866.jpg
This one uses a piece of sheet plastic that bends onto an o ring to seal. The coil makes the magnets push onto the sheet to break the seal. This one didn't seem to have enough pressure from the flow to hold it shut consistently, but when I helped it seal, the coil pushed it open with 5V 0.17A.
I'm hoping a larger o ring will get more force to hold it shut, or maybe I just need to get the sheet positioned better.Last edited by erikk; 03-15-2014 at 05:53 PM.
-
03-15-2014, 02:36 PM #29
- Join Date
- Mar 2014
- Posts
- 13
Wow, I like the ideas presented in this thread. One thing I can't help but consider is that the peristaltic pump could be modified to use a stepper motor and we could eliminate the need for drips and mic inputs. A 32x or 128x microstepping driver with a sufficiently small step size motor would provide more than enough resolution. You could then just drive the pump to increase the water height as much as you like. It should be pretty precise since you can control the exact number of steps and therefore the exact volume of water that is pumped from the reservoir to the 3d printing tank.
It just seems to me that having a pump controlled by stepper eliminates much of the uncertainty of drip speed, timing, etc.
-
03-15-2014, 02:48 PM #30
- Join Date
- Oct 2013
- Posts
- 219
Ender 3v2 poor printing quality
10-28-2024, 09:08 AM in Tips, Tricks and Tech Help