สารบัญ:

เครื่องวัดความเร็วรถ RC ที่ใช้งานได้: 4 ขั้นตอน (พร้อมรูปภาพ)
เครื่องวัดความเร็วรถ RC ที่ใช้งานได้: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เครื่องวัดความเร็วรถ RC ที่ใช้งานได้: 4 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เครื่องวัดความเร็วรถ RC ที่ใช้งานได้: 4 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: รีวิว การใช้งานแบบละเอียดสุดๆ RadioLink RC4GS V.2 , RC6GS + R6FG Receiver with Gyro (Review) 2024, ธันวาคม
Anonim
เครื่องวัดความเร็วรถ RC ที่ใช้งานได้
เครื่องวัดความเร็วรถ RC ที่ใช้งานได้

นี่เป็นโครงการสั้นๆ ที่ฉันสร้างขึ้นโดยเป็นส่วนหนึ่งของโครงสร้าง RC ขนาดใหญ่ของ Land Rover รุ่น Lightweight ฉันตัดสินใจว่าฉันอยากจะมีมาตรวัดความเร็วที่ใช้งานได้บนแดชบอร์ด แต่ฉันรู้ว่าเซอร์โวจะไม่ตัดมัน มีเพียงตัวเลือกเดียวที่เหมาะสม: ปรับใช้ Arduino!

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

ส่วนรายการ:

ไมโครคอนโทรลเลอร์: ฉันใช้ชิป ATTiny85 ซึ่งราคาตัวละประมาณ 1 ปอนด์

โปรแกรมเมอร์ไมโครคอนโทรลเลอร์: ในการรับรหัสบนชิป คุณต้องมีวิธีตั้งโปรแกรม สำหรับ Arduino ปกติ นี่เป็นเพียงสาย USB แต่สำหรับชิป ATTiny คุณต้องมีสิ่งพิเศษเพิ่มเติม คุณสามารถใช้อาร์ดิโนตัวอื่นทำสิ่งนี้ หรือใช้โปรแกรมเมอร์ Tiny AVR จาก Sparkfun อย่างฉัน

learn.sparkfun.com/tutorials/tiny-avr-prog…

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

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

ตัวเก็บประจุ: ใช้ตัวเก็บประจุแบบแยกส่วนขนาด 100nF (รหัส 104) ฉันไม่เข้าใจว่าทำไม แต่ฉันอ่านมาว่าตัวเก็บประจุแบบแยกส่วนมีความสำคัญบนอินเทอร์เน็ต ดังนั้นมันต้องเป็นความจริง…

ตัวต้านทาน: ตัวต้านทาน 10kΩ ใช้เพื่อดึงสายเข้าไปใน Arduino อีกครั้งที่ความลึกลับอีกอย่างของอุปกรณ์อิเล็กทรอนิกส์

Perfboard/Stripboard: กระดานข้างก้นบางตัวสำหรับประกอบวงจรของคุณ

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

เซอร์โว ไวร์: ริบบ้อนสามสายที่ต่อเข้ากับปลั๊กตัวเมีย JR แบบ 3 พิน ฉันได้ของฉันจากเซอร์โวที่ถูกไฟไหม้ซึ่งฉันกำลัง 'แก้ไข'

สเต็ปเปอร์มอเตอร์: ฉันใช้สเต็ปเปอร์มอเตอร์ไบโพลาร์ Nidec ขนาด 6 มม. สเต็ปเปอร์ขนาดเล็กใด ๆ ควรใช้งานได้แม้ว่าจะมีขนาดเล็กก็ตาม เนื่องจากสเต็ปเปอร์นั้นถูกขับเคลื่อนโดยตรงจาก Arduino

Header Pins: ไม่จำเป็น แต่ถ้าคุณต่อ stepper ของคุณกับ 4 header pins และวางซ็อกเก็ตบนวงจรของคุณ คุณสามารถถอดปลั๊กแดชบอร์ดของคุณออกได้อย่างง่ายดายเพื่อให้ติดตั้งได้ง่าย

คอมพิวเตอร์: หากต้องการตั้งโปรแกรมบอร์ด คุณจะต้องมีคอมพิวเตอร์ เป็นไปได้ด้วย Arduino IDE และอาจจะเป็นสาย USB ถ้ามีสายไฟด้วยยิ่งดี

ขั้นตอนที่ 1: ระบบ

โครงร่างพื้นฐานของระบบที่ฉันสร้างขึ้นคือวิธีการที่สัญญาณ Pulse Width Modulation (PWM) ที่มาจากเครื่องรับ RC จะถูกแปลงเป็นสเต็ปเปอร์มอเตอร์กวาดผ่านไมโครคอนโทรลเลอร์ ATTiny 85 (uC)

นี่คือแหล่งข้อมูลเกี่ยวกับสัญญาณ PWM และ RC แต่คุณไม่จำเป็นต้องเข้าใจสิ่งนี้เพื่อทำซ้ำ

en.wikipedia.org/wiki/Servo_control

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

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

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

ขั้นตอนที่ 2: ซอฟต์แวร์

ข้อจำกัดความรับผิดชอบ: ฉันไม่ใช่โปรแกรมเมอร์ สำหรับโปรเจ็กต์นี้ ฉันเทียบเท่ากับดร.แฟรงเกนสไตน์ในด้านดิจิทัล โดยรวบรวมบางสิ่งที่ทำงานจากโค้ดต่างๆ ที่พบ

ดังนั้นขอขอบคุณจากใจจริงไปยัง Duane B ผู้สร้างรหัสสำหรับการตีความสัญญาณ RC:

rcarduino.blogspot.com/

และสำหรับ Ardunaut ผู้สร้างโค้ดสำหรับการรัน stepper เป็นเกจอนาล็อก:

arduino.com/2012/04/22/arduino-driving-a…

และสำหรับทั้งคู่ ฉันขอโทษอย่างจริงใจที่สุดสำหรับสิ่งที่ฉันทำกับโค้ดของคุณ

เสร็จแล้ว นี่คือสิ่งที่ต้องอัปโหลดไปยัง ATTiny:

#define THROTTLE_SIGNAL_IN 0 // INTERRUPT 0 = DIGITAL PIN 2 - ใช้หมายเลขขัดจังหวะในไฟล์แนบInterrupt#define THROTTLE_SIGNAL_IN_PIN 2 // INTERRUPT 0 = DIGITAL PIN 2 - ใช้หมายเลข PIN ใน digitalRead #define NEUTRAL_THROTTLE 1500 // นี่คือระยะเวลาในหน่วยไมโครวินาที ของเค้นเป็นกลางบนรถ RC ไฟฟ้า #define UPPER_THROTTLE 2000 // นี่คือระยะเวลาเป็นไมโครวินาทีของเค้นสูงสุดบนรถ RC ไฟฟ้า #define LOWER_THROTTLE 1000 // นี่คือระยะเวลาเป็นไมโครวินาทีของ nminimum throttle บนรถ RC ไฟฟ้า #define DEADZONE 50 // นี่คือเดดโซนของคันเร่ง Deadzone ทั้งหมดเป็นสองเท่านี้ #include #define STEPS 21 // ขั้นตอนต่อรอบ (จำกัดที่ 315°) เปลี่ยนแปลงสิ่งนี้เพื่อปรับระยะการเดินทางสูงสุดของมาตรวัดความเร็ว #define COIL1 3 // หมุดคอยล์ ATTiny ใช้หมุด 0, 1, 3, 4 สำหรับสเต็ปเปอร์ พิน 2 เป็นพินเดียวที่สามารถรองรับการขัดจังหวะ ดังนั้นจึงต้องเป็นอินพุต #define COIL2 4 // ลองเปลี่ยนสิ่งเหล่านี้หากสเต็ปเปอร์มอเตอร์ทำงานไม่ถูกต้อง #define COIL3 0 #define COIL4 1 // สร้างอินสแตนซ์ของคลาส stepper: Stepper stepper (STEPS, COIL1, COIL2, COIL3, COIL4); int pos = 0; //ตำแหน่งในขั้นตอน (0-630)= (0°-315°) int SPEED = 0; ลอย ThrottleInAvg = 0; int MeasurementsToAverage = 60; float Resetcounter = 10; // เวลารีเซ็ตในขณะที่ไม่ได้ใช้งาน throttle int Resetval = 0; ความผันผวน int ThrottleIn = LOWER_THROTTLE; StartPeriod แบบยาวที่ไม่ได้ลงนามแบบผันผวน = 0; // ตั้งค่าในการขัดจังหวะ // เราสามารถใช้ nThrottleIn = 0 ในลูปแทนตัวแปรแยกต่างหาก แต่ใช้ bNewThrottleSignal เพื่อระบุว่าเรามีสัญญาณใหม่ // จะชัดเจนกว่าสำหรับตัวอย่างแรกนี้ void setup() { // บอก Arduino เราต้องการให้ฟังก์ชัน calcInput ถูกเรียกใช้เมื่อใดก็ตามที่ INT0 (พินดิจิทัล 2) เปลี่ยนจาก HIGH เป็น LOW หรือ LOW เป็น HIGH // การจับการเปลี่ยนแปลงเหล่านี้จะทำให้เราสามารถคำนวณระยะเวลาที่พัลส์อินพุตถูกแนบInterrupt(THROTTLE_SIGNAL_IN, calcInput, CHANGE); stepper.setSpeed(50); // ตั้งค่าความเร็วมอเตอร์เป็น 30 RPM (360 PPS aprox.) stepper.step(ขั้นตอน * 2); // รีเซ็ตตำแหน่ง (X ขั้นตอนทวนเข็มนาฬิกา) } วงเป็นโมฆะ () { Resetval = มิลลิวินาที; สำหรับ (int i = 0; i (NEUTRAL_THROTTLE + DEADZONE) && ThrottleInAvg < UPPER_THROTTLE) { SPEED = แผนที่ (ThrottleInAvg, (NEUTRAL_THROTTLE + DEADZONE), UPPER_THROTTLE, 0, 255); ค่ารีเซ็ต = 0; } // การทำแผนที่แบบย้อนกลับหาก (ThrottleInAvg LOWER_THROTTLE) { SPEED = map (ThrottleInAvg, LOWER_THROTTLE, (NEUTRAL_THROTTLE - DEADZONE), 255, 0); ค่ารีเซ็ต = 0; } // อยู่นอกช่วงบนหาก (ThrottleInAvg > UPPER_THROTTLE) { SPEED = 255; ค่ารีเซ็ต = 0; } // อยู่นอกช่วงต่ำกว่าถ้า (ThrottleInAvg Resetcounter) { stepper.step (4); // ฉันกำลังพยายามบอกให้ stepper รีเซ็ตตัวเองใหม่ หากสัญญาณ RC อยู่ใน deadzone เป็นเวลานาน ไม่แน่ใจว่าส่วนนี้ของรหัสใช้งานได้จริงหรือไม่ } } int val = ความเร็ว; // รับค่าโพเทนชิออมิเตอร์ (ช่วง 0-1023) val = map (val, 0, 255, 0, STEPS * 0.75); // แผนที่ pot range ในช่วง stepper if (abs(val - pos) > 2) { //ถ้าความแตกต่างมากกว่า 2 ขั้นตอน ถ้า ((val - pos) > 0) { stepper.step (-1); // เลื่อนไปทางซ้ายหนึ่งก้าว ตำแหน่ง ++; } if ((val - pos) < 0) { stepper.step(1); // เลื่อนไปทางขวาหนึ่งก้าว โพส--; } } // ล่าช้า(10); } void calcInput() { // ถ้าพินสูง มันจะเป็นจุดเริ่มต้นของการขัดจังหวะ if (digitalRead(THROTTLE_SIGNAL_IN_PIN) == HIGH) { // ใช้เวลาโดยใช้ micros - เมื่อโค้ดของเรายุ่งมาก สิ่งนี้จะไม่ถูกต้อง แต่สำหรับแอปพลิเคชันปัจจุบัน // เข้าใจง่ายและใช้งานได้ดีมาก StartPeriod = micros(); } อื่น { // ถ้าพินต่ำ มันจะเป็นขอบตกของพัลส์ ดังนั้นตอนนี้เราสามารถคำนวณระยะเวลาพัลส์โดยลบ // เวลาเริ่มต้น ulStartPeriod จากเวลาปัจจุบันที่ส่งคืนโดยไมโคร () ถ้า (StartPeriod) { ThrottleIn = (int)(micros() - StartPeriod); ระยะเวลาเริ่มต้น = 0; } } }

อ้างถึงสิ่งนี้สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเขียนโปรแกรม ATTiny85:

learn.sparkfun.com/tutorials/tiny-avr-prog…

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

ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์
ฮาร์ดแวร์

ดูแผนภาพวงจรสำหรับสร้างวงจร วิธีประกอบขึ้นอยู่กับคุณ แต่ฉันขอแนะนำให้ใช้แผ่น Stripboard/perfboard เล็กน้อยสำหรับสร้างต้นแบบแผงวงจร และติดตั้งชิปในซ็อกเก็ต

C1 = 100nF

R1 = 10kΩ

ควรติดตั้งตัวเก็บประจุใกล้กับชิปมากที่สุดเพื่อให้มีประสิทธิภาพสูงสุด

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

หากคุณสร้างขั้วต่อพินส่วนหัวและตั้งค่าพินดังนี้: [Ca1, Cb1, Ca2, Cb2] โดยที่ Ca1 ย่อมาจากคอยล์ A, สาย 1 เป็นต้น วิธีนี้ทำให้คุณสามารถเปลี่ยนทิศทางการหมุนของเกจได้โดยการเปลี่ยนปลั๊ก รอบ ๆ.

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

ขั้นตอนที่ 4: บทส่งท้าย

หวังว่าคุณจะชอบคำแนะนำสั้น ๆ นี้และพบว่ามีประโยชน์ หากคุณสร้างสิ่งเหล่านี้ โปรดแจ้งให้เราทราบ!

ขอให้โชคดี!

แนะนำ: