Dual-Motor SIP&PUFF Controlled Kayak System
by kayakdiver in Circuits > Assistive Tech
15974 Views, 54 Favorites, 0 Comments
Dual-Motor SIP&PUFF Controlled Kayak System
A highly disabled (quadriplegic) person can fully control this kayak via a SIP & PUFF Switch!
My design is a stand-alone fixture consisting of a Deck Plate that can be fastened to ANY kayak. Off each end of the plate is a pontoon which rides above a fixed direction trolling motor. Each system has two pontoons and two trolling motors. There is no need for a rudder or any mechanism to steer the trolling motors, as turning is accomplished by varying the speed of one or the other trolling motors.
The Motor Control Program is entirely controlled by a single SIP&PUFF switch!
The on-board Arduino Duemilanove Microcontroller puts the Motor Driver into Serial Input Control Mode and accepts Sip&Puff Switch inputs from the Rider.
It then sends appropriate Serial Commands to the Motor Driver to operate the two Drive Motors.
Split-second (0.1 - 0.6 seconds) Sips and Puffs control Left and Right Turning, respectively, and slightly longer (0.6 - 2.5 seconds) Sips & Puffs control REV and FWD movement.
Even longer Sips and Puffs Stop the motors or command them equally to Full Speed. Steering is accomplished via differential motor speed.
Advantages & Safety Features of the Design
The Safety Observer
At any time, the Safety Observer can (turn on the RC Transmitter and) transmit a Full Throttle command which the Arduino detects via this Receiver Channel being connected directly to it.
The Arduino then sends Serial commands to the Motor Driver to put it into RC Input Control Mode.
The Safety Observer now has full direct control of the Motor Driver via the AILERON and ELEVATOR channels of the Receiver being connected directly to the RC Inputs of the Driver (in MIXED Mode). The kayak is now essentially a large robot.
If the Safety Observer decides to pass control back to the Rider, a Throttle Off command is Transmitted, or the transmitter is simply turned off. The Arduino detects this condition and sends Serial Input Control Mode Commands to the Motor Driver giving control of the Motor Driver back to the Rider via Sip&Puff inputs into the Arduino. Note that the Arduino controls the Motor Driver via Serial Commands Only.
The Rudder Channel of the Receiver is reserved to actuate high-current switches which will physically disconnect the Drive Motors from the Motor Driver. This FAIL-SAFE feature would only be used in the case of an unlikely catastrophic failure of the Motor Driver (they tend to fail to Full On). The second photo below shows this feature of the Motor Controller. The switches are mounted in opposing directions so that actuating the servo situated between them causes both switches to move to the OFF (or ON) position at the same time.
Parts and Assembly
My total cost for this project so far, not including the Spectrum DX7 Transmitter, is around $1300, with the biggest expenses being: Motor Driver ($430), 2 Min Kota Trolling Motors ($240), Aluminum ($135), Battery ($90), and Charger ($60). Also: 32 LEDs, Various Cables, Connectors, Switches, and I.C.s ($175+), RC Receiver ($60), Cam Bolts ($40), Backup Arduino uController ($35), etc... Note that I actually did make it all the way through my Design & Development process without blowing up the original Arduino!
Although I have been contemplating this project since 2006, obtaining the Arduino uController really gave me a jump-start, and I officially started working on it in mid-June of this year (06/17/09). I had the project completely working on August 20, 2009. Compare this to the Cal Poly Solo Quad project (Google: Cal Poly Solo Quad). Cal Poly engineers considered Remote Control Assist impossible to incorporate into their design.
The following files describe the system, and Hi-Res copies of the Images can be downloaded via the provided links:
- SystemDiagram.gif is a complete diagram of the system, including Operator Panel, Motor Driver, and Motor circuitry.
- SNPCTRL.EXE is a program which accurately simulates interaction with the Control Unit, except that SIPS and PUFFS are simulated by pressing the CNTRL and ALT
Remember to enter the Startup Sequence first!
See "The SNPCTRL.EXE Program" in the next step for more info!
- SANDPSWITCH.GIF illustrates a typical SIP&PUFF switch.
- OP-PANEL.GIF is a schematic diagram for the Operator Display Panel.
Details of the Design
THE MECHANICS
Pontoons & Motors
The pontoons are constructed from waterproof closed-cell foam. I used some rather rigid construction foam, but you can use the foam of an old boogie-board or similar waterproof foam. The pontoons are approximately 48 inches long, 9 inches wide, and 5-6 inches deep. In use, the pontoons draw less than an inch of water (not including the motors).
Aluminum plates are bolted to the foam, top and bottom, with bolts running through the foam, to provide a sturdy base to attach the Motor Mount and Outrigger Pole Stantions to. The CAD drawing shows the Motor Mount separated from the Outrigger Pole Stantions by about 6 inches. In the final desigh, this dimension is reduced to about 3 inches.
The Motor Mount and Outrigger Pole Stantions are bolted to the upper Pontoon Plate from underneath with countersunk screws.
I bought the Minkota-30 trolling motors from Amazon.com, new for $117 each. I cut the upper part of the down-shaft off them before I ever powered them up! Only the larger gauge Red and Black wires are used as this is a PWM (Pulse-Width-Modulated) drive system. The wires from the Speed Coil in the motors were cut, taped, and pushed back down into the down-shafts.
Outrigger Poles
The Outrigger Poles in the current design are made from 1 inch diameter galvanized steel electrical conduit ($6) bent on a conduit bending press. In my next design update, I plan to make the Outrigger Pole as one piece that runs from one Pontoon all the way over to the other. I also will try making it out of aluminum pipe. In order to incorporate the Outrigger Pole as one piece, I will have to modify the Stantions of the Deck Plate to allow the Outrigger Pole to drop in from the top as opposed to the current design where the two poles slide in from the side.
The Deck Plate
The Deck Plate is made from a piece of 1/2 to 3/4 inch marine or exterior plywood, and is approximately 13 by 31 inches in size. In the current design, two aluminum plates are fastened to the plywood to facilitate mounting the Outrigger Stantions from underneath with countersunk screws. My update will simply make this a single plate, in addition to modifying the Stantions to allow the Outrigger Pole to be droped in from above.
All the Outrigger Pole Stantions are custom made braces slightly larger than the diameter of the Outrigger Poles, and utilize a bicycle seat Cam Bolt to squeez them tightly to the Outrigger Poles.
Slotted holes at the sides of the Deck Plate keep the mounting straps firmly in the desired location. These straps are ratchet style cargo tie-downs available at Freight Distributors or just about any home improvement store.
THE ELECTRICS
Refer to the System Diagram and Operator Panel Schematic for most of the information required to put the electrical system together.
I used a VERY robust Motor Driver, the RS160D (~$430), from Robot-Solutions (www.Robot-Solutions.com). It was as if this driver was specifically designed for my project as it provided virtually every required functionality. In reality, the primary intended users are those guys that make the giant fighting robots.
I designed and built the Operator Panel exactly to the criteria depicted in the schematic, so I won't go into much further details on it at this time, except to say that I used a milling machine to precisely drill the 32 LED holes into the black fiberglass panel as seen in the photos, and the panel was sealed to the lid of the enclosure with soft waterproofing putty. The updated design adds two additional LEDs to indicate actuation of the Sip & Puff switch. All LEDs are from DigiKey (www.DigiKey.com), part #s: Red = SSI-LXR4815SRD, Green = SSI-LXR4815GD ($1.25 each).
I made the Main Power Switch available outside of the enclosure and hid it under a plastic film cannister. The switch secures the lid of the film cannister to the side of the enclosure and the tethered film cannister is popped into place over the switch, effectively making it water-tight.
I used two DesignFlex, Inc. Pressure/Vacuum switches, available from Global Industrial Products (www.globalepower.com) , part# 7882-710 ($17 each), for my Sip&Puff switch. The air line from the operator is Y'ed to 2 lines then one is connected to the High port of one switch (pressure = Puff) and the other is connected to the Low port of the other switch (vacuum = Sip).
I used a TTL to RS-232 Level Shifter board from SparkFun (SparkFun.com), part# PRT-08780 ($10), to interface between the Arduino and the Motor Driver, and, of course, the Arduino u-Controller itself, available from SparkFun with part# DEV-00666 ($34).
The Man Overboard Switch is a Magnetic Reed Switch from a home security system. The Switch side is secured to the inside of the Operator Panel to keep it out of the weather. The Magnet side has a lanyard which can be tied to the rider's life vest.
Aside from the Sip&Puff Straw (and Power Switch), the magnetic-reed MOB Switch is the only other physical input into the system. The system starts up in Practice Mode (motors will not run), and each time the Magnet is removed and replaced, the system toggles in and out of Practice Mode. Taking control of the system with the RC Transmitter will also take the system out of Practice Mode.
I hope to have my PCB (Printed Circuit Board) design completed in time for my next iteration of this project. The last photo attached to this section shows how that is coming along. I have yet to decide whether to go ahead with incorporating the Motor Driver section (shown in bold bright green) to the PCB design as I am very comfortable with the Robot-Solutions product at this time. All other sub systems, except for the Digital RC Receiver, will certainly be incorporated.
THE SOFTWARE
I originally tried implementing the control code as purely logic/rule based coding. It worked OK but was very hard to update, modify, and understand. I rewrote the control code as almost entirely a State Machine. Aside from the State Table itself, the code is extremely small for the functionality it provides. The State Machine leaves absolutely no doubt to what the system will do when it receives it's next command.
The first Code segment below is the top of the State Machine Table, and the second Code segment is the entire operating loop! There are only a few other functions, one gets the Safety Startup Sequence, one monitors Fault and Man-Overboard conditions, and others control the LEDs and send Speed Commands to the Motor Driver.
For the geeks (like me)...
Referring to the Operator Panel Schematic, the following code sets the LEDs:
// ----------------------------------------------------------------
void SetLED( int Value, int RightNotLeft ) {
//Raise Appropriate Strobe Pin
PORTC = ( RightNotLeft ? 0x20 : 0x10 ) | Value; //and Set LED Value on Pins
delayMicroseconds( 5 ); //Short Pause for LE Setup Time
PORTC = Value; } //Lower Strobe to Latch Value
// ----------------------------------------------------------------
Pontoons & Motors
The pontoons are constructed from waterproof closed-cell foam. I used some rather rigid construction foam, but you can use the foam of an old boogie-board or similar waterproof foam. The pontoons are approximately 48 inches long, 9 inches wide, and 5-6 inches deep. In use, the pontoons draw less than an inch of water (not including the motors).
Aluminum plates are bolted to the foam, top and bottom, with bolts running through the foam, to provide a sturdy base to attach the Motor Mount and Outrigger Pole Stantions to. The CAD drawing shows the Motor Mount separated from the Outrigger Pole Stantions by about 6 inches. In the final desigh, this dimension is reduced to about 3 inches.
The Motor Mount and Outrigger Pole Stantions are bolted to the upper Pontoon Plate from underneath with countersunk screws.
I bought the Minkota-30 trolling motors from Amazon.com, new for $117 each. I cut the upper part of the down-shaft off them before I ever powered them up! Only the larger gauge Red and Black wires are used as this is a PWM (Pulse-Width-Modulated) drive system. The wires from the Speed Coil in the motors were cut, taped, and pushed back down into the down-shafts.
Outrigger Poles
The Outrigger Poles in the current design are made from 1 inch diameter galvanized steel electrical conduit ($6) bent on a conduit bending press. In my next design update, I plan to make the Outrigger Pole as one piece that runs from one Pontoon all the way over to the other. I also will try making it out of aluminum pipe. In order to incorporate the Outrigger Pole as one piece, I will have to modify the Stantions of the Deck Plate to allow the Outrigger Pole to drop in from the top as opposed to the current design where the two poles slide in from the side.
The Deck Plate
The Deck Plate is made from a piece of 1/2 to 3/4 inch marine or exterior plywood, and is approximately 13 by 31 inches in size. In the current design, two aluminum plates are fastened to the plywood to facilitate mounting the Outrigger Stantions from underneath with countersunk screws. My update will simply make this a single plate, in addition to modifying the Stantions to allow the Outrigger Pole to be droped in from above.
All the Outrigger Pole Stantions are custom made braces slightly larger than the diameter of the Outrigger Poles, and utilize a bicycle seat Cam Bolt to squeez them tightly to the Outrigger Poles.
Slotted holes at the sides of the Deck Plate keep the mounting straps firmly in the desired location. These straps are ratchet style cargo tie-downs available at Freight Distributors or just about any home improvement store.
THE ELECTRICS
Refer to the System Diagram and Operator Panel Schematic for most of the information required to put the electrical system together.
I used a VERY robust Motor Driver, the RS160D (~$430), from Robot-Solutions (www.Robot-Solutions.com). It was as if this driver was specifically designed for my project as it provided virtually every required functionality. In reality, the primary intended users are those guys that make the giant fighting robots.
I designed and built the Operator Panel exactly to the criteria depicted in the schematic, so I won't go into much further details on it at this time, except to say that I used a milling machine to precisely drill the 32 LED holes into the black fiberglass panel as seen in the photos, and the panel was sealed to the lid of the enclosure with soft waterproofing putty. The updated design adds two additional LEDs to indicate actuation of the Sip & Puff switch. All LEDs are from DigiKey (www.DigiKey.com), part #s: Red = SSI-LXR4815SRD, Green = SSI-LXR4815GD ($1.25 each).
I made the Main Power Switch available outside of the enclosure and hid it under a plastic film cannister. The switch secures the lid of the film cannister to the side of the enclosure and the tethered film cannister is popped into place over the switch, effectively making it water-tight.
I used two DesignFlex, Inc. Pressure/Vacuum switches, available from Global Industrial Products (www.globalepower.com) , part# 7882-710 ($17 each), for my Sip&Puff switch. The air line from the operator is Y'ed to 2 lines then one is connected to the High port of one switch (pressure = Puff) and the other is connected to the Low port of the other switch (vacuum = Sip).
I used a TTL to RS-232 Level Shifter board from SparkFun (SparkFun.com), part# PRT-08780 ($10), to interface between the Arduino and the Motor Driver, and, of course, the Arduino u-Controller itself, available from SparkFun with part# DEV-00666 ($34).
The Man Overboard Switch is a Magnetic Reed Switch from a home security system. The Switch side is secured to the inside of the Operator Panel to keep it out of the weather. The Magnet side has a lanyard which can be tied to the rider's life vest.
Aside from the Sip&Puff Straw (and Power Switch), the magnetic-reed MOB Switch is the only other physical input into the system. The system starts up in Practice Mode (motors will not run), and each time the Magnet is removed and replaced, the system toggles in and out of Practice Mode. Taking control of the system with the RC Transmitter will also take the system out of Practice Mode.
I hope to have my PCB (Printed Circuit Board) design completed in time for my next iteration of this project. The last photo attached to this section shows how that is coming along. I have yet to decide whether to go ahead with incorporating the Motor Driver section (shown in bold bright green) to the PCB design as I am very comfortable with the Robot-Solutions product at this time. All other sub systems, except for the Digital RC Receiver, will certainly be incorporated.
THE SOFTWARE
I originally tried implementing the control code as purely logic/rule based coding. It worked OK but was very hard to update, modify, and understand. I rewrote the control code as almost entirely a State Machine. Aside from the State Table itself, the code is extremely small for the functionality it provides. The State Machine leaves absolutely no doubt to what the system will do when it receives it's next command.
The first Code segment below is the top of the State Machine Table, and the second Code segment is the entire operating loop! There are only a few other functions, one gets the Safety Startup Sequence, one monitors Fault and Man-Overboard conditions, and others control the LEDs and send Speed Commands to the Motor Driver.
For the geeks (like me)...
Referring to the Operator Panel Schematic, the following code sets the LEDs:
// ----------------------------------------------------------------
void SetLED( int Value, int RightNotLeft ) {
//Raise Appropriate Strobe Pin
PORTC = ( RightNotLeft ? 0x20 : 0x10 ) | Value; //and Set LED Value on Pins
delayMicroseconds( 5 ); //Short Pause for LE Setup Time
PORTC = Value; } //Lower Strobe to Latch Value
// ----------------------------------------------------------------
The SNPCTRL.EXE Control System Simulator Program
The SNPCTRL.EXE Control System Simulator Program allows a prospective rider to experiment with the operation of the Sip & Puff Motor Controller from the comfort of his or her computer desk. Sip & Puff Timing and Visual Feedback is virtually identical to the actual interface incorporated in the system.
--Download and execute the SNPCTRL.EXE program.
To download the Control Program, click on the SNPCTRL.EXE link, or type:
www.DisabledAdventurers.com/SIPNPUFF/SNPCTRL.EXE
into the Address Bar of Internet Explorer, press ENTER, select Run or Save.
--The program runs best in full-screen mode.
Press CNTRL-ENTER to switch to full-screen mode.
--Pressing the CNTRL and ALT keys simulate a Sip and Puff into the system.
--Enter the Safety Startup Sequence (CNTRL-ALT-CNTRL-ALT) first!
--Press Mto simulate Man-Overboard or Capsize.
--Press ? for further Help in operating the Simulator.
--Press ESCto exit the program.
Timing for the length of Sips and Puffs is very accurate in the simulator, and feedback on timing is given in the Switch Status (center-screen).
I am guessing that many people will have the ability to make single key-presses on a keyboard with existing adaptive computer equipment, however I am not sure that all such equipment would provide for control of the amount of time that a key is held down. If this provision does not exist, an assistant would be required to demonstrate the interface. Prospective users of the system should be encouraged to play with, or view operation of, the simulator in advance of their time out on the water with the kayak.
In the future, I hope to build a second "real" control system that can be used as a simulator for this purpose. I am in the process of designing a PCB (Printed Circuit Board) that will encompass all the electronic components, and nearly all of the electrical components, of the system.
RULES IMPLEMENTED IN THE CODE:
Pressing M simulates Man-Overboard, Capsize, or Motor Overload.
Very long (held) sips and puffs are simulated in this code.
(See Actual Operating Code notes below)
The maximum differential between the left and right motors is 7.
Reverse motor speeds are limited to 5 (50% power).
Hard turns slow the craft and move through turning on point.
Changing speed when one motor is in reverse and the other is in forward
causes both motors to stop until the next comand is given.
When one motor is at stop, that motor waits for other motor to be at stop
before proceeding in opposite direction with speed change command.
In the Actual Operating Code:
When ever both motors reach stop in very long speed change commands,
the user must release the switch in order to issue further commands.
For instance...
The craft is set to fast forward and user holds a very long Sip:
Both motors will decrease to stop and will not go into reverse
until the user releases the Sip and then gives a further command.
--Download and execute the SNPCTRL.EXE program.
To download the Control Program, click on the SNPCTRL.EXE link, or type:
www.DisabledAdventurers.com/SIPNPUFF/SNPCTRL.EXE
into the Address Bar of Internet Explorer, press ENTER, select Run or Save.
--The program runs best in full-screen mode.
Press CNTRL-ENTER to switch to full-screen mode.
--Pressing the CNTRL and ALT keys simulate a Sip and Puff into the system.
--Enter the Safety Startup Sequence (CNTRL-ALT-CNTRL-ALT) first!
--Press M
--Press ? for further Help in operating the Simulator.
--Press ESC
Timing for the length of Sips and Puffs is very accurate in the simulator, and feedback on timing is given in the Switch Status (center-screen).
I am guessing that many people will have the ability to make single key-presses on a keyboard with existing adaptive computer equipment, however I am not sure that all such equipment would provide for control of the amount of time that a key is held down. If this provision does not exist, an assistant would be required to demonstrate the interface. Prospective users of the system should be encouraged to play with, or view operation of, the simulator in advance of their time out on the water with the kayak.
In the future, I hope to build a second "real" control system that can be used as a simulator for this purpose. I am in the process of designing a PCB (Printed Circuit Board) that will encompass all the electronic components, and nearly all of the electrical components, of the system.
RULES IMPLEMENTED IN THE CODE:
Very long (held) sips and puffs are simulated in this code.
(See Actual Operating Code notes below)
The maximum differential between the left and right motors is 7.
Reverse motor speeds are limited to 5 (50% power).
Hard turns slow the craft and move through turning on point.
Changing speed when one motor is in reverse and the other is in forward
causes both motors to stop until the next comand is given.
When one motor is at stop, that motor waits for other motor to be at stop
before proceeding in opposite direction with speed change command.
In the Actual Operating Code:
When ever both motors reach stop in very long speed change commands,
the user must release the switch in order to issue further commands.
For instance...
The craft is set to fast forward and user holds a very long Sip:
Both motors will decrease to stop and will not go into reverse
until the user releases the Sip and then gives a further command.
Full Speed Ahead
Top speed is just under 3.7 MPH, according to my GPS. After 4 hours and 6.2+ miles, the motors were still running strong, producing ~3.3 MPH into the wind, and the main battery still showed 12.15 volts. The Motor Driver and Arduino Controller, as well as the Sip&Puff Interface, will continue to operate down to 5 volts.
RC Vs. Sip & Puff
RC Remote Control Override capability is incorporated into this design mainly to allow a safety observer to assist the highly disabled rider who will be operating the kayak truly "hands-free" via the Sip & Puff switch interface.
It is, however, still possible that more able-bodied riders, and fishermen, for instance, may like to control the kayak themselves via the RC Transmitter. Still, I have found that using the Sip & Puff interface is WAY more fatigue-free. In open spaces, long periods of travel are somewhat "set and forget" and minor course changes, or corrections, are accomplished with the lightest (and shortest) of tiny sips and puffs against the straw.
The caveat is that the RC Transmitter is a bit more intuitive and provides for extremely fine control of the kayak. With a few minutes of practice, though, a Sip & Puff rider can learn to, for instance, back the kayak precisely to the corner of a dock, or steer down a winding channelway of 10-15 feet in width.
It is, however, still possible that more able-bodied riders, and fishermen, for instance, may like to control the kayak themselves via the RC Transmitter. Still, I have found that using the Sip & Puff interface is WAY more fatigue-free. In open spaces, long periods of travel are somewhat "set and forget" and minor course changes, or corrections, are accomplished with the lightest (and shortest) of tiny sips and puffs against the straw.
The caveat is that the RC Transmitter is a bit more intuitive and provides for extremely fine control of the kayak. With a few minutes of practice, though, a Sip & Puff rider can learn to, for instance, back the kayak precisely to the corner of a dock, or steer down a winding channelway of 10-15 feet in width.