สารบัญ:

เครื่องป้อนสัตว์เลี้ยงด้วย RasPi และ Telegram Bot: 4 ขั้นตอน (พร้อมรูปภาพ)
เครื่องป้อนสัตว์เลี้ยงด้วย RasPi และ Telegram Bot: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เครื่องป้อนสัตว์เลี้ยงด้วย RasPi และ Telegram Bot: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เครื่องป้อนสัตว์เลี้ยงด้วย RasPi และ Telegram Bot: 4 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: MJC Stream: Видишь енота? А он есть! Главное об ML и компьютерном зрении 2024, กรกฎาคม
Anonim
เครื่องป้อนสัตว์เลี้ยงด้วย RasPi และ Telegram Bot
เครื่องป้อนสัตว์เลี้ยงด้วย RasPi และ Telegram Bot
เครื่องป้อนสัตว์เลี้ยงด้วย RasPi และ Telegram Bot
เครื่องป้อนสัตว์เลี้ยงด้วย RasPi และ Telegram Bot

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

คุณสามารถดูเวอร์ชันภาษาสเปนได้ในบล็อกส่วนตัวของฉัน:

คุณต้องสร้างวงจรขนาดเล็กที่กระตุ้นมอเตอร์แรงบิดสูง และเนื่องจากความรู้ด้านอิเล็กทรอนิกส์ของฉันมีน้อยมาก ฉันจึงต้องใช้เวลาสองสามวันในการเรียนรู้พื้นฐานด้วยการดูวิดีโอบน YouTube

สคริปต์อัตโนมัติดั้งเดิมเขียนด้วย Python และใช้การเชื่อมต่อ GMail เพื่อศึกษาคำสั่ง ฉันไม่เคยใช้ภาษาการเขียนโปรแกรมนี้ แต่ความจริงก็ไม่ได้แตกต่างจากที่อื่นมากนัก ฉันได้แก้ไขเล็กน้อยเพื่อให้ปรับตัวเข้ากับใหม่ได้ดีขึ้น ไลบรารี Python และกระบวนการอัตโนมัติพร้อมกับการกำหนดค่าระบบปฏิบัติการช่วยให้คุณสามารถกำหนดพารามิเตอร์ต่อไปนี้:

  • โต้ตอบผ่านคำสั่งที่ส่งไปยัง Chat ที่ควบคุมผ่าน ChatBots
  • จะช่วยให้ติดตามสถานะของอาหารที่จ่ายไป
  • ควบคุมปริมาณอาหารที่จะจ่าย
  • มีปุ่มสำหรับป้อนอาหารด้วยตนเอง
  • ไม่อนุญาตให้ป้อนอาหารมากเกินไปโดยปิดการป้อนทุก 8 ชั่วโมง
  • มี LCD แสดงสถานะที่แสดงข้อมูลเป็นวันที่และเวลาของแหล่งจ่ายไฟครั้งต่อไป SSID ที่เชื่อมต่อกับ WiFi และที่อยู่ IP ของอุปกรณ์
  • ไม่บังคับ: แสดง Chuck Norris Random Jokes และ / หรือ Trivia of Numbers บางส่วนโดยใช้ APIS สาธารณะ (Ingenious โดยผู้เขียนต้นฉบับ)
  • ระบบมีภูมิคุ้มกันที่จะรีสตาร์ทเนื่องจากไฟฟ้าดับในขณะที่บันทึกไฟล์สถานะ
  • ระบบตรวจพบเมื่อมีการสูญเสียการเชื่อมต่อและพยายามเชื่อมต่อใหม่จนกว่าจะสำเร็จ

ขั้นตอนที่ 1: วัสดุที่ใช้แล้ว

  • 1 Raperry Pi โดยเฉพาะอย่างยิ่งรุ่น 3 ที่รวมเข้ากับการ์ดไร้สายแล้ว คุณยังสามารถใช้รุ่น Pi 3 Zero ได้ ต้องใช้เวลาทำงานเพิ่มขึ้นเล็กน้อยเพราะคุณต้องบัดกรีหมุด แต่ฉันพบว่าช้ามากที่ทำได้ ใช้อย่างใดอย่างหนึ่งที่ประหยัดกว่า
  • มอเตอร์ไฟฟ้าแรงบิดสูง 1 ตัว 37 มม. 3.5 รอบต่อนาที และ 12V
  • 1 เบรคสำหรับมอเตอร์ 37 มม.
  • หน้าจอ LCD 1 ตัวอักษรขนาด 20x4 บรรทัดพร้อมตัวควบคุม HD44780
  • 1 เครื่องจ่ายธัญพืช Zevro รุ่น WM1001 เพลา-D ยาว 5 นิ้ว เส้นผ่านศูนย์กลาง 0.63 ซม. (จำเป็นต้องตัด D เพื่อติดเข้ากับเครื่องจ่าย)
  • 1 ข้อต่อเพลาตั้งแต่ 1/4 "ถึง 6 มม. เพื่อเชื่อมต่อกับมอเตอร์

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

  • 1 กล่องไม้ ผมใช้ กว้าง 20.3 ซม. × สูง 26.7 ซม. x ลึก 13 ซม. ตัวกล่องมีประตูเปิดไปทางขวามีรูขนาด 10 ซม. x 4 ซม. เพื่อวางจอ LCD (งานไม้จริง)
  • 3 ปุ่มกด
  • 1 Protoboard ขนาดเล็ก
  • 1 LED 3.3 โวลต์ (สีไม่สำคัญ แต่สำหรับแรงดันไฟฟ้ามักจะเป็นสีแดง)
  • 1 NPN PN2222 ทรานซิสเตอร์
  • 1 ความต้านทาน 270 Ω
  • 1 ความต้านทาน 10 KΩ
  • 1 โพเทนชิออมิเตอร์ 10 KΩ
  • 1 IN4003 ไดโอด (IN4001 หรือ IN4004 สามารถทำงานได้)
  • อะแดปเตอร์ 12V 3A 1 ตัว
  • อะแดปเตอร์ 1 5V 2A
  • สกรู 4 ตัวพร้อมน๊อตปีกนก ขนาดตั้งแต่ 1.5 นิ้ว ถึง 2 นิ้ว (ขึ้นอยู่กับความหนาของไม้ที่ใช้ ใช้ยึดมอเตอร์กับกล่องไม้)
  • สายจัมเปอร์หลากสี
  • ท่อพับ 1 ชุด หรือชุด PVC เส้นผ่านศูนย์กลาง 4 นิ้ว จำนวน 1 ชุด ขึ้นอยู่กับความสูงที่จะวางกล่องไม้
  • ข้อศอก PVC 1 อันที่ยึดติดกับเฝือกก่อนหน้า
  • ที่หนีบท่อรถยนต์ 3 อัน (The World)
  • สายเคเบิล UTP 4 ฟุต (เราต้องการคู่บิดเพื่อทำการเชื่อมต่อ)
  • 1 USB WebCam ไม่จำเป็นต้องมีความละเอียดสูง

วัสดุเบ็ดเตล็ดบางอย่างที่สามารถหาได้ในร้านฮาร์ดแวร์หรืออาจมีอยู่แล้ว:เทปอุตสาหกรรม

  • ช่างเชื่อมดีบุก
  • ดีบุก
  • เจาะ
  • สว่าน 5/16
  • สกรู S8 พร้อมตัวขยาย

ขั้นตอนที่ 2: การวางโครงสร้าง

การวางโครงสร้าง
การวางโครงสร้าง
การวางโครงสร้าง
การวางโครงสร้าง
การวางโครงสร้าง
การวางโครงสร้าง

แนวคิดหลักคือการเปลี่ยนที่จับจ่ายที่มาพร้อมกับ ZEVRO ด้วยก้าน D ซึ่งจะเชื่อมต่อกับมอเตอร์โดยใช้ตัวต่อ เครื่องจ่ายจะติดกับกล่องไม้และกล่องไม้กับผนัง เนื่องจากฉันไม่ค่อยรู้จักอุปกรณ์อิเล็กทรอนิกส์มากนัก ฉันจึงไม่ได้ใช้เพลท Bakelite ในการติดตั้งวงจร ดังนั้นฉันจึงใช้เขียงหั่นขนมเพื่อใส่ส่วนประกอบทั้งหมด ดังนั้นที่ด้านล่างของกล่องจึงยึดด้วยสกรู Rapberry Pi และเขียงหั่นขนมซึ่งมีกาวอยู่แล้ว ด้านหลังก็เลยไปแปะไว้ กล่องจะต้องมีสามปุ่มซึ่งจะมีหน้าที่ในการรีสตาร์ทตัวจับเวลาเปิดใช้งานตัวป้อนและปุ่มสุดท้ายจะเป็นขั้นตอนโดยตรงในการเปิดใช้งานมอเตอร์โดยไม่ต้องผ่านวงจร มอเตอร์จะถูกยึดไว้ภายในกล่องโดยใช้ขายึด ดังนั้นเฉพาะก้าน D ที่เชื่อมต่อกับเครื่องจ่ายเท่านั้นที่จะยื่นออกมาจากกล่อง ที่ด้านล่างของกล่องแก้ไขและปรับเว็บแคมเพื่อให้ในแต่ละจดหมายปรึกษาและยืนยัน ส่งรูปว่าจานเป็นอย่างไรบ้าง ไม่ให้อาหารเกิน เผื่อยังกินไม่หมดรอบที่แล้ว

จากด้านล่างของตัวจ่าย หลอดที่ลงไปที่จานวางและวางข้อศอก PVC ไว้บนฐาน ฉันวางเทป Industrial Tape เล็กๆ ในช่องทางออกเพื่อลดความเร็วของการไหลของอาหาร และทำฐานจ่ายสำหรับ ป้องกันไม่ให้อาหารฉีดพ่นได้ทุกที่ ในการยึดท่อกับผนัง ให้ใช้ตัวยึดโลหะที่คุณยึดกับผนังด้วยสกรูแกน S8

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

มอเตอร์เชื่อมต่อโดยตรงกับขั้วบวกของหม้อแปลง 12 โวลต์ แต่สำหรับกระแสที่ไหลจะต้องผ่านวงจรในขั้วกลางของมอเตอร์สำหรับทรานซิสเตอร์นี้ N2222 จะใช้ โดยปกติแล้วทรานซิสเตอร์จะมี 3 ขา ซึ่งสอดคล้องกับตัวสะสม ฐาน และตัวปล่อย ขึ้นอยู่กับรุ่นของทรานซิสเตอร์ ตำแหน่งของขาเหล่านี้อาจแตกต่างกันไป ทรานซิสเตอร์นี้ทำให้ฟังก์ชันสวิตช์ นี่คือที่ที่เราเชื่อมต่อขั้วกลางของมอเตอร์กับตัวเก็บประจุของทรานซิสเตอร์ ขา # 19 ของแร็พเบอร์รี่เชื่อมต่อกับฐานโดยใช้ความต้านทาน 270Ω และตัวปล่อยจะเชื่อมต่อกับขั้วที่เป็นกลางของทรานซิสเตอร์ หม้อแปลง 12V พร้อมกับเสาดินหนึ่งของราสเบอร์รี่ ทรานซิสเตอร์จะปล่อยให้กระแสไหลระหว่างตัวสะสมและตัวปล่อยตราบใดที่ฐานถูกกระตุ้นด้วยแรงดันไฟฟ้าที่เพียงพอ ต่อมาเราจะตั้งโปรแกรม rapberry เพื่อให้ตามคำสั่งบางอย่างที่พอร์ต 19 จะปล่อย 3.3 โวลต์เพียงพอสำหรับวงจรเพื่อดำเนินการต่อและเปิดใช้งานมอเตอร์

สำหรับหน้าจอ LCD อีกส่วนหนึ่งของโปรโตบาร์ดถูกใช้ในวงจรอื่นที่คุณเชื่อมต่อโพเทนชิออมิเตอร์ 10KΩ ซึ่งปฏิเสธคอนทราสต์ของข้อความที่ปรากฏบน LCD ดังนั้นหากไม่มีสิ่งใดปรากฏบนหน้าจอ อาจเป็นเพราะโพเทนชิออมิเตอร์นั้นสมบูรณ์ ปิด; ในกรณีของฉัน ฉันปล่อยให้มันเปิดไว้จนสุดเพื่อให้มองเห็นข้อความได้ดีขึ้น ในที่สุดการเชื่อมต่อในเขียงหั่นขนมจะเป็นดังนี้

ขั้นตอนที่ 3: การกำหนดค่า Raspberry Pi

อย่างแรกเลย สิ่งสำคัญคือต้องสร้าง Telegram Bot ซึ่งระบบจะได้รับการจัดการ คุณจะต้องมีคีย์เพื่อแก้ไขสคริปต์ python ที่แนบมา โปรดอ่านขั้นตอนในเอกสารโทรเลข:

core.telegram.org/bots#3-how-do-i-create-a-bot

ในการกำหนดค่า rapberry ให้ใช้ Rapbian รุ่น Lite (เราไม่ต้องการอินเทอร์เฟซกราฟิก) และใช้การกำหนดค่าพื้นฐานที่แสดง raspbian เมื่อติดตั้งหรือใช้คำสั่ง raspi-config: ขยายพื้นที่เป็น 100% และเปิดใช้งาน SSH แต่โดยเฉพาะอย่างยิ่งสิ่งที่สำคัญที่สุดคือการเปลี่ยนรหัสผ่านและชื่อผู้ใช้เป็นผู้ใช้ pi ที่มาโดยค่าเริ่มต้น (มิฉะนั้น อย่างที่เกิดขึ้นกับฉัน พวกเขาสามารถถูกโจมตีโดยพอร์ต 22 หากมี IP สาธารณะที่ส่งถึงราสเบอร์รี่). นอกเหนือจากนั้นการกำหนดค่าเพื่อเชื่อมต่อกับเครือข่าย WiFi ของฉันโดยอัตโนมัติ (สมมติว่าเครือข่ายของฉันเรียกว่า "BlogSoriano" และรหัสผ่านของฉันคือ "$ecure123!") เราสร้างและบันทึกคีย์ในไฟล์การเชื่อมต่อไร้สายด้วยคำสั่งต่อไปนี้:

sudo wpa_passphrase "BlogSoriano" "$ecure123!" | sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf > /dev/null

สิ่งต่อไปคือการอัปเดตและติดตั้งระบบการติดตั้ง python "pip" ดังนั้นเราจะเข้าสู่ระบบในฐานะ root อัปเดตและติดตั้งแพ็คเกจที่จำเป็น:

sudo -i apt-get update apt-get ติดตั้ง build-essential python-dev python-smbus python-pip

ด้วยสิ่งนี้ เราสามารถเข้าถึงไลบรารีคลาส python ได้แล้ว สำหรับสคริปต์ที่เราจะใช้งาน เราจำเป็นต้องติดตั้งสิ่งต่อไปนี้:

pip ติดตั้ง RPi. GPIO Adafruit-CharLCD httplib2 html2text netifaces เทเลพอตไร้สาย cv2

เมื่อการติดตั้งการพึ่งพาเสร็จสิ้น เราจะใช้สคริปต์ที่แนบมากับขั้นตอนนี้ ฉันบันทึกไว้ในเส้นทาง /opt/petfeeder.py และสามารถสร้างไฟล์ได้โดยใช้คำสั่ง nano /opt/petfeeder.py และภายในไฟล์นี้ เราวางโค้ด หรือหากคุณมีประสบการณ์การใช้ Linux มากกว่านี้ คุณสามารถดาวน์โหลด wget ได้โดยตรง ในสคริปต์ จำเป็นต้องแก้ไขตัวแปร BOTKEY (ในบรรทัดที่ 36) และ SYSPASSWORD (ในบรรทัดที่ 23)

ฉันชี้แจงว่าฉันไม่ได้เขียนรหัสนี้เนื่องจากฉันไม่เคยตั้งโปรแกรมใน Python ฉันเพียงแก้ไขให้ทำงานกับไลบรารีใหม่และกับหน้าจอ LCD ขนาด 20x4 และใช้โทรเลขบอท

เมื่อเรามีสคริปต์แล้ว เราต้องเปลี่ยนค่าของตัวแปรด้วยคีย์สำหรับบอท สำหรับสิ่งนี้ จำเป็นต้องสร้าง Telegram Bot ใหม่ โดยจะเป็นการบันทึกไฟล์และออกเท่านั้น (ด้วย Ctrl + หรือบันทึกและ ctrl + x ออกจากตัวแก้ไข nano) เราแค่ต้องพิสูจน์การรีสตาร์ท สคริปต์เองช่วยบันทึกครั้งสุดท้ายที่ระบบไฟฟ้าถูกเปิดใช้งาน ดังนั้นเราจึงต้องทำให้สคริปต์ทำงานทุกครั้งที่ระบบปฏิบัติการเริ่มทำงาน ด้วยเหตุนี้ ฉันจึงพบวิธีแก้ปัญหาเฉพาะด้วยโปรแกรมที่เรียกว่า Supervisor ซึ่งติดตั้งจากที่เก็บ Debian:

หัวหน้างานติดตั้ง apt-get

และเมื่อติดตั้งแล้ว เราต้องสร้างไฟล์การกำหนดค่าใน /etc/supervisor/conf.d/petfeeder.conf เท่านั้น เช่นในกรณีก่อนหน้านี้ เราสามารถสร้างและบันทึกด้วย nano ไฟล์นี้จะมีดังต่อไปนี้:

[โปรแกรม:petfeederd]ไดเร็กทอรี=/opt command=python petfeeder.py autostart=true autorestart=true

เมื่อบันทึกไฟล์แล้ว เราก็สามารถใช้คำสั่ง Supervisorctl [start | หยุด | restart] petfeederd ในกรณีนี้ ยังไม่ได้เริ่มบริการ เราดำเนินการด้วยการเริ่ม:

Supervisorctl start petfeederd

ขั้นตอนที่ 4: พร้อมที่จะทดสอบ

Image
Image
พร้อมทดสอบ
พร้อมทดสอบ
พร้อมทดสอบ
พร้อมทดสอบ
พร้อมทดสอบ
พร้อมทดสอบ

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

คุณควรจะสามารถค้นหาบอทของคุณบน Telegram และส่งหนึ่งในคำสั่งถัดไปหลังจากที่คุณ /อนุญาตการแชทของคุณ:

/feed: เริ่มกระบวนการให้อาหารตราบเท่าที่ผ่านช่วงเวลาที่กำหนดพารามิเตอร์แล้ว

/ when: ส่งคืนข้อมูลเกี่ยวกับการป้อนครั้งสุดท้ายเมื่อไรและรูปภาพของจานอาหาร

/photo: กลับรูปภาพของจานอาหาร.

/restart: เริ่มระบบใหม่ ตั้งค่าตัวแปรของฟีดล่าสุดเป็น 0 เพื่อให้ป้อนได้ทันที

/status มันแจ้งเกี่ยวกับสถานะการเชื่อมต่ออินเทอร์เน็ต: SSID ของ Wireless ที่เชื่อมต่อและที่อยู่ IP ที่ระบบมีภายในเครือข่าย

แนะนำ: