At evelocity boot camp on the 22nd of March we talked about aids for use in the parking challenge. For example, a Netduino and one or more ultrasonic rangers could be used to measure the distance to obstacles placed around the car park.
In the picture below the LED bar is displaying the distance to the base shield box with each LED segment representing 2cm.
Bill of Materials for this project (Prices as at March 2015)
- Netduino Plus 2 USD60 NZD108 (could use a Netduino 2 USD32.95 NZD 59.63)
- Grove Base Shield V2 USD 8.90
- Grove Led Bar USD3.90
- Grove 5CM cables USD 1.90
- Elecrow Ultrasonic Ranging Sensor USD2.28 (with custom cable)
- or
- Elecrow Waterproof Ultrasonic Ranging module USD14.80
This code is just to illustrate how this could done and should not be used in production
public class Program { private static OutputPort triggerOutput; private static InterruptPort echoInterrupt; private static long pulseStartTicks; private static GroveLedBarGraph distanceBar; private const int MillimetersPerBar = 20; public static void Main() { OutputPort distanceCin = new OutputPort(Pins.GPIO_PIN_D8, false); OutputPort distanceDin = new OutputPort(Pins.GPIO_PIN_D9, false); distanceBar = new GroveLedBarGraph(distanceCin, distanceDin); triggerOutput = new OutputPort(Pins.GPIO_PIN_D5, false); echoInterrupt = new InterruptPort(Pins.GPIO_PIN_D4, true, Port.ResistorMode.Disabled, Port.InterruptMode.InterruptEdgeBoth); echoInterrupt.OnInterrupt += new NativeEventHandler(echoInterruptPort_OnInterrupt); Timer distanceUpdate = new Timer(distanceUpdateCallbackProc, null, 0, 500); Thread.Sleep(Timeout.Infinite); } public static void distanceUpdateCallbackProc(object state) { triggerOutput.Write(false); Thread.Sleep(2); triggerOutput.Write(true); Thread.Sleep(10); triggerOutput.Write(false); Thread.Sleep(2); } static void echoInterruptPort_OnInterrupt(uint data1, uint data2, DateTime time) { long pulseWidthTicks; if (data2 == 1) // leading edge, start of pulse { pulseStartTicks = time.Ticks; } else { pulseWidthTicks = time.Ticks - pulseStartTicks; long distance = pulseWidthTicks / 58; Debug.Print("distance = " + distance.ToString() + "mm"); uint ledBar = 1; ledBar = ledBar <<(int)(distance / MillimetersPerBar ); distanceBar.setLED(ledBar); } } }