Projekt: Speaking-Glove

Einführung

Für das Projekt werden Dehnungsmessstreifen (auch Flex Sensoren genannt) benutzt. Flex Sensoren reagieren auf Biegung. Umso Stärker der Sensor gebogen wird, umso höher wird der Widerstand. Diese Sensoren werden auf Handschuhe (auf die Finger) geklebt und über eine Steckplatine an einem Arduino Mega angeschlossen. Durch das bewegen der Finger (nach unten) ist man in der Lage einzelne Buchstaben auszugeben, die anschließend auf einen LCD Display ausgegeben werden. Mit diesem Projekt soll es möglich sein nur mit Hilfe der einzelnen Finger zu kommunizieren.

Material und Hardware

Handschuhe

Dehnungsmessstreifen 10 x (Flex Sensor 2.2)

Arduino Mega 2560

Was ist das?

Der Arduino Mega 2560 ist ein Microcontroller-Board und wird über eine USB-Verbindung oder über ein externes Netzteil mit Strom versorgt. Die Programmierung des Arduino Mega 2560 ist mithilfe der Arduino Software (http://www.arduino.org/downloads) möglich.

Widerstände (10x) 1 k Ω (Pro Sensor ein Widerstand)

Steckplatine

LCD Display(klein)

Schaltplan

Hinweis 1: Als erstes sollte man die Flex Sensoren einzeln testen, ob sie funktionieren. Zum testen der Flex Sensoren empfiehlt sich diese Seite. https://learn.sparkfun.com/tutorials/flex-sensor-hookup-guide Es reicht jeweils nur einen Sensor anzuschließen.

Hinweis 2: Es empfiehlt sich die Flex Sensor Ausgänge mit den Kabeln (Am besten farblich trennen) zusammen zu löten. Danach die Kabel vom rechten Ausgang der Sensoren mit den Widerständen zusammen löten. Am anderen Ende der Widerstände nimmt man ein Kabel (für den Ground am Arduino Mega) und lötet sie zusammen. Die Kabel vom linken Ausgang der Sensoren mit einem Kabel (für den 5V Eingang am Arduino Mega) zusammen löten.

Hinweis 3: Zum darauf kleben der Sensoren bietet sich ein Doppelseitiges Klebeband an. Nachdem die Sensoren auf die Handschuhe geklebt sind, müssen die Sensoren nochmal getestet werden und sich die Schwellenwerte bei einer Biegung des Fingers notieren.

Quellcode

Code.c
 
#include <Wire.h> // Wire Bibliothek hochladen
#include <LiquidCrystal_I2C.h>// Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
LiquidCrystal_I2C lcd(0x27, 16, 2);   //Hier wird festgelegt um was für einen Display es sich handelt. In diesem Fall einer mit 16 Zeichen in 2 Zeilen.
 
// Array für die Textausgabe
 
char wort [15];
// Zähler für die Länge des Arrays
int i =0 ;
 
// Pin verbinden mit voltage divider output
const int FLEX_PIN0 = A0; 
const int FLEX_PIN1 = A1; 
const int FLEX_PIN2 = A2; 
const int FLEX_PIN3 = A3; 
const int FLEX_PIN4 = A4; 
const int FLEX_PIN5 = A5; 
const int FLEX_PIN6 = A6; 
const int FLEX_PIN7 = A7; 
const int FLEX_PIN8 = A8; 
const int FLEX_PIN9 = A9; 
 
// Measure the voltage at 5V and the actual resistance of your
// 47k resistor, and enter them below:
const float VCC = 4.98; // Measured voltage of Ardunio 5V line
const float R_DIV = 47500.0; // Measured resistance of 3.3k resistor
Code.c
void setup() 
{
  Serial.begin(9600);
 
  // Pins auf Input setzen
  pinMode(FLEX_PIN0, INPUT);
  pinMode(FLEX_PIN1, INPUT);
  pinMode(FLEX_PIN2, INPUT);
  pinMode(FLEX_PIN3, INPUT);
  pinMode(FLEX_PIN4, INPUT);
 
  pinMode(FLEX_PIN5, INPUT);
  pinMode(FLEX_PIN6, INPUT);
  pinMode(FLEX_PIN7, INPUT);
  pinMode(FLEX_PIN8, INPUT);
  pinMode(FLEX_PIN9, INPUT);
 
 
lcd.begin(); //Im Setup wird der LCD gestartet (anders als beim einfachen LCD Modul ohne 16,2 in den Klammern denn das wurde vorher festgelegt
 
}
Code.c
void loop() 
{
 
  lcd.setCursor(0,0); // Cursor auf die 1. Zeile des LCD´s gesetzt
  lcd.print("Speaking Glove"); //Zum testen des LCD´s genutzt, da keine Anweisungen benötigt werden (if-Bedingungen oder sonstiges)
 
 
  // Berechnung des Widerstands für jeden Flexsensor
  int flexADC0 = analogRead(FLEX_PIN0);
  float flexV0 = flexADC0 * VCC / 1023.0;
  float flexR0 = R_DIV * (VCC / flexV0 - 1.0);
 
  //Deklaration 1 finger  
  //rechts
 
  else if (flexR0 >=2500000 && flexR0 <=10000000 ) //flexR0 gibt den Wertebereich bei Biegung des Fingers an
  {
       wort[i] = 'a';
       i++; // i hochzählen um die nächste Stelle im Array zu erreichen
       lcd.setCursor(0,1);  //Cursor auf die 2. Zeile des LCD´s setzen
       lcd.print(wort);  
  }
 
  // Wenn das Ende des Arrays erreicht ist
  if(i>15){  
  i = 15; // i wieder auf 15 setzen, da i, nach dem der wert 15 erreicht wurde, hochgesetzt wird
 
  else if (flexR0 >=2500000 && flexR0 <=10000000 )
  {
       wort[i] = 'a';
       lcd.setCursor(0,1);  //Cursor auf die 2. Zeile des LCD´s setzen
       lcd.print(wort);  
       for (int j =1; j<=15 ;j++){ // for-Schleife um weitere Buchstaben als Lauftext auszugeben
        wort[j-1]= wort[j];
 
      }
  }
  }
  delay(1000);
}