- ส่วนประกอบที่ต้องการ:
- คำอธิบายการทำงาน:
- คำอธิบายวงจร:
- คำอธิบายการเขียนโปรแกรม:
- การออกแบบวงจรและ PCB โดยใช้ EasyEDA:
- การคำนวณและการสั่งซื้อตัวอย่างออนไลน์:
แผ่นดินไหวเป็นภัยธรรมชาติที่ไม่อาจคาดเดาได้ซึ่งก่อให้เกิดความเสียหายต่อชีวิตและทรัพย์สิน มันเกิดขึ้นอย่างกะทันหันและเราไม่สามารถหยุดได้ แต่เราสามารถแจ้งเตือนได้ ในยุคปัจจุบันมีเทคโนโลยีมากมายที่สามารถใช้ในการตรวจจับการสั่นและการเคาะเพียงเล็กน้อยเพื่อที่เราจะได้ระมัดระวังก่อนที่จะเกิดการสั่นสะเทือนครั้งใหญ่ในโลก เรากำลังใช้ Accelerometer ADXL335 เพื่อตรวจจับการสั่นสะเทือนก่อนเกิดแผ่นดินไหว Accelerometer ADXL335 มีความไวต่อการสั่นและการสั่นสะเทือนสูงพร้อมกับแกนทั้งสามแกน นี่เรากำลังสร้างArduino ตามแผ่นดินไหวตรวจจับโดยใช้ Accelerometer
เรากำลังสร้างเครื่องตรวจจับแผ่นดินไหวนี้เป็น Arduino Shield บน PCBและจะแสดงกราฟการสั่นสะเทือนบนคอมพิวเตอร์โดยใช้การประมวลผล
ส่วนประกอบที่ต้องการ:
- Arduino UNO
- Accelerometer ADXL335
- 16x2 LCD
- Buzzer
- BC547 ทรานซิสเตอร์
- ตัวต้านทาน 1k
- 10K พอต
- LED
- พาวเวอร์ซัพพลาย 9v / 12v
- Berg เกาะชาย / หญิง
มาตรความเร่ง:
คำอธิบายพินของ accelerometer:
- แหล่งจ่ายไฟ Vcc 5 โวลต์ควรเชื่อมต่อที่ขานี้
- X-OUT พินนี้ให้เอาต์พุตอนาล็อกในทิศทาง x
- Y-OUT พินนี้ให้เอาต์พุตอนาล็อกในทิศทาง y
- Z-OUT พินนี้ให้เอาต์พุตอนาล็อกในทิศทาง z
- GND กราวด์
- ST พินนี้ใช้สำหรับตั้งค่าความไวของเซ็นเซอร์
ตรวจสอบโครงการอื่น ๆ ของเราโดยใช้ Accelerometer:
- เกม Ping Pong โดยใช้ Arduino
- หุ่นยนต์ควบคุมด้วยท่าทางมือแบบ Accelerometer
- ระบบแจ้งเตือนอุบัติเหตุรถยนต์ที่ใช้ Arduino โดยใช้ GPS, GSM และ Accelerometer
คำอธิบายการทำงาน:
การทำงานของเครื่องตรวจจับแผ่นดินไหวนี้ทำได้ง่าย ดังที่เราได้กล่าวไว้ก่อนหน้านี้ว่าเราได้ใช้ Accelerometer ในการตรวจจับการสั่นสะเทือนของแผ่นดินไหวตามแกนใด ๆ ในสามแกนดังนั้นเมื่อใดก็ตามที่เกิดการสั่นสะเทือน accelerometer จะตรวจจับการสั่นสะเทือนและแปลงเป็นค่า ADC ที่เท่ากัน จากนั้นค่า ADC เหล่านี้จะถูกอ่านโดย Arduino และแสดงบนจอ LCD 16x2 เราได้แสดงให้เห็นค่านิยมเหล่านี้บนกราฟโดยใช้การประมวลผลเรียนรู้เพิ่มเติมเกี่ยวกับ Accelerometer โดยดูโครงการ Accelerometer อื่น ๆ ของเราที่นี่
ก่อนอื่นเราต้องปรับเทียบ Accelerometerโดยการเก็บตัวอย่างการสั่นสะเทือนโดยรอบเมื่อใดก็ตามที่ Arduino เพิ่มพลัง จากนั้นเราต้องลบค่าตัวอย่างเหล่านั้นออกจากการอ่านจริงเพื่อให้ได้ค่าที่อ่านจริง จำเป็นต้องมีการปรับเทียบนี้เพื่อที่จะไม่แสดงการแจ้งเตือนเกี่ยวกับการสั่นสะเทือนโดยรอบปกติ หลังจากพบการอ่านจริงแล้ว Arduino จะเปรียบเทียบค่าเหล่านี้กับค่าสูงสุดและต่ำสุดที่กำหนดไว้ล่วงหน้า หาก Arduino พบว่าค่าการเปลี่ยนแปลงมีค่ามากหรือน้อยแสดงว่าค่าที่กำหนดไว้ล่วงหน้าของแกนใด ๆ ในทั้งสองทิศทาง (ลบและบวก) Arduino จะเรียกสัญญาณกริ่งและแสดงสถานะของการแจ้งเตือนบนจอ LCD 16x2 และ LED ก็เปิดเช่นกัน เราสามารถปรับความไวของเครื่องตรวจจับแผ่นดินไหวได้โดยการเปลี่ยนค่าที่กำหนดไว้ล่วงหน้าในรหัส Arduino
วิดีโอสาธิตและรหัส Arduinoมีให้ที่ท้ายบทความ
คำอธิบายวงจร:
วงจรของเครื่องตรวจจับแผ่นดินไหว Arduino Shield PCBยังเรียบง่าย ในโครงการนี้เราได้ใช้ Arduino ที่อ่านแรงดันไฟฟ้าอะนาล็อกของ accelerometer และแปลงเป็นค่าดิจิทัล Arduino ยังขับเสียงกริ่ง LED, LCD 16x2 และคำนวณและเปรียบเทียบค่าและดำเนินการที่เหมาะสม ส่วนถัดไปคือ Accelerometer ซึ่งตรวจจับการสั่นสะเทือนของโลกและสร้างแรงดันไฟฟ้าแบบอะนาล็อกใน 3 แกน (X, Y และ Z) LCD ใช้สำหรับแสดงค่าการเปลี่ยนแปลงของแกน X, Y และ Z และยังแสดงข้อความแจ้งเตือน LCD นี้เชื่อมต่อกับ Arduino ในโหมด 4 บิต RS, GND และ EN พินเชื่อมต่อโดยตรงกับ 9, GND และ 8 พินของ Arduino และพินข้อมูลที่เหลือ 4 พินของ LCD ได้แก่ D4, D5, D6 และ D7 เชื่อมต่อโดยตรงกับพินดิจิทัล 7, 6, 5 และ 4 ของ Arduino. ออดเชื่อมต่อกับพิน 12 ของ Arduino ผ่านทรานซิสเตอร์ NPN BC547 หม้อ 10k ยังใช้สำหรับควบคุมความสว่างของ LCD
คำอธิบายการเขียนโปรแกรม:
ในArduino Shield เครื่องตรวจจับแผ่นดินไหวนี้เราได้สร้างรหัสสองรหัส: รหัสหนึ่งสำหรับ Arduino เพื่อตรวจจับแผ่นดินไหวและอีกรหัสหนึ่งสำหรับการประมวลผล IDE เพื่อพล็อตการสั่นของแผ่นดินไหวบนกราฟบนคอมพิวเตอร์ เราจะเรียนรู้เกี่ยวกับรหัสทั้งสองแบบทีละรายการ:
รหัส Arduino:
ก่อนอื่นเราทำการปรับเทียบมาตรวัดความเร่งตามพื้นผิวการวางเพื่อที่จะไม่แสดงการแจ้งเตือนเกี่ยวกับการสั่นสะเทือนโดยรอบตามปกติ ในการสอบเทียบนี้เราจะนำตัวอย่างบางส่วนแล้วหาค่าเฉลี่ยและเก็บไว้ในตัวแปร
สำหรับ (int i = 0; i
ตอนนี้เมื่อใดก็ตามที่ Accelerometer อ่านค่าเราจะลบค่าตัวอย่างเหล่านั้นออกจากการอ่านเพื่อที่จะไม่สนใจการสั่นสะเทือนของสภาพแวดล้อม
int value1 = analogRead (x); // อ่าน x ออก int value2 = analogRead (y); // อ่าน y ออก int value3 = analogRead (z); // อ่าน z ออก int xValue = xsample-value1; // ค้นหาการเปลี่ยนแปลงใน x int yValue = ysample-value2; // ค้นหาการเปลี่ยนแปลงใน y int zValue = zsample-value3; // ค้นหาการเปลี่ยนแปลงใน z / * การเปลี่ยนค่าแกน x, y และ z บน lcd * / lcd.setCursor (0,1); lcd.print (zValue); lcd.setCursor (6,1); lcd.print (yValue); lcd.setCursor (12,1); lcd.print (zValue); ล่าช้า (100)
จากนั้น Arduino จะเปรียบเทียบค่าที่ปรับเทียบแล้ว (ลบ) กับขีด จำกัด ที่กำหนดไว้ล่วงหน้า และดำเนินการตามนั้น. หากค่าสูงกว่าค่าที่กำหนดไว้ล่วงหน้าระบบจะส่งเสียงบี๊บและพล็อตกราฟการสั่นบนคอมพิวเตอร์โดยใช้การประมวลผล
/ * เปรียบเทียบการเปลี่ยนแปลงกับขีด จำกัด ที่กำหนดไว้ล่วงหน้า * / if (xValue <minVal - xValue> maxVal - yValue <minVal - yValue> maxVal - zValue <minVal - zValue> maxVal) {if (buz == 0) start = มิลลิวินาที (); // ตัวจับเวลาเริ่ม buz = 1; // buzzer / led flag activated} else if (buz == 1) // buzzer flag เปิดใช้งานแล้วแจ้งเตือนแผ่นดินไหว {lcd.setCursor (0,0); lcd.print ("การแจ้งเตือนแผ่นดินไหว"); ถ้า (มิลลิวินาที ()> = เริ่มต้น + buzTime) buz = 0; }
รหัสการประมวลผล:
ด้านล่างนี้คือรหัสการประมวลผลที่แนบมาคุณสามารถดาวน์โหลดรหัสได้จากลิงค์ด้านล่าง:
รหัสประมวลผลเครื่องตรวจจับแผ่นดินไหว
เราได้ออกแบบกราฟโดยใช้การประมวลผลสำหรับการสั่นสะเทือนของแผ่นดินไหวซึ่งเรากำหนดขนาดของหน้าต่างหน่วยขนาดตัวอักษรพื้นหลังการอ่านและการแสดงพอร์ตอนุกรมเปิดพอร์ตอนุกรมที่เลือกเป็นต้น
// กำหนดขนาดหน้าต่าง: และขนาดตัวอักษร f6 = createFont ("Arial", 6, true); f8 = createFont ("Arial", 8, จริง); f10 = createFont ("Arial", 10, จริง); f12 = createFont ("Arial", 12, จริง); f24 = createFont ("Arial", 24, จริง); ขนาด (1200, 700); // แสดงรายการพอร์ตอนุกรมที่มีทั้งหมด println (Serial.list ()); myPort = Serial ใหม่ (นี่คือ "COM43", 9600); println (myPort); myPort.bufferUntil ('\ n'); พื้นหลัง (80)
ในฟังก์ชันด้านล่างนี้เราได้รับข้อมูลจากพอร์ตอนุกรมและดึงข้อมูลที่ต้องการจากนั้นแมปกับขนาดของกราฟ
// แยกค่าที่ต้องการทั้งหมดของแกนทั้งสาม: int l1 = inString.indexOf ("x =") + 2; สตริง temp1 = inString.substring (l1, l1 + 3); l1 = inString.indexOf ("y =") + 2; สตริง temp2 = inString.substring (l1, l1 + 3); l1 = inString.indexOf ("z =") + 2; สตริง temp3 = inString.substring (l1, l1 + 3); // การแมปค่า x, y และ z ที่มีขนาดกราฟลอย inByte1 = float (temp1 + (char) 9); inByte1 = แผนที่ (inByte1, -80,80, 0, ความสูง -80); ลอย inByte2 = ลอย (temp2 + (ถ่าน) 9); inByte2 = แผนที่ (inByte2, -80,80, 0, ความสูง -80); ลอย inByte3 = ลอย (temp3 + (ถ่าน) 9); inByte3 = แผนที่ (inByte3, -80,80, 0, ความสูง -80); ลอย x = แผนที่ (xPos, 0,1120,40, width-40);
หลังจากนี้เราได้พล็อตพื้นที่หน่วยขีด จำกัด สูงสุดและต่ำสุดค่า x, y และแกน z
// การลงจุดกราฟหน้าต่าง unit strokeWeight (2); โรคหลอดเลือดสมอง (175); บรรทัด (0,0,0,100); textFont (f24); เติม (0,00,255); textAlign (ขวา); xmargin ("กราฟ EarthQuake โดย Circuit Digest", 200,100); เติม (100); จังหวะน้ำหนัก (100); บรรทัด (1050,80,1200,80);………………
หลังจากนี้เราจะพล็อตค่าบนกราฟโดยใช้ 3 สีที่ต่างกันเป็นสีน้ำเงินสำหรับค่าแกน x สีเขียวสำหรับแกน y และ z จะแสดงด้วยสีแดง
จังหวะ (0,0,255); ถ้า (y1 == 0) y1 = height-inByte1-shift; เส้น (x, y1, x + 2, height-inByte1-shift); y1 = height-inByte1-shift; จังหวะ (0,255,0); ถ้า (y2 == 0) y2 = height-inByte2-shift; เส้น (x, y2, x + 2, height-inByte2-shift); y2 = height-inByte2-shift; โรคหลอดเลือดสมอง (255,0,0); ถ้า (y2 == 0) y3 = height-inByte3-shift; เส้น (x, y3, x + 2, height-inByte3-shift); y3 = height-inByte3-shift;
เรียนรู้เพิ่มเติมเกี่ยวกับการประมวลผลโดยทำตามโครงการการประมวลผลอื่น ๆ
การออกแบบวงจรและ PCB โดยใช้ EasyEDA:
EasyEDA ไม่ได้เป็นเพียงโซลูชั่นครบวงจรสำหรับการจับแผนผังการจำลองวงจรและการออกแบบ PCB เท่านั้น แต่ยังมีบริการจัดหา PCB Prototype และ Components ที่มีต้นทุนต่ำอีกด้วย พวกเขาเพิ่งเปิดตัวบริการจัดหาชิ้นส่วนซึ่งมีชิ้นส่วนอิเล็กทรอนิกส์จำนวนมากและผู้ใช้สามารถสั่งซื้อส่วนประกอบที่ต้องการพร้อมกับใบสั่ง PCB
ในขณะที่ออกแบบวงจรและ PCB ของคุณคุณยังสามารถกำหนดให้การออกแบบวงจรและ PCB ของคุณเป็นแบบสาธารณะเพื่อให้ผู้ใช้รายอื่นสามารถคัดลอกหรือแก้ไขได้และสามารถใช้ประโยชน์จากที่นั่นได้เราได้ทำให้รูปแบบวงจรและ PCB ทั้งหมดของเราเป็นแบบสาธารณะสำหรับโล่ตัวบ่งชี้แผ่นดินไหวนี้ สำหรับ Arduino UNOตรวจสอบลิงค์ด้านล่าง:
easyeda.com/circuitdigest/EarthQuake_Detector-380c29e583b14de8b407d06ab0bbf70f
ด้านล่างนี้เป็นภาพรวมของเลเยอร์บนสุดของเลย์เอาต์ PCB จาก EasyEDA คุณสามารถดูเลเยอร์ใดก็ได้ (บน, ล่าง, ท็อปซิล, พื้นและอื่น ๆ) ของ PCB โดยเลือกเลเยอร์จากหน้าต่าง 'เลเยอร์'
คุณยังสามารถดู มุมมองภาพถ่ายของ PCB โดยใช้ EasyEDA:
การคำนวณและการสั่งซื้อตัวอย่างออนไลน์:
หลังจากออกแบบ PCB เสร็จแล้วคุณสามารถคลิกไอคอนของ Fabrication output ซึ่งจะนำคุณไปสู่หน้าคำสั่งซื้อ PCB ที่นี่คุณสามารถดู PCB ของคุณใน Gerber Viewer หรือดาวน์โหลดไฟล์ Gerber ของ PCB ของคุณ ที่นี่คุณสามารถเลือกจำนวน PCB ที่คุณต้องการสั่งจำนวนชั้นทองแดงที่คุณต้องการความหนาของ PCB น้ำหนักทองแดงและแม้แต่สี PCB หลังจากที่คุณเลือกตัวเลือกทั้งหมดแล้วให้คลิก "บันทึกลงในรถเข็น" และดำเนินการสั่งซื้อของคุณให้เสร็จสมบูรณ์ เมื่อเร็ว ๆ นี้พวกเขาได้ลดอัตรา PCB ลงอย่างมากและตอนนี้คุณสามารถสั่งซื้อ PCB 2 ชั้น 10 ชิ้นขนาด 10 ซม. x 10 ซม. ในราคาเพียง $ 2
นี่คือ PCBs ที่ฉันได้รับจาก EasyEDA:
ด้านล่างนี้เป็น ภาพสุดท้ายของ Shield หลังจากบัดกรีส่วนประกอบบน PCB: