ส่วนประกอบฮาร์ดแวร์
แอปพลิเคชันซอฟต์แวร์และบริการออนไลน์
เครื่องมือช่างและเครื่องมือกล
แนะนำ
ตามที่ชื่อระบุ อุปกรณ์ดังกล่าวเป็นอุปกรณ์สวมใส่ที่ใช้เซ็นเซอร์ซึ่งสามารถแปลงท่าทางมือง่ายๆ เป็นข้อความและเสียงได้
สำหรับโครงการนี้ เครื่องมือและเทคโนโลยีที่จะนำมาใช้ ได้แก่ ไมโครโปรเซสเซอร์ Atmega328p, บลูทูธ (โมดูลบลูทูธ), เซ็นเซอร์ Flex, เครื่องวัดความเร่ง, โมดูลพลังงาน, ตัวต้านทาน และซอฟต์แวร์ Text to Speech (แอปพลิเคชันเทอร์มินัลบลูทูธ) เซ็นเซอร์ Flex วัดการงอของนิ้วขณะทำท่าทาง และส่งข้อมูลการเปลี่ยนแปลงของความต้านทานที่สอดคล้องกับปริมาณการงอ เครื่องวัดความเร่งจะวัดการเคลื่อนไหวเชิงเส้นของเข็มนาฬิกาบนแกน X, Y และ Z และส่งออกค่า X, Y และ Z ที่แตกต่างกันซึ่งสอดคล้องกับการเคลื่อนไหวบนแกนเหล่านี้
ข้อมูลทั้งหมดจากเซ็นเซอร์จะถูกประมวลผลโดย Arduino Nano ซึ่งเกี่ยวข้องกับการรวมค่าเชิงตรรกะของ IF/ELSE, AND และ OR ของเอาต์พุตเซ็นเซอร์ทั้งหมดเพื่อจับคู่เอาต์พุตที่ได้กับค่าที่เก็บไว้ล่วงหน้าของสัญลักษณ์ต่างๆ ที่เชื่อมโยงกับตัวอักษร เพื่อจุดนี้ จึงกำหนดช่วงที่เหมาะสมสำหรับตัวอักษรแต่ละตัวอักษร และสามารถจดจำคำศัพท์ได้ด้วยมือเดียว โดยอิงจากข้อมูลการวัดที่ได้จากการวัดซ้ำ โมดูลบลูทูธ HC-05 เชื่อมต่อกับ Arduino NANO จากนั้นข้อมูลที่ประมวลผลแล้วจะส่งต่อไปยังโมดูลบลูทูธ (เครื่องส่งสัญญาณ) ในรูปแบบสตริง โทรศัพท์มือถือระบบปฏิบัติการ Android ยังมีความสามารถ Bluetooth ในตัวอีกด้วย จากนั้นจับคู่อุปกรณ์ Bluetooth ทั้งสองเครื่องและส่งสตริงไปยังแอป Android
แอปพลิเคชัน Android จะรับข้อมูลผ่านทางบลูทูธในรูปแบบไบต์แล้วแปลงให้เป็นสตริง ในที่สุดสตริงจะถูกแปลงเป็นคำพูดโดยใช้แอปพลิเคชันแปลงข้อความเป็นคำพูดบนอุปกรณ์มือถือ Android ระบบโดยรวมได้รับการติดตั้งบนถุงมือธรรมดาเพื่อให้ใช้งานง่ายและจดจำท่าทางมือได้อย่างแม่นยำ
รูปที่ 1 แผนผังกล่องฮาร์ดแวร์
รูปที่ 2 แผนภาพกรณีซอฟต์แวร์
รูปที่ 3 แผนผังการทำงานของถุงมือเซ็นเซอร์
รูปที่ 4 แผนผังกระบวนการทำงานแอปพลิเคชัน Android
หลักการสำคัญเบื้องหลังการออกแบบระบบนี้ ได้แก่ การเปลี่ยนแปลงความต้านทาน ความเร่งเนื่องจากแรงโน้มถ่วง และระบบเรียลไทม์
ความเกี่ยวข้องของตัวต้านทานอยู่ที่วิธีการทำงานของเซ็นเซอร์แบบยืดหยุ่น ยิ่งเซ็นเซอร์ความยืดหยุ่นโค้งงอมากเท่าใด ความต้านทานก็จะยิ่งมากขึ้นเท่านั้น หมึกนำไฟฟ้าที่พิมพ์บนเซ็นเซอร์ทำหน้าที่เป็นตัวต้านทาน เมื่อเซนเซอร์ตรง ความต้านทานจะอยู่ที่ประมาณ 25k ชั้นนำไฟฟ้าจะถูกยืดออกเมื่อเซ็นเซอร์งอ ส่งผลให้หน้าตัดมีน้อยลง หน้าตัดที่ลดลงส่งผลให้ความต้านทานเพิ่มขึ้น ที่มุม 90° ความต้านทานนี้จะอยู่ที่ประมาณ 100KΩ
เมื่อเซ็นเซอร์ถูกยืดตรงอีกครั้ง ความต้านทานจะกลับไปสู่ค่าเดิม สามารถตรวจสอบได้ว่าเซ็นเซอร์โค้งงอมากแค่ไหนโดยการวัดความต้านทาน วิธีที่ง่ายที่สุดในการอ่านเซ็นเซอร์โค้งงอคือการเชื่อมต่อกับตัวต้านทานค่าคงที่ (ปกติคือ 10 หรือ 47 kΩ) เพื่อสร้างตัวแบ่งแรงดันไฟฟ้าตามที่แสดงในรูปที่ 5 โดยปลายด้านหนึ่งของเซ็นเซอร์จะเชื่อมต่อกับแหล่งกำเนิด และปลายอีกด้านหนึ่งจะเชื่อมต่อกับตัวต้านทานแบบดึงลง จากนั้นจุดกึ่งกลางระหว่างตัวต้านทานดึงลงค่าคงที่และเซ็นเซอร์โค้งงอจะเชื่อมต่อกับอินพุต ADC ของ Arduino ด้วยวิธีนี้ เราสามารถสร้างเอาต์พุตแรงดันไฟฟ้าแบบแปรผันได้ ซึ่งสามารถอ่านได้โดยอินพุต ADC ของ Arduino
รูปที่ 5 ตัวแบ่งแรงดันไฟฟ้า
บนถุงมือมีการติดตั้งเซ็นเซอร์ความยืดหยุ่น 5 ตัวสำหรับนิ้ว 5 นิ้วที่แตกต่างกัน เซ็นเซอร์ Flex จะเปลี่ยนความต้านทานขึ้นอยู่กับปริมาณการงอของนิ้ว พิน 1 ของเซนเซอร์แบบยืดหยุ่นเชื่อมต่อกับ 3.3 โวลต์บน Arduino Nano จากนั้นพิน 2 เชื่อมต่อกับตัวต้านทาน 10k โอห์ม ซึ่งทำหน้าที่เป็นตัวแบ่งแรงดันไฟฟ้า จุดระหว่างตัวต้านทานแบบดึงลงและเซนเซอร์แบบยืดหยุ่นเชื่อมต่อกับพินอนาล็อกบน Arduino รูปที่ 6 แสดงโมดูลเซ็นเซอร์โค้งงอ
รูปที่ 6 โมดูลเซ็นเซอร์โค้งงอ
เครื่องวัดความเร่ง (ADXL 335) ในระบบนี้ใช้เป็นเครื่องตรวจจับการเอียง มีเอาต์พุตอะนาล็อกที่เปลี่ยนแปลงตั้งแต่ 1.5 โวลต์ ถึง 3.5 โวลต์ ADXL335 เป็นวงจรรวมเครื่องวัดความเร่งแอนะล็อกสามแกน (IC) ที่อ่านค่าความเร่งในแกน X, Y และ Z เป็นแรงดันไฟฟ้าแอนะล็อก เครื่องวัดความเร่งสามารถระบุมุมเอียงเทียบกับพื้นดินได้โดยการวัดปริมาณความเร่งเนื่องจากแรงโน้มถ่วง ด้วยการตรวจจับปริมาณการเร่งความเร็วแบบไดนามิก เครื่องวัดความเร่งจึงสามารถระบุความเร็วและทิศทางของการเคลื่อนไหวของอุปกรณ์ได้ ฟังก์ชันพื้นฐานของอุปกรณ์นี้คือตรวจจับการเอียงของมือและส่งข้อมูลที่เกี่ยวข้องตามท่าทางที่มีความหมายไปยังไมโครคอนโทรลเลอร์เพื่อรับและบันทึกข้อมูล รูปที่ 7 แสดงการเชื่อมต่อ Arduino nano กับเครื่องวัดความเร่งเพื่อสร้างโมดูลเซ็นเซอร์ตำแหน่ง
รูปที่ 7 โมดูลเซ็นเซอร์ตำแหน่ง
โมดูล Bluetooth รับผิดชอบการส่งข้อมูลเอาต์พุตไปยังแอปพลิเคชันมือถือ ช่วยให้สามารถแปลงข้อความเป็นคำพูดได้ และรวมถึง Bluetooth HC-05 และไมโครคอนโทรลเลอร์ Arduino ไมโครคอนโทรลเลอร์จะประมวลผลวลีที่แสดงและส่งข้อมูลดังกล่าวไปยังโมดูล HC-05 ซึ่งจะส่งข้อมูลไปยังอุปกรณ์ Android ที่เชื่อมต่อผ่านบลูทูธ รูปที่ 8 แสดงโมดูลการส่งสัญญาณ
รูปที่ 8 โมดูลส่งสัญญาณ
หมายเหตุ: ขอแนะนำให้บัดกรีอย่างระมัดระวัง เนื่องจากพินเซนเซอร์แบบยืดหยุ่นนั้นเปราะบางมาก คุณตัดสินใจเองว่าต้องการจัดวางอย่างไรเนื่องจากเค้าโครงของฉันค่อนข้างยุ่งวุ่นวายและฉันไม่แนะนำให้ใครทำตามแบบของฉัน คุณสามารถเลือกใช้บอร์ดแบบมีรูพรุนหรือไม่ก็ได้ เพียงแค่ตรวจสอบให้แน่ใจว่าส่วนประกอบทั้งหมดเชื่อมต่อกันอย่างถูกต้องและแน่นหนาด้วยถุงมือ
ฉันใช้สาย USB สำหรับ Arduino Nano เป็นแหล่งจ่ายไฟ แต่คุณอาจตัดสินใจใช้แบตเตอรี่ก็ได้ เรียนรู้วิธีใช้แบตเตอรี่ด้วยตัวเอง ไม่ใช่เรื่องยาก ฉันเลือกที่จะไม่ใช้แบตเตอรี่เนื่องจากพื้นที่ในอุปกรณ์ไม่เพียงพอและความไม่สะดวก
หากคุณสงสัยว่าทำไมต้นแบบของฉันจึงมีเซ็นเซอร์แบบยืดหยุ่นเพียง 3 ตัว ในขณะที่เซ็นเซอร์ 3 ตัวเสียในระหว่างการบัดกรี นั่นเป็นสาเหตุที่ฉันแนะนำให้คุณระมัดระวังเมื่อทำการบัดกรี เซ็นเซอร์ความยืดหยุ่นในนิ้วกลางก็หักเช่นกัน แต่ฉันไม่รู้จนกระทั่งได้บัดกรีมัน
ในทางอุดมคติ หน่วยวัดแรงเฉื่อย (IMU) จะต้องมีประโยชน์มากกว่านี้มากสำหรับโปรเจ็กต์นี้ แต่เนื่องด้วยปัจจัยที่น่าหงุดหงิดบางประการ ฉันจึงไม่สามารถรับมันได้ทันเวลา
เมื่อคุณบัดกรีเสร็จแล้ว ผลิตภัณฑ์ขั้นสุดท้ายควรมีลักษณะดังนี้:
รูปที่ 9 ต้นแบบ
สำหรับแอพ Android คุณสามารถเลือกสร้างแอพด้วยตัวเองได้โดยใช้ MIT App Inventor 2 หรือเครื่องมืออื่นใดที่คุณเชี่ยวชาญในฐานะนักพัฒนา Android หากคุณต้องการให้สร้างแอปของฉัน โปรดระบุไว้ในความคิดเห็นเนื่องจากคุณจะต้องพูดคุยกับฉันโดยตรง แอปพลิเคชันมีลักษณะดังต่อไปนี้:
รูปที่ 10 แอป Android
แผนผังวงจร
แผนผังวงจรนี้สร้างขึ้นโดยใช้วิธีการประกอบด้วยมือและแสดงให้เห็นวิธีเชื่อมต่อส่วนประกอบต่างๆ เข้าด้วยกัน
โปรดทราบว่าการใช้ LCD ถือเป็นทางเลือกที่คุณควรทำ แม้ว่าฉันจะรวม LCD ไว้ในแผนผัง แต่ฉันก็ไม่ได้รวมไว้ในต้นแบบสุดท้ายและสุดท้ายก็ใช้เพียงแอป Android ที่ฉันพัฒนาขึ้นเท่านั้น
สุดท้ายฉันใช้ Arduino Mega ในแผนผังแต่ใช้ Nano ในต้นแบบสุดท้าย
แผนภาพนี้แสดงภาพรวมทั่วไปว่าส่วนประกอบต่างๆ เชื่อมต่อกันอย่างไร ได้รับการออกแบบด้วยการฟริตซิ่ง
โค้ดสำหรับ การทำงานของArduino
ทำการปรับเปลี่ยนที่จำเป็น จากนั้นอัปโหลดโค้ดไปยัง Arduino Nano
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
const int flex1 = A0;
const int flex2 = A1;
const int flex3 = A2;
const int xpin = A3; // x-axis of the accelerometer
const int ypin = A4; // y-axis
const int zpin = A5; // z-axis (only on 3-axis models)
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mySerial.begin(9600);
delay(15000);
}
void loop() {
// put your main code here, to run repeatedly:
int x = analogRead(xpin);
delay(50);
int y = analogRead(ypin);
delay(50);
int z = analogRead(zpin);
delay(50);
int thumb;
int pointer;
int middle;
int nomx;
int nomy;
int nomz;
thumb = analogRead(flex1);
pointer = analogRead(flex2);
middle = analogRead(flex3);
nomx = x-265;
nomy = y-253;
nomz = z-323;
Serial.print(thumb);
Serial.print("\t");
Serial.print(pointer);
Serial.print("\t");
Serial.print(middle);
Serial.print("\t");
Serial.print(nomx);
Serial.print("\t");
Serial.print(nomy);
Serial.print("\t");
Serial.print(nomz);
Serial.print("\n");
Serial.println("");
delay(500);
//group1
if ((thumb > 175) && (thumb < 210) && (pointer > 210) && (pointer < 235) && (nomy > 75) && (nomy < 95)) {
mySerial.print("LOOK FORWARD");
}
else if ((thumb > 175) && (thumb < 200) && (pointer > 210) && (pointer < 235) && (nomy > 160) && (nomy < 175)) {
mySerial.print("LOOK DOWN");
}
else if ((thumb > 175) && (thumb < 200) && (pointer > 210) && (pointer < 230)&& (nomy > 20) && (nomy < 35)) {
mySerial.print("LOOK UP");
}
//group2
else if ((thumb > 160) && (thumb < 195) &&(pointer > 160) && (pointer < 200) && (nomy > 28) && (nomy < 43)) {
mySerial.print("OKAY");
}
else if ((thumb > 190) && (thumb < 210) && (pointer > 180) && (pointer < 200) && (nomy > 160) && (nomy < 180)) {
mySerial.print("HOLD");
}
else if ((thumb > 160) && (thumb < 200) &&(pointer > 160) && (pointer < 190) && (nomy > 60) && (nomy < 75)) {
mySerial.print("PRONTO");
}
//group3
else if ((thumb > 230) && (thumb < 250) && (pointer > 150) && (pointer < 180) && (nomy >80) && (nomy < 100)) {
mySerial.print("CALL ME");
}
else if ((thumb > 230) && (thumb < 250) && (pointer > 150) && (pointer < 180) && (nomy >105) && (nomy < 125)) {
mySerial.print("THUMBS DOWN");
}
else if ((thumb > 230) && (thumb < 250) && (pointer > 150) && (pointer < 189) && (nomy >58) && (nomy < 70)) {
mySerial.print("I LOVE YOU");
}
else if ((thumb > 230) && (thumb < 250) && (pointer > 220) && (pointer < 235) && (nomy > 80) && (nomy < 105)) {
mySerial.print("GIVE ME");
}
else if ((thumb > 175) && (thumb < 195) && (pointer > 170) && (pointer < 190) && (nomy > 90) && (nomy < 110)) {
mySerial.print("GIVE ME SOME");
}
else{
mySerial.print("...");
}
}