====== 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__ {{:img_20170516_142430.jpg?nolink&200|}} __Dehnungsmessstreifen 10 x (Flex Sensor 2.2)__ {{:img_20170516_142406.jpg?nolink&200|}} __Arduino Mega 2560__ {{:img_20170620_130818.jpg?nolink&200|}} 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) {{:img_20170613_145043.jpg?nolink&200|}} __[[Steckplatine]]__ __[[LCD Display(klein)]]__ ===== Schaltplan ===== {{:speakinglove_steckplatine.png?nolink&600|}} 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. {{:img_20170705_133546.jpg?nolink&400|}}{{:img_20170516_155935.jpg?nolink&400|}} 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 ===== #include // Wire Bibliothek hochladen #include // 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 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 } 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); }