สารบัญ:
- ขั้นตอนที่ 1: ทำความรู้จักกับ Ultrasonic Distance Sensor
- ขั้นตอนที่ 2: การเลือกบอร์ด ESP8266
- ขั้นตอนที่ 3: สร้างช่อง ThingSpeak
- ขั้นตอนที่ 4: วิธีการตั้งโปรแกรม ESP-12F
- ขั้นตอนที่ 5: การอัปโหลด Sketch
- ขั้นตอนที่ 6: การสร้างวงจรอิเล็กทรอนิกส์
- ขั้นตอนที่ 7: จบเซนเซอร์
วีดีโอ: เซ็นเซอร์วัดระดับตัวเก็บน้ำที่ใช้แบตเตอรี่: 7 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:02
บ้านของเรามีถังเก็บน้ำจากฝนที่ตกลงมาบนหลังคา และใช้สำหรับห้องน้ำ เครื่องซักผ้า และรดน้ำต้นไม้ในสวน ในช่วงสามปีที่ผ่านมา ฤดูร้อนแห้งมาก ดังนั้นเราจึงจับตาดูระดับน้ำในถัง จนถึงตอนนี้เราใช้แท่งไม้ซึ่งเราใส่ในถังและทำเครื่องหมายระดับ แต่มันต้องสามารถปรับปรุงได้อย่างแน่นอน!
นี่คือที่มาของโครงการนี้ แนวคิดคือการติดเซ็นเซอร์วัดระยะอัลตราโซนิกที่ด้านบนของถัง เซ็นเซอร์นี้ทำงานเป็นคลื่นเสียงที่เปล่งโซนาร์ ซึ่งสะท้อนจากผิวน้ำ จากเวลาที่คลื่นกลับมาและความเร็วของเสียง คุณสามารถคำนวณระยะทางไปยังผิวน้ำและกำหนดว่าถังเต็มได้แค่ไหน
เนื่องจากฉันไม่มีสายไฟหลักใกล้กับถังเก็บน้ำ อุปกรณ์ทั้งหมดจึงต้องใช้แบตเตอรี่ ซึ่งหมายความว่าฉันต้องมีสติเกี่ยวกับการใช้พลังงานของทุกส่วน ในการส่งข้อมูลกลับ ฉันตัดสินใจใช้ Wifi ในตัวของไมโครชิป ESP8266 แม้ว่า Wifi จะค่อนข้างกินไฟ แต่ก็มีข้อได้เปรียบเหนือการเชื่อมต่อวิทยุประเภทอื่น: คุณสามารถเชื่อมต่อโดยตรงกับเราเตอร์ไร้สายของบ้านโดยไม่ต้องสร้างอุปกรณ์อื่นที่ทำหน้าที่เป็นรีเลย์
เพื่อประหยัดพลังงาน ฉันจะให้ ESP8266 หลับสนิทเป็นส่วนใหญ่ และทำการวัดทุกชั่วโมง สำหรับจุดประสงค์ของฉันในการติดตามระดับน้ำนี้มากเกินพอ ข้อมูลจะถูกส่งไปยัง ThingSpeak และสามารถอ่านข้อมูลบนสมาร์ทโฟนผ่านแอพได้
อีกหนึ่งรายละเอียด! ความเร็วของเสียง ซึ่งจำเป็นสำหรับการวัดระยะทาง ขึ้นอยู่กับอุณหภูมิและความชื้นในระดับที่น้อยกว่า สำหรับการวัดภายนอกที่แม่นยำตามฤดูกาล เราจะใส่เซ็นเซอร์ BME280 ซึ่งวัดอุณหภูมิ ความชื้น และความดัน เป็นโบนัสจากเซ็นเซอร์ระดับน้ำของเรายังเป็นสถานีตรวจอากาศขนาดเล็ก
อะไหล่:
- 1x ESP8266 ESP-12F.
- แผ่นอะแดปเตอร์ 1x ESP-12F
- 1x FT232RL FTDI: อะแดปเตอร์ USB เป็นซีเรียล
- 1x HC-SR04-P: โมดูลวัดระยะทางอัลตราโซนิก โปรดทราบว่า P มีความสำคัญ เนื่องจากเป็นรุ่นที่มีแรงดันไฟฟ้าทำงานต่ำสุดที่ 3V
- รุ่น 1x BME280 3.3V: เซ็นเซอร์อุณหภูมิ ความดัน และความชื้น
- 1x IRL2203N: ทรานซิสเตอร์ MOSFET n-channel
- 1x MCP1700-3302E รุ่น 3.3V: ตัวควบคุมแรงดันไฟฟ้า
- 3x แบตเตอรี่ AA แบบรีชาร์จได้ เช่น 2600mAh.
- 1x ที่ใส่แบตเตอรี่สำหรับแบตเตอรี่ 3 ก้อน
- 1x เขียงหั่นขนม
- ตัวต้านทาน: 1x 470K, 1x 100K, 4x 10K
- ตัวเก็บประจุ: 2x เซรามิก 1uF
- สวิตช์สลับ 3x
- สายไฟเขียงหั่นขนมรูปตัวยู
- สายจัมเปอร์.
- ภาชนะซุปพลาสติก 1l.
- แหวนยึดสำหรับคอนเทนเนอร์
ฉันทำให้รหัสพร้อมใช้งานบน GitHub
ขั้นตอนที่ 1: ทำความรู้จักกับ Ultrasonic Distance Sensor
เราจะวัดระยะห่างจากผิวน้ำด้วยเซ็นเซอร์อัลตราโซนิก HC-SR04-P เช่นเดียวกับค้างคาว เซ็นเซอร์นี้ใช้โซนาร์: มันส่งพัลส์เสียงที่มีความถี่สูงเกินไปสำหรับหูของมนุษย์ ดังนั้นอัลตราโซนิกจึงรอจนกว่ามันจะกระทบวัตถุ สะท้อนและกลับมา ระยะทางสามารถคำนวณได้จากเวลาที่ใช้ในการรับเสียงสะท้อนและความเร็วของเสียง
อย่างเป็นรูปธรรม ถ้าหมุด Trig ถูกดึงให้สูงอย่างน้อย 10 μs เซ็นเซอร์จะส่งพัลส์ 8 ครั้งด้วยความถี่ 40 Hz คำตอบจะได้รับบน Echo pin ในรูปแบบของพัลส์ที่มีระยะเวลาเท่ากับเวลาระหว่างการส่งและรับพัลส์อัลตราโซนิก จากนั้นเราต้องหารด้วย 2 เนื่องจากพัลส์อัลตราโซนิกเคลื่อนที่ไปมา และเราต้องการเวลาเดินทางทางเดียว และคูณด้วยความเร็วของเสียง ซึ่งเท่ากับ 340 เมตร/วินาที
แต่เดี๋ยวก่อน! อันที่จริง ความเร็วของเสียงขึ้นอยู่กับอุณหภูมิและความชื้นในระดับที่น้อยกว่า ฉันกำลังงี่เง่าหรือสิ่งนี้เกี่ยวข้องหรือไม่ เมื่อใช้เครื่องมือคำนวณ เราพบว่าในฤดูหนาว (ถ่าย -5 °C) เราสามารถมี 328.5 m/s และในฤดูร้อน (ถ่าย 25 °C) 347.1 m/s สมมติว่าเราพบเวลาเดินทางเที่ยวเดียว 3 มิลลิวินาที ในฤดูหนาว จะเท่ากับ 98.55 ซม. และในฤดูร้อน 104.13 ซม. ค่อนข้างแตกต่าง! ดังนั้นเพื่อให้ได้ความแม่นยำเพียงพอตลอดทั้งฤดูกาลและแม้กระทั่งกลางวันและกลางคืน เราต้องเพิ่มเทอร์โมมิเตอร์ลงในการตั้งค่าของเรา ฉันตัดสินใจเพิ่ม BME280 ซึ่งวัดอุณหภูมิ ความชื้น และความดัน ในรหัสที่ฉันใช้ในฟังก์ชัน speedOfSound เป็นสูตรที่คำนวณความเร็วของเสียงในแง่ของพารามิเตอร์ทั้งสามแม้ว่าอุณหภูมิจะเป็นปัจจัยที่สำคัญที่สุดจริงๆ ความชื้นยังคงมีผลน้อยกว่า แต่ผลกระทบของความดันนั้นเล็กน้อย เราสามารถใช้สูตรที่ง่ายกว่าโดยคำนึงถึงอุณหภูมิที่ฉันใช้ใน speedOfSoundSimple เท่านั้น
มีจุดสำคัญอีกจุดหนึ่งใน HC-SR04 มีสองเวอร์ชันให้เลือก: รุ่นมาตรฐานทำงานที่ 5V ในขณะที่ HC-SR04-P สามารถทำงานได้ที่ช่วงแรงดันไฟฟ้าตั้งแต่ 3V ถึง 5V เนื่องจากแบตเตอรี่ AA แบบชาร์จซ้ำได้ 3 ก้อนให้พลังงานประมาณ 3x1.25V=3.75V จึงเป็นสิ่งสำคัญที่จะต้องซื้อรุ่น P ผู้ขายบางคนอาจส่งผิด ดังนั้นลองดูภาพถ้าคุณซื้อ ทั้งสองเวอร์ชันมีลักษณะแตกต่างกันทั้งที่ด้านหลังและด้านหน้าตามที่อธิบายไว้ในหน้านี้ ที่ด้านหลังของรุ่น P ชิปทั้งสามอยู่ในแนวนอนในขณะที่รุ่นมาตรฐานหนึ่งชิปอยู่ในแนวตั้ง ที่ด้านหน้า รุ่นมาตรฐานมีส่วนประกอบสีเงินพิเศษ
ในวงจรอิเล็กทรอนิกส์ เราจะใช้ทรานซิสเตอร์เป็นสวิตช์เพื่อปิดไฟที่เซ็นเซอร์อัลตราโซนิกเมื่อการตั้งค่าของเราเข้าสู่โหมดหลับลึกเพื่อประหยัดแบตเตอรี่ มิฉะนั้นจะยังคงกินประมาณ 2mA ในทางกลับกัน BME280 กินไฟเพียง 5 μเมื่อไม่ได้ใช้งาน ดังนั้นจึงไม่จำเป็นต้องปิดสวิตช์ด้วยทรานซิสเตอร์
ขั้นตอนที่ 2: การเลือกบอร์ด ESP8266
ในการใช้งานเซ็นเซอร์ให้นานที่สุดโดยใช้แบตเตอรี่ เราต้องประหยัดการใช้พลังงาน แม้ว่า Wifi ของ ESP8266 จะเป็นวิธีที่สะดวกมากในการเชื่อมต่อเซ็นเซอร์ของเรากับคลาวด์ แต่ก็ค่อนข้างใช้พลังงานมาก ในการใช้งาน ESP8266 จะกินไฟประมาณ 80mA ดังนั้นด้วยแบตเตอรี่ขนาด 2600 mAh เราจะสามารถเรียกใช้อุปกรณ์ของเราได้ไม่เกิน 32 ชั่วโมงก่อนที่แบตเตอรี่จะหมด ในทางปฏิบัติจะน้อยลงเพราะเราจะไม่สามารถใช้ความจุ 2600 mAh ได้เต็มที่ก่อนที่แรงดันไฟฟ้าจะลดลงถึงระดับต่ำเกินไป
โชคดีที่ ESP8266 มีโหมดหลับลึกซึ่งปิดเกือบทุกอย่าง ดังนั้นแผนคือทำให้ ESP8266 เข้าสู่โหมดสลีปเป็นส่วนใหญ่ และปลุกให้ตื่นขึ้นบ่อย ๆ เพื่อทำการวัดและส่งข้อมูลผ่าน Wifi ไปยัง ThingSpeak ตามหน้านี้ เวลาหลับลึกสูงสุดที่เคยอยู่ที่ประมาณ 71 นาที แต่เนื่องจาก ESP8266 Arduino core 2.4.1 มันจึงเพิ่มขึ้นเป็นประมาณ 3.5 ชั่วโมง ในรหัสของฉันฉันตัดสินเป็นเวลาหนึ่งชั่วโมง
ครั้งแรกที่ฉันลองใช้บอร์ดพัฒนา NodeMCU ที่แสนสะดวก แต่น่าเสียดายที่ในสภาวะหลับลึก มันยังคงกินไฟประมาณ 9 mA ซึ่งทำให้เราหลับลึกได้เต็มที่สูงสุด 12 วันโดยไม่ต้องคำนึงถึงช่วงเวลาในการปลุกด้วยซ้ำ ผู้ร้ายที่สำคัญคือตัวควบคุมแรงดันไฟฟ้า AMS1117 ซึ่งใช้พลังงานแม้ว่าคุณจะพยายามเลี่ยงผ่านโดยเชื่อมต่อแบตเตอรี่เข้ากับพิน 3.3V โดยตรง หน้านี้อธิบายวิธีการถอดตัวควบคุมแรงดันไฟฟ้าและ USB UART อย่างไรก็ตาม ฉันไม่เคยทำอย่างนั้นได้โดยไม่ทำลายกระดานของฉัน ยิ่งไปกว่านั้น หลังจากถอด USB UART แล้ว คุณจะไม่สามารถเชื่อมต่อกับ ESP8266 ได้อีกต่อไปเพื่อดูว่าเกิดอะไรขึ้น
ดูเหมือนว่าบอร์ดพัฒนา ESP8266 ส่วนใหญ่จะใช้ตัวควบคุมแรงดันไฟฟ้า AMS1117 ที่สิ้นเปลือง ข้อยกเว้นประการหนึ่งคือ WEMOS D1 mini (ภาพด้านซ้าย) ซึ่งมาพร้อมกับ ME6211 ที่ประหยัดกว่า อันที่จริง ฉันพบว่า WEMOS D1 mini ใช้ประมาณ 150 μA ในการนอนหลับลึก ซึ่งก็เหมือนกันมากกว่า ส่วนใหญ่อาจเป็นเพราะ USB UART ด้วยบอร์ดนี้ คุณต้องประสานส่วนหัวสำหรับหมุดด้วยตัวเอง
อย่างไรก็ตาม เราสามารถทำได้ดีกว่ามากโดยใช้บอร์ดเปล่าเช่น ESP-12F (ภาพด้านขวา) ซึ่งไม่มี USB UART หรือตัวควบคุมแรงดันไฟฟ้า การป้อนพิน 3.3V ฉันพบว่าการบริโภคการนอนหลับลึกเพียง 22 μA!
แต่เพื่อให้ ESP-12F เตรียมพร้อมสำหรับการบัดกรีและการเขียนโปรแกรมให้ยุ่งยากขึ้นอีกเล็กน้อย! นอกจากนี้ เว้นแต่แบตเตอรี่จะส่งแรงดันไฟฟ้าที่ถูกต้อง ซึ่งอยู่ระหว่าง 3V ถึง 3.6V เราจำเป็นต้องจัดเตรียมตัวควบคุมแรงดันไฟฟ้าของเราเอง ในทางปฏิบัติ การค้นหาระบบแบตเตอรี่ที่ให้แรงดันไฟฟ้าในช่วงนี้ตลอดวงจรการคายประจุเต็มนั้นเป็นเรื่องยาก โปรดจำไว้ว่า เราจำเป็นต้องจ่ายไฟให้กับเซ็นเซอร์ HC-SR04-P ด้วย ซึ่งในทางทฤษฎีสามารถทำงานด้วยแรงดันไฟฟ้าที่ต่ำถึง 3V แต่จะทำงานได้แม่นยำยิ่งขึ้นหากแรงดันไฟฟ้าสูงขึ้น นอกจากนี้ในไดอะแกรมของฉัน HC-SR04-P ยังเปิดใช้งานโดยทรานซิสเตอร์ ซึ่งทำให้เกิดแรงดันไฟฟ้าตกเพิ่มเติมเล็กน้อย เราจะใช้ตัวควบคุมแรงดันไฟฟ้า MCP1700-23302E แรงดันไฟฟ้าอินพุตสูงสุดคือ 6V ดังนั้นเราจึงป้อนด้วยแบตเตอรี่ AA สูงสุด 4 ก้อน ฉันตัดสินใจใช้แบตเตอรี่ AA 3 ก้อน
ขั้นตอนที่ 3: สร้างช่อง ThingSpeak
เราจะใช้ ThingSpeak ซึ่งเป็นบริการคลาวด์ IoT เพื่อจัดเก็บข้อมูลของเรา ไปที่ https://thingspeak.com/ และสร้างบัญชี เมื่อคุณเข้าสู่ระบบแล้ว ให้คลิกปุ่ม New Channel เพื่อสร้างช่อง ในการตั้งค่าช่อง กรอกชื่อและคำอธิบายตามที่คุณต้องการ ต่อไปเราจะตั้งชื่อช่องช่องและเปิดใช้งานโดยคลิกที่ช่องทำเครื่องหมายทางด้านขวา หากคุณใช้รหัสของฉันไม่เปลี่ยนแปลง ฟิลด์จะเป็นดังนี้:
- สนามที่ 1: ระดับน้ำ (ซม.)
- ฟิลด์ 2: ระดับแบตเตอรี่ (V)
- สนาม 3: อุณหภูมิ (° C)
- สนาม 4: ความชื้น (%)
- สนาม 5: ความดัน (Pa)
สำหรับการอ้างอิงในอนาคต ให้เขียน Channel ID, คีย์ Read API และ Write API Key ซึ่งสามารถพบได้ในคีย์ API ของเมนู
คุณสามารถอ่านข้อมูล ThingSpeak บนสมาร์ทโฟนของคุณได้โดยใช้แอพ บนโทรศัพท์ Android ของฉัน ฉันใช้วิดเจ็ต IoT ThingSpeak Monitor คุณต้องกำหนดค่าด้วย Channel ID และ Read API Key
ขั้นตอนที่ 4: วิธีการตั้งโปรแกรม ESP-12F
เราจำเป็นต้องมีบอร์ดเปล่าเพื่อประหยัดแบตเตอรี่ แต่ข้อเสียคือการเขียนโปรแกรมยากกว่าบอร์ดพัฒนาที่มี USB UART ในตัวอยู่เล็กน้อย
เราจะใช้ Arduino IDE มีคำแนะนำอื่น ๆ ที่อธิบายวิธีใช้งานดังนั้นฉันจะสรุปที่นี่ ขั้นตอนในการเตรียมความพร้อมสำหรับ ESP8266 คือ:
- ดาวน์โหลด Arduino IDE
- ติดตั้งการสนับสนุนสำหรับบอร์ด ESP8266 ในเมนู File - Preferences - Settings ให้เพิ่ม URL https://arduino.esp8266.com/stable/package_esp8266com_index.json ไปยัง Additional Board Manager URLs ถัดไปในเมนู เครื่องมือ - บอร์ด - ตัวจัดการบอร์ด ติดตั้ง esp8266 โดยชุมชน esp8266
- เลือกเป็นบอร์ด: โมดูล ESP8266 ทั่วไป
ในการจัดการกับ ESP-12F ฉันใช้แผ่นอะแดปเตอร์ ซึ่งหาซื้อได้ทั่วไปในร้านค้าออนไลน์ ฉันบัดกรีชิปกับเพลตแล้วบัดกรีส่วนหัวกับเพลต จากนั้นฉันก็ค้นพบว่าแผ่นอะแดปเตอร์กว้างเกินไปสำหรับเขียงหั่นขนมมาตรฐาน! มันไม่ทิ้งพินว่างไว้ด้านข้างเพื่อทำการเชื่อมต่อของคุณ
วิธีแก้ปัญหาที่ฉันใช้คือใช้สายไฟรูปตัวยูและเชื่อมต่อตามภาพด้านขวาก่อนวาง ESP8266 กับแผ่นอะแดปเตอร์บนเขียงหั่นขนม ดังนั้น GND และ VCC จึงเชื่อมต่อกับรางของเขียงหั่นขนมและหมุดที่เหลือจะพร้อมใช้งานต่อไปที่เขียงหั่นขนม ข้อเสียคือเขียงหั่นขนมของคุณจะมีสายไฟค่อนข้างแน่นเมื่อคุณจบวงจรทั้งหมด อีกวิธีหนึ่งคือการใส่เขียงหั่นขนมสองอันเข้าด้วยกันตามที่แสดงในวิดีโอนี้
ต่อไป ในการตั้งโปรแกรม ESP-12F ผ่านพอร์ต USB ของคอมพิวเตอร์ เราต้องใช้อะแดปเตอร์ USB เป็นซีเรียล ฉันใช้โปรแกรมเมอร์ FT232RL FTDI โปรแกรมเมอร์มีจัมเปอร์ให้เลือกระหว่าง 3.3V หรือ 5V ควรใส่ไว้ที่ 3.3V สำหรับ ESP8266 อย่าลืมว่า 5V อาจทอดชิปของคุณ! การติดตั้งไดรเวอร์ควรเป็นแบบอัตโนมัติ แต่ถ้าการเขียนโปรแกรมไม่ทำงาน คุณสามารถลองติดตั้งด้วยตนเองจากหน้านี้
ESP8266 มีโหมดการเขียนโปรแกรมเพื่ออัปโหลดเฟิร์มแวร์ใหม่ไปยังแฟลช และโหมดแฟลชเพื่อเรียกใช้เฟิร์มแวร์ปัจจุบันจากหน่วยความจำแฟลช ในการเลือกระหว่างโหมดเหล่านี้ หมุดบางตัวต้องใช้ค่าบางอย่างเมื่อบูตเครื่อง:
- การเขียนโปรแกรม: GPIO0: ต่ำ, CH-PD: สูง, GPIO2: สูง, GPIO15: ต่ำ
- แฟลช: GPIO0: สูง CH-PD: สูง GPIO2: สูง GPIO15: ต่ำ
แผ่นอะแดปเตอร์ดูแลการดึง CH-PD และดึง GPIO15 ด้วยตัวต้านทาน 10K ลงแล้ว
ดังนั้นในวงจรอิเล็กทรอนิกส์ของเรา เรายังต้องดึง GPIO2 ขึ้นมา นอกจากนี้เรายังมีสวิตช์เพื่อวาง ESP8266 ในการตั้งโปรแกรมหรือในโหมดแฟลช และสวิตช์เพื่อรีเซ็ต ซึ่งทำได้โดยการเชื่อมต่อ RST กับกราวด์ ตรวจสอบให้แน่ใจว่าคุณเชื่อมต่อพิน TX ของ FT232RL กับพิน RXD ของ ESP8266 และในทางกลับกัน
ลำดับการเขียนโปรแกรมมีดังนี้:
- ตั้งค่า GPIO2 เป็นต่ำโดยปิดสวิตช์ตั้งโปรแกรม
- รีเซ็ต ESP8266 โดยปิดแล้วเปิดสวิตช์รีเซ็ตอีกครั้ง ขณะนี้ ESP8266 บู๊ตในโหมดการเขียนโปรแกรม
- ตั้งค่า GPIO2 กลับเป็นค่าสูงโดยเปิดสวิตช์ตั้งโปรแกรม
- อัปโหลดเฟิร์มแวร์ใหม่จาก Arduino IDE
- รีเซ็ต ESP8266 อีกครั้งโดยปิดและเปิดสวิตช์รีเซ็ตอีกครั้ง ขณะนี้ ESP8266 บู๊ตในโหมดแฟลชและรันเฟิร์มแวร์ใหม่
ตอนนี้คุณสามารถทดสอบว่าการเขียนโปรแกรมทำงานได้หรือไม่โดยอัปโหลดภาพร่าง Blink ที่มีชื่อเสียง
หากทั้งหมดนี้ใช้งานได้อย่างน้อยหมุด GND, VCC, GPIO2, RST, TXD และ RXD จะได้รับการบัดกรีและเชื่อมต่ออย่างถูกต้อง ค่อยยังชั่ว! แต่ก่อนดำเนินการต่อ ฉันขอแนะนำให้ทดสอบพินอื่นๆ ด้วยมัลติมิเตอร์ของคุณ ฉันมีปัญหากับหมุดตัวหนึ่ง คุณสามารถใช้ภาพสเก็ตช์นี้ ซึ่งตั้งค่าหมุดทั้งหมดให้สูงทีละอันเป็นเวลา 5 วินาที แล้วจึงทำให้ ESP8266 เข้าสู่โหมดหลับลึกเป็นเวลา 20 วินาที หากต้องการเปิดใช้งาน ESP8266 ให้ตื่นขึ้นหลังจากหลับลึก คุณต้องเชื่อมต่อ RST กับ GPIO16 ซึ่งจะให้สัญญาณปลุก
ขั้นตอนที่ 5: การอัปโหลด Sketch
ฉันทำให้โค้ดพร้อมใช้งานบน GitHub แล้ว มันเป็นเพียงไฟล์เดียว: Level-Sensor-Deepsleep.ino เพียงดาวน์โหลดและเปิดใน Arduino IDE หรือคุณสามารถเลือก ไฟล์ - ใหม่ และเพียงแค่คัดลอก/วางโค้ด
มีข้อมูลบางอย่างที่คุณต้องกรอกในตอนต้นของไฟล์: ชื่อและรหัสผ่านของ WLAN ที่จะใช้ รายละเอียด IP แบบคงที่ และ Channel ID และคีย์ API เขียนของ ThingSpeak Channel
ตามคำแนะนำในบล็อกนี้ แทนที่จะใช้ DHCP ที่เราเตอร์กำหนด IP แบบไดนามิก เราใช้ IP แบบคงที่ ซึ่งเราตั้งค่าที่อยู่ IP ของ ESP8266 ด้วยตนเอง ปรากฎว่าเร็วกว่ามาก ดังนั้นเราจึงประหยัดเวลาในการทำงานและประหยัดพลังงานแบตเตอรี่ ดังนั้นเราจึงต้องระบุที่อยู่ IP แบบคงที่ที่พร้อมใช้งาน เช่นเดียวกับ IP ของเราเตอร์ (เกตเวย์) ซับเน็ตมาสก์ และเซิร์ฟเวอร์ DNS หากคุณไม่แน่ใจเกี่ยวกับสิ่งที่ต้องกรอก โปรดอ่านเกี่ยวกับการตั้งค่า IP แบบคงที่ในคู่มือของเราเตอร์ของคุณ บนคอมพิวเตอร์ Windows ที่เชื่อมต่อผ่าน Wifi กับเราเตอร์ของคุณ ให้เริ่มเชลล์ (Windows button-r, cmd) และป้อน ipconfig /all คุณจะพบข้อมูลส่วนใหญ่ที่คุณต้องการในส่วน Wi-Fi
การตรวจสอบโค้ดที่คุณเห็นว่าการกระทำส่วนใหญ่ไม่เหมือนกับโค้ด Arduino อื่น ๆ ที่เกิดขึ้นในฟังก์ชันการตั้งค่าแทนที่จะเป็นฟังก์ชันลูป นี่เป็นเพราะว่า ESP8266 เข้าสู่โหมดหลับลึกหลังจากเสร็จสิ้นฟังก์ชั่นการตั้งค่า (เว้นแต่ว่าเราจะเริ่มในโหมด OTA) หลังจากที่ตื่นขึ้น ก็เหมือนกับการรีสตาร์ทใหม่และรันการตั้งค่าอีกครั้ง
นี่คือคุณสมบัติเด่นของรหัส:
- หลังจากปลุกรหัสจะตั้งค่า switchPin (ค่าเริ่มต้น GPIO15) เป็นสูง สิ่งนี้จะเปิดทรานซิสเตอร์ซึ่งจะเปิดเซ็นเซอร์ HC-SR04-P ก่อนเข้าสู่โหมดสลีป จะตั้งค่าพินกลับเป็นระดับต่ำ ปิดทรานซิสเตอร์และ HC-SR04-P เพื่อให้แน่ใจว่าจะไม่ใช้พลังงานแบตเตอรี่อันมีค่าอีกต่อไป
- หาก modePIN (ค่าเริ่มต้น GPIO14) ต่ำ รหัสจะไปในโหมด OTA แทนโหมดการวัด ด้วย OTA (การอัปเดตแบบ over-the-air) เราสามารถอัปเดตเฟิร์มแวร์ผ่าน Wifi แทนพอร์ตอนุกรมได้ ในกรณีของเรา วิธีนี้ค่อนข้างสะดวก เนื่องจากเราไม่ต้องเชื่อมต่ออะแดปเตอร์ซีเรียลกับ USB อีกต่อไปสำหรับการอัปเดตเพิ่มเติม เพียงตั้งค่า GPIO14 เป็นต่ำ (ด้วยสวิตช์ OTA ในวงจรอิเล็กทรอนิกส์) รีเซ็ต ESP8266 (ด้วยสวิตช์รีเซ็ต) และควรมีให้ใน Arduino IDE สำหรับการอัปโหลด
- บน PIN แบบอะนาล็อก (A0) เราวัดแรงดันไฟฟ้าของแบตเตอรี่ วิธีนี้ช่วยให้เราสามารถปิดอุปกรณ์ของเรา หรือที่เรียกว่า Deep-sleep ถาวร หากแรงดันไฟฟ้าต่ำเกินไป ต่ำกว่า minVoltage เพื่อป้องกันแบตเตอรี่จากการคายประจุมากเกินไป การวัดแบบแอนะล็อกไม่ถูกต้องนัก เราทำการวัด numMeasuresBattery (ค่าเริ่มต้น 10) และใช้ค่าเฉลี่ยเพื่อปรับปรุงความแม่นยำ
- การวัดระยะทางของเซ็นเซอร์ HC-SR04-P ดำเนินการในฟังก์ชัน distanceMeasurement เพื่อปรับปรุงความแม่นยำ การวัดซ้ำ numMeasuresDistance (ค่าเริ่มต้น 3) ครั้ง
- มีฟังก์ชันคำนวณ speedOfSound จากอุณหภูมิ ความชื้น และการวัดความดันด้วยเซนเซอร์ BME280 ที่อยู่ I2C เริ่มต้นของ BME280 คือ 0x76 แต่ถ้าใช้ไม่ได้ คุณอาจต้องเปลี่ยนเป็น 0x77: bool bme280Started=bme280.begin(0x77);
- เราจะใช้ BME280 ในโหมดบังคับ ซึ่งหมายความว่าต้องใช้การวัดหนึ่งครั้งและกลับสู่โหมดสลีปเพื่อประหยัดพลังงาน
- หากคุณตั้งค่าความจุ (l), fullDistance (ซม.) และพื้นที่ (m2) รหัสจะคำนวณปริมาตรที่เหลือของถังเก็บน้ำจากการวัดระยะทาง: double leftVolume=capacity+10.0*(fullDistance-distance)*area; และอัปโหลดไปยัง ThingSpeak หากคุณรักษาค่าเริ่มต้นไว้ ระบบจะอัปโหลดระยะทางไปยังผิวน้ำเป็นซม.
ขั้นตอนที่ 6: การสร้างวงจรอิเล็กทรอนิกส์
ด้านบนเป็นแผนภาพวงจรอิเล็กทรอนิกส์ มันค่อนข้างใหญ่สำหรับเขียงหั่นขนมหนึ่งอัน โดยเฉพาะอย่างยิ่งกับแผ่นอะแดปเตอร์ขนาดใหญ่และเคล็ดลับด้วยสายรูปตัวยู เมื่อถึงจุดหนึ่ง ฉันอยากจะใช้ทางเลือกอื่นในการเชื่อมต่อเขียงหั่นขนมสองอัน แต่ในที่สุดฉันก็จัดการได้
นี่คือคุณสมบัติที่สำคัญของวงจร:
- มีสองแรงดันไฟฟ้าที่มีบทบาท: แรงดันไฟฟ้าขาเข้าจากแบตเตอรี่ (ประมาณ 3.75V) และ 3.3V ที่ป้อน ESP8266 และ BME280 ฉันวาง 3.3V บนรางด้านซ้ายของเบรกบอร์ดและ 3.75V บนรางด้านขวา ตัวควบคุมแรงดันไฟฟ้าแปลง 3.75V เป็น 3.3V ทำตามคำแนะนำในแผ่นข้อมูล ฉันได้เพิ่มตัวเก็บประจุ 1 μF เข้ากับอินพุตและเอาต์พุตของตัวควบคุมแรงดันไฟฟ้าเพื่อเพิ่มความเสถียร
- GPIO15 ของ ESP8266 เชื่อมต่อกับเกตของทรานซิสเตอร์ ซึ่งช่วยให้ ESP8266 เปิดทรานซิสเตอร์และทำให้เซ็นเซอร์อัลตราโซนิกเมื่อทำงานและปิดเมื่อเข้าสู่โหมดสลีป
- GPIO14 เชื่อมต่อกับสวิตช์ OTA สวิตช์ การปิดสวิตช์จะเป็นการส่งสัญญาณไปยัง ESP8266 ที่เราต้องการเริ่มต้นในโหมด OTA ต่อไป นั่นคือ หลังจากที่เรากด (ปิดและเปิด) สวิตช์ RESET และอัปโหลดภาพร่างใหม่แบบ over-the-air
- พิน RST และ GPIO2 เชื่อมต่อกันเหมือนในแผนภาพการเขียนโปรแกรม ตอนนี้พิน RST เชื่อมต่อกับ GPIO16 เพื่อให้ ESP8266 ตื่นจากการนอนหลับสนิท
- หมุด TRIG และ ECHO ของเซ็นเซอร์อัลตราโซนิกเชื่อมต่อกับ GPIO12 และ GPIO13 ในขณะที่หมุด SCL และ SDA ของ BME280 เชื่อมต่อกับ GPIO5 และ GPIO4
- สุดท้าย ADC แบบอะนาล็อกจะผ่านตัวแบ่งแรงดันไฟฟ้าที่เชื่อมต่อกับแรงดันไฟฟ้าขาเข้า ซึ่งช่วยให้สามารถวัดแรงดันไฟขาเข้าเพื่อตรวจสอบประจุของแบตเตอรี่ได้ พิน ADC สามารถวัดแรงดันไฟฟ้าระหว่าง 0V ถึง 1V สำหรับตัวแบ่งแรงดันไฟฟ้า เราเลือกตัวต้านทาน 100K และ 470K ซึ่งหมายความว่าแรงดันไฟฟ้าที่พิน ADC กำหนดโดย: V_ADC = 100K/(100K+470K) V_inการใช้ V_ADC=1V หมายความว่าเราสามารถวัดแรงดันไฟฟ้าขาเข้าได้สูงถึง V_in=570/100 V_ADC = 5.7V สำหรับการใช้พลังงานนั้นยังมีกระแสไฟฟ้ารั่วไหลผ่านตัวแบ่งแรงดันไฟอีกด้วย ด้วย V_in=3.75V จากแบตเตอรี่ เราจะพบว่า I_leak = 3.75V/570K=6.6 μA
แม้ว่าวงจรจะใช้พลังงานจากแบตเตอรี่ ก็สามารถเชื่อมต่อ USB เข้ากับอะแดปเตอร์แบบอนุกรมได้ เพียงตรวจสอบให้แน่ใจว่าได้ถอดปลั๊ก VCC ของอะแดปเตอร์และเชื่อมต่อ GND, RX และ TX เช่นเดียวกับในแผนภาพการเขียนโปรแกรม ทำให้สามารถเปิด Serial Monitor ใน Arduino IDE เพื่ออ่านข้อความการดีบักและตรวจสอบให้แน่ใจว่าทุกอย่างทำงานตามที่คาดไว้
สำหรับวงจรที่สมบูรณ์ ฉันวัดปริมาณการใช้กระแสไฟ 50 μA ในสภาวะหลับลึกเมื่อใช้พลังงานจากแบตเตอรี่ ซึ่งรวมถึง ESP8266, BME280, เซ็นเซอร์อัลตราโซนิก (ปิดโดยทรานซิสเตอร์) และการรั่วไหลผ่านตัวแบ่งแรงดันไฟฟ้าและอาจมีการรั่วไหลอื่น ๆ จึงไม่เลวร้ายเกินไป!
ฉันพบว่าเวลาใช้งานทั้งหมดประมาณ 7 วินาที ซึ่ง 4.25 วินาทีในการเชื่อมต่อกับ Wifi และ 1.25 วินาทีในการส่งข้อมูลไปยัง ThingSpeak ดังนั้นด้วยกระแสที่ใช้งาน 80mA ฉันพบว่า 160 μAh ต่อชั่วโมงสำหรับเวลาที่ใช้งาน เพิ่ม 50 µAh ต่อชั่วโมงสำหรับสภาวะหลับลึกที่เรามีรวม 210 µAh ต่อชั่วโมง ซึ่งหมายความว่าแบตเตอรี่ 2600 mAh ในทางทฤษฎีมีอายุการใช้งาน 12400 ชั่วโมง = 515 วัน นี่เป็นค่าสูงสุดที่แน่นอนหากเราสามารถใช้ความจุของแบตเตอรี่ได้เต็มที่ (ซึ่งไม่ใช่กรณีนี้) และไม่มีการรั่วไหลที่ฉันไม่พบในการวัดปัจจุบันของฉัน ดังนั้นฉันจึงยังไม่ได้ดูว่าเรื่องนี้เป็นจริงหรือไม่
ขั้นตอนที่ 7: จบเซนเซอร์
ฉันใส่เซ็นเซอร์ลงในภาชนะพลาสติกขนาด 1 ลิตร ซึ่งใช้บรรจุซุป ที่ด้านล่าง ฉันทำรูสองรูเพื่อให้พอดีกับ "ดวงตา" ของเซ็นเซอร์ HC-SR04-P นอกจากรูแล้ว ภาชนะควรกันน้ำได้ จากนั้นนำไปติดกับผนังถังเก็บน้ำด้วยวงแหวนกลมที่ปกติใช้สำหรับท่อระบายน้ำฝน
ขอให้สนุกกับโครงการ!
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-