CEB Press/Research Development/Controller Design

From Open Source Ecology
Jump to: navigation, search

Pressure Switch

Hey guys, I've noticed most recently on the "" that you guys are working on integrating a pressure switch into your CEB Press designs. I've started to do just the same. I've got the first prototype built and have code all ready to go. Just got my new pressure switch in the mail yesterday.

I was wondering if whomever is working on this is interested in sharing results as we go and collaborating.

I've also got some more ideas for a new board design, but would be interested to talk to those interested first.


I did many hours of searching and finally chose this one:

NPT connection 1000 - 3000 PSI adjustable sensing range $32 (+ shipping)

Those are the exact reasons I was thinking too. I've also heard that the magnetic sensors have been a bit finicky, and figured that for $32 I can avoid 3 magnets, their calibration and their possible failure, while also making it possible to auto-shut off all solenoids in the event of an unexpected pressure surge.

Also, feel free to check out the latest source here:

Comment from Zach

Since I have a pressure relief valve on mine, I was thinking of trying to use the pressure switch to signal the end of every step where a cylinder would bottom out as well as the end of the brick compression stage. Magnets would still be necessary for brick thickness as you mentioned and for mid stop of the secondary cylinder to prepare for compression, since those are mid cylinder positions. I only feel comfortable trying this method out since I have a pressure relief valve on the CEB Press itself. I am a little worried about additional stress to bottoming out cylinders, but everywhere I read said that if you shouldn't worry about it. This also means that I can have a auto shutoff in the event of a jam or something like that.

Comment from Chuck

TDH30 image.jpg

We could consider an analog pressure transducer like this one. Although it is more costly ($89),

  • It allows more flexible pressure monitoring/control
  • It has no moving parts, and therefore might be more reliable in the long run

One potential mode of operation is this: Control the compression stroke based on position feedback (might want to be more precise than existing Hall sensor) so that bricks are always made to the same dimension. But also continuously monitor the compression force required to reach dimension (via analog pressure transducer) and

  1. reject any brick made with unacceptably low force
  2. based on feedback of the recent trend of compression force, raise or lower the loading position of main cylinder (admit more or less raw material) to maintain near-ideal compression force.

Operating Cycle

CEB Cycle.png

The values on this cycle chart are for illustration and do not represent actual performance

(Plot generated from this Octave plotting script.)

The sensing zones shown above are incorrect (there are only two transitions per stroke). These plots need to be fixed, and some of the logic description details on this page need to be corrected. See also CEB_Press/Manufacturing_Instructions/Controller_Box/Source_Code

The left of the cycle chart starts with a completed block having just been raised from the chamber, and the drawer already filled with fresh dirt. Subsequently, in sequence,

  1. The secondary cylinder extends to eject the block. The soil starts to fill in the drawer.
  2. The main cylinder retracts downward, receiving dirt from the drawer
  3. The shaker motor operates
  4. The secondary cylinder retracts to mid-position, closing the chamber
  5. The main cylinder rises to compress the block.
  6. The main cylinder retracts slightly
  7. The secondary cylinder retracts fully, allowing clearance for the block to be ejected
  8. The main cylinder raises the completed block

The progress of the cycle is controlled on the basis of

  • position feedback from the main cylinder travel
  • position feedback from the secondary cylinder/drawer travel
  • preset time delays

The chosen approach for feedback is described under Sensors below.

Start-up (Initialization)


Sequence Logic

The sequence logic is implemented by a C++ program compiled in the Arduino development environment and uploaded to the controller board.

Upon power-up or reset, the first action executed by the Arduino board is to wait for a short time, inspecting to see whether it is communicating with a host computer over its USB serial port. (This capability is not used during normal operations.) After that time expires, it executes an initialization routine, then enters the operational loop.

Initialization routine

TBD Includes measuring main cylinder operating speed to establish compression/release timings used in the operational loop below.

Operational Loop

Starting from the left of the cycle diagram above,

  1. Begin extending secondary cylinder
  2. After drawer reaches midpoint, begin retracting main cylinder
    • midpoint is detected by secondary cylinder sensor going inactive
  3. When main cylinder is fully retracted and secondary cylinder is fully extended, start shaker motor
    • main cylinder retraction is detected by sensor going active (midpoint, zone 2), inactive, then active (zone 1) again
  4. After 2 seconds of shaker operation, begin retracting secondary cylinder to mid position
  5. When drawer reaches mid position start main cylinder compression stroke
    • compression stroke time is pre-computed once during initialization routine
  6. After a pre-computed compression time, begin retracting the main cylinder
  7. After a pre-computed release time, stop the main cylinder and fully retract the secondary cylinder
    • release time is pre-computed once during initialization routine
  8. When secondary cylinder is fully retracted, start raising the main cylinder
    • secondary full retraction detected by sensor going active
  9. When main cylinder is fully raised, repeat cycle.
    • main cylinder fully raised is detected by sensor going active, then inactive, then active again.

Controller hardware design


Although an early prototype controlled machine movements on the basis of timing alone ("open loop" control), this method is not robust against variations in power source flow, fluid viscosity, soil load, and so on. It is essential to use feedback of the machine position in order to get reliable operation.

There are three important positions in the main cylinder stroke

  • The bottom position, where soil is received for compression
  • The middle position, where soil is compressed
  • The top position, where the completed brick is ejected

There are three important positions in the secondary cylinder stroke

  • The retracted position, where the finished brick is raised for ejection
  • The middle position, where the brick is compressed by the main cylinder
  • The extended position, where
    • the finished brick is ejected to the output tray, and
    • soil is loaded from the hopper into the drawer

There are many approaches to feedback, including a continuous position encoder, a fluid pressure sensor indicating "bottoming out" pressure, etc. The method chosen is simple, robust, and can be adjusted mechanically (rather than requiring a software interface) to implement the design's sequence logic. An additional feature of this approach is that the cylinders are controlled by feedback so they do not reach their mechanical travel limits (i.e. "bottom out") during normal operation; this minimizes hydraulic power consumption and eliminates unnecessary mechanical stresses on the machine and power cube.

In this approach, there is only one sensor for each cylinder, and it is activated three times over the stroke. The text below is incorrect and needs correction; there are only two transitions over the stroke. See explanation at CEB_Press/Manufacturing_Instructions/Mount_Solenoid_Valve_Set_And_Controller_Box#2_Mount_Sensors_and_Magnets This is shown as "sensor zone 1", sensor zone 2", and "sensor zone 3" in the cycle illustration above. There is therefore an ambiguity in the sensor output itself: it is impossible to tell which zone is occupied when the sensor signal activates. However, within the operational cycle of the machine, the ambiguity is resolved. For example, when lowering the main cylinder after brick ejection, it is clear that the sensor will first be active in zone3, then inactive, then active in zone 2, then inactive, and finally complete the stroke at zone 1.

The hardware implementation of the sensor is with a stationary Hall-effect device and three magnets on the moving part. The sensor electrical output varies from (TBD) to (TBD) volts as the magnet passes by, and whenever the signal is greater than a threshold of (TBD) volts it is considered "active". Typically each sensor zone is approximately 1 inch (TBD?) wide. Overall, this should be a maintenance-free device: it is a non-contact technique that has no wearing parts and the electrical components are completely encapsulated.

Construction of the Hall-effect sensors is shown at Sensor Unit manufacturing instructions

Alternative sensor implementations are possible, and will be compatible with the controller if they provide a signal which is greater than threshold in each of the sensing zones and less than threshold in between.


There are three hydraulic circuits, as described at Hydraulic Design, with five solenoid coils:

  1. Main cylinder raise (extend) - valve 1 "A" coil
  2. Main cylinder lower (retract) - valve 1 "B" coil
  3. Secondary cylinder left (extend) - valve 2 "B" coil
  4. Secondary cylinder right (retract) - valve 2 "A" coil
  5. Shaker motor - valve 3 "A" coil

These are 12V DC solenoid coils, controlled by MOSFET drivers on the CEB interface board.

Operator Controls

The controller does not require any externally accessible operator controls for normal operation.

The interface board includes a reset switch, which is useful during setup and diagnostics.

Operator Indicators

The controller does not require any external operator indicators during normal operation.

The interface board provides 7 LEDs which are useful during setup and diagnostics:

  • 5 output monitor LEDs, one associated with each solenoid driver channel
  • 2 status LEDs, (TBD)

Control Processor

The controller is implemented using an embedded microcontroller executing a small program which executes the sequence logic.

The selected microcontroller is an Atmel AVR type on the Arduino Duemilanove circuit board.

The CEB interface board plugs directly to the Arduino controller through 0.1-inch pin headers.