This tutorial is based on an open source Arduino project for a Smart Cane and phone that assists blind people to walk alone anywhere with the help of inputs provided through an obstacle sensor and giving feedback through haptics (vibration motor). The device is affordable and can be easily replicated in a couple of hours.
This device automatically detects the obstacle while walking and provide feedback by letting the walking stick vibrate along with a warning sound.
The device is made with Arduino Uno and A.I. A6 GSM/GPRS Shield.
It has two features:
- Phone - with 6 buttons, for sending messages and making calls
- Smart Cane - which vibrates and beeps in the vicinity of an obstacle
The features are controlled with the help of a switch, so it turns from phone to a smart cane and vice versa.
The smart cane detects obstacles with the HC-SR04 ultrasonic sensor which measures the distance from an obstacle to the cane and starts vibrating and beeping due to the vibration motor and buzzer.
Step 1: Electrical Components
- Arduino UNO
- Breadboard and breadboarding wires
- GPRS/GSM Shield - A.I. A6
- Active SIM card
- 6 buttons
- 1 slide switch
- 9V Battery
- HC-SR04 ultrasonic sensor
- Vibration motor
- Diode - IN4001
- Resistor - 1KOhms
- Transistor - 2N2222
- Capacitor - 0.1uF
- Soldering Iron
- Wire strippers
- 3D printer
- PLA 3D printing filament
- Ninjaflex 3D printing filament
- Hot glue gun
- Cutter/saw for the PCB
- Hobby knife
Step 2: Breadboarding the Circuit
The echo pin of the ultrasonic sensor must be connected to a digital pin of Arduino.
In addition to the circuit design in the photo you must connect:
The buzzer is connected to digital pin 2 of Arduino and to the ground.
The buttons are used for the phone functions.
- 1st is connected to digital pin 4 and it has the function to enable the gsm module and also enter the menu for the phone, the other end is connected to ground
- 2nd - digital pin 5 and ground - call function
- 3rd - digital pin 6 and ground - message 1
- 4th - digital pin 7 and ground - message 2
- 5th - digital pin 10 and ground - message 3
- 6th - digital pin 11 and ground- message 4
A6 GPRS/GSM Module
- Plug in the GSM module and add the SIM card. Call the SIM to make sure the GSM receives signal. If you can't make the call then try to find a spot where you receive signal, because it won't work otherwise.
- Connect VCC 5.0 to VCC of Arduino
- Connect PWR to VCC of Arduino
- Note: If you power your Arduino from your laptop, the GSM shield will not get sufficient current to work, you may power it from a 9V battery or until you finish with the code power the shield separately via USB and connect VCC5.0 to PWR in the meantime
- U_TXD to RX of Arduino
- U_RXD to TX of Arduino
- GND of GSM to Arduino GND
- Connect a wire from another Arduino GND to the GND of the first button and a wire from RST of Arduino to the other end (connected to Arduino digital pin) of the first button
- Before uploading the code remove the RX and TX connections to Arduino
- Connect + of the battery to one end of the switch
- Connect the other end of the switch to Arduino VCC
- Connect - of the battery to GND of Arduino
After testing on the breadboard, you can solder all your components on a test wiring.
Step 3: Code
- Download the latest version of the Arduino IDE from https://www.arduino.cc/en/Main/Software
- Change the phone number with the one you want to receive calls and messages at from Arduino.
- Select boards in Tools -> Board -> Arduino Uno and then select the port that your Arduino is connected to under Tools --> Port
- Select Tools -> Programmer -> USBasp
- Hit the upload button to upload the code to the Arduino
Step 4: 3D Print the Shield
Download the 3D printing software that your printer supports.
Slice the STL files attached, which basically means cutting the part into various layers and send commands to the 3D printer while printing.
Download the STL files attached and load it in your printer software and slice the file, based on your printer setting, Slicing the STL files should take about 2-3 mins and the print time for all the file should be about 2 to 3 hours, and this is based on your slicer setting.