Assistive Ultraschall-Distanzmessung für Rollstühle

Aus HRW FabLab MediaWiki
Wechseln zu: Navigation, Suche
Assistive Ultraschall-Distanzmessung

GitHub Repo

Allgemein[Bearbeiten]

Das Haupt-System, die Box mit dem Arduino, der Stromversorgung und einem Sensor, wird unter der Fussablage des Rollstuhls angebracht. Diese lässt sich durch Klettverschluss-Punkte leicht abmontieren und austauschen. Alles Elemente des Projekts sind modular. Es können leicht weitere Sensoren angebracht werden, der Arduino kann einfach ausgetauscht werden und die Powerbank lässt sich zum Aufladen oder Austauschen leicht entfernen.

Der Arduino liest die Werte des Ultraschallmessers aus, berechnet die Distanz und gibt diese auf dem LCD-Display aus. Zusätzlich leuchtet die RGB-LED in Signalfarben um die Gefahr der Distanz zu bewerten.

  • < 5 cm → grünes Licht
  • 5-10 cm → gelbes Licht
  • > 10 cm → rotes Licht


GitHub Repo mit allen Bildern, 3D-Druck- und Laser Cutter-Vorlagen, Arduino-Code und Schaltplan

Material[Bearbeiten]


Schaltplan[Bearbeiten]

EBS WiSe1819 ChiaraSandführ Schaltplan.png

Ultraschallsensor 1[Bearbeiten]

  • Sensor1.VCC ( → Breadboard ) → Arduino.5V
  • Sensor1.Trig → Arduino.A2 (beliebig, Festlegung im Code)
  • Sensor1.Echo → Arduino.A3 (beliebig, Festlegung im Code)
  • Sensor1.GND → Arduino.GND


Ultraschallsensor 2[Bearbeiten]

  • Sensor2.VCC → Arduino.5V
  • Sensor2.Trig → Arduino.A4 (beliebig, Festlegung im Code)
  • Sensor2.Echo → Arduino.A5 (beliebig, Festlegung im Code)
  • Sensor2.GND → Arduino.GND


EBS WiSe1819 ChiaraSandführ LCD-Display.png

LCD-Display[Bearbeiten]

  • LCD.GND (Pin1) → Arduino.GND
  • LCD.VCC (Pin2) → Arduino.5V
  • LCD.V0 (Pin3) → Arduino.3V3
  • LCD.RS (Pin4) → Arduino.Pin2
  • LCD.R/W (Pin5) → Arduino.GND
  • LCD.E (Pin6) → Arduino.Pin3
  • LCD.Pin11 (D4) → Arduino.Pin4
  • LCD.Pin12 (D5) → Arduino.Pin5
  • LCD.Pin13 (D6) → Arduino.Pin6
  • LCD.Pin14 (D7) → Arduino.Pin7
  • LCD.Pin15 (A) → Arduino.5V
  • LCD.Pin16 (K) → Arduino.GND


RGB-LED[Bearbeiten]

  • LED.GND → Arduino.GND
  • LED.Red → Arduino.Pin11
  • LED.Green → Arduino.Pin10
  • LED.Blue → Arduino.Pin9


Gehäuse[Bearbeiten]

EBS Wise1819 ChiaraSandführ 3D-Druck ArduinoBox.png

Haupt-Box[Bearbeiten]

Gehäuse für Arduino, Ultraschallsensor 1, Powerbank

Druck-/Cutter-Files

3D-Druck[Bearbeiten]

3D-Druck-Datei als .f3d

Laser Cutter[Bearbeiten]

LaserCutter-Datei als .svg

Gehäuse Display + LED 3D-Druck[Bearbeiten]

EBS WiSe1819 ChiaraSandführ 3D-Druck Display.png

Druck-Files Gehäuse als .stl Gehäuse-Deckel als .stl


Code[Bearbeiten]

verschiedene Versionen sind unter [1] zu finden


* EINGEBETTETE SYSTEME WiSe 18/19 
 * HOCHSCHULE RUHR WEST
 * 
 * CHIARA SANDFUEHR 
 * MATR: 10009436
 * 
 * made for Arduino UNO
 * 
 * datasheet for ultrasonic sensor: 
 * https://howtomechatronics.com/tutorials/arduino/ultrasonic-sensor-hc-sr04/
 * 
 * datasheet for lcd-display:
 * 
*/////////////////////////////////////////////////////////////////////////////

//library for lcd-display
#include <LiquidCrystal.h>

//ultrasonic sensor 
#define trigger 18
#define echo 19

//RGB-LED, common gnd
#define LED_R 10
#define LED_G 11
#define LED_B 9
 
float time=0,distance=0;

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
//LiquidCrystal lcd(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);

void setup(){
//declare I/O

pinMode(trigger,OUTPUT);
pinMode(echo,INPUT);
pinMode(LED_R,OUTPUT);
pinMode(LED_G,OUTPUT);
pinMode(LED_B,OUTPUT);

lcd.begin(16, 2);

//print message on boot
lcd.clear();
lcd.setCursor(0, 0);           //sets Cursor to column 0 & row 0..
lcd.print(" Ultra sonic");
lcd.setCursor(0, 1);
lcd.print("Distance Meter");
delay(1500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("by Chiara");
lcd.setCursor(0, 2);
lcd.print("Sandfuehr");
delay(1500);
}

//declare looping function
void loop(){
 digitalWrite(trigger,LOW);     //make sure trigger is set to "off"    (delay from datasheet)
 delayMicroseconds(2);
 
 digitalWrite(trigger,HIGH);   //turn trigger on  -> generate signal   (delay from datasheet)
 delayMicroseconds(10);

 digitalWrite(trigger,LOW);    //turn trigger off -> stop signal       (delay from datasheet)
 delayMicroseconds(2);

 time=pulseIn(echo,HIGH);
 distance=time*340/20000;

  //close range <= 10cm - green light/ everything ok
  if (distance <= 10){
  analogWrite(LED_R, 0);
  analogWrite(LED_G, 255);
  analogWrite(LED_B, 0);
  }  //medium range <= 20cm - yellow light/ caution
     else if(distance <= 20){
     analogWrite(LED_R, 255);
     analogWrite(LED_G, 255);
     analogWrite(LED_B, 0);
     }   //far range >= 20cm - red light/ danger
         else {
         analogWrite(LED_R, 255);
         analogWrite(LED_G, 0);
         analogWrite(LED_B, 0);
         }
          
if(distance > 50){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("     ERROR     ");
lcd.setCursor(0,1);
lcd.print("  get closer!  ");
delay(200);  
}
else {
int dist = distance; //well, does it make a difference if you drop 11cm or 11,4123cm ?..
lcd.clear();
lcd.print("Distance:");
lcd.setCursor(0,1);
lcd.print(dist);
lcd.print("cm");
delay(200);
}

//distance in meters, if that's a feature that you're interested in

//lcd.setCursor(0,1);
//lcd.print("Distance:");
//lcd.print(distance/100);
//lcd.print("m");
//delay(1000);
}