Close



Page 3 of 8 FirstFirst 12345 ... LastLast
Results 21 to 30 of 72
  1. #21
    Engineer-in-Training
    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
    Attached Files Attached Files

  2. #22
    Engineer-in-Training
    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.

  3. #23
    Peachy Printer Founder
    Join Date
    Sep 2013
    Posts
    308
    Perfect!
    Thanks Mike!!

    I plan to give them a try soon!

  4. #24
    Peachy Printer Founder
    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.

  5. #25
    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.

  6. #26
    Engineer-in-Training
    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.

  7. #27
    Engineer-in-Training
    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.

  8. #28
    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.

  9. #29
    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.

  10. #30
    Engineer-in-Training
    Join Date
    Oct 2013
    Posts
    219
    Quote Originally Posted by cephdon View Post
    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.

    Great idea, I do believe I could do micro-stepping from my light switch picaxe circuit, without to many additional components

Page 3 of 8 FirstFirst 12345 ... LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •