Blinde-staf navigator – Arduino-gebaseerd hulpmiddel voor visueel gehandicapten
Onderdelen en benodigdheden
| Onderdeel | Aantal |
|---|---|
| 1Sheeld | 1 |
| Arduino UNO | 1 |
| Android-apparaat | 1 |
| Relais (generiek) | 1 |
| Wisselschakelaar | 1 |
| Ultrasonische sensor HC-SR04 | 1 |
| DC-motor (generiek, voor trilling) | 1 |
| Draadjes (jumper wires) | 1 set |
| 9V batterij | 1 |
Apps en online diensten
- Arduino IDE
- 1Sheeld telefoonapps
Over dit project
Het idee ontstond toen ik een blinde persoon zag worstelen om obstakels zoals gatjes in de weg en trappen te ontwijken met een traditionele blindestaf. Dit motiveerde me om een prototype te bouwen, ook al was ik geen expert in elektronica. Met behulp van diverse internetbronnen heb ik het vorig jaar afgerond als mijn afstudeerproject. Ik heb het prototype uitgebreid met GPS-locatie. Dankzij 1Sheeld kon ik dit prototype binnen 6 maanden voltooien.
Stap 1: Voeding
De Blinde-staf Navigator heeft externe voeding nodig. Ik gebruikte een 9V-batterij met een USB-voedingsadapter op de Arduino Uno. Een nadeel is de beperkte batterijduur; een verbetering zou een zonnepaneel kunnen zijn.
Stap 2: Bluetooth en 1Sheeld app
Na het aanzetten moet de begeleider de Bluetooth-verbinding tussen de smartphone (Android) en de Arduino standhouden. Open de 1Sheeld-app en schakel GPS- en SMS-functies in. Ik weet dat blinden de smartphone niet zelf kunnen bedienen, maar met een aangepaste Android OS (bijv. met braille-toetsen) zou dit veel makkelijker zijn. Ik hoop op toekomstige verbeteringen.
Stap 3: Obstakeldetectie met ultrasoon
Volgens het blokdiagram communiceren de apparaten na inschakeling. Een blinde persoon zweept normaal de staf heen en weer om obstakels te voelen. De Navigator helpt door trillingsmeldingen te geven voor obstakels op midden- en laag niveau. Twee ultrasone sensoren (HC-SR04) zijn gemonteerd: één bovenaan en één onderaan de staf. Ik gebruikte PVC-buizen zodat de trillingsmotoren erin passen. De trillingsmodus kan in de code worden aangepast.
Stap 4: GPS-locatie en noodknop
De smartphone fungeert als GPS-provider. Een wisselschakelaar fungeert als noodknop: door erop te drukken (één of meerdere keren) stuurt de smartphone een SMS met "Ik heb hulp nodig! Ik ben op latitude: ... en longitude: ..." plus een Google Maps-link. Het ontvangernummer kan ingesteld worden (autoriteiten of begeleider). De lengte van de staf is verstelbaar aan de lengte van de gebruiker; de detectieafstand is in de code aanpasbaar.
Stap 5: Toekomstvisie
Ik hoop dat dit prototype wereldwijd gebruikt wordt of gecommercialiseerd wordt om blinden te helpen. Excuses voor eventuele taalfouten (mijn Engels is niet perfect). Alle projectdocumentatie (FYP 1 & 2, posters, video's) is via de links in de originele handleiding te vinden.
Code
#define CUSTOM_SETTINGS
#define INCLUDE_GPS_SHIELD
#define INCLUDE_SMS_SHIELD
#include <OneSheeld.h>
#include <string.h>
#define trigPinL 4
#define echoPinL 5
#define trigPinH 6
#define echoPinH 7
#define Vib1 12
#define Vib2 13
#define SW 8
boolean isInRange = false;
float lat, lon;
String PhoneNumber = "0134087286";
String Message, Message1, Message2;
char latitude[10], longitude[10];
void setup() {
pinMode(trigPinL, OUTPUT); pinMode(echoPinL, INPUT);
pinMode(trigPinH, OUTPUT); pinMode(echoPinH, INPUT);
pinMode(Vib1, OUTPUT); pinMode(Vib2, OUTPUT);
pinMode(SW, INPUT);
OneSheeld.begin();
}
void loop() {
long durationL, distanceL, durationH, distanceH;
digitalWrite(trigPinL, LOW); delayMicroseconds(2);
digitalWrite(trigPinH, LOW); delayMicroseconds(2);
digitalWrite(trigPinL, HIGH); delayMicroseconds(10);
digitalWrite(trigPinH, HIGH); delayMicroseconds(10);
digitalWrite(trigPinL, LOW);
digitalWrite(trigPinH, LOW);
durationL = pulseIn(echoPinL, HIGH);
distanceL = (durationL/2) / 29.1;
durationH = pulseIn(echoPinH, HIGH);
distanceH = (durationH/2) / 29.1;
if (distanceL > 40) digitalWrite(Vib1, HIGH);
else digitalWrite(Vib1, LOW);
if (distanceH < 100) {
digitalWrite(Vib1, HIGH); delay(200);
digitalWrite(Vib1, LOW); delay(200);
}
// GPS en SMS noodknop
lat = GPS.getLatitude();
lon = GPS.getLongitude();
Message1 = String(lat, 8);
Message2 = String(lon, 8);
if (digitalRead(SW) == 0) {
Message = "I need Help! I'm at latitude: " + Message1 + " and longitude: " + Message2;
Message += " Google Maps - https://www.google.co.in/maps/place/" + Message1 + "," + Message2;
SMS.send(PhoneNumber, Message);
delay(3000);
}
delay(1000);
}
Schema's
Fritzing-bestand: OneSheeldTONGKAT.fzz
Productieproces
- TinyML Taaldetector met Edge Impulse op Arduino Nano 33 BLE Sense
- Bouw een real-time gyroscoop-spel met Arduino Nano & MPU-6050 sensor
- Arduino Digitale Dobbelsteen: Bouw Je Eigen LCD-willekeurige Getalgenerator
- Bouw Je Eigen 37-LED Roulette-spel met Arduino Nano
- ATtiny85 Mini Arcade: Snake – Bouw een Handheld OLED Game Console
- Draagbare Afstandsdetector – Arduino Nano DIY Kit met HC-SR04, 18650 Accu en 3D-geprinte Behuizing
- Een audio-reactieve bureaulamp bouwen met Arduino Nano
- Autonome Gezichtsvolgende Robot Auto met Arduino Nano & OpenCV
- Koper Elektrolyseren Project: Bouw een Slim Systeem met Arduino UNO
- NeoPixel Matrix Pong op Arduino Nano: Bouw je eigen neon Pong-spel
- Indrukwekkende Lichtsequenties Maken met Arduino en Shift Register