สารบัญ:

Stepper Pomodoro Timer: 3 ขั้นตอน (พร้อมรูปภาพ)
Stepper Pomodoro Timer: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Stepper Pomodoro Timer: 3 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: Stepper Pomodoro Timer: 3 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Minee 3 Visual Countdown Timer | The BEST Pomodoro Method Timer 2024, พฤศจิกายน
Anonim
Image
Image
ขั้นตอนที่ 1: บัดกรีและต่อวงจรภายนอกคอนเทนเนอร์
ขั้นตอนที่ 1: บัดกรีและต่อวงจรภายนอกคอนเทนเนอร์

Stepper Pomodoro เป็นตัวจับเวลาบนโต๊ะเพื่อช่วยจัดการรายการงานประจำวันของพวกเขาโดยแบ่งแต่ละช่วงเวลาของการทำงานออกเป็น 30 นาที อย่างไรก็ตาม ไม่เหมือนกับตัวจับเวลา Pomodoro ปกติ มันไม่ทำให้คุณกังวลด้วยการแสดงระยะเวลาที่เหลือ แต่จะแสดงเวลาโดยประมาณที่หน้าปัดสามหน้าปัดกำลังเดินอยู่ การไม่แสดงเวลาที่แน่นอนจะช่วยให้คุณมีสมาธิกับงานที่ทำอยู่ได้จริง แทนที่จะตรวจสอบเวลาที่เหลืออยู่อย่างต่อเนื่อง Pomodoro นี้เหมาะสำหรับผู้ที่ต้องการโครงสร้างที่เบาและไม่สร้างความรำคาญในการจัดการงานของพวกเขา

เครื่องมือ

• หัวแร้ง

• เครื่องปอกสายไฟ

• เครื่องตัดเลเซอร์ (หรือเครื่องขัดขึ้นอยู่กับว่าคุณต้องการสร้างแป้นหมุนของตัวจับเวลาอย่างไร)

• สว่าน (ฉันใช้สว่านเจาะเพื่อเจาะรูที่ใหญ่พอสำหรับแป้นหมุน)

วัสดุ

• 1 Arduino Uno

• เขียงหั่นขนมครึ่งขนาด 1 แผ่น

• สะพาน 3 H (ฉันใช้ DRV8833 มอเตอร์ชีลด์ช่วยฉันเวลาและปวดหัวได้บ้าง)

• 3 สเต็ปเปอร์มอเตอร์ (ฉันใช้ NEMA 17 สเต็ปเปอร์)

• 1 ปุ่ม

• ตัวต้านทาน 220-1K โอห์ม 1 ตัว (ช่วงใดช่วงหนึ่งก็ดี)

• อะแดปเตอร์ AC/DC (ฉันใช้ไฟ 12V ซึ่งอาจใหญ่เกินไปสำหรับสเต็ปเปอร์จำนวนนี้)

• ตัวแยกไฟ

• สาย USB A-B

• สายเขียงหั่นขนม

• ประสาน

• วัสดุสำหรับใส่นาฬิกาจับเวลา

• อะครีลิคสำหรับหน้าปัด

• ตะปูหรือหมุดโลหะเพื่อทำหน้าที่เป็นตัวจับเวลาอยู่กับที่

ขั้นตอนที่ 1: ขั้นตอนที่ 1: การบัดกรีและต่อวงจรภายนอกคอนเทนเนอร์

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

NEMA 17s คือสิ่งที่เรียกว่าสเต็ปปิ้งมอเตอร์แบบไบโพลาร์ ซึ่งหมายความว่ามีชุดคอยล์สองชุด (แทนที่จะเป็นหนึ่งชุด) ภายในมอเตอร์ ซึ่งจะเปลี่ยนขั้วเพื่อให้สามารถเคลื่อนที่ได้อย่างแม่นยำ ปกติสเต็ปเปอร์ไบโพลาร์จะมีสี่สายและสเต็ปเตอร์แบบโพลาร์มีหกสาย ซึ่งคำแนะนำนี้ค่อนข้างซับซ้อนทางออนไลน์ อย่างไรก็ตาม คุณสามารถต่อมัลติมิเตอร์กับสายไฟสองเส้น และดูว่ามีการเชื่อมต่อหรือไม่ สเต็ปเปอร์ NEMA 17 มีลำดับลวดในลำดับสี RED, YELLOW, GREY, GREEN โดยที่สีแดงและสีเทาเป็นคู่ขั้วแรก และสีเหลืองและสีเขียวเป็นคู่ขั้วที่สอง หาก ณ จุดใดก็ตาม สเต็ปเปอร์เริ่มกระตุกแทนที่จะเคลื่อนไหวตามที่คาดไว้ เป็นไปได้ว่าสายไฟของคุณไม่ได้โพลาไรซ์อย่างถูกต้องกับคู่แฝดหรือสายหนึ่งถูกตัดการเชื่อมต่อ สเต็ปเปอร์แต่ละตัวถูกควบคุมผ่านพินเอาต์พุตสี่ตัวที่เชื่อมต่อกับบริดจ์ DRV8833 H ลำดับการเดินสายสำหรับอินพุตไปยัง DRV8833 คือ IN1, IN2, Power, Ground, IN3, IN4 เพื่อวัตถุประสงค์ในการส่งออก NEMA เพียงแค่เชื่อมต่อกับสี่พินกลางของหกพินตามลำดับ: RED, GREY, YELLOW, GREEN ตอนนี้ให้เชื่อมต่อพลังงาน ฉันมี NEMA ของฉันบนพอร์ตดิจิทัล 2–13

ในการจ่ายไฟนี้ ฉันซื้ออะแดปเตอร์ AC/DC 12V พร้อมตัวแยกไฟเพื่อให้สามารถจ่ายไฟให้กับทั้ง Arduino และสเต็ปเปอร์ทั้งหมด คำเตือน: อย่าเชื่อมต่อสายไฟและสายกราวด์ของคุณจาก Arduino ที่ได้รับพลังงานจากพอร์ตไปยังเขียงหั่นขนมที่ได้รับพลังงานโดยตรงจาก AC/DC แล้ว มันจะทอดกระดานของคุณ จากอะแดปเตอร์ 12V ที่เสียบเข้ากับผนัง ส่วนหนึ่งของตัวแยกสัญญาณตรงไปที่พอร์ตของ Arduino และอีกส่วนหนึ่งไปยังขั้วบวกและลบของบอร์ดขนมปัง

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

จากที่นี่ เราควรจะพยายามควบคุม stepper โดยใช้รหัสทดสอบ stepper พื้นฐานที่นี่ คำอธิบายบน Arduino.cc นี้ยังมีคำอธิบายอย่างละเอียดมากขึ้นเกี่ยวกับสเต็ปเปอร์แบบไบ/ยูนิโพลาร์ หากคุณต้องการ ต่อไปมาดูโค้ดของ Pomodoro!

ขั้นตอนที่ 2: ขั้นตอนที่ 2: การอัปโหลดโค้ดและปรับให้เข้ากับความต้องการของคุณ

ขั้นตอนที่ 2: อัปโหลดโค้ดและปรับแต่งตามความต้องการของคุณ
ขั้นตอนที่ 2: อัปโหลดโค้ดและปรับแต่งตามความต้องการของคุณ

ด้านล่างนี้คือรหัสสำหรับปุ่ม Pomodoro ของฉัน เพื่อปรับแต่งให้เข้ากับการตั้งค่าของคุณ ให้ทำตามขั้นตอนเหล่านี้:

1. กำหนดจำนวนก้าวต่อการปฏิวัติประเภทสเต็ปส่วนบุคคลของคุณมี (NEMA 17 มี 200 และแสดงเป็นจำนวนเต็มคงที่ที่เรียกว่า stepsPerRevolution)

2. ตั้งค่าตำแหน่งที่ปุ่มของคุณป้อนในปุ่มผู้โทรจำนวนเต็มคงที่

3. ตั้งค่าตำแหน่งที่ Arduino ของคุณควรส่งออกไปยังคำสั่ง steppers (ส่วนเหล่านี้อาจแตกต่างกันมากที่สุดระหว่างประเภทสะพาน H เนื่องจากหลายแห่งมีไลบรารีที่แตกต่างกันที่พวกเขาใช้)

4. ตั้งค่าความเร็ว stepper เป็น RPM ใน.setSpeed (ฉันตั้งค่าของฉันไว้ที่ 1 รอบต่อนาทีเมื่อหมุนตามเข็มนาฬิกาและ 30 รอบต่อนาทีเมื่อหมุนทวนเข็มนาฬิกา)

5. กำหนดจำนวนครั้งที่คุณต้องการให้แต่ละ steppers ของคุณเปิดก่อนที่จะเคลื่อนที่ (steppers ของฉันนับสิบนาที ดังนั้นพวกเขาจึงหมุนสิบครั้งที่ 1 RPM)

6 กำหนดระยะเวลาที่คุณต้องการให้หมุนย้อนกลับ

#รวม

const int stepsPerRevolution = 200; // การตั้งค่าคงที่ของจำนวนขั้นตอนในการปฏิวัติเต็มรูปแบบของสเต็ปเปอร์มอเตอร์ของฉัน

const int buttonPin = A0; // การตั้งค่าคงที่ของอินพุตปุ่มของฉัน

Stepper ก่อนStepper (stepsPerRevolution, 2, 3, 4, 5); // เริ่มต้นไลบรารี stepper บนพินบางตัว

Stepper วินาทีStepper(stepsPerRevolution, 6, 7, 8, 9); Stepper ที่สามStepper (stepsPerRevolution, 10, 11, 12, 13); Stepper firstStepperBack(stepsPerRevolution, 2, 3, 4, 5); // เริ่มต้นไลบรารี stepper บนพินเหล่านี้ใหม่เพื่อให้สามารถรีเซ็ต rpm ได้เมื่อแจ้งเตือนว่าเวลานั้นหมดเวลาแล้ว Stepper secondStepperBack(stepsPerRevolution, 6, 7, 8, 9); Stepper thirdStepperBack(stepsPerRevolution, 10, 11, 12, 13);

int minutesCounter = 0; // int นับการปฏิวัติเต็มรูปแบบของ steppers

int timerState = ต่ำ; // สถานะปัจจุบันของตัวจับเวลาโพโมโดโร (สูง = เปิด, ต่ำ = ปิด/รีเซ็ต) int buttonState; // การอ่านปัจจุบันจากพินอินพุต int lastButtonState = HIGH; // การอ่านก่อนหน้าจากพินอินพุต

// ตัวแปรต่อไปนี้ unsigned long's เพราะเวลา วัดเป็นมิลลิวินาที

// จะกลายเป็นจำนวนที่มากกว่าที่จะเก็บไว้ใน int ได้อย่างรวดเร็ว LastDebounceTime แบบยาวที่ไม่ได้ลงชื่อ = 0; // ครั้งสุดท้ายที่พินเอาต์พุตถูกสลับ unsigned debounceDelay ยาวที่ไม่ได้ลงนาม = 50; // เวลาดีบัก; เพิ่มขึ้นหากเอาต์พุตกะพริบ

การตั้งค่าเป็นโมฆะ () {

pinMode(ปุ่มพิน, INPUT_PULLUP); // ตั้งค่าคงที่ของปุ่มเป็นอินพุต

firstStepper.setSpeed(1); // ตั้งค่าความเร็วที่ 1 รอบต่อนาที นับ 10 นาทีต่อวินาที Stepper.setSpeed(1); ThirdStepper.setSpeed(1); firstStepperBack.setSpeed(30); // ตั้งค่าความเร็วที่ 30 rpm เพื่อเตือนว่าเวลานั้นหมดลงหลังจาก Pomodoro เสร็จสิ้น secondStepperBack.setSpeed(30); ThirdStepperBack.setSpeed(30);

Serial.begin(9600); // เริ่มมอนิเตอร์แบบอนุกรมด้วยอัตราบอด 9600

}

วงเป็นโมฆะ () {

// อ่านสถานะของสวิตช์เป็นตัวแปรท้องถิ่น: int reading = digitalRead(buttonPin);

// ตรวจสอบว่าคุณเพิ่งกดปุ่ม

// (เช่น อินพุตเปลี่ยนจาก LOW เป็น HIGH) และคุณรอ // นานพอแล้วตั้งแต่การกดครั้งสุดท้ายเพื่อเพิกเฉยต่อสัญญาณรบกวนใดๆ:

// หากสวิตช์เปลี่ยนเนื่องจากเสียงหรือการกด:

if (อ่าน != lastButtonState) {// รีเซ็ตตัวจับเวลา debounding lastDebounceTime = millis (); } if ((millis() - lastDebounceTime) > debounceDelay) { // ไม่ว่าค่าที่อ่านจะอยู่ที่ใด มันอยู่ตรงนั้นนานกว่า // มากกว่าการดีบักซ์ล่าช้า ดังนั้นให้ถือว่าเป็นสถานะปัจจุบันจริง:

// หากสถานะของปุ่มเปลี่ยนไป:

ถ้า (อ่าน != buttonState) { buttonState = กำลังอ่าน;

// สลับเฉพาะการเปิดใช้ตัวจับเวลาหากสถานะปุ่มใหม่ระบุว่าถูกกด

// กดหนึ่งครั้งเพื่อเปิด กดอีกครั้งเพื่อปิดถ้า (buttonState == LOW) { timerState = !timerState; Serial.print ("สถานะตัวจับเวลาคือ "); Serial.println (timerState); } } }

ถ้า (timerState == สูง) {

Serial.println("ตัวจับเวลา Pomodoro ได้เริ่มขึ้นแล้ว"); if (minutesCounter <11) {// ถ้าค่าที่สองปัจจุบันแตกต่างจากค่าก่อนหน้า ดังนั้น firstStepper.step (stepsPerRevolution); // หมุน stepper 200 ขั้นตอน/1 รอบ minutesCounter++; Serial.print("minutesCounter คือ "); Serial.println(minutesCounter); }

if (11 <= minutesCounter && minutesCounter < 21) { // ถ้าค่าที่สองปัจจุบันแตกต่างจากค่าก่อนหน้าแล้ว secondStepper.step (stepsPerRevolution); // หมุน stepper 200 ขั้นตอน/1 รอบ minutesCounter++; Serial.print("minutesCounter คือ "); Serial.println(minutesCounter); }

if (21 <= minutesCounter && minutesCounter < 31) { // ถ้าค่าที่สองปัจจุบันแตกต่างจากค่าก่อนหน้าแล้ว thirdStepper.step (stepsPerRevolution); // หมุน stepper 200 ขั้นตอน/1 รอบ minutesCounter++; Serial.print("minutesCounter คือ "); Serial.println (นาทีตัวนับ); }

if (31 <= minutesCounter && minutesCounter < 1031) { // ถ้าค่าที่สองปัจจุบันแตกต่างจากค่าก่อนหน้าแล้ว firstStepperBack.step (-1); // หมุนถอยหลัง 1 ก้าวตามลำดับเพื่อให้ปรากฏว่าทั้งหมดทำงานพร้อมกัน secondStepperBack.step(-1); ThirdStepperBack.step(-1); นาทีเคาน์เตอร์++; Serial.print("minutesCounter คือ "); Serial.println(minutesCounter); } } อื่น { Serial.println ("ตัวจับเวลา Pomodoro ปิดอยู่"); } // บันทึกการอ่าน ครั้งหน้าผ่านลูป // มันจะเป็น lastButtonState: lastButtonState = reading; }

ขั้นตอนที่ 3: ขั้นตอนที่ 3: มี Steppers และ Arduino หากคุณต้องการ

ขั้นตอนที่ 3: มี Steppers และ Arduino หากคุณต้องการ
ขั้นตอนที่ 3: มี Steppers และ Arduino หากคุณต้องการ
ขั้นตอนที่ 3: มี Steppers และ Arduino หากคุณต้องการ
ขั้นตอนที่ 3: มี Steppers และ Arduino หากคุณต้องการ
ขั้นตอนที่ 3: มี Steppers และ Arduino หากคุณต้องการ
ขั้นตอนที่ 3: มี Steppers และ Arduino หากคุณต้องการ

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

แนะนำ: