เครื่องวัดน้ำ + ARDUINO = AQUAMETERDUINO!
106642
231
10
แนะนำ
บทนำ: เครื่องวัดน้ำ + Arduino = Aquameterduino!
หลังจากความเสียหายจากน้ำไม่ดี (ห้องใต้ดินของเราเต็มไปหมดในขณะที่เราอยู่ห่างไปหลายวัน) ฉันตัดสินใจที่จะตรวจสอบการใช้น้ำของเราสำหรับความผิดปกติEnters Arduino ...
ความคิดของโครงการนี้คือการใช้ arduino นับทุกหยดน้ำที่ผ่านเมตร บริษัท น้ำ กล่าวว่า arduino ต้องเชื่อมต่อกับ LAN ของฉันเพื่อให้สามารถสืบค้นได้เป็นประจำนอกจากนี้ยังต้องตระหนักถึงเวลาจริง (real time) เพื่อให้สามารถประทับเวลาการบริโภคน้ำได้
สำหรับโครงการนี้คุณจะต้องมี:
- arduino
- การ์ดอีเทอร์เน็ต + การ์ด SD (ใช้ชิป W5100)
- โล่โปรโต
- นาฬิกาแบบเรียลไทม์ (http://www.ebay.com/sch/i.html?_nkw = DS1307 + based + Real + Time + Clock )
- ตัวกระตุ้น shmitt (เช่น 74C14N)
- ความจุ (1 microF)
- ผู้ตอบสนองบางราย (20kohm และประมาณ 100Kohm)
- สวิตช์
กก - เครื่องวัดน้ำที่เปิดใช้สวิตช์กก (Gioanola ประมาณ 75 ยูโรhttp://www.gioanola.it/download/downen/08_eloutput_EN_HI.pdf )
อุปกรณ์เสริม:
- ชุด ของสาย POE แบบพาสซีฟ (http://www.ebay.com/sch/i.html?_nkw=Passive+Power+over+Ethernet )
:
http://www.ganssle.com/debouncing-pt2.htm
http: //www.ladyada.net/learn/arduino/ethfiles.html
http://www.cosm.com/
http://www.gioanola.it/download/downen/08_eloutput_EN_HI.pdf
ฉันขอให้ผู้เชี่ยวชาญติดตั้งพื้นฐาน (ซึ่งตามกฎหมายฉันไม่สามารถสัมผัสได้) กล่าวว่ามิเตอร์พื้นฐานมีแม่เหล็กเล็ก ๆ อยู่ที่หนึ่งในล้อภายในและมีการจัดส่งพร้อมสวิตช์กก ดังนั้นในทางปฏิบัติทุกครั้งที่ลิตรผ่านไปสวิตช์จะปิดชั่วขณะ แน่นอนว่าสวิตช์นี้จำเป็นต้องมีการเด้งกลับ นี้สามารถทำได้โดย sotfware แต่เราจะกลับไปที่ ...
arduino จะตอบสนองคำขอ http พื้นฐานเพื่อที่จะสามารถสอบถามผ่าน LAN และยังจะเข้าสู่กิจกรรมของตนลงบนการ์ด SD ดังนั้น arduino นี้จะเป็นอย่างใดอย่างหนึ่งที่วุ่นวาย ... ในบางครั้ง ดังนั้นความจำเป็นในการสลับสัญญาณกกจึงต้องถ่ายทอดผ่าน interrupts เพื่อให้เราไม่พลาดสัญญาณ นี้โดยทั่วไปกฎออก debouncing เปลี่ยนผ่านซอฟต์แวร์เป็น interrupts และจับเวลาไม่ cohabitate ดี.
เจ้าอาวาสฮาร์ดแวร์คือแล้ว!
ความคิดของโครงการนี้คือการใช้ arduino นับทุกหยดน้ำที่ผ่านเมตร บริษัท น้ำ กล่าวว่า arduino ต้องเชื่อมต่อกับ LAN ของฉันเพื่อให้สามารถสืบค้นได้เป็นประจำนอกจากนี้ยังต้องตระหนักถึงเวลาจริง (real time) เพื่อให้สามารถประทับเวลาการบริโภคน้ำได้
สำหรับโครงการนี้คุณจะต้องมี:
- arduino
- การ์ดอีเทอร์เน็ต + การ์ด SD (ใช้ชิป W5100)
- โล่โปรโต
- นาฬิกาแบบเรียลไทม์ (http://www.ebay.com/sch/i.html?_nkw = DS1307 + based + Real + Time + Clock )
- ตัวกระตุ้น shmitt (เช่น 74C14N)
- ความจุ (1 microF)
- ผู้ตอบสนองบางราย (20kohm และประมาณ 100Kohm)
- สวิตช์
กก - เครื่องวัดน้ำที่เปิดใช้สวิตช์กก (Gioanola ประมาณ 75 ยูโรhttp://www.gioanola.it/download/downen/08_eloutput_EN_HI.pdf )
อุปกรณ์เสริม:
- ชุด ของสาย POE แบบพาสซีฟ (http://www.ebay.com/sch/i.html?_nkw=Passive+Power+over+Ethernet )
:
http://www.ganssle.com/debouncing-pt2.htm
http: //www.ladyada.net/learn/arduino/ethfiles.html
http://www.cosm.com/
http://www.gioanola.it/download/downen/08_eloutput_EN_HI.pdf
ฉันขอให้ผู้เชี่ยวชาญติดตั้งพื้นฐาน (ซึ่งตามกฎหมายฉันไม่สามารถสัมผัสได้) กล่าวว่ามิเตอร์พื้นฐานมีแม่เหล็กเล็ก ๆ อยู่ที่หนึ่งในล้อภายในและมีการจัดส่งพร้อมสวิตช์กก ดังนั้นในทางปฏิบัติทุกครั้งที่ลิตรผ่านไปสวิตช์จะปิดชั่วขณะ แน่นอนว่าสวิตช์นี้จำเป็นต้องมีการเด้งกลับ นี้สามารถทำได้โดย sotfware แต่เราจะกลับไปที่ ...
arduino จะตอบสนองคำขอ http พื้นฐานเพื่อที่จะสามารถสอบถามผ่าน LAN และยังจะเข้าสู่กิจกรรมของตนลงบนการ์ด SD ดังนั้น arduino นี้จะเป็นอย่างใดอย่างหนึ่งที่วุ่นวาย ... ในบางครั้ง ดังนั้นความจำเป็นในการสลับสัญญาณกกจึงต้องถ่ายทอดผ่าน interrupts เพื่อให้เราไม่พลาดสัญญาณ นี้โดยทั่วไปกฎออก debouncing เปลี่ยนผ่านซอฟต์แวร์เป็น interrupts และจับเวลาไม่ cohabitate ดี.
เจ้าอาวาสฮาร์ดแวร์คือแล้ว!
ขั้นตอนที่ 1: ผู้รับผิดชอบด้านเนื้อหาของ RC
ดังนั้นสวิทช์กกจะตีกลับ ... เราจะเปลี่ยนแกนที่ผลิตโดยการเปลี่ยนเป็นคลื่นสี่เหลี่ยมที่ดี
เอกสารที่ครอบคลุมสามารถพบได้ในเน็ตในหัวข้อนี้ (และฉันพบว่ามีประโยชน์อย่างยิ่ง:http://www.ganssle.com/debouncing-pt2.htm )
สรุปย่อ R x C = ช่วงเวลาที่คุณต้องการให้สัญญาณของคุณเรียบ ในกรณีของฉันฉันเลือก 20ms ซึ่งแปลเป็น 1 microF สำหรับความจุและ 20kohm สำหรับ R2 (ดีทั้งหมดที่ฉันมีอยู่ 2x 10k), R1 ต้อง 'ใหญ่' กว่า R2, 100k ดี (33k + 68k ในของฉัน. กรณี).
เรียก Schmitt ภายหลังและฉันมีสัญญาณสี่เหลี่ยมสะอาดพร้อมที่จะเรียก arduino ขัดจังหวะ
ฉันได้ทดสอบการตั้งค่าบนบอร์ดขนมปัง (เท่าที่คุณควร!) ก่อนที่จะทำเป็นโล่ที่ถูกต้อง
เอกสารที่ครอบคลุมสามารถพบได้ในเน็ตในหัวข้อนี้ (และฉันพบว่ามีประโยชน์อย่างยิ่ง:http://www.ganssle.com/debouncing-pt2.htm )
สรุปย่อ R x C = ช่วงเวลาที่คุณต้องการให้สัญญาณของคุณเรียบ ในกรณีของฉันฉันเลือก 20ms ซึ่งแปลเป็น 1 microF สำหรับความจุและ 20kohm สำหรับ R2 (ดีทั้งหมดที่ฉันมีอยู่ 2x 10k), R1 ต้อง 'ใหญ่' กว่า R2, 100k ดี (33k + 68k ในของฉัน. กรณี).
เรียก Schmitt ภายหลังและฉันมีสัญญาณสี่เหลี่ยมสะอาดพร้อมที่จะเรียก arduino ขัดจังหวะ
ฉันได้ทดสอบการตั้งค่าบนบอร์ดขนมปัง (เท่าที่คุณควร!) ก่อนที่จะทำเป็นโล่ที่ถูกต้อง
ขั้นตอนที่ 2: Ethernet และ SD Card
การเชื่อมต่ออีเธอร์เน็ตใช้เพื่อตอบรับคำขอ http พื้นฐานบางอย่าง บันทึกกิจกรรมของมิเตอร์น้ำทั้งหมดจะถูกบันทึกลงในการ์ด SD
การใช้การ์ด SD และการเชื่อมต่ออีเทอร์เน็ตได้พิสูจน์แล้วว่าท้าทาย (ใช้การเชื่อมต่อ SPI) จนกว่าฉันจะใช้การ์ดอีเทอร์เน็ต W5100 ที่ใช้การ์ด SD ในตัว
การกวดวิชาที่ดี:http://www.ladyada.net/learn/arduino/ethfiles.html
นั่นคือสิ่งที่หลีกเลี่ยงไม่ได้
การใช้การ์ด SD และการเชื่อมต่ออีเทอร์เน็ตได้พิสูจน์แล้วว่าท้าทาย (ใช้การเชื่อมต่อ SPI) จนกว่าฉันจะใช้การ์ดอีเทอร์เน็ต W5100 ที่ใช้การ์ด SD ในตัว
การกวดวิชาที่ดี:http://www.ladyada.net/learn/arduino/ethfiles.html
นั่นคือสิ่งที่หลีกเลี่ยงไม่ได้
ขั้นตอนที่ 3: นาฬิกาเวลาจริง, การขัดจังหวะ
RTC
นาฬิกาเวลาจริงของฉันอยู่บนพื้นฐานของชิป DS1307 โดยทั่วไป เพิ่มเหรียญและควอตซ์ (magic frequency) ควอตซ์ ฉันชอบรูปแบบของ RTC นี้เพราะสามารถเสียบเข้ากับหมุดของ Arduino ได้เช่นโล่
ขัดจังหวะ
และขัดจังหวะเพียง, ดี .. , ขัดจังหวะโปรแกรมของคุณเพื่อให้คุณสามารถทำสิ่งที่ขึ้นอยู่กับเหตุการณ์นั้น พยายามที่จะรวดเร็ว (เช่นการเพิ่มเคาน์เตอร์และผลตอบแทน) เพื่อให้ถ้ามีการรบกวนอื่นปรากฏขึ้นคุณไม่ควรพลาด
เชื่อมโยงวิธีการติดต่อกลับและตรึงรหัสของคุณ ทุกครั้งที่สัญญาณ (เพิ่ม) แสดงขึ้นบน PIN ดังกล่าวคุณจะได้รับการติดต่อกลับ ...
นาฬิกาเวลาจริงของฉันอยู่บนพื้นฐานของชิป DS1307 โดยทั่วไป เพิ่มเหรียญและควอตซ์ (magic frequency) ควอตซ์ ฉันชอบรูปแบบของ RTC นี้เพราะสามารถเสียบเข้ากับหมุดของ Arduino ได้เช่นโล่
ขัดจังหวะ
และขัดจังหวะเพียง, ดี .. , ขัดจังหวะโปรแกรมของคุณเพื่อให้คุณสามารถทำสิ่งที่ขึ้นอยู่กับเหตุการณ์นั้น พยายามที่จะรวดเร็ว (เช่นการเพิ่มเคาน์เตอร์และผลตอบแทน) เพื่อให้ถ้ามีการรบกวนอื่นปรากฏขึ้นคุณไม่ควรพลาด
เชื่อมโยงวิธีการติดต่อกลับและตรึงรหัสของคุณ ทุกครั้งที่สัญญาณ (เพิ่ม) แสดงขึ้นบน PIN ดังกล่าวคุณจะได้รับการติดต่อกลับ ...
ขั้นตอนที่ 4: นำมารวมกันทั้งหมด
เลโก้เล็ก ๆ น้อย ๆ สำหรับผู้ใหญ่ ... ฉันเรียงซ้อนของฉัน arduino, โลนอีเธอร์เน็ต, โล่ที่กำหนดเองของฉันและนาฬิกาเรียลไทม์
ฉันเพิ่มไฟ LED สองดวงไว้ในโปรเจ็กต์และกล่อง (ดีหรือไม่?) ตำแหน่งของเครื่องวัดน้ำของฉันทำให้สาย POE มีประโยชน์
ฉันเพิ่มไฟ LED สองดวงไว้ในโปรเจ็กต์และกล่อง (ดีหรือไม่?) ตำแหน่งของเครื่องวัดน้ำของฉันทำให้สาย POE มีประโยชน์
ขั้นตอนที่ 5: การเขียนสคริปต์ / รหัส
รหัส Arduino:
ฉันเริ่มต้นจากรหัส ladyada (ethernet + sd card) เพิ่มการขัดจังหวะ ที่อยู่ IP ของโล่เป็นสิ่งเดียวที่จะได้รับการกำหนดค่าและคุณสามารถทำผ่านไฟล์ config บนการ์ด SDดังนั้นสคริปต์นี้สามารถติดตั้งได้ตามที่เป็นอยู่ไม่มีสายใดที่ต้องการการปรับเปลี่ยน
การตั้งค่า RTC: ตั้งเวลาของ RTC โดยใช้สคริปต์ d1307_setTime ดีพอสำหรับวัตถุประสงค์ของฉัน ทำทันทีและสำหรับทั้งหมดนั่นคือจุดรวมของโมดูล RTC และแบตเตอรี่เหรียญของ
ที่อยู่ IP: ถ้า config.txt มีอยู่ในการ์ด SD เนื้อหาจะแทนที่ที่อยู่ IP
สคริปต์ Linux:
ฉันเขียนสคริปต์ที่ทำงานบนกล่องลินุกซ์และ crontab ทำงานเพียงไม่กี่ครั้งต่อวันแรงโหดสวยเมื่อดาวน์โหลดเนื้อหาทั้งหมดของการ์ด SD แล้ว 'สำรวจ' จะส่งอีเมลให้ฉันด้วยความมั่นใจทุกอย่างก็โอเคหรือน้ำที่ใช้แล้ววันนี้ที่น่ากลัวมาก!
IP = "192.168.999.999"
EMAIL = "me@email.com"
> crontab -l
00 8,16,23 * * * / bin / bash $ HOME / bin / watermeter.sh> $ HOME / watermeter.log 2> & 1
ฉันเริ่มต้นจากรหัส ladyada (ethernet + sd card) เพิ่มการขัดจังหวะ ที่อยู่ IP ของโล่เป็นสิ่งเดียวที่จะได้รับการกำหนดค่าและคุณสามารถทำผ่านไฟล์ config บนการ์ด SDดังนั้นสคริปต์นี้สามารถติดตั้งได้ตามที่เป็นอยู่ไม่มีสายใดที่ต้องการการปรับเปลี่ยน
การตั้งค่า RTC: ตั้งเวลาของ RTC โดยใช้สคริปต์ d1307_setTime ดีพอสำหรับวัตถุประสงค์ของฉัน ทำทันทีและสำหรับทั้งหมดนั่นคือจุดรวมของโมดูล RTC และแบตเตอรี่เหรียญของ
ที่อยู่ IP: ถ้า config.txt มีอยู่ในการ์ด SD เนื้อหาจะแทนที่ที่อยู่ IP
สคริปต์ Linux:
ฉันเขียนสคริปต์ที่ทำงานบนกล่องลินุกซ์และ crontab ทำงานเพียงไม่กี่ครั้งต่อวันแรงโหดสวยเมื่อดาวน์โหลดเนื้อหาทั้งหมดของการ์ด SD แล้ว 'สำรวจ' จะส่งอีเมลให้ฉันด้วยความมั่นใจทุกอย่างก็โอเคหรือน้ำที่ใช้แล้ววันนี้ที่น่ากลัวมาก!
IP = "192.168.999.999"
EMAIL = "me@email.com"
> crontab -l
00 8,16,23 * * * / bin / bash $ HOME / bin / watermeter.sh> $ HOME / watermeter.log 2> & 1
ขั้นตอนที่ 6: อินเทอร์เน็ตของสิ่งต่างๆ
แม้ว่าฉันจะทดสอบอินเทอร์เน็ตของสิ่งต่างๆและอัปโหลดข้อมูลไปยังเซิร์ฟเวอร์ ฉันทำเช่นนั้น (เพื่อ Pachube / Cosm) แต่ไม่พบว่ามันเพิ่มมากในโครงการนี้ ฉันซ้ายฟังก์ชันการทำงานในสคริปต์เนื่องจากไม่เจ็บและอาจมีประโยชน์สักวันหนึ่ง ...
ในทางทฤษฎีคุณสามารถเชื่อมต่อ arduino ของคุณได้โดยตรงทำให้ง่ายต่อการทำงานของโครงการและคุณสามารถติดตั้งทริกเกอร์ / การแจ้งเตือนได้
ในทางปฏิบัติบริการอยู่ในรุ่นเบต้าและต้องการที่จะกลายเป็นมิตรมากขึ้น ณ จุดนี้มันควรจะดูเป็นพื้นที่เก็บข้อมูลเท่านั้นซึ่งเป็นเพียงสิ่งที่ดีถ้าบริการมีความน่าเชื่อถือตลอดเวลา ... เราจะเห็น ตอนนี้ฉันตัดสินใจที่จะควบคุมการบันทึกข้อมูล + การประมวลผลและการแจ้งเตือนของฉันที่ด้านข้างของเมฆนี้ ...
APIKEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
FEED = "99999"
DATASTREAM = "xxxxxxxxxx"
https://cosm.com
Voila!
ในทางทฤษฎีคุณสามารถเชื่อมต่อ arduino ของคุณได้โดยตรงทำให้ง่ายต่อการทำงานของโครงการและคุณสามารถติดตั้งทริกเกอร์ / การแจ้งเตือนได้
ในทางปฏิบัติบริการอยู่ในรุ่นเบต้าและต้องการที่จะกลายเป็นมิตรมากขึ้น ณ จุดนี้มันควรจะดูเป็นพื้นที่เก็บข้อมูลเท่านั้นซึ่งเป็นเพียงสิ่งที่ดีถ้าบริการมีความน่าเชื่อถือตลอดเวลา ... เราจะเห็น ตอนนี้ฉันตัดสินใจที่จะควบคุมการบันทึกข้อมูล + การประมวลผลและการแจ้งเตือนของฉันที่ด้านข้างของเมฆนี้ ...
APIKEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
FEED = "99999"
DATASTREAM = "xxxxxxxxxx"
https://cosm.com
Voila!
มีความเป็นบวกและสร้างสรรค์