On my daily commute, I start out on a highway with a 65 mph speed limit. I then switch to a highway with a 70 mph speed limit, which then decreases to 65, then 55, and eventually to 45. On my commute home, the sequence is reversed.
Traffic is very light on this drive, thus I am able to use my cruise set at the speed limit for most of the trip. But adjusting the cruise at each speed limit change takes a bit of time to get just right. Since I do this multiple times through the drive and I do it every workday, it seems to scream out for some automation.
This project will allow you to select a desired speed and then activate it. The project will then use the Resume/Accelerate and Coast/Set inputs of the existing cruise control to adjust the speed. Using the speed from a GPS receiver, once it reaches the requested speed it will stop adjusting it until you next request it. The advantage of this over manually adjusting it is that I will have to pay attention only once for a brief period of time to set the new speed and then the system will handle the adjustment procedure, rather than me having to spend 15-20 seconds setting it just right.
The particular vehicle I am building this for is a 2002 Subaru Forester. It has 3 cruise control switch inputs: Resume/Accelerate, Cancel, and Coast/Set. Once the cruise has been set, the Accelerate input will increase the speed by 2 mph and the Coast input will decrease the speed by 2 mph. There is no indicator that shows whether or not the cruise is active. Interface to the switches will likely be via relays.
Since there is no way to tell if the cruise is active, the cruise control will initiate every acquisition with a Coast input. This will either set the speed at the current speed if the cruise was inactive, or reduce the speed by 2 mph if it was active. The project can then determine the difference between the current speed and the desired speed and activate the Accelerate or Coast input the required number of times (with a suitable delay between inputs). Since the cruise setting only has a resolution of 2 mph, the project will increase the speed until it is within 1 mph (since at 1 mph below the desired speed another input would cause the speed to be 1 mph over the requested speed). When decreasing the speed, it will decrease until it is equal to or lower by 1 of the speed limit.
The project will also need to handle turning on the cruise control system. The cruise control turns off when the vehicle is turned off and is not turned back on until the power switch is pressed. There is an indicator for this status. When first turned on, the unit will likely turn the cruise on, monitoring the on indicator to ensure that is it on. It will only do this once, since being able to turn off the cruise system and have it stay off is important for safety.
The project will interface to the cruise control switches via reed relays.
For safety, the project will only adjust the cruise if the current speed is near the desired speed (perhaps 5-10 mph away?). This should help minimize the adverse effects from inadvertently engaging it.
Additional capabilities to consider:
Allow setting/uploading pre-programmed speed/point settings. This would allow the project to select the new speed in advance as I am approaching a speed change. It could perhaps audibly indicate the approach of a speed change.
Support a time of day clock. The most viewable placement for the display is where the existing clock is mounted on a console attached to the headliner. When my lights are on (which dims the clock) and I'm wearing sunglasses during the day the existing clock can be hard to read. Additionally, the time could be synchronized with GPS.