เครื่องวัดความจุถังเก็บน้ำฝนแบบอัลตราโซนิก: 10 ขั้นตอน (พร้อมรูปภาพ)
เครื่องวัดความจุถังเก็บน้ำฝนแบบอัลตราโซนิก: 10 ขั้นตอน (พร้อมรูปภาพ)
Anonim
เครื่องวัดความจุถังน้ำฝนอัลตราโซนิก
เครื่องวัดความจุถังน้ำฝนอัลตราโซนิก

หากคุณเป็นเหมือนฉันและมีจิตสำนึกด้านสิ่งแวดล้อมเล็กน้อย (หรือเป็นเพียงสกินฟลินท์ที่อยากประหยัดเงินไม่กี่ดอลลาร์ - ซึ่งก็คือฉันด้วย…) คุณอาจมีถังเก็บน้ำฝน ฉันมีถังเก็บน้ำสำหรับเก็บฝนที่ค่อนข้างไม่บ่อยที่เราได้รับในออสเตรเลีย - แต่พ่อหนุ่ม ที่ฝนตกที่นี่ ฝนตกจริงๆ! ถังของฉันสูงประมาณ 1.5 ม. และอยู่บนฐาน หมายความว่าฉันต้องเดินออกไปเพื่อตรวจสอบระดับน้ำ (หรือ - เพราะฉันขี้เกียจมาก เลยเอาถังแก๊สเก่าๆ จากเตาบาร์บีคิวไปวางบนถังแก๊สที่ล่อไปอย่างล่อแหลม ขึ้นอยู่อาศัยถาวรเป็น 'ขั้น' ข้างถัง)

ฉันต้องการวิธีตรวจสอบระดับน้ำในถังโดยไม่ต้องปีนและแขวนบนท่อระบายน้ำด้วยมือเดียว (ในขณะที่กังวลว่าจะมีแมงมุมอะไรอยู่เบื้องหลัง - คุณเคยได้ยินเกี่ยวกับแมงมุมออสเตรเลียใช่ไหม) … ดังนั้น ด้วยความสนใจในอุปกรณ์อิเล็กทรอนิกส์ในช่วงท้ายของชีวิต และโคลน Arduino ราคาถูกจากจีนบนอีเบย์ ฉันจึงตัดสินใจสร้าง 'วิดเจ็ต' เพื่อทำงานให้ฉัน

ตอนนี้ วิดเจ็ต 'ความฝัน' ของฉันต้องได้รับการติดตั้งอย่างถาวรในแท็งก์ ใช้แหล่งพลังงานที่ชาร์จด้วยพลังงานแสงอาทิตย์ พร้อมการอ่านข้อมูลจากระยะไกลในโรงรถของฉัน หรืออาจเป็นเครื่องส่งไร้สายที่ใช้บลูทูธที่ฉันสามารถตรวจสอบได้จากโทรศัพท์ของฉัน หรือแม้แต่ อุปกรณ์ประเภท ESP ที่โฮสต์หน้าเว็บที่อัปเดตโดยอัตโนมัติ เพื่อให้ฉันสามารถตรวจสอบระดับน้ำในถังได้จากทุกที่ในโลกผ่านทางอินเทอร์เน็ต… แต่จริงๆ แล้ว - ทำไมฉันถึงต้องการทั้งหมดนี้? ดังนั้นฉันจึงหมุนอุดมคติของฉันกลับไปเล็กน้อย (ค่อนข้างมาก) และขจัดความไร้เหตุผลของโซลูชัน การติดตั้งถาวร การชาร์จด้วยพลังงานแสงอาทิตย์ และความสามารถในการตรวจสอบระดับถังของฉันจากส่วนหลังสุด (เสมอ) สมมติว่าส่วนหลังของ Beyond มี WiFi ให้ใช้งาน นั่นคือ…)

โปรเจ็กต์ที่ได้นั้นถูกลดระดับลงในยูนิตมือถือที่เห็นด้านบน ซึ่งสามารถถือไว้เหนือการเปิดถังและเปิดใช้งานโดยปุ่มกดพร้อมการอ่านข้อมูลดิจิทัลที่สามารถอ่านได้จากระดับพื้นดิน - ใช้งานได้จริงมากกว่า

ขั้นตอนที่ 1: คณิตศาสตร์…

หลังจากที่ได้ลองคิดหลายๆ อย่างเกี่ยวกับวิธีการกำหนดระดับน้ำแล้ว ฉันตัดสินใจใช้เครื่องส่ง/เครื่องรับแบบอัลตราโซนิกเป็นพื้นฐานสำหรับวิดเจ็ตของฉัน และใช้ Arduino เพื่ออ่านค่าและคำนวณทุกอย่าง ค่าที่อ่านได้จากเซ็นเซอร์คือ (ทางอ้อม) ในรูปแบบของระยะทาง - จากเซ็นเซอร์อัลตราโซนิกไปยังพื้นผิวที่เด้งออก (ผิวน้ำ - หรือก้นถังถ้าว่างเปล่า) และกลับมาอีกครั้ง ดังนั้นเราจึงต้องการ เพื่อทำบางสิ่งกับสิ่งนี้ เพื่อให้ได้เปอร์เซ็นต์ที่เหลืออยู่ในถัง

NB - ในความเป็นจริง ค่าที่ส่งคืนจากเซ็นเซอร์เป็นเพียงเวลาที่สัญญาณออกจากฝั่งอีซีแอลและกลับไปยังเครื่องรับ นี่คือหน่วยไมโครวินาที แต่การรู้ความเร็วของเสียงคือ 29 ไมโครวินาทีต่อเซนติเมตร (อะไรนะ คุณไม่รู้หรอกเหรอ Pfft…) ทำให้การแปลงจากช่วงเวลาหนึ่งเป็นการวัดระยะทางเป็นเรื่องง่าย

ภาพ
ภาพ

ก่อนอื่น - แน่นอน เราต้องหารระยะทางด้วย 2 เพื่อให้เซ็นเซอร์มีระยะห่างจากพื้นผิว จากนั้นลบระยะทางคงที่จากเซ็นเซอร์ไปที่ความลึกของน้ำ 'สูงสุด' ค่าที่เหลือคือความลึกของน้ำที่ใช้ ถัดไป ลบค่านั้นออกจากความลึกของน้ำสูงสุด เพื่อหาความลึกของน้ำที่เหลืออยู่ในถัง

ค่านี้เป็นพื้นฐานสำหรับการคำนวณอื่น ๆ เช่นการหาความลึกของน้ำเป็นเปอร์เซ็นต์ของความลึกสูงสุดหรือคูณความลึกด้วย 'พื้นที่ผิว' คงที่เพื่อให้ได้ปริมาตรน้ำที่สามารถแสดงผลได้ เป็นลิตร (หรือแกลลอนหรือหน่วยอื่น ๆ - ตราบใดที่คุณรู้คณิตศาสตร์ที่จะทำ - ฉันยึดเปอร์เซ็นต์เพื่อความเรียบง่าย)

ขั้นตอนที่ 2: การปฏิบัติจริง

ตัวเครื่องสามารถถือได้ด้วยมือ แต่สิ่งนี้ทำให้เกิดความคลาดเคลื่อนเล็กน้อยที่อาจเกิดขึ้นได้ หากไม่ได้ถือเครื่องไว้ที่เดียวกันและอยู่ในมุมเดียวกันทุกครั้ง แม้ว่ามันจะเป็นข้อผิดพลาดเพียงเล็กน้อย และอาจจะไม่ใช่แม้แต่ข้อผิดพลาดที่จะลงทะเบียน แต่มันก็เป็นสิ่งที่คอยกวนใจฉัน

อย่างไรก็ตาม การถือด้วยมือนั้นทำให้เกิดความเป็นไปได้ที่ยิ่งใหญ่กว่านั้นมากที่สิ่งที่ถูกสาปแช่งจะตกลงไปในถังและไม่เคยเห็นอีกเลย ดังนั้น เพื่อลดความเป็นไปได้ทั้งสองนี้ ไม้จะถูกยึดเข้ากับความยาวของไม้ จากนั้นจึงวางเหนือช่องเปิดถัง - เพื่อให้การวัดถูกนำมาจากความสูงและมุมที่เท่ากันทุกครั้ง (และหากตกลงไปใน ถังอย่างน้อยไม้จะลอย)

ปุ่มกดเปิดใช้งานหน่วย (โดยไม่จำเป็นต้องมีสวิตช์เปิด/ปิด และความเป็นไปได้ที่แบตเตอรี่จะแบนโดยไม่ได้ตั้งใจ) และทำให้ภาพสเก็ตช์ใน Arduino สว่างขึ้น การดำเนินการนี้ใช้การอ่านจำนวนหนึ่งจาก HC-SR04 และใช้ค่าเฉลี่ย (เพื่อลดการอ่านที่ไม่แน่นอน)

ฉันยังใส่โค้ดเล็กน้อยเพื่อตรวจสอบพิน I/O ดิจิทัลของ Arduino สูงหรือต่ำ และใช้สิ่งนั้นเพื่อทำให้ยูนิตอยู่ในโหมดที่ฉันเรียกว่า 'การปรับเทียบ' ในโหมดนี้ จอแสดงผลจะแสดงระยะทางจริง (หารด้วย 2) ที่เซ็นเซอร์ส่งกลับมา ดังนั้นฉันจึงสามารถตรวจสอบความถูกต้องของระยะห่างกับตลับเมตรได้

ขั้นตอนที่ 3: ส่วนผสม

หน่วยประกอบด้วยสามองค์ประกอบหลัก …

ภาพ
ภาพ
  1. โมดูลเครื่องส่ง/รับอัลตราโซนิก HC-SR04
  2. ไมโครคอนโทรลเลอร์ Arduino Pro Mini
  3. จอแสดงผล LED 7 เซ็กเมนต์ 4 หลักหรือ 'โมดูล' เช่น TM1637

ข้อมูลทั้งหมดข้างต้นสามารถพบได้ง่ายบนอีเบย์ โดยเพียงแค่ค้นหาคำที่แสดงเป็นตัวหนา

ในแอปพลิเคชันนี้ การแสดงผลใช้ตัวเลข 3 หลักเพื่อแสดงค่า % 0-100 หรือ 4 หลักเพื่อแสดงจำนวนลิตร (สูงสุด 2000 ในกรณีของฉัน) ดังนั้นการแสดงผล 4 หลักใดๆ จะทำได้ - คุณไม่จำเป็นต้องทำ กังวลว่าโมดูลจะมีจุดทศนิยมหรือทศนิยมหรือไม่ 'โมดูล' ของจอแสดงผล (LED ที่ติดตั้งบนบอร์ดฝ่าวงล้อมพร้อมชิปอินเตอร์เฟส) นั้นง่ายกว่า เนื่องจากใช้การเชื่อมต่อพินน้อยลง แต่ Arduino อาจมีจอแสดงผล LED ดิบที่มี 12 พินพร้อมการปรับเปลี่ยนโค้ดเล็กน้อย (อันที่จริงการออกแบบดั้งเดิมของฉันขึ้นอยู่กับการตั้งค่านี้) อย่างไรก็ตาม โปรดทราบว่าการใช้จอแสดงผล LED แบบดิบนั้นต้องใช้ตัวต้านทาน 7 ตัวเพื่อจำกัดกระแสที่ดึงออกมาโดยแต่ละส่วน ฉันบังเอิญมีโมดูลแสดงนาฬิกา TM1637 พร้อมใช้งาน ดังนั้นฉันจึงตัดสินใจใช้สิ่งนั้น

บิตและบ็อบเสริมประกอบด้วยคลิปแบตเตอรี่ 9 โวลต์ (และแบตเตอรี่อย่างเห็นได้ชัด) สวิตช์ปุ่มกดแบบ 'กดเพื่อทำ' ชั่วขณะ กล่องโปรเจ็กต์ หมุดส่วนหัว สายเชื่อมต่อ และไม้ยาว 2"x4" ที่เกิน เส้นผ่านศูนย์กลางของการเปิดถัง

ชิ้นส่วนและบ็อบเสริม (นอกเหนือจากท่อนซุง) ถูกซื้อจากร้านจำหน่ายอุปกรณ์อิเล็กทรอนิกส์สำหรับงานอดิเรกในท้องถิ่นของฉัน ซึ่งก็คือ Jaycar ในออสเตรเลีย ฉันคิดว่า Maplin ในสหราชอาณาจักรจะเป็นทางเลือกที่เหมาะสม และฉันคิดว่ามีเพียงไม่กี่แห่งในสหรัฐอเมริกา เช่น Digikey และ Mouser สำหรับประเทศอื่น ๆ ฉันเกรงว่าฉันไม่รู้ แต่ฉันแน่ใจว่าหากคุณไม่มีร้านค้าบนถนนหรือซัพพลายเออร์ออนไลน์ที่เหมาะสมในประเทศของคุณ ผู้ขาย ebay ของจีนจะเข้ามาหาคุณ หากคุณไม่ ใจที่รอการจัดส่งสองสามสัปดาห์ (แดกดันแม้จะเป็นหนึ่งในเพื่อนบ้านที่ใกล้ที่สุดของเรา 6 สัปดาห์หรือมากกว่านั้นไม่ใช่เรื่องผิดปกติสำหรับการจัดส่งจากจีนไปยังออสเตรเลียจากจีน!)

ตรวจสอบให้แน่ใจว่าคุณได้กล่องโปรเจ็กต์ที่ใหญ่พอ - ฉันเดาเองก่อนที่จะมีส่วนประกอบต่างๆ และมันเป็นการบีบที่แน่นจริงๆ - ฉันอาจต้องใช้ปุ่มกดแบบอื่นที่ใช้พื้นที่น้อยลง

โอ้ อีกอย่าง ความยาวของท่อนซุงเพิ่งมาจากเศษซากที่ฉันเก็บไว้ที่มุมโรงรถของฉัน

เมื่อคุณเข้าใจแผนผังและฟังก์ชันการทำงานแล้ว คุณอาจตัดสินใจปรับเวอร์ชันของคุณ และรวมสวิตช์เปิด/ปิด หรือใช้แหล่งพลังงาน Li-Ion 18650 พร้อมแผงโซลาร์เซลล์และตัวควบคุมการชาร์จเพื่อให้มีการเติมพลังงานอย่างต่อเนื่องและพร้อมใช้งาน หรือเปลี่ยนจอแสดงผล LED แบบธรรมดาสำหรับ LCD แบบหลายบรรทัดหรือ OLED แบบกราฟิกพร้อมตัวเลือกการแสดงข้อมูลเพิ่มเติม เช่น แสดงเปอร์เซ็นต์และลิตรที่เหลืออยู่พร้อมกัน หรือคุณอาจเลือกหน่วย IoT ไร้สายที่เต้นได้ครบทุกเสียงที่ติดตั้งถาวรในถังที่มีการชาร์จพลังงานแสงอาทิตย์ ฉันชอบที่จะได้ยินเกี่ยวกับรูปแบบและการปรับเปลี่ยนของคุณ

ขั้นตอนที่ 4: การทดสอบต้นแบบ (และรหัส)

หลังจากซื้อ HC-SR04 จากแหล่งภาษาจีนราคาถูกบนอีเบย์ ฉันไม่ได้คาดหวังว่าจะได้รับยูนิตที่มีความแม่นยำสูงมาก ดังนั้นฉันจึงต้องการทดสอบบนเขียงหั่นขนมก่อน เผื่อว่าฉันจำเป็นต้องเพิ่มรหัสแก้ไขระยะทางเข้าไป ร่างของฉัน

ณ จุดนี้ฉันกำลังค้นหาข้อมูลพื้นฐานเกี่ยวกับวิธีเชื่อมต่อและใช้ HC-SR04 และต้องยอมรับ "ตัวอย่าง Arduino และ HC-SR04 แบบง่าย" ที่สอนได้ของ jsvester ตัวอย่างและประสบการณ์ของเขาเป็นจุดเริ่มต้นที่ดีสำหรับฉันในการเริ่มเขียนโค้ด

ฉันพบไลบรารีฟังก์ชัน NewPing สำหรับ HC-SR04 ซึ่งรวมถึงฟังก์ชันในตัวเพื่ออ่านค่าเฉลี่ยของการอ่านหลายๆ ครั้ง ซึ่งจะทำให้โค้ดของฉันง่ายขึ้นมาก

ฉันพบห้องสมุดสำหรับโมดูลแสดงนาฬิกา TM1637 ด้วย ซึ่งทำให้การแสดงตัวเลขง่ายขึ้นมาก ในรหัสเดิมของฉัน (สำหรับการแสดงส่วน 4 หลัก 7 ส่วน) ฉันต้องแบ่งตัวเลขออกเป็นตัวเลขแต่ละหลัก จากนั้นจึงสร้างแต่ละหลักบนจอแสดงผลโดยรู้ว่าต้องให้ส่วนใดสว่าง จากนั้นจึงวนไปตามตัวเลขแต่ละหลักในตัวเลข และสร้างตัวเลขนั้นบนตัวเลขที่แสดงที่เหมาะสม วิธีนี้เรียกว่ามัลติเพล็กซ์ และแสดงตัวเลขเพียงหลักเดียวในแต่ละครั้งอย่างมีประสิทธิภาพ แต่หมุนเวียนจากหลักหนึ่งไปยังหลักถัดไปอย่างรวดเร็วจนสายตามนุษย์ไม่สังเกตเห็น และหลอกให้คุณเชื่อว่าตัวเลขทั้งหมดเปิดอยู่ ในเวลาเดียวกัน. เช่นเดียวกับไลบรารี HC-SR04 ที่ทำให้การวัดค่าทำได้ง่ายขึ้น ไลบรารีแสดงผลนี้จะดูแลมัลติเพล็กซ์และการจัดการตัวเลขทั้งหมด หน้าอ้างอิง Arduino ที่ลิงก์ไปด้านบน ให้ตัวอย่าง และแน่นอนว่าแต่ละไลบรารีมาพร้อมกับโค้ดตัวอย่างที่สามารถช่วยได้มาก

ภาพ
ภาพ
ภาพ
ภาพ

NS

ดังนั้น รูปภาพด้านบนแสดงอุปกรณ์ทดสอบของฉัน - ฉันกำลังทดสอบกับ Arduino Uno ของฉันเพื่อความง่าย เนื่องจากได้ตั้งค่าไว้แล้วสำหรับการเชื่อมต่อซ้ำชั่วคราวสำหรับการสร้างต้นแบบ เครื่องทำงานในโหมด 'การปรับเทียบ' ที่นี่ (สังเกตว่าพินดิจิตอล 10 - สายสีขาว - เชื่อมต่อกับกราวด์) และอ่านได้อย่างแม่นยำ 39 ซม. ไปยังกล่องที่ฉันวางแบบสุ่มไว้ข้างหน้าดังที่แสดงโดยเทปวัด ในโหมดนี้ ฉันแสดง 'c' เล็กก่อนการวัด เพียงเพื่อระบุว่าไม่ใช่การวัดปกติ

เช่นเดียวกับ Vcc (5v) และกราวด์ HC-SR04 ต้องการการเชื่อมต่ออีก 2 การเชื่อมต่อ - ทริกเกอร์ (สีเหลืองถึงพิน 6) และเสียงก้อง (สีเขียวถึงพิน 7) จอแสดงผลยังต้องการ Vcc (5v) และกราวด์ และอีก 2 การเชื่อมต่อ - นาฬิกา (สีน้ำเงินถึงพิน 8) และ DIO (สีม่วงถึงพิน 9) ดังที่ได้กล่าวไปแล้ว โหมดการทำงานจะถูกควบคุมโดยพิน 10 (สีขาว) สูงหรือต่ำ การเชื่อมต่อจะใช้พินเดียวกันบน Arduino Pro Mini แต่จะถูกบัดกรีอย่างถาวร โหมดการทำงานจะสามารถเลือกได้โดยใช้จัมเปอร์ข้ามสองในสามพินส่วนหัว เชื่อมต่อกับ Vcc, พิน 10 และกราวด์ตามลำดับ

ข้อมูลจำเพาะอย่างเป็นทางการสำหรับ HC-SR04 อ้างว่ามีข้อผิดพลาดสูงสุดเพียง 3 มม. จนถึงระยะการทำงานสูงสุดที่ออกแบบไว้ที่ 4 เมตร ลองนึกภาพว่าฉันประหลาดใจที่พบว่าหน่วยของฉันมีความแม่นยำถึงระดับนั้นถึง 2 เมตรอย่างแน่นอน - ซึ่ง ดีเกินความจำเป็น เนื่องจากพื้นที่จำกัดสำหรับการตั้งค่าการทดสอบที่รวดเร็วและสกปรก ผลการทดสอบของฉันที่อยู่นอกเหนือระยะทางนั้นได้รับความเสียหายจากการสะท้อนจากพื้นผิวอื่นที่ไม่ใช่เป้าหมายการทดสอบของฉัน เนื่องจากลำแสงจากเครื่องส่งสัญญาณกระจายออกไปและใช้พื้นที่กว้างขึ้น แต่ตราบใดที่มันดีถึง 1.5 เมตร - นั่นจะช่วยฉันได้อย่างดี ขอบคุณมาก:-)

ขั้นตอนที่ 5: เกจวัดน้ำฝน Ino Sketch

มีการแนบโค้ดฉบับเต็มมาด้วย แต่ฉันจะรวมข้อมูลบางส่วนไว้ด้านล่างเพื่ออธิบายขั้นตอนบางอย่าง

ก่อนอื่นการตั้งค่า…

#รวม

#include #include // พินสำหรับ HC-SR04 #define pinTrig 6 #define pinEcho 7 โซนาร์ NewPing (pinTrig, pinEcho, 155); // 400 ซม. สูงสุดสำหรับ HC-SR04, 155 ซม. สูงสุดสำหรับถัง // หมุดเชื่อมต่อโมดูล LED (พินดิจิตอล) #define CLK 8 #define DIO 9 TM1637จอแสดงผลแสดงผล (CLK, DIO); // พินอื่นๆ #define opMode 10

เช่นเดียวกับไลบรารี TM1637 และ NewPing ฉันได้รวมไลบรารีคณิตศาสตร์ไว้ด้วย ซึ่งทำให้ฉันสามารถเข้าถึงฟังก์ชัน 'การปัดเศษ' ฉันใช้สิ่งนี้ในวิชาคณิตศาสตร์บางส่วนเพื่อให้ฉันสามารถแสดงเปอร์เซ็นต์ที่ใกล้เคียงที่สุด 5% เป็นต้น

ถัดไป หมุดสำหรับอุปกรณ์ทั้งสองจะถูกกำหนด และอุปกรณ์เริ่มต้น

สุดท้าย ฉันกำหนดพิน 10 สำหรับโหมดการทำงาน

// กำหนดเซ็กเมนต์ทั้งหมดสำหรับตัวเลขทั้งหมด

uint8_t ไบต์ = { 0x00, 0x00, 0x00, 0x00 }; display.setSegments (ไบต์);

โค้ดส่วนนี้สาธิตวิธีหนึ่งในการควบคุมโมดูลการแสดงผล ซึ่งช่วยให้สามารถควบคุมแต่ละส่วนในแต่ละหลักได้ ฉันได้ตั้งค่า 4 องค์ประกอบในอาร์เรย์ที่เรียกว่าไบต์เป็นศูนย์ทั้งหมด นั่นหมายความว่าแต่ละบิตของแต่ละไบต์เป็นศูนย์ 8 บิตใช้เพื่อควบคุมแต่ละเซ็กเมนต์ 7 ส่วนและจุดทศนิยม (หรือทศนิยมในการแสดงประเภทนาฬิกา) ดังนั้นหากบิตทั้งหมดเป็นศูนย์ ก็จะไม่มีส่วนใดติดสว่าง การดำเนินการ setSegments จะส่งเนื้อหาของอาร์เรย์ไปยังจอแสดงผลและไม่มีอะไรแสดง (ในกรณีนี้) ทุกส่วนปิดอยู่

ภาพ
ภาพ

บิตที่สำคัญที่สุดในไบต์ควบคุม DP จากนั้น 7 บิตที่เหลือจะควบคุม 7 เซ็กเมนต์จาก G ถึง A ในลำดับที่กลับกัน ตัวอย่างเช่น ในการแสดงหมายเลข 1 ต้องใช้กลุ่ม B และ C ดังนั้นการแสดงเลขฐานสองจะเป็น '0b00000110' (ขอบคุณ CircuitsToday.com สำหรับภาพด้านบน)

// อ่าน 10 ครั้ง และใช้ระยะเวลามัธยฐาน

ระยะเวลา int = sonar.ping_median(10); // ระยะเวลาเป็นไมโครวินาที if(duration == 0) // ข้อผิดพลาดในการวัด - สรุปไม่ได้หรือไม่มีเสียงสะท้อน { uint8_t ไบต์ = { 0x00, 0b01111001, 0b01010000, 0b01010000 }; // ส่วนที่จะสะกด "Err" display.setSegments (ไบต์); }

ที่นี่ ฉันกำลังบอกให้ HC-SR04 อ่าน 10 ครั้ง และให้ผลลัพธ์โดยเฉลี่ย หากไม่มีการคืนค่า แสดงว่าหน่วยอยู่นอกช่วง จากนั้นฉันก็ใช้เทคนิคเดียวกับด้านบนเพื่อควบคุมส่วนเฉพาะของตัวเลข 4 หลัก เพื่อสะกดตัวอักษร (ว่าง) E, r และ r การใช้สัญกรณ์ไบนารีทำให้ง่ายต่อการเชื่อมโยงแต่ละบิตกับเซกเมนต์

ขั้นตอนที่ 6: การโหลดรหัสไปยัง Arduino Pro Mini (ไม่มี USB)

อย่างที่ฉันพูดไปก่อนหน้านี้ สินค้าจากผู้ขายอีเบย์ในจีนมักใช้เวลาถึง 6 สัปดาห์ขึ้นไป และการสร้างต้นแบบและการเขียนโค้ดของฉันจำนวนมากเสร็จสิ้นลงในขณะที่รอส่วนประกอบบางอย่างมาถึง - Arduino Pro Mini เป็นหนึ่งในนั้น

สิ่งหนึ่งที่ฉันไม่ได้สังเกตเกี่ยวกับ Pro Mini จนกระทั่งฉันได้สั่งซื้อก็คือมันไม่มีพอร์ต USB สำหรับดาวน์โหลดสเก็ตช์ ดังนั้น หลังจากใช้ Google อย่างบ้าคลั่ง ฉันพบว่ามีสองวิธีในการโหลดภาพสเก็ตช์ในกรณีนี้ วิธีแรกต้องใช้สายเคเบิลพิเศษที่ต่อจาก USB บนพีซีของคุณ ไปจนถึง 6 พินเฉพาะบน Pro Mini 6 พินกลุ่มนี้เรียกว่าพิน ISP (โปรแกรมเมอร์ในระบบ) และคุณสามารถใช้วิธีนี้กับ Arduino ได้จริงหากต้องการ - แต่เนื่องจากอินเทอร์เฟซ USB นั้นมีอยู่ในตัวแปร Arduino อื่น ๆ เกือบทั้งหมด (I คิด) การใช้ตัวเลือกนั้นง่ายกว่ามาก วิธีอื่นกำหนดให้คุณต้องมี Arduino อีกตัวที่มีอินเทอร์เฟซ USB เพื่อทำหน้าที่เป็น 'ไประหว่าง'

โชคดีที่การมี Arduino Uno ของฉันหมายความว่าฉันสามารถใช้วิธีที่สองซึ่งฉันจะสรุปให้คุณด้านล่าง มันถูกเรียกว่าโดยใช้ 'Arduino เป็น ISP' โดยสรุป คุณโหลดภาพสเก็ตช์พิเศษลงบน Arduino 'go-between' ซึ่งจะเปลี่ยนให้เป็น Serial Interface จากนั้นโหลดภาพร่างจริงของคุณ แต่แทนที่จะใช้ตัวเลือกการอัปโหลดปกติ คุณใช้ตัวเลือกจากเมนู IDE ที่อัปโหลด ' โดยใช้ Arduino เป็น ISP ' จากนั้น Arduino 'ไประหว่าง' จะนำร่างจริงของคุณจาก IDE และส่งผ่านไปยังพิน ISP ของ Pro Mini แทนที่จะโหลดลงในหน่วยความจำของตัวเอง ไม่ยากเมื่อคุณเข้าใจถึงวิธีการทำงาน แต่มันเป็นความซับซ้อนอีกชั้นที่คุณอาจต้องการหลีกเลี่ยง หากเป็นกรณีนี้ หรือคุณไม่มี Arduino ตัวอื่นที่คุณสามารถใช้เป็น 'ไป-ระหว่าง' ได้ คุณอาจต้องการซื้อ Arduino Nano หรือโมเดลฟอร์มแฟคเตอร์ขนาดเล็กรุ่นอื่นๆ ที่มีอินเทอร์เฟซ USB และทำให้การเขียนโปรแกรมมีโอกาสง่ายขึ้น

ต่อไปนี้คือแหล่งข้อมูลบางส่วนที่คุณอาจพบว่ามีประโยชน์ในการทำความเข้าใจกระบวนการ Arduino Reference หมายถึงการเบิร์น bootloader ใหม่ไปยังอุปกรณ์เป้าหมายโดยเฉพาะ แต่คุณสามารถโหลดสเก็ตช์ได้อย่างง่ายดายในลักษณะเดียวกัน ฉันพบว่าวิดีโอของ Julian Ilett ทำให้แนวคิดชัดเจนขึ้นมาก แม้ว่าเขาจะข้ามส่วนในข้อมูลอ้างอิง Arduino ที่อธิบายวิธีการต่อ Arduinos ทั้งสองเข้าด้วยกัน และตั้งโปรแกรมชิปเปล่าบนเขียงหั่นขนมแทน

  • คู่มืออ้างอิง Arduino - การใช้ Arduino เป็น ISP
  • วิดีโอ YouTube ของ Julian Ilett - การใช้ Arduino เป็น ISP

เนื่องจาก Pro Mini ไม่มีหมุด ISP 6 ตัวที่จัดกลุ่มไว้ด้วยกันอย่างสะดวก คุณจึงต้องถอดรหัสพินดิจิทัลที่เกี่ยวข้องกับพินการเขียนโปรแกรม 4 พิน (อีกสองการเชื่อมต่อเป็นเพียง Vcc และ Gnd ดังนั้นจึงค่อนข้างตรงไปตรงมา) โชคดีสำหรับคุณ ฉันผ่านมันมาแล้ว - และยินดีที่จะแบ่งปันความรู้กับคุณ - ฉันเป็นคนใจกว้างอะไรเช่นนี้!!

Arduino Uno และอีกหลายๆ ตัวในตระกูล Arduino มี 6 พินที่จัดเรียงอย่างสะดวกในบล็อก 3x2 เช่นนี้ (รูปภาพจาก www.arduino.cc)

ภาพ
ภาพ

น่าเสียดายที่ Pro Mini ไม่มี ดังที่คุณเห็นด้านล่าง อันที่จริงแล้วพวกมันค่อนข้างง่ายต่อการระบุและยังคงจัดเรียงเป็น 2 บล็อกจาก 3 พิน MOSI, MISO และ SCK เหมือนกับพินดิจิทัล 11, 12 และ 13 ตามลำดับทั้งบน Pro Mini และ Arduino Uno และสำหรับการเขียนโปรแกรม ISP เพียงเชื่อมต่อ 11 ถึง 11, 12 ถึง 12 และ 13 ถึง 13 Pro พินรีเซ็ตของ Mini ควรเชื่อมต่อกับ Uno pin 10 และ Vcc (5v)/Ground ของ Pro Mini ควรเชื่อมต่อกับ Arduino +5v/Ground (ภาพจาก www.arduino.cc)

ภาพ
ภาพ

ขั้นตอนที่ 7: การประกอบ

การประกอบ
การประกอบ

ดังที่ฉันได้กล่าวไปแล้ว ฉันถ่อเรือในคดีนี้และรู้สึกเสียใจกับมัน เพื่อให้พอดีกับส่วนประกอบทั้งหมดเป็นสิ่งที่บีบจริง อันที่จริง ฉันต้องงอหน้าสัมผัสของปุ่มกดออกด้านข้าง และใส่บรรจุภัณฑ์ด้านนอกเพื่อยกให้สูงขึ้นอีกเล็กน้อย เพื่อให้พอดีกับความลึกของกล่อง และฉันต้องบดจากแต่ละด้านของกล่อง 2-3 มม. บอร์ดโมดูลการแสดงผลเพื่อให้พอดีเช่นกัน

ฉันเจาะ 2 รูในเคสเพื่อให้เซ็นเซอร์อัลตราโซนิกทะลุผ่าน ฉันเจาะรูให้เล็กเกินไปเล็กน้อย แล้วค่อยๆ เพิ่มขึ้นโดยใช้เครื่องเจียรแบบโรตารี่ขนาดเล็ก เพื่อให้สามารถ 'พอดีดัน' ได้ น่าเสียดายที่พวกเขาอยู่ใกล้ด้านข้างเกินกว่าจะสามารถใช้เครื่องบดจากภายในกล่องได้และต้องทำจากภายนอกทำให้เกิดรอยขีดข่วนและรอยสเก็ตมากมายที่เครื่องบดลื่น - อ้ออยู่ด้านล่าง อย่างไรก็ตาม - ใครจะสน..?

จากนั้นฉันก็ตัดช่องที่ปลายด้านหนึ่งซึ่งมีขนาดที่เหมาะสมสำหรับหน้าจอที่จะแหย่เข้าไปอีกครั้ง - ฉันเดาว่าขนาดกล่องทำให้ฉันอยู่ที่ด้านหลังเนื่องจากช่องเสียบทิ้งฉันไว้กับชิ้นส่วนที่บางเฉียบเหนือจอแสดงผลซึ่งแตกหักอย่างหลีกเลี่ยงไม่ได้ในขณะที่ฉันยื่นมันอย่างราบรื่น โอ้ นั่นคือสิ่งที่ซุปเปอร์กลูถูกคิดค้นสำหรับ…

สุดท้าย โดยที่ส่วนประกอบทั้งหมดอยู่ในตำแหน่งคร่าวๆ ในกล่อง ฉันวัดตำแหน่งที่จะวางรูในฝาปิด เพื่อให้ร่างกายของปุ่มกดตกลงไปในพื้นที่ว่างสุดท้าย แค่!!!

ต่อไป ฉันบัดกรีส่วนประกอบทั้งหมดเข้าด้วยกันเพื่อทดสอบว่าส่วนประกอบทั้งหมดยังคงทำงานหลังจากการดัด เจียร และตัดแต่ง ก่อนที่จะประกอบเข้าด้วยกันทั้งหมดลงในเคส คุณสามารถเห็นการเชื่อมต่อจัมเปอร์ด้านล่างโมดูลแสดงผล โดยมีพิน 10 บน Arduino (สายสีขาว) ที่เชื่อมต่อกับ Gnd ซึ่งทำให้เครื่องอยู่ในโหมดการปรับเทียบมาตรฐาน จอแสดงผลอ่านได้ 122 ซม. จากม้านั่งของฉัน - มันต้องได้รับสัญญาณที่สะท้อนกลับมาจากด้านบนของกรอบหน้าต่าง (ต่ำเกินไปที่จะเป็นเพดาน)

ภาพ
ภาพ

จากนั้นก็เป็นกรณีของการแยกปืนกาวร้อนออก และใส่รองเท้า-ฮอร์นส่วนประกอบทั้งหมดเข้าที่ เมื่อทำอย่างนั้นแล้ว ฉันพบว่าช่องว่างเล็กๆ ระหว่างส่วนบนของโมดูลแสดงผลกับฝาปิด เมื่อโมดูลถูกยึดเข้าที่ เหลือส่วนที่นูนเล็กน้อยซึ่งฝาปิดจะไม่ค่อยพอดีเท่าที่ฉันต้องการ. ฉันอาจจะลองทำอะไรบางอย่างเกี่ยวกับวันนั้น หรืออาจจะมากกว่านั้น ฉันจะไม่…

ภาพ
ภาพ

ขั้นตอนที่ 8: บทความเสร็จแล้ว

หลังจากการทดสอบหลังการประกอบและการแก้ไขโค้ดของฉันเพื่อพิจารณาความลึกของท่อนไม้ ฉันได้ขันอุปกรณ์เข้าไป (ซึ่งฉันมองข้ามไปโดยสิ้นเชิงในการคำนวณของฉัน - d'oh!!) ก็เสร็จเรียบร้อย. ในที่สุด!

ประกอบการทดสอบ

เมื่อเครื่องเพิ่งนั่งคว่ำหน้าลงบนม้านั่งของฉัน เห็นได้ชัดว่าจะไม่มีสัญญาณสะท้อนกลับ ดังนั้นตัวเครื่องจึงแสดงสภาวะผิดพลาดได้อย่างถูกต้อง เช่นเดียวกันจะเป็นจริงหากพื้นผิวสะท้อนแสงที่ใกล้ที่สุดอยู่นอกช่วงของหน่วย

ภาพ
ภาพ

ดูเหมือนว่าจากม้านั่งของฉันถึงพื้นจะอยู่ที่ 76 ซม. (คือ 72 ซม. บวกกับความลึกของท่อนไม้ 4 ซม.)

ภาพ
ภาพ

ด้านล่างของตัวเครื่องแสดงตัวส่งและตัวรับยื่นออกไปที่ท่อนไม้ - ฉันควรหยุดเรียกมันว่าท่อนไม้จริงๆ - ต่อจากนี้ไปจะเรียกว่าเกจวัดเสถียรภาพและแพลตฟอร์มการจัดตำแหน่งที่แม่นยำ! โชคดีที่นี่อาจเป็นครั้งสุดท้ายที่ฉันจะพูดถึงมัน;-)

Ooh - คุณสามารถเห็นรอยขีดข่วนและรอยสเก็ตที่น่ารังเกียจทั้งหมดได้ในอันนี้…

ภาพ
ภาพ

… และนี่คือรายการสำเร็จรูปที่วางอยู่ในโหมดการทำงานปกติ จริงๆ แล้ววัดความจุของรถถังของฉันให้ใกล้ที่สุด 5% บ่ายวันอาทิตย์ที่ฝนตก (มาก) ที่เห็นฉันทำโปรเจ็กต์นี้เสร็จ จึงมีเม็ดฝนบนยูนิต และการอ่าน 90% ที่น่าพอใจมาก

ภาพ
ภาพ

ฉันหวังว่าคุณจะสนุกกับการอ่านคำแนะนำนี้ และได้เรียนรู้เพียงเล็กน้อยเกี่ยวกับการเขียนโปรแกรม Arduino ฟิสิกส์ และการใช้การสะท้อนโซนาร์/อัลตราโซนิก ข้อผิดพลาดของการใช้การคาดเดาในการวางแผนโครงการของคุณ และคุณได้รับแรงบันดาลใจที่จะทำให้ มาตรวัดถังน้ำฝนเอง - จากนั้นจึงติดตั้งถังเก็บน้ำฝนเพื่อใช้ในขณะที่ช่วยรักษาสิ่งแวดล้อมเพียงเล็กน้อยและประหยัดค่าน้ำของคุณ

โปรดอ่านต่อ - เกิดอะไรขึ้นในวันรุ่งขึ้น…!

ขั้นตอนที่ 9: Postscript - หนึ่งร้อย (และห้า) เปอร์เซ็นต์?

ดังนั้น ในวันจันทร์หลังวันอาทิตย์ที่ฝนตก แท็งก์ก็เต็มอย่างที่สุดเท่าที่จะทำได้ เนื่องจากเป็นหนึ่งในไม่กี่ครั้งที่ฉันเคยเห็นมันเต็มไปหมด ฉันคิดว่านี่จะเป็นเวลาที่เหมาะสมที่สุดที่จะเปรียบเทียบมาตรวัด แต่ลองเดาดูสิ - มันลงทะเบียนเป็น 105% ดังนั้นจึงเห็นได้ชัดว่ามีบางอย่างผิดปกติ

ฉันหยิบก้านวัดระดับน้ำมันออกมาและพบว่าสมมติฐานเดิมของฉันที่ 140 ซม. เป็นความลึกของน้ำสูงสุด และส่วนหัว 16 ซม. (อิงจากการคาดเดาด้วยภาพซึ่งทำจากนอกถัง) ทั้งคู่ต่างจากการวัดจริงเล็กน้อย ด้วยข้อมูลจริงสำหรับเกณฑ์มาตรฐาน 100% ของฉัน ฉันจึงสามารถปรับแต่งโค้ดและโหลด Arduino ซ้ำได้

ความลึกของน้ำสูงสุดคือ 147 ซม. โดยจุดวัดอยู่ที่ 160 ซม. ให้พื้นที่ส่วนหัว 13 ซม. (ผลรวมของส่วนหัวภายในถัง ความสูงของส่วนคอของถัง และความลึกของส่วน… โว้ว ไม่ อะไรนะ ฉันหมายถึงความลึกของเกจ Stabilization และ Precision Placement Platform!)

หลังจากแก้ไขตัวแปร maxDepth และ headroom ให้ถูกต้อง เช่นเดียวกับการรีเซ็ตช่วงสูงสุดของวัตถุโซนาร์เป็น 160 ซม. การทดสอบซ้ำอย่างรวดเร็วพบว่า 100% ลดลงเหลือ 95% เมื่อฉันยกเกจขึ้นเล็กน้อย (เพื่อจำลองปริมาณเล็กน้อยของ ใช้น้ำแล้ว)

งานเสร็จแล้ว!

PS - นี่เป็นความพยายามครั้งแรกของฉันในการสั่งสอน ถ้าคุณชอบสไตล์ของฉัน อารมณ์ขัน ความซื่อสัตย์ต่อการยอมรับความผิดพลาด (เฮ้ - แม้ว่าฉันจะไม่สมบูรณ์แบบ…) ฯลฯ - แจ้งให้เราทราบและอาจกระตุ้นให้ฉันทำอย่างอื่น

ขั้นตอนที่ 10: ภายหลัง

ความจุที่ใช้ได้

เป็นเวลาสองสามสัปดาห์แล้วตั้งแต่ฉันเผยแพร่คำแนะนำนี้ และฉันมีความคิดเห็นมากมายในการตอบกลับ ซึ่งบางส่วนได้แนะนำกลไกทางเลือกบางอย่าง - ทั้งแบบอิเล็กทรอนิกส์และแบบใช้เอง แต่สิ่งนี้ทำให้ฉันคิด และมีบางอย่างที่ฉันน่าจะชี้ให้เห็นในตอนเริ่มต้น

  • ถังของฉันมีปั๊มซึ่งติดตั้งอยู่ที่ระดับพื้นดิน - ต่ำกว่าฐานของถังเล็กน้อย เนื่องจากปั๊มเป็นจุดต่ำสุดในระบบ และน้ำจากปั๊มอยู่ภายใต้แรงดัน ฉันจึงสามารถใช้แทงค์ได้อย่างเต็มประสิทธิภาพ
  • อย่างไรก็ตาม หากถังของคุณไม่มีปั๊มและใช้ระบบป้อนแรงโน้มถ่วง ความจุที่มีประสิทธิภาพของถังจะถูกจำกัดด้วยความสูงของก๊อกของคุณ เมื่อน้ำที่เหลืออยู่ในถังของคุณต่ำกว่าก๊อก น้ำจะไม่ไหล

ดังนั้น ไม่ว่าคุณจะใช้มาตรวัดแบบอิเล็กทรอนิกส์ หรือกระจกมองข้างแบบแมนนวล หรือระบบแบบลอยตัวและแบบธง โปรดระวังว่าหากไม่มีปั๊ม 'ฐาน' ที่มีประสิทธิภาพของถังของคุณจริงๆ แล้วคือความสูงของทางออกของถังหรือ แตะ.

แนะนำ: