วงจร

วิธีการสร้างเครื่องจักรที่ไร้ประโยชน์อื่น: ใช้งานง่ายและใช้งานยาก: 9 ขั้นตอน (พร้อมรูปภาพ)

เวก้าผับ ฉบับพิเศษ

เวก้าผับ ฉบับพิเศษ

สารบัญ:

Anonim

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

วัสดุ:

ขั้นตอนที่ 1: มันทำงานอย่างไร

ทุกอย่างเชื่อมต่อกับบอร์ด Arduino บอร์ดรอจนกระทั่งสวิตช์ถูกตั้งค่าเป็นตรรกะสูงนั่นคือเมื่อคุณปัดสวิตช์บอร์ดจะส่งสัญญาณเซอร์โวมอเตอร์สองตัวเพื่อเคลื่อนที่ในลักษณะเฉพาะ (เพิ่มเติมในภายหลัง) หลังจากนั้น เซอร์โวที่เชื่อมต่อกับ "มือ" จะสะบัดสวิตช์กลับไปที่ตำแหน่งปิดและกลับสู่กล่องตามด้วยเซอร์โว "ประตู" จากนั้นทุกอย่างจะเกิดซ้ำ
หากคุณเห็นวิดีโอด้านบนทุกครั้งที่สวิตช์ถูกสลับเครื่องตอบสนองในลักษณะที่แตกต่างกันและทำได้โดยการเขียนฟังก์ชั่นที่แตกต่างกันด้วยการกำหนดเวลาที่แตกต่างกันในรหัส Arduino (ฉันเรียกพวกเขาว่า "Moves") ทุกครั้งที่สวิตช์ถูกสลับฉันจะเรียกการย้ายใหม่จนกว่าจะเสร็จสิ้นฉันจะเริ่มต้นใหม่ โปรดทราบว่าในขั้นตอนที่ 9 ฉันให้รหัสรุ่นอื่นที่เลือกการย้ายแบบสุ่มแทนการเรียงตามลำดับ คุณสามารถเพิ่มการเคลื่อนไหวได้มากเท่าที่คุณต้องการตราบใดที่คุณมีหน่วยความจำเพียงพอใน Arduino
Arduino เปิดอยู่เสมอนี่คือเหตุผลที่ฉันเพิ่มสวิตช์สำหรับแบตเตอรี่เพื่อประหยัดพลังงานเมื่อไม่ได้ใช้งานเครื่อง ฉันกำลังวางแผนที่จะใช้งานอินเทอร์รัปต์บนสวิตช์แทนการตรวจจับระดับสูง / ต่ำอย่างง่ายในปัจจุบันและเชื่อมต่อกับโหมดสลีป สิ่งนี้จะช่วยประหยัดพลังงานเมื่อไม่ได้ใช้งานเครื่องและยังช่วยให้พร้อมเสมอ (แต่จะทำให้รหัสซับซ้อน) ดังนั้นสำหรับตอนนี้มันเป็นเพียงสวิตช์เปิด / ปิดอย่างง่ายและบอร์ดจะทำงานตลอดเวลา .

ขั้นตอนที่ 2: ชิ้นส่วน

คุณจะต้องการ:
บังคับ:
1. กล่อง
2. บอร์ด Arduino ใด ๆ ที่มีเอาต์พุต PWM (ฉันบังเอิญมีบอร์ดเก่าวางอยู่รอบ ๆ ดิจิมิลา)
3. มอเตอร์เซอร์โว RC มาตรฐานสองตัว (ฉันใช้ Futaba - S3003 พวกเขามีแรงบิด 3,2 Kg / cm มากกว่าเพียงพอที่จะขยับประตูหรือมือ)
4. แบตเตอรี่ขนาด 6-12 V (ฉันใช้แบตเตอรี่ AR drone ของฉันมันคือ 11.1 v / 1000 mA)
3. สวิตช์ SPTT หรือ SPST สำหรับทริกเกอร์ (โดยทั่วไปสวิตช์ใด ๆ ที่เหมาะกับคุณ!)
5. สวิตช์อื่นสำหรับแบตเตอรี่
6. กดปุ่มเพื่อรีเซ็ต Arduino ในกรณีที่คุณต้องการเริ่มการเคลื่อนไหว / รหัสจากด้านบน
7. สายจัมเปอร์บางตัว

ไม่จำเป็น:
ในกรณีที่คุณต้องการออกแบบการเคลื่อนไหวที่มีการย้ายกล่องไปมา (เช่นการเคลื่อนไหวครั้งสุดท้ายในวิดีโอ) จากนั้นคุณจะได้รับ:
1. เกราะมอเตอร์ Arduino นี้จะเป็นประโยชน์สำหรับโครงการอื่น ๆ (หรือคุณสามารถออกแบบสะพาน H ด้วยตัวคุณเองค้นหามัน)
2. รถ RC ราคาถูกเพื่อให้คุณสามารถใช้มอเตอร์ DC และกล่องเกียร์
นอกจากนี้ยังอยู่ในส่วน "ทางเลือก" ฉันได้สร้างวงจรการตีกลับของฮาร์ดแวร์เพื่อให้มีทริกเกอร์ที่สะอาดเมื่อสวิตช์เปิด / ปิด สามารถข้ามและนำไปใช้งานได้ง่ายในซอฟต์แวร์ arduino โดยใช้ความล่าช้าหรือตัวจับเวลา ฉันทำ debounce ฮาร์ดแวร์เพราะฉันจะเปลี่ยนรหัสให้ใช้งานอินเตอร์รัปต์เร็ว ๆ นี้และเนื่องจากภายหลังไม่อนุญาตให้ใช้ฟังก์ชั่นการหน่วงเวลา / การจับเวลาที่เชื่อถือได้ในงานประจำดังนั้นฉันจึงต้องสร้างวงจรเดอตีกลับที่เรียบง่ายสำหรับการใช้ในอนาคต . หากคุณต้องการข้ามส่วนนี้เพียงเชื่อมต่อสวิตช์ / ตัวต้านทานแบบง่ายเข้ากับขาที่ 2 ของ Arduino และใช้รูทีน debounce ของซอฟต์แวร์
สำหรับ debounce ฮาร์ดแวร์:
1. 10mF ตัวเก็บประจุด้วยไฟฟ้า
2. 10K ตัวต้านทาน
3. ลอจิกไม่ใช่เกต i.e Inverter (ชิป 74HC04) นี่มีอินเวอร์เตอร์หกตัว แต่คุณจะต้องการเพียงอันเดียว
มาสร้างกันเถอะ …

ขั้นตอนที่ 3: สร้างกล่อง

คุณสามารถใช้กล่องใดก็ได้ที่คุณเห็นว่าเหมาะสม ฉันสร้างของฉันอาจจะไม่สมบูรณ์แบบ แต่ก็ยังเป็นส่วนตัว :)
1. ฉันใช้ไม้ BALSA 5 มม. จำนวน 2 แผ่นใช้งานง่ายด้วยการใช้มีดและค่อนข้างแข็งแกร่งเนื่องจากมีน้ำหนักเบาอย่างไม่น่าเชื่อ
2. บริโภคกาว Cyanoacrylat 5 หลอด (หรือกาวที่ออกฤทธิ์เร็ว)
นี่มันคือ:
22 x 14 x 14 ซม กล่อง

ขั้นตอนที่ 4: แผนผัง

ด้านบนเป็นแผนผัง (วาดโดยใช้ Fritzing) แสดง:
ส่วนบน: กระดานหลัก Arduino, 2 เซอร์โวและการเชื่อมต่อสวิทช์ โปรดทราบว่าตามที่ระบุไว้ก่อนหน้านี้คุณสามารถแทนที่วงจร debounce (ด้านบนขวา) ทั้งหมดด้วยตัวต้านทาน / สวิตช์แบบง่าย
ทั้งเซอร์โว "ประตู" และ "มือ" ได้รับพลังงานโดยตรงจากขา 5v บน Arduino สายสัญญาณเชื่อมต่อกับขา 9 และ 10 ตามลำดับ หมุดเหล่านี้รองรับ PWM ดังนั้นฉันจึงใช้พวกมันเพื่อควบคุมมุม / ตำแหน่งของเซอร์โว (จาก 0 ถึง 180 องศาสูงสุด)
หมายเหตุ: ปุ่มกดสีแดงเป็นเพียงการรีเซ็ต (คล้ายกับปุ่มที่พบบนใบหน้าของบอร์ด arduino) ฉันเพิ่มเข้าไปเพื่อให้สามารถเข้าถึงบอร์ด / ซอฟต์แวร์ได้อย่างรวดเร็วโดยไม่ต้องเปิดกล่อง เพียงเชื่อมต่อพิน RESET กับกราวด์เพื่อทำการรีเซ็ต
ส่วนล่าง: จำเป็นหากคุณต้องการใช้มอเตอร์ DC และเคลื่อนย้ายเครื่องไปรอบ ๆ นี่คือตัวป้องกันมอเตอร์อาร์ดิโนมันติดตั้งอยู่ด้านบนของ Arduino ดังนั้นพินของแผงทั้งสองจึงเชื่อมต่อกัน ฉันกำลังแสดงพวกเขาด้านล่างโดยแยกออกเพื่อความชัดเจนหวังว่า! โล่นี้สามารถควบคุมมอเตอร์กระแสตรงได้สูงสุด 2 ตัว (2 ช่องสัญญาณ A / B) ได้อย่างง่ายดายอย่างไม่น่าเชื่อ ฉันกำลังใช้เพียงหนึ่งตอนนี้ จะช่วยให้การตั้งค่าในรหัสทิศทางความเร็วและตัวแบ่งใด ๆ ของ 2 ช่องทาง / มอเตอร์ที่มีอยู่ ฉันใช้แชนเนล B ตามที่แสดงด้านล่าง ที่ขา
13 สำหรับทิศทาง, pin 11 สำหรับความเร็วและ pin 8 สำหรับการควบคุมเบรก
แบตเตอรี่มีขนาด 11.1 / 1,000 mA ซึ่งเชื่อมต่อกับโล่ดังนั้นจึงป้อนมอเตอร์ DC, บอร์ด Arduino และเซอร์โวหลัก หากคุณไม่ได้ใช้แผ่นป้องกันคุณสามารถเชื่อมต่อแบตเตอรี่เข้ากับช่องเสียบไฟโดยตรงบนบอร์ดหลักของ Arduino

ขั้นตอนที่ 5: แก้ไขเซอร์โว

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


ขั้นตอนที่ 6: เชื่อมต่อสวิตช์เซอร์โวและ Arduino

สร้างการเชื่อมต่อทั้งหมดที่เห็นในขั้นตอนแผนผังและลองใส่ทั้งหมดลงในช่องคล้ายกับที่แสดงด้านบน:

ขั้นตอนที่ 7: ตัวเลือก: มอเตอร์ DC และแบตเตอรี่

ข้างต้นเป็นวิธีที่ฉันวางกล่องเกียร์มอเตอร์ DC (นำมาจากรถ RC ราคาถูก) แสดงการปะทะและการจัดวางสวิตช์
ตรวจสอบให้แน่ใจว่าวางเกียร์ให้อยู่กึ่งกลางเท่าที่จะเป็นไปได้เพื่อปรับสมดุลของกล่องคุณอาจต้องวางน้ำหนักไว้ในกล่องเพื่อทำให้เกิดความสมดุลมากขึ้นหลังจากการประกอบขั้นสุดท้ายเนื่องจากแบตเตอรี่ที่ฉันใช้มีน้ำหนักค่อนข้างหนัก (100 กรัม) เมื่อเปลี่ยนหรือย้ายกล่อง
โปรดทราบว่ามอเตอร์ dc ความเร็ว ถูกควบคุมโดยพิน 11, ทิศทาง โดยพิน 13และ เบรค บนขา 8, สิ่งเหล่านี้ถือเป็นแชนเนล B บนโล่มอเตอร์ arduino
ตลอดการชุมนุมฉันพยายามซ่อนสวิตช์สายทั้งหมดและส่วนประกอบอื่น ๆ เพื่อให้มีกล่องของแท้ที่เรียบง่าย สิ่งนี้ใช้กับล้อได้ดังนั้นฉันจึงสร้างขอบล้อรอบ ๆ ซึ่งมีทั้งล้อและแบตเตอรี่และยังให้การเข้าถึงปุ่มรีเซ็ตสีแดง

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

ในการเขียนโค้ดสำหรับ arduino คุณต้องใช้ arduino IDE (ดาวน์โหลดได้ที่นี่)
ฉันใช้เวอร์ชั่น 1.0.5 เพียงตรวจสอบให้แน่ใจว่าได้เลือกพอร์ต COM (windows) และประเภทบอร์ดที่ถูกต้องจากภายใน IDE จากนั้นใช้โค้ดด้านล่างแล้วอัปโหลดกด
หมายเหตุ: ค่าที่ฉันใช้ในรหัสเพื่อตั้งค่าการโก่งสูงสุดของเซอร์โวนั้นทำสำหรับกล่องนี้โดยคำนึงถึงการวางตำแหน่งเซอร์โวแกนและมุม ฉันได้รับสิ่งนี้ผ่านการทดลองใช้ ดังนั้นคุณต้องคิดค่าของคุณเองตามกล่องและ ตำแหน่งเซอร์โว.
สำหรับการอ้างอิงด้านล่างคือค่าต่ำสุด / สูงสุดที่ฉันใช้กับเซอร์โวแต่ละตัวเนื่องจากคุณจะเห็นมันเกิดขึ้นในโค้ด:
ประตู:
80 ซ่อน 155 เปิดเต็ม
มือ:
0 การซ่อน 129 การกดสวิตช์

นี่คือรหัส (ดีกว่าที่จะดาวน์โหลดไฟล์ที่แนบมากับขั้นตอนนี้แทนที่จะคัดลอก / วางจากด้านล่าง):
#include
ประตูเซอร์โวเซอร์โว
Servo handServo;
int switch_pin = 2; // ตั้งสวิตช์บนพิน 2
// ตัวแปรยนต์
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; // เลื่อนตัวเลือก
int Testmove = 0; // test mode: ตั้งค่าให้ย้ายหมายเลขเพื่อทดสอบการย้ายที่เลือกเพียงหนึ่งครั้ง
// (ตั้งค่าเป็นศูนย์เพื่อให้ทำงานได้ตามปกติ i.e: roundrobbin เมื่อมีการเคลื่อนไหวของกระสุน)
การตั้งค่าเป็นโมฆะ ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // ตั้งเซอร์โวประตูที่ Pin 9 pwm
handServo.attach (10); // ตั้งมือเซอร์โวไว้ที่ Pin 10 pwm
doorServo.write (80); // เปิดประตูเพื่อซ่อนตำแหน่ง
handServo.write (0); // ตั้งมือเพื่อซ่อนตำแหน่ง

// เซ็ตอัพช่อง B (เนื่องจากช่อง A ถูกสงวนไว้โดยเซอร์โวประตูและมือและไม่สามารถใช้พร้อมกันได้)
pinMode (motorDirection, OUTPUT); // เริ่มต้นหมุดมอเตอร์ช่อง B
pinMode (motorBrake, OUTPUT); // เริ่มเบรกพินช่อง B

}

เป็นโมฆะห่วง ()
{
if (Testmove! = 0) {
selectedMove = Testmove;
}

// ถ้าสวิตช์เปิดอยู่ให้ขยับมือและประตูเพื่อปิด …
ถ้า (digitalRead (switch_pin) == สูง)
{

if (selectedMove> 10) {selectedMove = 0; } // เมื่อเล่นการเคลื่อนไหวทั้งหมดให้ทำซ้ำการเคลื่อนไหวตั้งแต่ต้น
// ด้านล่างนี้เป็น "การเคลื่อนไหว" ที่ฉันออกแบบมาจนถึงตอนนี้แต่ละฟังก์ชั่นที่เขียนไว้ด้านล่างในรหัสเรียกใช้ชื่อแปลก ๆ ใช่มั้ย ใช่บางคนเขียนด้วยภาษาอาหรับ
if (selectedMove == 0) {switchoff (); }
อื่นถ้า (selectedMove == 1) {switchoff (); }
อื่นถ้า (selectedMove == 2) {switchoffbitaraddod (); }
อื่นถ้า (selectedMove == 3) {crazydoor (); }
อื่นถ้า (selectedMove == 4) {crazyslow (); }
อื่นถ้า (selectedMove == 5) {m7anika7anika (); }
อื่นถ้า (selectedMove == 6) {m3alla2 (); }
อื่นถ้า (selectedMove == 7) {switchoff (); }
อื่นถ้า (selectedMove == 8) {matrix (); }
อื่นถ้า (selectedMove == 9) {sneak (); }
อื่นถ้า (selectedMove == 10) {zee7 (); }

if (Testmove == 0) {
selectedMove ++; // เลื่อนไปที่ตำแหน่งถัดไปหากไม่อยู่ในโหมดทดสอบ
}
}
}

// ไลบรารี่ของการเคลื่อนไหว
// ท่าพื้นฐาน
เป็นโมฆะ switchoff ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
}

// move 3: เปิดและรอจากนั้นขยับมือแล้วรอจากนั้นสลับและซ่อน
เป็นโมฆะ switchoffbitaraddod ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (800);
// การขยับมือ
สำหรับ (pos = 0; pos <100; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (1000)
สำหรับ (pos = 100; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);


}

}

// move 4: เปิดประตูแล้วปิดหลาย ๆ ครั้งรอจากนั้นเปิดใหม่อีกครั้งโดยปิดและซ่อน

เป็นโมฆะ crazydoor ()
{

// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <125; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (POS);
ล่าช้า (15);
}
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <110; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (700);
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <125; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (700);
// ซ่อนประตู
สำหรับ (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (POS);
ล่าช้า (15);
}

// ---- ของสวิตช์ของ ---- //
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 8)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <129; pos = 3)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (POS);
ล่าช้า (15);
}

}

// ย้าย 5: เปิดประตูจากนั้นเลื่อนมือไปข้างหน้าอย่างช้าๆและกลับไปซ่อนตัวช้ามากจากนั้นปิดประตูอย่างรวดเร็ว
เป็นโมฆะ crazyslow ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 1)
{
doorServo.write (POS);
ล่าช้า (30);
}

// การขยับมือ
สำหรับ (pos = 0; pos <129; pos = 1)
{
handServo.write (POS);
ล่าช้า (30);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (POS);
ล่าช้า (30);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (POS);
ล่าช้า (30);
}
ล่าช้า (100);
สำหรับ (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (POS);
ล่าช้า (15);
}

}
// ย้าย 6:
โมฆะ m7anika7anika () {
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <70; pos = 1)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (800);


// ซ่อนประตู
สำหรับ (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
// ซ่อนประตู
สำหรับ (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
// ซ่อนประตู
สำหรับ (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

handServo.write (40);
ล่าช้า (1000)

// การขยับมือ
สำหรับ (pos = 40; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}


สำหรับ (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (POS);
ล่าช้า (15);
}



}
โมฆะ m3alla2 () {
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <127; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
// ซ่อนประตู
สำหรับ (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (2000);

สำหรับ (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

สำหรับ (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
สำหรับ (pos = 140; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (500);
// ซ่อนมือ
สำหรับ (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
}

โมฆะเมทริกซ์ ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <80; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

สำหรับ (pos = 80; pos <129; pos = 1)
{
handServo.write (POS);
ล่าช้า (30);
}
ล่าช้า (300);

สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (10);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

}
เป็นโมฆะแอบ ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <130; pos = 1)
{
doorServo.write (POS);
ล่าช้า (30);
}
ล่าช้า (2000);

// การขยับมือ
สำหรับ (pos = 0; pos <40; pos = 1)
{
handServo.write (POS);
ล่าช้า (30);
}

ล่าช้า (500);

สำหรับ (pos = 130; pos <155; pos = 4)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (100);

สำหรับ (pos = 40; pos <90; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (500);
// ซ่อนมือ
สำหรับ (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (100);
สำหรับ (pos = 70; pos <90; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (100);
สำหรับ (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (100);

สำหรับ (pos = 70; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
}


เป็นโมฆะ zee7 ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (2000);
// ไปข้างหน้า @ half speed ไปทางซ้าย
digitalWrite (motorDirection, LOW); // กำหนดทิศทางที่ถูกต้องของช่อง B
digitalWrite (motorBrake, LOW); // ปลดเบรกสำหรับช่อง B
analogWrite (มอเตอร์คันเร่ง, 100); // หมุนมอเตอร์ที่ช่อง B ด้วยความเร็วเต็ม
ล่าช้า (300);
digitalWrite (มอเตอร์เบรคเกอร์สูง); // Eengage the Brake for Channel B
ล่าช้า (2000);

// backward @ half speed ไปทางขวา
digitalWrite (motorDirection, HIGH); // กำหนดทิศทางซ้ายของช่อง B
digitalWrite (motorBrake, LOW); // ปลดเบรกสำหรับช่อง B
analogWrite (มอเตอร์คันเร่ง, 100); // หมุนมอเตอร์ที่ Channel B ด้วยความเร็วครึ่งหนึ่ง
ล่าช้า (300);
digitalWrite (มอเตอร์เบรคเกอร์สูง); // Eengage the Brake for Channel B
ล่าช้า (1000)

// การขยับมือ
สำหรับ (pos = 0; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
}


ขั้นตอนที่ 9: อัพเดทเพิ่มเติม: การตรวจจับการเคลื่อนไหว

ฉันมีเซ็นเซอร์ความใกล้ชิดวันนี้ (GP2Y0A21) ดังนั้นตอนนี้ฉันสามารถใช้มันเพื่อเคลื่อนย้ายเครื่องหากผู้ใช้เข้าใกล้สวิตช์สลับ :)
สำหรับขั้นตอนเพิ่มเติมนี้ฉันสมมติว่าคุณได้สร้างล้อเพื่อให้มีการเคลื่อนไหว (ดูขั้นตอนที่เลือกได้ 8) สิ่งที่เหลืออยู่ตอนนี้คือการเพิ่มเซ็นเซอร์และทำการแก้ไขบางอย่างในรหัสสำหรับการตรวจจับการเคลื่อนไหว
เซ็นเซอร์มี 3 สายเชื่อมต่อกับสายสัญญาณสีเหลือง พิน 3 ใน arduino ในขณะที่ สีแดง และ สีดำ เชื่อมต่อกับ v5 และ พื้น ตามลำดับบนกระดาน
ฉันวางเซ็นเซอร์ที่ซ่อนอยู่ใต้ประตูดังที่แสดงในภาพดังนั้นมันสามารถ 'ดู' การเคลื่อนไหวของผู้ใช้เมื่อประตูเปิดขึ้น สิ่งที่ฉันต้องการ!
ฉันยังต้องเปลี่ยนรหัสเล็กน้อย (ที่นี่) เพื่อใช้รูทีนการตรวจจับการเคลื่อนไหว (ดูรหัสในฟังก์ชั่น zee7 () ) เช่นเมื่อตรวจพบการเคลื่อนไหวกล่องจะเคลื่อนที่ก่อนไปทางขวาจากนั้นไปทางซ้ายจากนั้นมือจะหมุนสวิตช์แล้วซ่อน รหัสมีการแสดงความคิดเห็นอย่างหนักฉันหวังว่าฉันจะไม่หักโหมมัน
คุณสามารถค้นหารหัสที่อัปเดตด้านล่างได้เช่นกันโปรดทราบว่าฉันได้ทำให้เครื่องเลือกการเคลื่อนที่แบบสุ่มนี่สามารถเปลี่ยนกลับเป็นลำดับได้โดยเพียงแค่ตั้งค่า บูลีนสุ่ม = false;
ขอบคุณสำหรับคำแนะนำที่ยอดเยี่ยมของคุณ!
รหัส (ดีกว่าที่จะดาวน์โหลดไฟล์ที่แนบมากับขั้นตอนนี้แทนที่จะคัดลอก / วางจากด้านล่าง):
#include
ประตูเซอร์โวเซอร์โว
Servo handServo;
TimerA แบบยาวที่ไม่ได้ลงชื่อ, TimerB; // ตัวจับเวลาสำหรับรูทีนการตรวจจับการเคลื่อนไหว
int switch_pin = 2; // ตั้งสวิตช์บนพิน 2
// ตัวแปรยนต์
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
// ตัวแปรระยะทาง
int motionPin = 3; // ขาเซ็นเซอร์การเคลื่อนไหวบนอะนาล็อก 0
int lastDist = 0; // เพื่อจดจำระยะทางสุดท้าย
int currentDist = 0;
thresh = 200; // Threshold for Movement (ตั้งค่าตามที่คุณได้รับความไวต่อการตรวจจับการเคลื่อนไหวที่ต้องการ)

int pos = 0;
int selectedMove = 0; // เลื่อนตัวเลือก
int Testmove = 0; // test mode: ตั้งค่าให้ย้ายหมายเลขเพื่อทดสอบการย้ายที่เลือกเพียงหนึ่งครั้ง
// (ตั้งค่าเป็นศูนย์เพื่อให้ทำงานได้ตามปกติ i.e: roundrobbin ในทุกการเคลื่อนไหว)
บูลีนสุ่ม = จริง // ถ้าเป็นจริงกล่องจะทำการเคลื่อนที่แบบสุ่มถ้าตั้งค่าเป็นเท็จการเคลื่อนไหวจะทำตามลำดับตั้งแต่ 1 ถึง 10

การตั้งค่าเป็นโมฆะ ()
{
Serial.begin (9600);
pinMode (switch_pin, INPUT);
doorServo.attach (9); // ตั้งเซอร์โวประตูที่ Pin 9 pwm
handServo.attach (10); // ตั้งมือเซอร์โวไว้ที่ Pin 10 pwm
doorServo.write (80); // เปิดประตูเพื่อซ่อนตำแหน่ง
handServo.write (0); // ตั้งมือเพื่อซ่อนตำแหน่ง
// เซ็ตอัพช่อง B เนื่องจากช่อง A ถูกสงวนไว้โดยเซอร์โวประตูและมือและไม่สามารถใช้พร้อมกันได้
pinMode (motorDirection, OUTPUT); // เริ่มต้นหมุดมอเตอร์ช่อง B
pinMode (motorBrake, OUTPUT); // เริ่มเบรกพินช่อง B

}

เป็นโมฆะห่วง ()
{
// ถ้าสวิตช์เปิดอยู่ให้ขยับมือและประตูเพื่อปิด …
ถ้า (digitalRead (switch_pin) == สูง)
{

if (Testmove == 0)
{

ถ้า (randomize == false)
{
ถ้า (selectedMove> 10)
{
selectedMove = 0; // เมื่อเล่นการเคลื่อนไหวทั้งหมดให้ทำซ้ำการเคลื่อนไหวตั้งแต่ต้น
}
}
อื่น
{
selectedMove = random (11);
}
}
อื่น
{
selectedMove = Testmove;
}
Serial.println (selectedMove);
if (selectedMove == 0) {switchoff (); }
อื่นถ้า (selectedMove == 1) {switchoff (); }
อื่นถ้า (selectedMove == 2) {switchoffbitaraddod (); }
อื่นถ้า (selectedMove == 3) {crazydoor (); }
อื่นถ้า (selectedMove == 4) {crazyslow (); }
อื่นถ้า (selectedMove == 5) {m7anika7anika (); }
อื่นถ้า (selectedMove == 6) {m3alla2 (); }
อื่นถ้า (selectedMove == 7) {switchoff (); }
อื่นถ้า (selectedMove == 8) {matrix (); }
อื่นถ้า (selectedMove == 9) {sneak (); }
อื่นถ้า (selectedMove == 10) {zee7 (); }

if (Testmove == 0 && Randomize == false) {
selectedMove ++; // เปลี่ยนไปใช้การเคลื่อนที่ครั้งต่อไปหากไม่ได้อยู่ในโหมดทดสอบ
}
}
}
// ไลบรารี่ของการเคลื่อนไหว
// ท่าพื้นฐาน
เป็นโมฆะ switchoff ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
}

// move 3: เปิดและรอจากนั้นขยับมือแล้วรอจากนั้นสลับและซ่อน
เป็นโมฆะ switchoffbitaraddod ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (800);
// การขยับมือ
สำหรับ (pos = 0; pos <100; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (1000)
สำหรับ (pos = 100; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 5)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);


}

}

// move 4: เปิดประตูแล้วปิดหลาย ๆ ครั้งรอจากนั้นเปิดใหม่อีกครั้งโดยปิดและซ่อน

เป็นโมฆะ crazydoor ()
{

// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <125; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (POS);
ล่าช้า (15);
}
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <110; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 110; pos> = 80; pos- = 15)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (700);
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <125; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (700);
// ซ่อนประตู
สำหรับ (pos = 125; pos> = 80; pos- = 5)
{
doorServo.write (POS);
ล่าช้า (15);
}

// ---- ของสวิตช์ของ ---- //
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 8)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <129; pos = 3)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 3)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 15)
{
doorServo.write (POS);
ล่าช้า (15);
}

}

// ย้าย 5: เปิดประตูจากนั้นเลื่อนมือไปข้างหน้าอย่างช้าๆและกลับไปซ่อนตัวช้ามากจากนั้นปิดประตูอย่างรวดเร็ว
เป็นโมฆะ crazyslow ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 1)
{
doorServo.write (POS);
ล่าช้า (30);
}

// การขยับมือ
สำหรับ (pos = 0; pos <129; pos = 1)
{
handServo.write (POS);
ล่าช้า (30);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 1)
{
handServo.write (POS);
ล่าช้า (30);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 125; pos- = 1)
{
doorServo.write (POS);
ล่าช้า (30);
}
ล่าช้า (100);
สำหรับ (pos = 125; pos> = 80; pos- = 4)
{
doorServo.write (POS);
ล่าช้า (15);
}

}
// ย้าย 6:
โมฆะ m7anika7anika () {
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <70; pos = 1)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (800);


// ซ่อนประตู
สำหรับ (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
// ซ่อนประตู
สำหรับ (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
// ซ่อนประตู
สำหรับ (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

handServo.write (40);
ล่าช้า (1000)

// การขยับมือ
สำหรับ (pos = 40; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}


สำหรับ (pos = 120; pos> = 80; pos - = 1)
{
doorServo.write (POS);
ล่าช้า (15);
}



}
โมฆะ m3alla2 () {
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <127; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
// ซ่อนประตู
สำหรับ (pos = 155; pos> = 130; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (2000);

สำหรับ (pos = 130; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

สำหรับ (pos = 155; pos> = 140; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
สำหรับ (pos = 140; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (500);
// ซ่อนมือ
สำหรับ (pos = 127; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
}

โมฆะเมทริกซ์ ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

// การขยับมือ
สำหรับ (pos = 0; pos <80; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

สำหรับ (pos = 80; pos <129; pos = 1)
{
handServo.write (POS);
ล่าช้า (30);
}
ล่าช้า (300);

สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (10);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}

}
เป็นโมฆะแอบ ()
{
// ประตูเคลื่อนย้าย
สำหรับ (pos = 80; pos <130; pos = 1)
{
doorServo.write (POS);
ล่าช้า (30);
}
ล่าช้า (2000);

// การขยับมือ
สำหรับ (pos = 0; pos <40; pos = 1)
{
handServo.write (POS);
ล่าช้า (30);
}

ล่าช้า (500);

สำหรับ (pos = 130; pos <155; pos = 4)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (100);

สำหรับ (pos = 40; pos <90; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (500);
// ซ่อนมือ
สำหรับ (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (100);
สำหรับ (pos = 70; pos <90; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (100);
สำหรับ (pos = 90; pos> = 70; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (100);

สำหรับ (pos = 70; pos <129; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

สำหรับ (pos = 129; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}
// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
}

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

//เปิดประตู
สำหรับ (pos = 80; pos <155; pos = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
ล่าช้า (1200); // รอให้การอ่านเซ็นเซอร์เสถียรหลังจากเปิดประตู

// ตั้งค่าตัวจับเวลาและอ่านเซ็นเซอร์
// รอการเคลื่อนไหวที่เกินขีด จำกัด หรือถ้าตัวจับเวลาหมดอายุ (5 วินาที)
lastDist = analogRead (motionPin);
TimerA = มิลลิวินาที ();

ในขณะที่ (มิลลิวินาที () - TimerA <= 5,000)
{
currentDist = analogRead (motionPin);

// ระยะทางปัจจุบันเบี่ยงเบนจากระยะทางไกลเกินกว่าขีด จำกัด หรือไม่
// ถ้าใช่ให้เลื่อนกล่องไปทางขวา
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// forward @ half speed ไปทางซ้าย (เลือกความเร็วและการหน่วงเวลา
//(i.e หน่วงเวลา (300) ตามกล่องและแรงดันแบตเตอรี่ตามที่คุณต้องการ
digitalWrite (motorDirection, LOW); // กำหนดทิศทางที่ถูกต้องของช่อง A
digitalWrite (motorBrake, LOW); // ปลดเบรกสำหรับช่อง B
analogWrite (มอเตอร์คันเร่ง, 100); // หมุนมอเตอร์ที่ช่อง B ด้วยความเร็วเต็ม
ล่าช้า (300);
digitalWrite (มอเตอร์เบรคเกอร์สูง); // Eengage the Brake for Channel B
ทำลาย;
}
lastDist = currentDist;
}

// ตั้งค่าตัวจับเวลาและอ่านเซ็นเซอร์
// รอการเคลื่อนไหวที่เกินขีด จำกัด หรือถ้าตัวจับเวลาหมดอายุ (5 วินาที)
ล่าช้า (1200); // รอให้การอ่านเซ็นเซอร์เสถียรหลังจากเปิดประตู
lastDist = analogRead (motionPin);
TimerB = มิลลิวินาที ();
ในขณะที่ (มิลลิวินาที () - TimerB <= 5,000)
{
currentDist = analogRead (motionPin);
// กล่องย้ายไปทางขวาแล้วและระยะทางปัจจุบันเบี่ยงเบนจากระยะทางไกลเกินกว่าขีด จำกัด หรือไม่
// ถ้าใช่ให้เลื่อนไปทางซ้าย
if ((currentDist> lastDist thresh || currentDist <lastDist - thresh) || currentDist> 300)
{
// backward @ half speed ไปทางขวา (เลือกความเร็วและการหน่วงเวลา
//(i.e หน่วงเวลา (300) ตามกล่องและแรงดันแบตเตอรี่ตามที่คุณต้องการ
digitalWrite (motorDirection, HIGH); // กำหนดทิศทางซ้ายของช่อง B
digitalWrite (motorBrake, LOW); // ปลดเบรกสำหรับช่อง B
analogWrite (มอเตอร์คันเร่ง, 100); // หมุนมอเตอร์ที่ Channel B ด้วยความเร็วครึ่งหนึ่ง
ล่าช้า (300);
digitalWrite (มอเตอร์เบรคเกอร์สูง); // Eengage the Brake for Channel B
ทำลาย;
}

lastDist = currentDist;

}
ล่าช้า (100);
// การขยับมือ
สำหรับ (pos = 0; pos <130; pos = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนมือ
สำหรับ (pos = 130; pos> = 0; pos- = 4)
{
handServo.write (POS);
ล่าช้า (15);
}

// ซ่อนประตู
สำหรับ (pos = 155; pos> = 80; pos- = 3)
{
doorServo.write (POS);
ล่าช้า (15);
}
}

3 คนสร้างโปรเจคนี้!

  • AndyC159 สร้างมันขึ้นมา!

  • SamL84 สร้างมันขึ้นมา!

  • melton1313 สร้างมันขึ้นมา!

คุณทำโครงการนี้หรือไม่? แบ่งปันกับเรา!

ข้อเสนอแนะ

  • เครื่องคัดแยกสกรู

  • PCB BOT (การติดตามบรรทัดการหลีกเลี่ยงอุปสรรคและหุ่นยนต์ควบคุมบลูทู ธ ใน PCB เดียว)

  • อินเทอร์เน็ตของชั้นเรียน

  • การประกวดสีสันของสายรุ้ง

  • การประกวดแบบสุ่ม

  • พรรคท้าทาย

194 การสนทนา

0

areyoutrying

4 ปีก่อนในบทนำ

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

4 คำตอบ 0

Ajannareyoutrying

ตอบ 3 ปีที่ผ่านมา

เครื่องจักรมังกรของคุณยอดเยี่ยม !!! ศิลปะ

0

TJAOkevinareyoutrying

ตอบ 3 ปีที่ผ่านมา

น่ากลัว !!!!!

0

riachiareyoutrying

ตอบ 4 ปีที่ผ่านมาในบทนำ

คุณยอดเยี่ยม :) !!!

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

ขอบคุณที่แชร์วิดีโอของคุณและดีใจที่ฉันได้ช่วยฉัน

0

areyoutryingriachi

ตอบ 4 ปีที่ผ่านมาในบทนำ

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

0

br1pro

4 ปีที่แล้ว

สนุกมาก! งานหนักแก้ไขเซอร์โวและออกแบบมือ ขอบคุณสำหรับคำแนะนำนี้!

1 คำตอบ 0

riachibr1pro

ตอบ 4 ปีที่ผ่านมาในบทนำ

คนทำงานที่ยอดเยี่ยม! ดีจริง ๆ :) วิดีโอใด ๆ

0

clincoln

5 ปีก่อน

ดูวิดีโอก่อนแล้วหัวเราะออกมา

1 คำตอบ 0

TobiasVclincoln

ตอบ 4 ปีที่ผ่านมาในบทนำ

ฉันรู้ว่าฉันทำ! : D

0

rileyw

5 ปีก่อน

วิดีโอสุดเจ๋งทำให้ดูเหมือนว่ามันเป็นความคิดของตัวเอง

0

Elitekilla117

5 ปีที่ผ่านมาในบทนำ

เครื่องไร้ประโยชน์ของฉันด้วยรหัส arduino และ riachis! ทำเป็นควานหาจาก Dr.who :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2 คำตอบ 0

riachiElitekilla117

ตอบ 5 ปีที่ผ่านมาในบทนำ

รักมัน !!!! :)) เป็นคนที่ทำได้ดีจริงๆมีความสุขมากที่ได้เห็นกล่องเก็บระเบิดของคุณยังมีชีวิตอยู่! ฉันยังมีการทำให้เป็นจริงและเสียงเพลง: p ไม่สามารถหยุดตัวเองเพื่อแนะนำการปรับเปลี่ยนขนาดเล็ก 3 ถ้าฉันอาจ :)
- จะดีมากถ้าวางเครื่องในตำแหน่งยืนฉันรู้ว่านี่จะทำให้สูญเสียความช่วยเหลือของแรงโน้มถ่วงในการปิดประตู แต่วิธีแก้ปัญหาง่ายๆคือใส่ยาง 2 เส้นที่ติดอยู่กับด้านในของประตูด้านหนึ่งและ ไปที่ด้านในของกล่องสำหรับส่วนอื่น ๆ สิ่งนี้จะทำให้ประตูปิดเมื่อเซอร์โวประตูปิด … ตรวจสอบขั้นตอนการสร้างของฉันคุณจะเห็นแถบยางในขั้นตอนที่ 6 …
- แล้วการทาสีมือด้วยสีดำมันจะลับ ๆ ล่อๆและลื่นกว่า
! นอกจากนี้เคล็ดลับมือสามารถทาสีแดงเลือดหรือตกแต่งด้วยใบหน้าบ้าหรือสิ่งเช่นนั้น ..
- ลบการย้ายครั้งสุดท้ายเมื่อไม่มีอะไรเกิดขึ้น (ควรจะเป็นการย้ายกล่อง) และเขียนการเคลื่อนไหวของคุณเอง …
อย่างไรก็ตามลืมคำแนะนำฉันรัก machineeee ของคุณ! และขอบคุณสำหรับคนที่ขอบคุณมาก ๆ คุณสามารถลดและเก็บวิดีโอที่เน้นไปที่เครื่อง :)
หวังว่าแฟนของคุณจะชอบมัน!

0

Elitekilla117riachi

ตอบ 5 ปีที่ผ่านมาในบทนำ

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

0

chuckletushy

5 ปีก่อน

นี่ฉันต้องทำให้ … มันยอดเยี่ยม

0

wrs715

5 ปีที่ผ่านมาในบทนำ

นี่เป็นโครงการแรกที่ฉันเห็นโดยใช้ Arduino ซึ่งฉันคิดว่า "ใช่นั่นคุ้มค่าตอนนี้ฉันต้องได้มาแล้ว" เยี่ยมมาก!

0

siliconghost

5 ปีที่ผ่านมาในบทนำ

ว้าวทำโครงการทั่วไปได้อย่างยอดเยี่ยม! รักสปินของคุณเพื่อทำให้มันน่าสนใจยิ่งขึ้น!

0

bob3030

5 ปีก่อน

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

0

โมโห

5 ปีที่ผ่านมาในบทนำ

ความคิดที่ 1: การใช้ Arduino สำหรับสิ่งนี้เป็นเพียงการ overkill ที่ไร้สาระ
ความคิดที่ 2: หลังจากดูวิดีโอการใช้ Arduino สำหรับนี่เป็นอัจฉริยะบริสุทธิ์!
ฉันน้อมรับความคิดสร้างสรรค์ของคุณ!

0

stumitch

5 ปีที่ผ่านมาในบทนำ

ยอดเยี่ยมจริง ๆ ! ทำให้ฉันนึกถึงบุคลิกของ Wall-E ขอบคุณสำหรับโครงการที่ยอดเยี่ยมเช่นนี้!

0

gazillabytes

5 ปีที่ผ่านมาในบทนำ

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