สารบัญ:

Arduino Cradle Rocker: 19 ขั้นตอน (พร้อมรูปภาพ)
Arduino Cradle Rocker: 19 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Cradle Rocker: 19 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Arduino Cradle Rocker: 19 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Arduino Flame Detection System with GSM & IOT 🔥 #arduino #alarmsystem 2024, กรกฎาคม
Anonim
Image
Image

ขออภัย ฉันไม่สามารถต้านทานเพลงที่ซ้ำซากจำเจที่แนะนำการตัดต่อวิดีโอของฉัน

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

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

เช้าวันรุ่งขึ้น ฉันเริ่มระดมความคิดเพื่อหาทางให้หุ่นยนต์เขย่าเด็กคนนี้ให้ฉัน ใส่ Arduino…

เสบียง

ตกลง นี่เป็นโครงการ Arduino แรกของฉันที่เคยมีมา ดังนั้นฉันจึงทดลองและลองผิดลองถูก และฉันแน่ใจว่ายังมีที่ว่างสำหรับการปรับปรุงในการออกแบบของฉัน แต่นี่คือรายการส่วนของฉัน:Arduino Uno ($13) สำหรับการควบคุมทุกอย่างเขียงหั่นขนม ชุด ($10) สำหรับต่อสายไฟ

สเต็ปเปอร์มอเตอร์ (14 เหรียญ) นี่เป็นงานที่สนุกที่สุด เพราะเป็นงานที่ทำทั้งหมด ฉันเริ่มต้นด้วยตัวขับแรงบิดที่ต่ำกว่าเล็กน้อย แต่แล้วได้ตัวนี้ และมันใช้งานได้ค่อนข้างดี อย่าลังเลที่จะรับอันทรงพลังยิ่งขึ้น ตัวขับมอเตอร์แบบสเต็ป ($ 10-30) ซึ่งอยู่ระหว่าง Arduino กับมอเตอร์ เห็นได้ชัดว่าเครื่องยนต์ตัวนี้สามารถขับมอเตอร์ได้เงียบกว่ารุ่นอื่นๆ ดังนั้นฉันจึงเลือกใช้มันเนื่องจากมอเตอร์จะอยู่ห่างจากหัวของฉัน (และของลูกชาย) ไม่กี่ฟุตในขณะที่เรากำลังหลับ ตอนแรกฉันเพิ่งซื้อไดรเวอร์ TMC2209 หนึ่งตัวในราคาประมาณ 10 เหรียญ แต่สุดท้ายก็ซื้อ 4 อันเพราะตอนแรกฉันมีปัญหาบางอย่างและต้องการให้แน่ใจว่าฉันไม่ได้ทอดกระดานในบางครั้ง ฉันลงเอยด้วยการฆ่า 3 บอร์ดซึ่งนำฉันไปสู่รายการต่อไปของฉัน … ตัวเก็บประจุ! (10 เหรียญ) คุณต้องการตัวเก็บประจุเพียง 1 47 uF 50V เท่านั้น ดังนั้นกล่อง 240 ตัวนี้จึงเกินความสามารถ แหล่งจ่ายไฟ 36V ($ 17) เดิมทีฉันซื้อแหล่งจ่ายไฟ 12V ที่อ่อนแอแล้วพบว่านั่นเป็นที่มาของปัญหาทั้งหมดของฉัน และได้ตัวที่ใกล้เคียงกับแรงดันไฟฟ้าสูงสุดที่สเต็ปเปอร์มอเตอร์ของฉันสามารถรับมือได้ หากคุณใช้มอเตอร์หรือตัวขับสเต็ปแบบอื่น ตรวจสอบให้แน่ใจว่ามอเตอร์นั้นสามารถรองรับแรงดันไฟฟ้า (V) และค่าแอมแปร์ (A) ของแหล่งจ่ายไฟอย่างน้อยเท่ากับยอดแอมป์ที่มอเตอร์ดึงออกมาเป็นอย่างน้อย เต้ารับแจ็คไฟตัวเมีย ($8) นี่คือสิ่งที่แหล่งจ่ายไฟเสียบเข้า คุณจะต้องประสานสิ่งเหล่านี้กับสายไฟเพื่อติดเข้ากับเขียงหั่นขนมของคุณ จัมเปอร์แพ็คใหญ่ ($9) เพื่อที่ฉันจะได้วางส่วนควบคุมทุกที่ที่ฉันต้องการในห้อง

ปุ่ม ($8) สำหรับเปิด/ปิด ฯลฯ

แอมป์ไมโครโฟน ($11) อ้อ คุณไม่รู้หรอกว่ามันเปิดเสียงด้วยเหรอ?

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

ขั้นตอนที่ 1: ทำความคุ้นเคยกับ Pinout ไดรเวอร์ Stepper

ต่อ Arduino 5V/GND เข้ากับเขียงหั่นขนมของคุณ
ต่อ Arduino 5V/GND เข้ากับเขียงหั่นขนมของคุณ

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

ขั้นตอนที่ 2: ต่อ Arduino 5V/GND กับ Breadboard ของคุณ

ต่อสายไฟจาก Arduino 5V เข้ากับราง "+" ที่ด้านหนึ่งของเขียงหั่นขนมของคุณเชื่อมต่อสายจาก Arduino GND ตัวใดตัวหนึ่งเข้ากับราง "-" ที่ด้านเดียวกันของเขียงหั่นขนม

(ละเว้น

ขั้นตอนที่ 3: เชื่อมต่อ +/- Rails กับ VIO/GND

เชื่อมต่อราง +/- กับ VIO/GND
เชื่อมต่อราง +/- กับ VIO/GND

ต่อสายไฟจากราง "-" เข้ากับ GND ที่ด้านล่างซ้ายของบอร์ดไดรเวอร์ stepper ต่อสายไฟจากราง "+" เข้ากับ VIO

ขั้นตอนที่ 4: เชื่อมต่อ DIR/STEP กับ Digital Pins บน Arduino

เชื่อมต่อ DIR/STEP กับ Digital Pins บน Arduino
เชื่อมต่อ DIR/STEP กับ Digital Pins บน Arduino

เชื่อมต่อพิน DIR และ STEP จากบอร์ดไดรเวอร์สเต็ปเปอร์กับพินดิจิทัลสองตัวบน Arduino ฉันใช้พิน 2 & 3 ตามลำดับ แต่ไม่สำคัญหรอกว่าคุณจะตั้งค่าพินในโค้ดของคุณในภายหลัง

ขั้นตอนที่ 5: ไปข้างหน้าและเพิ่มตัวเก็บประจุนั้น…

ไปข้างหน้าและเพิ่มตัวเก็บประจุนั้น …
ไปข้างหน้าและเพิ่มตัวเก็บประจุนั้น …

ฉันเผาบอร์ดควบคุมสเต็ป 2 อันออกไปเพราะฉันไม่มีตัวเก็บประจุอยู่แล้ว ดังนั้นให้ไปข้างหน้าและเพิ่มตัวเก็บประจุ 47uF 50V ไปที่พิน VM/GND บนบอร์ดไดรเวอร์ ตรวจสอบให้แน่ใจว่าพิน "-" บนตัวเก็บประจุอยู่ในพิน GND บนเขียงหั่นขนม (จะมี "-" ที่ด้านที่สอดคล้องกันของตัวเก็บประจุ)

ขั้นตอนที่ 6: และดำเนินการต่อและเชื่อมต่อ GND. นั้น

และไปข้างหน้าและเชื่อมต่อ GND. นั้น
และไปข้างหน้าและเชื่อมต่อ GND. นั้น

บน GND ที่คุณเพิ่งเพิ่มตัวเก็บประจุเข้าไป ให้ต่อเข้ากับราง "-" เดียวกันกับ GND ตัวอื่น

ขั้นตอนที่ 7: เชื่อมต่อมอเตอร์กับไดรเวอร์

เชื่อมต่อมอเตอร์กับไดรเวอร์
เชื่อมต่อมอเตอร์กับไดรเวอร์

หมุดตัวไหนจะขึ้นอยู่กับมอเตอร์ที่คุณซื้อ แต่อันที่ฉันระบุไว้มีแผนภาพการเดินสายไฟในรายการ amazon

สำหรับมอเตอร์ของฉัน -

เชื่อมต่อสีเขียวและสีดำกับ M2B และ M2A

เชื่อมต่อสีแดงและสีน้ำเงินกับ M1A และ M1Bหมายเหตุ: หากมอเตอร์ของคุณไม่มีไดอะแกรมไม่ว่าด้วยเหตุผลใดก็ตาม คุณสามารถทราบได้อย่างง่ายดายว่าสายไฟใดเป็นวงจรหากคุณมีมัลติมิเตอร์ ตั้งค่ามัลติมิเตอร์ของคุณเป็นการตั้งค่าแอมป์ต่ำและถอดมอเตอร์ของคุณออก แตะสายมัลติมิเตอร์ตัวใดตัวหนึ่งกับสายมอเตอร์เส้นใดเส้นหนึ่ง จากนั้นลองใช้สายอื่นๆ กับสายอีกเส้นหนึ่ง หากคุณอ่านค่าความต้านทานได้ สายไฟสองเส้นนั้นจะเป็น 1 วงจร และอีก 2 เส้นจะเป็นอีกวงจรหนึ่ง

ขั้นตอนที่ 8: เชื่อมต่อ EN, MS1 และ MS2 กับ "-"

เชื่อมต่อ EN, MS1 และ MS2 กับ
เชื่อมต่อ EN, MS1 และ MS2 กับ

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

ขั้นตอนที่ 9: ประสานขั้วต่อสายไฟตัวเมียกับสายไฟสองเส้น

ประสานขั้วต่อสายไฟตัวเมียกับสายไฟสองเส้น
ประสานขั้วต่อสายไฟตัวเมียกับสายไฟสองเส้น

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

ขั้นตอนที่ 10: เชื่อมต่อตัวเชื่อมต่อตัวเมียที่บัดกรีใหม่ของคุณ

เชื่อมต่อขั้วต่อตัวเมียที่บัดกรีใหม่ของคุณ
เชื่อมต่อขั้วต่อตัวเมียที่บัดกรีใหม่ของคุณ

กรุณาอย่าเสียบปลั๊กไฟจริงของคุณ สายสีแดงที่ "+" สีดำถึง "-"

ขั้นตอนที่ 11: เชื่อมต่อสิ่งเหล่านั้นกับ VM/GND

เชื่อมต่อกับ VM/GND
เชื่อมต่อกับ VM/GND

เชื่อมต่อราง "+" และ "-" เหล่านั้นกับ VM และ GND ข้างๆ ตัวที่มีคาปาซิเตอร์อยู่

ขั้นตอนที่ 12: ชื่นชมฝีมือของคุณ

ชื่นชมฝีมือของคุณ
ชื่นชมฝีมือของคุณ

เอาล่ะ คุณได้ตั้งค่ามอเตอร์และไดรเวอร์เรียบร้อยแล้ว! จากนี้ไปเราจะทำการควบคุม โดยวิธีการไปข้างหน้า:

  • หากคุณตัดการเชื่อมต่อไดรเวอร์ของคุณด้วยเหตุผลใดก็ตาม อย่าพยายามเชื่อมต่อในขณะที่เสียบปลั๊กไฟ 36V ฉันฆ่าบอร์ดไดรเวอร์ตัวที่ 3 ของฉันเช่นนั้น
  • เสียบปลั๊กไฟ 36V ก่อนเสียบปลั๊กไฟ Arduino ฉันไม่ได้ทอด Arduino เป็นการส่วนตัว แต่ระหว่างทางฉันเห็นคำเตือนมากมายเกี่ยวกับสิ่งนี้

ขั้นตอนที่ 13: ไม่บังคับ - ตรวจสอบ VREF. ของคุณ

TMC2209 มีโพเทนชิออมิเตอร์ที่ควบคุมกระแสไปยังมอเตอร์ หากคุณมีไดรเวอร์แบบเดียวกับที่ฉันทำ คุณสามารถอ่านได้ที่นี่ หากคุณต้องการปรับการตั้งค่า:

  • ถอดสายไฟทั้งหมดและถอดสายมอเตอร์ออกจากไดรเวอร์
  • ถอดสายไฟเข้ากับพิน EN (เปิดใช้งาน) บนไดรเวอร์ นี่คือหมุดที่มุมซ้ายบน
  • เสียบแหล่งจ่ายไฟมอเตอร์ของคุณ (ตัว 36V)
  • ใช้มัลติมิเตอร์ที่ตั้งไว้ที่ 20V ให้แตะตะกั่วอันหนึ่งไปยังแหล่งกำเนิด GND (ฉันใช้สายไฟเชื่อมต่อกับราง "-") แล้วแตะอีกอันหนึ่งไปยังพิน VREF โปรดอย่าแตะต้องตะกั่วในสิ่งอื่นใด คุณสามารถทำให้ไดรเวอร์สั้นลงได้หากคุณทำ
  • ใช้ไขควงขนาดเล็กค่อยๆ ปรับสกรูโพเทนชิออมิเตอร์ สำหรับบอร์ดของฉัน ทวนเข็มนาฬิกา = กำลังมากขึ้น VREF ของฉันเองอ่าน ~ 0.6V

ขั้นตอนที่ 14: ปุ่ม

ปุ่ม!
ปุ่ม!

ถัดไป เชื่อมต่อปุ่มของคุณอย่างนั้น พวกเขาไม่ต้องการพลัง

  • เชื่อมต่อราง "-" ของเขียงหั่นขนมปุ่มของคุณกับหนึ่งใน GND ของ Arduino คุณยังสามารถโยงมันออกจากราง "-" ของเขียงหั่นขนมอื่น ๆ ได้หากต้องการ
  • เชื่อมต่อหมุดแต่ละปุ่มเข้ากับราง "-"
  • เชื่อมต่อพินอื่นของแต่ละปุ่มเข้ากับพินดิจิทัลบน Arduino

ฉันใช้ปุ่ม 4 ปุ่ม: เปิด/ปิดมอเตอร์

มอเตอร์ต่อ

เปิดไมโครโฟน

ปิดไมโครโฟน

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

ขั้นตอนที่ 15: เพิ่มบอร์ดไมโครโฟน

เพิ่มบอร์ดไมโครโฟน
เพิ่มบอร์ดไมโครโฟน

อันนี้เรียบง่ายและ Adafruit มีคำแนะนำที่ดี (และพื้นฐานการบัดกรี!) ที่นี่

  • เชื่อมต่อ "-" กับ GND
  • เชื่อมต่อ GND บนบอร์ดไมโครโฟนกับ "-" (คุณสามารถเชื่อมต่อ GND กับ GND ได้โดยตรงและข้ามขั้นตอนก่อนหน้าไปจริงๆ)
  • เชื่อมต่อ VCC กับไฟ 3.3V บน Arduino นี่เป็นสิ่งสำคัญเนื่องจากแหล่งจ่ายไฟนี้มี "เสียงดัง" น้อยกว่า 5V ส่งผลให้การอ่านไมโครโฟนดีขึ้น
  • เชื่อมต่อ OUT เข้ากับพิน ANALOG IN บน Arduino ผมใช้ A0

ขั้นตอนที่ 16: นี่ควรเป็นผลลัพธ์สุดท้าย

นี่ควรเป็นผลลัพธ์สุดท้าย!
นี่ควรเป็นผลลัพธ์สุดท้าย!
นี่ควรเป็นผลลัพธ์สุดท้าย!
นี่ควรเป็นผลลัพธ์สุดท้าย!

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

ขั้นตอนที่ 17: รหัส

โอเค มาดูโค้ดกัน! นี่ไม่ใช่งานที่สะอาดที่สุดของฉัน แต่มันทำให้งานเสร็จได้ ฉันได้เพิ่มความคิดเห็นเพื่ออธิบายทุกอย่างที่นี่ แต่อดทนไว้ ฉันใช้ Arduino IDE สำหรับสิ่งนี้ทั้งหมด (มีให้ใช้งานบน Windows และ Mac ฟรี) jist คือ: ตั้งค่าความเร็วมอเตอร์และระยะทางที่จะเลี้ยว

กำหนดจำนวนหิน (ชิงช้า) ที่ต้องทำ

หมุนระยะที่ตั้งไว้ 1 วงสวิง สวิงตามจำนวนที่กำหนด

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

#include // ไลบรารีสเต็ปเปอร์มอเตอร์ "มาตรฐาน"

//#define DEBUG 1 // ยกเลิกหมายเหตุเมื่อคุณต้องการปรับระดับไมโครโฟน // การตั้งค่าปุ่ม - สิ่งเหล่านี้สอดคล้องกับตำแหน่งที่หมุดดิจิตอลที่คุณเชื่อมต่อกับปุ่ม const int motorEnablePin = 10; const int ต่อขา = 11; const int micDisablePin = 12; const int micEnablePin = 13; // การตั้งค่าไมค์ - A0 นี่คือแอนะล็อกสำหรับไมโครโฟน หน้าต่างตัวอย่างอยู่ในหน่วยมิลลิวินาที const int micPin = A0; const int sampleWindow = 1,000; ตัวอย่าง int ที่ไม่ได้ลงนาม bool micEnabled = เท็จ; ความไวของไมค์คู่ = 0.53; // คุณอาจต้องเปลี่ยนสิ่งนี้ // สำหรับฉัน ประมาณ.5 นั้นดีพอที่จะไม่ยิงเสียงอึกทึกเล็กๆ // แต่จะยิงสำหรับการร้องไห้เล็กๆ int stepsPerRevolution = 3200; // เปลี่ยนสิ่งนี้เพื่อให้พอดีกับจำนวนขั้นตอนต่อการปฏิวัติสำหรับมอเตอร์ของคุณ // มอเตอร์ของฉันคือ 200 ก้าว/รอบ // แต่ฉันตั้งค่าไดรเวอร์เป็น 1/16 ไมโครสเต็ป // ดังนั้น 200*16 = 3200… ไม่รู้จริงๆ หรือเปล่าว่านี่ เป็นวิธีที่เหมาะสม // ในการทำ Stepper myStepper(stepsPerRevolution, 2, 3); // 2 & 3 คือพิน DIR & STEP int stepCount = 0; int motorSpeed = 95; // คุณจะต้องปรับสิ่งนี้ตามน้ำหนักของเปลและทารกของคุณ int numSteps = 90; // ระยะทางที่มอเตอร์จะเคลื่อนที่ // คุณจะต้องปรับสิ่งนี้ตามรัศมีของล้อที่คุณติด // กับมอเตอร์ของคุณ สิ่งนี้และความเร็วน่าจะเป็นการลองผิดลองถูก // หมายเหตุ - ความเร็วที่สูงขึ้นของสเต็ปเปอร์มอเตอร์ = แรงบิดที่มีประสิทธิภาพต่ำ // หากคุณมีแรงบิดไม่เพียงพอ มอเตอร์ของคุณจะข้ามขั้นตอน (ไม่เคลื่อนที่) โดยที่ oldmotorButtonValue = HIGH; เปิดใช้งานบูล = เท็จ; // มอเตอร์เปิดใช้งาน? int loopStartValue = 0; int maxRocks = 100; // จำนวนครั้งที่คุณต้องการให้ร็อคก่อนที่จะปิด int rockCount = 0; การตั้งค่าเป็นโมฆะ () { #ifdef DEBUG Serial.begin (9600); // สำหรับการบันทึกการดีบัก #endif pinMode(motorEnablePin, INPUT_PULLUP); // นี่คือการตั้งค่าสำหรับปุ่มให้ทำงานโดยไม่ต้องใช้พลังงาน pinMode(continuePin, INPUT_PULLUP); pinMode(micEnablePin, INPUT_PULLUP); pinMode(micDisablePin, INPUT_PULLUP); myStepper.setSpeed (ความเร็วมอเตอร์); // ตั้งค่าความเร็วของมอเตอร์ตามที่คุณระบุไว้ก่อนหน้านี้ } void loop() { int motorButtonValue = digitalRead(motorEnablePin); // digitalRead เพิ่งอ่านค่าปุ่ม int continueValue = digitalRead (continuePin); // สิ่งนี้จะตรวจจับการกดปุ่มของมอเตอร์และป้องกันไม่ให้มันทำงานมากกว่าหนึ่งครั้งต่อคลิก หาก (motorButtonValue == HIGH && oldmotorButtonValue == LOW) { enable = !enabled; } micCheck(); // หากมอเตอร์ดับและเปิดไมค์อยู่ ให้ฟังเสียงทารกร้องไห้ if(!enabled && micEnabled) { if(getMicReading() >= micSensitivity) enable = true; } ถ้า (เปิดใช้งาน) { stepsPerRevolution = stepsPerRevolution * -1; //reverse direction // ด้วยการตั้งค่าของฉัน มันมีประสิทธิภาพมากกว่าในการย้อนกลับ // การสวิงครั้งแรก คุณสามารถใส่สิ่งนี้หลังลูป // หากไม่ใช่กรณีของคุณ // หมุนมอเตอร์ตามระยะทางที่ระบุด้านบนสำหรับ (int i = loopStartValue; i < numSteps; i++){ // ตรวจสอบการปิด int tempmotorButtonValue = digitalRead(motorEnablePin); ถ้า (tempmotorButtonValue != motorButtonValue) { rockCount = 0; // สองบรรทัดถัดไปนี้ "บันทึก" ตำแหน่งมอเตอร์ ดังนั้นครั้งต่อไปที่คุณเปิดเครื่อง // มันจะเดินทางต่อไปราวกับว่าคุณไม่ได้ปิดเครื่อง สิ่งนี้จะป้องกันการกระเด็น // ระยะการเคลื่อนที่ของคุณ loopStartValue = i; // บันทึกตำแหน่ง stepsPerRevolution = stepsPerRevolution * -1; // รักษาทิศทาง oldmotorButtonValue = tempmotorButtonValue; หยุดพัก; } ตรวจสอบต่อไป (continueValue); // ตรวจสอบว่ากดปุ่มดำเนินการต่อหรือไม่ micCheck(); myStepper.step (stepsPerRevolution / 50); // ต้องใช้กี่ขั้นตอนในการวนรอบ // คุณอาจต้องปรับค่านี้ // ตรวจสอบให้แน่ใจว่าเราดำเนินการตามระยะของลูปเต็มต่อไปหากการวนซ้ำเสร็จสิ้น // สิ่งนี้จะมีผลหากคุณปิดมอเตอร์ด้วยตัวเองและมัน "บันทึก" ตำแหน่ง if (i == numSteps - 1) { loopStartValue = 0; } } } ล่าช้า (100); // หยุด 100 มิลลิวินาทีก่อนทำร็อคต่อไป คุณจะต้องปรับสิ่งนี้ ถ้า (เปิดใช้งาน) checkComplete(); oldmotorButtonValue = motorButtonValue; // ใช้สำหรับป้องกันการดับเบิลคลิก } // รหัสนี้มาจาก Adafruit โดยตรง getMicReading สองครั้ง () { startMillis แบบยาวที่ไม่ได้ลงนาม = millis (); int peakToPeak ที่ไม่ได้ลงชื่อ = 0; // peak-to-peak ระดับสัญญาณ int ที่ไม่ได้ลงนามสูงสุด = 0; สัญญาณ int ที่ไม่ได้ลงนาม Min = 1024; ในขณะที่ (มิลลิวินาที () - startMillis < sampleWindow) { micCheck (); ถ้า (digitalRead(motorEnablePin) == LOW) เปิดใช้งาน = true; ตัวอย่าง = analogRead (micPin); if (sample signalMax) { signalMax = ตัวอย่าง; // บันทึกเฉพาะระดับสูงสุด } else if (sample = maxRocks) { เปิดใช้งาน = เท็จ; rockCount = 0; // กลับสู่ตำแหน่งกลาง

สำหรับ (int i = loopStartValue; i < numSteps/2; i++){

myStepper.step(stepsPerRevolution * -1 / 50); // ขั้นตอนที่ 1/100 ของการปฏิวัติ:

}

} }

ขั้นตอนที่ 18: การติดตั้งและการติดตั้งล้อ

การติดตั้งและการติดตั้งล้อ
การติดตั้งและการติดตั้งล้อ

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

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

ทางออกที่ดีกว่าสำหรับขั้นตอนที่ 3 คือการซื้อล้อรอกที่มีเส้นผ่านศูนย์กลางใหญ่กว่าตั้งแต่แรก ของฉันมีขนาดเส้นผ่านศูนย์กลางน้อยกว่า 3 นิ้วในร่องและทำงานได้ดีกับเปลของฉันโดยเฉพาะ

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

ขั้นตอนที่ 19: การตั้งค่าขั้นสุดท้าย

การติดตั้งขั้นสุดท้าย
การติดตั้งขั้นสุดท้าย

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

แนะนำ: