สารบัญ:

ปฏิทินติดผนังอัจฉริยะ: 5 ขั้นตอน
ปฏิทินติดผนังอัจฉริยะ: 5 ขั้นตอน

วีดีโอ: ปฏิทินติดผนังอัจฉริยะ: 5 ขั้นตอน

วีดีโอ: ปฏิทินติดผนังอัจฉริยะ: 5 ขั้นตอน
วีดีโอ: ขอบคุณที่มอบความสุขในวัยเด็กนะครับ #สปอยหนัง #ขึ้นฟีดเถอะ #ขึ้นฟีด #rip 2024, กรกฎาคม
Anonim
ปฏิทินติดผนังอัจฉริยะ
ปฏิทินติดผนังอัจฉริยะ

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

ในบทช่วยสอนนี้ ฉันจะแสดงวิธีสร้างปฏิทินผนังอัจฉริยะ แสดงกิจกรรมจากบัญชี Google หลายบัญชี นอกจากนี้ยังแสดงเวลา วันที่ สภาพอากาศ อุณหภูมิ และข้อมูลเพิ่มเติม มันจะใช้พลังงานจากคอมพิวเตอร์ Raspberry Pi ที่มีเซ็นเซอร์ตรวจจับความเคลื่อนไหวแบบพาสซีฟอินฟราเรด (PIR) ติดอยู่ เพื่อให้จอแสดงผลเปิดขึ้นเมื่อตรวจพบการเคลื่อนไหวในห้อง แต่จะดับลงหลังจากไม่มีการใช้งานไม่กี่นาที บทช่วยสอนนี้อ้างอิงจากบทช่วยสอนอื่นๆ ที่ฉันพบในอินเทอร์เน็ต และฉันจะให้ลิงก์ไปยังบทเรียนเหล่านั้นเพื่อความเข้าใจที่ดีขึ้น จำเป็นต้องมีความรู้พื้นฐานด้านการเขียนโปรแกรม (HTML, Python, …)

ขั้นตอนที่ 1: ฮาร์ดแวร์

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

- ชุด Raspberry Pi ตอนแรกฉันใช้โมเดล 2 รุ่นเก่าจากโครงการอื่น มันใช้งานได้ แต่การแก้ไขและโหลดหน้าเว็บใหม่ใช้เวลานานมาก ดังนั้นในที่สุดฉันก็เปลี่ยนเป็นรุ่น 3 ซึ่งใช้งานได้คล่องมากขึ้น https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=raspberry+pi+kit&_sacat=0

- จอ LCD. ฉันใช้หน้าจอจากแล็ปท็อปเครื่องเก่า เลยต้องซื้อบอร์ดไดรเวอร์ LVDS สำหรับมันและพาวเวอร์ซัพพลาย https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ ไดรเวอร์+LVDS+บอร์ด&_sacat=0

- กล่องพลาสติกใส่อุปกรณ์อิเล็กทรอนิกส์

- เซ็นเซอร์ตรวจจับความเคลื่อนไหวอินฟราเรดแบบพาสซีฟ

- เซ็นเซอร์อุณหภูมิ/ความชื้น AM2302

- แฟ้มสไลด์พลาสติกสีดำสำหรับกรอบ LCD

- สายเคเบิลต่างๆ (HDMI, 5.5 มม. สำหรับไฟ DC, สายจัมเปอร์เขียงหั่นขนมแบบบัดกรี, …)

ขั้นตอนที่ 2: การสร้างจอแสดงผล LCD

การสร้างจอ LCD
การสร้างจอ LCD
การสร้างจอ LCD
การสร้างจอ LCD
การสร้างจอ LCD
การสร้างจอ LCD

ฉันใช้หน้าจอ LCD จากแล็ปท็อปเครื่องเก่าที่ล้าสมัย มีแบบฝึกหัดมากมายเกี่ยวกับวิธีการทำเช่นนี้ ฉันทำตามนี้:

www.instructables.com/id/How-to-reuse-the-old-LCD-Screen-of-your-broken-Lap/

ฉันถอดฝาครอบแล็ปท็อปเครื่องเก่าออก นำจอ LCD ออก แล้วสั่งบอร์ดไดรเวอร์ LVDS ที่ถูกต้อง ฉันให้รหัสผลิตภัณฑ์แก่ผู้ขาย ซึ่งสามารถพบได้ที่ด้านหลังของ LCD ในกรณีของฉันคือ LP171WE3 (TL)(A2) - ดูป้ายด้านล่างขวาบนภาพสุดท้าย จากนั้นเขาก็ส่ง LVDS ที่เหมาะสมมาให้ฉัน โปรดทราบว่า คุณจะต้องใช้แหล่งจ่ายไฟสำหรับจอแสดงผลด้วย ดังนั้นขอให้ผู้ขายส่งให้ด้วย ฉันยังซื้อกล่องพลาสติกขนาด 14.5 × 7.5 × 2 ซม. ที่ดีเพื่อให้พอดีกับบอร์ดควบคุมและติดไว้ที่ด้านหลังของ LCD

ตอนนี้จอ LCD มีกรอบโลหะที่ดูไม่สวย ทีแรกผมพ่นสเปรย์ให้เป็นสีดำ แต่สีเริ่มลอกออก ดังนั้นฉันจึงนำแฟ้มพลาสติกสีดำแบบสไลด์ออนสี่อัน ซึ่งโดยทั่วไปแล้วจะใช้สำหรับการเย็บกระดาษแผ่น ตัดแต่งตามนั้นแล้วติดไว้เพื่อครอบกรอบ มันดูดีมาก ดังนั้นฉันจึงต่อสายเคเบิลทั้งหมด เสียบ HDMI กับ Raspberry Pi และ Voila เครื่องเก่าของฉัน – มันใช้งานได้! มีรูปภาพแสดงอยู่บนจอแสดงผล ดังนั้นฉันจึงพร้อมที่จะไปยังขั้นตอนต่อไป – ข้อมูลใดบ้างที่จะแสดงบนจอแสดงผลและวิธีแสดง

ขั้นตอนที่ 3: การตั้งค่าซอฟต์แวร์

เมื่อผมหาข้อมูลทางอินเทอร์เน็ตเกี่ยวกับวิธีการสร้างปฏิทิน ผมได้แรงบันดาลใจจากเพจนี้ https://dakboard.com/site พวกเขาจัดหาผลิตภัณฑ์สำเร็จรูป (จอแสดงผล คอมพิวเตอร์และซอฟต์แวร์ที่ใช้งานได้) แต่ยังมีบทช่วยสอนที่ยอดเยี่ยมสำหรับโซลูชัน DIY (https://blog.dakboard.com/diy-wall-display/) ฉันแนะนำให้คุณทำตามบทช่วยสอนนี้ อย่างน้อยก็ในช่วงแรกพร้อมคำแนะนำในการเตรียมและตั้งค่าระบบบน Raspberry เพื่อให้เบราว์เซอร์โหลดหน้าเว็บที่ต้องการโดยอัตโนมัติเมื่อบูต

วิธีนี้ใช้ได้ผลดี แต่ฉันกำลังมองหาวิธีแก้ปัญหา ซึ่งสามารถปรับแต่งได้ตามความต้องการของฉัน ฉันตัดสินใจตั้งค่าเว็บเซิร์ฟเวอร์ของตัวเองและสร้างหน้าเว็บ ซึ่งจะแสดงข้อมูลเพิ่มเติมนอกเหนือจากปฏิทิน ฉันเลือก Wordpress.org เนื่องจากมีเอกสารประกอบที่ดีและมีการสนับสนุนที่ดีและชุมชนขนาดใหญ่ที่จะช่วยคุณ นี่คือการสอนเกี่ยวกับวิธีการติดตั้ง Wordpress บน Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress เมื่อติดตั้ง Wordpress แล้ว ก็ถึงเวลาออกแบบหน้าแรกของฉัน คุณสามารถใช้หนึ่งในธีมที่มีให้มากมาย หรือออกแบบใหม่ทั้งหมด อย่างไรก็ตาม จำเป็นต้องมีความรู้ด้านการเขียนโปรแกรม HTML สำหรับสิ่งนี้

ฉันออกแบบหน้าของฉันเพื่อให้แสดงปฏิทินทางด้านซ้าย (https://sl.wordpress.org/plugins/google-calendar-events/) ในขณะที่แสดงเวลาและวันที่ทางด้านขวา (https://www.timeanddate.com/clocks/free.html และ https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html) พยากรณ์อากาศมาจากหน้านี้ (https://www.1a-vreme.si/vremensko-okno/) ซึ่งมีวิดเจ็ตพยากรณ์อากาศสำหรับเมืองในสโลวีเนีย แต่ฉันเดาว่าอาจพบวิดเจ็ตสำหรับประเทศอื่น ๆ บนอินเทอร์เน็ตเช่นกัน เก็บอุณหภูมิโดยใช้เซ็นเซอร์ AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0) ตามที่อธิบายไว้ท้ายบทนี้ ที่ด้านล่างคือตัวนับเวลาถอยหลังแบบง่ายๆ ซึ่งแสดงจำนวนวันที่เหลือสำหรับบางกิจกรรม (น่าสนใจสำหรับบุตรหลานของฉันที่จะรู้ว่าพวกเขาจะต้องรอกี่วัน) ที่ขอบขวาบนคือปลั๊กอิน MetaSlider (https://wordpress.org/plugins/ml-slider/) ซึ่งจะสุ่มสไลด์ไปยังรูปภาพที่เลือกของครอบครัวของฉัน นอกจากนี้ ฉันเคยใช้ปลั๊กอินตัวเลื่อนพื้นหลัง (https://sl.wordpress.org/plugins/background-slider-master/) เพื่อแสดงรูปภาพแบบสุ่มสำหรับพื้นหลังที่ดีกว่า

ดังที่ได้กล่าวไว้ก่อนหน้านี้ อุณหภูมิในร่มจะถูกรวบรวมโดยใช้เซ็นเซอร์ AM2302 มีบทช่วยสอนมากมายเกี่ยวกับวิธีการรับอุณหภูมิ ฉันทำตามนี้: https://www.modmypi.com/blog/am2302-temphumidity-sensor ต่อมาฉันย้ายเซ็นเซอร์นี้ไปยัง Raspberry Pi ตัวอื่นที่มี Home Assistant ทำงานอยู่ เพราะอ่านและเผยแพร่ค่าได้ง่ายขึ้นโดยใช้ส่วนประกอบ DHT Sensor (https://www.home-assistant.io/components/sensor.dht/). Home Assistant ยังสามารถเก็บอุณหภูมิภายนอกโดยใช้ส่วนประกอบสภาพอากาศต่างๆ ฉันใช้ส่วนประกอบ YR.no (https://www.home-assistant.io/components/sensor.yr/) ด้วยเหตุนี้ ฉันจึงเขียนสคริปต์การทำงานอัตโนมัติเพื่อรวบรวมอุณหภูมิในร่ม/ภายนอกจากส่วนประกอบเหล่านี้ และเขียนลงในไฟล์ข้อความ ซึ่งจะแสดงบนปฏิทินติดผนังของฉัน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Home Assistant โปรดดูที่หน้าแรก (https://www.home-assistant.io/)

ขั้นตอนที่ 4: ทางเลือก - การปิดจอแสดงผล

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

โปรดทราบว่าทักษะการเขียนโปรแกรมของฉันค่อนข้างจำกัด ดังนั้นสิ่งต่อไปนี้จึงไม่เหมาะสม เนื่องจากฉันได้เลือกจากฟอรัมออนไลน์และบทช่วยสอนต่างๆ แต่โดยพื้นฐานแล้วมันใช้ได้ผล ยังไงก็ยินดีน้อมรับทุกคำแนะนำ อันดับแรก เราจะเริ่มด้วยการทดสอบเพื่อเปิด/ปิดจอภาพด้วยตนเอง สำหรับสิ่งนั้น เราจะสร้างไฟล์สองไฟล์ (เช่น monitor_on.sh และ monitor_off.sh) และเขียนโค้ดลงไป วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการลงชื่อเข้าใช้ Raspberry ของคุณโดยใช้ SSH และพิมพ์

sudo nano monitor_on.sh

และพิมพ์รหัสต่อไปนี้

บริการทีวี --ที่ต้องการ;

startx /usr/bin/graphical_launcher `fgconsole`

กด CTRL+X เพื่อบันทึกและออก จากนั้นสร้างไฟล์ที่สอง

sudo nano monitor_off.sh

และพิมพ์รหัสต่อไปนี้

บริการทีวี --off;

อีกครั้ง กด CTRL+X เพื่อบันทึกและออก ทำให้ไฟล์ที่สร้างขึ้นใหม่เหล่านี้สามารถเรียกใช้งานได้:

sudo chmod +x monitor_on.sh

sudo chmod +x monitor_off.sh

ตอนนี้ให้ลองว่าคำสั่งเหล่านี้ใช้งานได้หรือไม่ ให้พิมพ์

sudo./monitor_off.sh

sudo./monitor_on.sh

จอภาพควรปิดและเปิดใหม่ตามลำดับ ฉันสังเกตเห็นว่าใน Raspberry Pi 2 ต้องใช้เวลาเกือบ 10 วินาทีในการเปิดจอภาพ บน Raspberry Pi 3 จะใช้เวลา 1-2 วินาที ต่อไปเราจะเชื่อมต่อเซ็นเซอร์อินฟราเรดซึ่งจะเรียกใช้สคริปต์เหล่านี้ อีกครั้งมีบทช่วยสอนมากมายเกี่ยวกับวิธีตั้งค่า Raspberry Pi และ PIR ฉันติดตามสิ่งนี้: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/ โดยพื้นฐานแล้ว ให้สร้างไฟล์โดยใช้ตัวแก้ไขนาโน (เช่น motion_sensor.py) แล้วพิมพ์โค้ด Python ที่เหมาะสมลงไป ด้านล่างนี้เป็นตัวอย่างของไฟล์ของฉัน:

นำเข้า RPi. GPIO เป็น GPIOimport timeimport sysimport subprocessimport datetime เป็น dtimport osGPIO.setwarnings (False)# GPIO.setmode(GPIO. BOARD)GPIO.setmode(GPIO. BCM)GPIO.setup(17, GPIO. IN) #PIRturned_off = Falselast_motion_time time.time()SHUTOFF_DELAY = 180 # secondswhile True:i=GPIO.input(17)if i==0: #เมื่อเอาต์พุตจากเซ็นเซอร์ตรวจจับความเคลื่อนไหวต่ำ ให้ปิดจอภาพหากไม่ได้ปิดและ time.time() > (last_motion_time + SHUTOFF_DELAY): พิมพ์ "No intruders", iturned_off = Truetime.sleep(1)subprocess.call(['/home/pi/monitor_off.sh'], shell=True)elif i==1: #เมื่อส่งออกจากเซ็นเซอร์ตรวจจับความเคลื่อนไหว สูง เปิดมอนิเตอร์ ONprint "ตรวจพบผู้บุกรุก" itime.sleep(1)last_motion_time = time.time()sys.stdout.flush()if turns_off และ dt.datetime.now().hour > 5 และ dt.datetime now().hour < 23:turned_off = Falsesubprocess.call(['/home/pi/monitor_on.sh'], shell=True)if _name_ == '_main_':try:main() ยกเว้น KeyboardInterrupt:GPIO.cleanup ()

โปรดทราบว่า "GPIO.setup (17, GPIO. IN)" ระบุว่าพินเอาต์พุตจาก PIR เชื่อมต่อกับพิน 17 บน Raspberry Pi พินใดขึ้นอยู่กับว่าคุณกำหนด GPIO.setmode(GPIO. BOARD) หรือ GPIO.setmode(GPIO. BCM) มีการอธิบายความแตกต่างที่นี่: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering ฉันมี # หน้า GPIO. BOARD ดังนั้นจึงละเว้นและใช้ GPIO. BCM

สังเกตบรรทัด

SHUTOFF_DELAY = 180 #วินาที

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

สุดท้ายสายนี้

ถ้า turn_off และ dt.datetime.now().hour > 6 และ dt.datetime.now().hour < 23:

ระบุว่าจอภาพเปิดเฉพาะระหว่าง 6:00 ถึง 23:00 น. ดังนั้นจึงไม่รบกวนฉันในเวลากลางคืน เส้น

พิมพ์ "ไม่มีผู้บุกรุก" ฉัน

และ

พิมพ์ "ตรวจพบผู้บุกรุก" i

มีไว้เพื่อทดสอบสคริปต์เท่านั้น คุณสามารถลบออกได้ในภายหลังเมื่อใช้งานได้ ตอนนี้ทดสอบสคริปต์:

sudo python motion_sensor.py

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

sudo nano ~/.config/lxsession/LXDE-pi/autostart

และเพิ่มบรรทัดต่อไปนี้

@sudo /usr/bin/python /home/pi/motion_sensor.py

แน่นอน คุณต้องระบุชื่อไฟล์ที่ถูกต้องของสคริปต์ Python ที่คุณสร้างขึ้น

ขั้นตอนที่ 5: แขวนปฏิทิน

เมื่อตั้งค่าเสร็จแล้ว ก็ได้เวลาแขวนปฏิทินบนผนังแล้ว!

ตอนแรกฉันคิดว่าจะซ่อน Raspberry Pi ไว้ด้านหลังจอ LCD ดังนั้นต้องใช้สายเคเบิลเพียงเส้นเดียว (ไฟ DC) แต่เนื่องจาก Raspberry ทำงานที่ 5V และจอ LCD ทำงานที่ 12V ฉันจึงต้องการหม้อแปลงเพิ่มเติม นอกจากนี้ เคส Raspberry ค่อนข้างหนา ซึ่งหมายความว่า LCD จะอยู่ห่างจากผนังประมาณ 3 เซนติเมตร ดังนั้นฉันจึงละทิ้งสิ่งนี้และทิ้งอุปกรณ์อิเล็กทรอนิกส์ LCD ไว้ด้านหลัง LCD เท่านั้น เพื่อให้ตอนนี้อยู่ห่างจากผนังไม่ถึง 1 ซม. ฉันได้สายเคเบิลยาว 5 เมตรสองเส้น HDMI หนึ่งเส้นและ 5 มม. หนึ่งเส้นสำหรับแหล่งจ่ายไฟ DC สายไฟทั้งสองข้างเป็นสีขาวเหมือนผนัง ซึ่งหมายความว่าไม่โดดเด่นมากนัก ฉันติดตั้ง LCD บนผนังแล้ววาง Raspberry ไว้บนตู้เย็นที่ผนังฝั่งตรงข้าม ดังนั้นจึงซ่อนไว้โดยพื้นฐาน แต่ก็ยังเข้าถึงได้ง่าย

แนะนำ: