สารบัญ:

หมุนที่วางโทรศัพท์: 7 ขั้นตอน
หมุนที่วางโทรศัพท์: 7 ขั้นตอน

วีดีโอ: หมุนที่วางโทรศัพท์: 7 ขั้นตอน

วีดีโอ: หมุนที่วางโทรศัพท์: 7 ขั้นตอน
วีดีโอ: ที่วางโทรศัพท์มือถือบนรถหมุนได้ 360 องศา 2024, กรกฎาคม
Anonim
หมุนที่วางโทรศัพท์
หมุนที่วางโทรศัพท์

คำแนะนำนี้สร้างขึ้นเพื่อตอบสนองความต้องการของโครงการ Makecourse ที่มหาวิทยาลัยเซาท์ฟลอริดา (www.makecourse.com)

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

ในการสร้างโครงการนี้ คุณจะต้อง:

- ไมโครคอนโทรลเลอร์ Arduino และ IDE

- สาย USB สำหรับอัพโหลดโค้ด

- เขียงหั่นขนม

- สายจัมเปอร์

- จอ LCD

- เซอร์โว

- เสาที่ต่อกับเซอร์โวได้

- IR รีโมท

- ตัวรับสัญญาณ IR

- ตัวต้านทาน 10k โอห์ม

- Kenu Airframe + คลิปโทรศัพท์ (หรือสิ่งที่ถือโทรศัพท์ไว้)

- แบตเตอรี่ 9 V สำหรับพลังงานแบบพกพาหรือเพียงแค่ Arduino ที่ขับเคลื่อนด้วย USB

ขั้นตอนที่ 1: สร้างวงจรรับสัญญาณ IR

สร้างวงจรรับสัญญาณ IR
สร้างวงจรรับสัญญาณ IR
สร้างวงจรรับสัญญาณ IR
สร้างวงจรรับสัญญาณ IR

ขั้นแรก ให้กระโดด GND และ +5V จาก Arduino ไปยังรางจ่ายไฟบนเขียงหั่นขนมของคุณ จากนั้นข้ามตัวต้านทาน 10k ohm ของคุณจากรางจ่ายไฟ +5V ไปยังพินเอาต์พุตของโฟโตทรานซิสเตอร์ตัวรับ IR ของคุณ ถัดไป ใช้สายจัมเปอร์เพื่อเชื่อมต่อกับพิน 11 บน Arduino จากพินเอาต์พุตของตัวรับสัญญาณ IR จากนั้น ใช้สายจัมเปอร์สองเส้นเพื่อส่งกราวด์และ +5V ไปยังพินตามลำดับบนตัวรับสัญญาณ IR ไม่จำเป็นต้องใช้ฟิลเตอร์ RC ที่แสดงในแผนผังด้านบน สุดท้ายนี้ ฉันไม่ได้สร้างแผนผังที่แสดงในขั้นตอนนี้ และแหล่งที่มาของแผนผังแสดงอยู่ในรูปภาพ

ขั้นตอนที่ 2: เชื่อมต่อเซอร์โว คอลัมน์ และที่วางโทรศัพท์

เชื่อมต่อเซอร์โว คอลัมน์ และที่วางโทรศัพท์
เชื่อมต่อเซอร์โว คอลัมน์ และที่วางโทรศัพท์
เชื่อมต่อเซอร์โว คอลัมน์ และที่วางโทรศัพท์
เชื่อมต่อเซอร์โว คอลัมน์ และที่วางโทรศัพท์
เชื่อมต่อเซอร์โว คอลัมน์ และที่วางโทรศัพท์
เชื่อมต่อเซอร์โว คอลัมน์ และที่วางโทรศัพท์

ตอนนี้ ใช้สายจัมเปอร์สองเส้นเพื่อกระโดดจากพื้นและ +5V ของรางไฟแบบเขียงหั่นขนมเข้ากับสายสีน้ำตาลและสีแดงของเซอร์โวตามลำดับ จากนั้นใช้สายจัมเปอร์หนึ่งเส้นเพื่อต่อพิน 9 บน Arduino กับสายสีส้มของเซอร์โว

จากนั้นแนบคอลัมน์กับส่วนหัวของเซอร์โวตามที่แสดงในภาพที่สอง

สุดท้าย แนบสิ่งที่ถือโทรศัพท์เข้ากับคอลัมน์ เช่น Kenu Airframe+ ดังแสดงในภาพที่ 3

ขั้นตอนที่ 3: เชื่อมต่อจอแสดงผล LCD สำหรับการอ่านข้อมูลเซอร์โว

เชื่อมต่อจอแสดงผล LCD สำหรับการอ่านข้อมูลเซอร์โว
เชื่อมต่อจอแสดงผล LCD สำหรับการอ่านข้อมูลเซอร์โว

กระโดดกราวด์และ +5V จากรางไฟแบบเขียงหั่นขนมของคุณไปยังพินที่เกี่ยวข้องบนจอ LCD นอกจากนี้ ให้ข้ามพิน SDA และ SCL จาก LCD ไปยัง Ardiuno พิน SDA และ SCL ของ Arduino สามารถระบุได้จากด้านหลังของบอร์ด Arduino และเป็นพินสองตัวที่อยู่เหนือ AREF และกราวด์เหนือพิน 13 พิน SCL เป็นพินที่สูงที่สุด ซึ่งช่วยให้จอ LCD อ่านตำแหน่งเซอร์โวปัจจุบันได้

ขั้นตอนที่ 4: ใช้รหัสและไลบรารีที่แนบมากับโปรแกรม Arduino

ใช้รหัสและไลบรารีที่แนบมากับโปรแกรม Arduino
ใช้รหัสและไลบรารีที่แนบมากับโปรแกรม Arduino

ดาวน์โหลดไฟล์ RotatingMountCode.zip ติดตั้ง Arduino IDE และแตกไฟล์ที่ดาวน์โหลดมาลงใน Documents\Arduino ตรวจสอบให้แน่ใจว่าคุณคัดลอกเนื้อหาของโฟลเดอร์สเก็ตช์และไลบรารีของฉันไปยังโฟลเดอร์สเก็ตช์และไลบรารีของคุณ เปิดร่าง ServoIRandLCD และอัปโหลดไปยัง Arduino ของคุณ

ดูขั้นตอนภายหลังสำหรับคำอธิบายโค้ด

ขั้นตอนที่ 5: เชื่อมต่อแหล่งพลังงานที่ต้องการกับ Arduino และใช้รีโมทเพื่อหมุน Mount

เชื่อมต่อแหล่งพลังงานที่ต้องการกับ Arduino และใช้รีโมทเพื่อหมุน Mount!
เชื่อมต่อแหล่งพลังงานที่ต้องการกับ Arduino และใช้รีโมทเพื่อหมุน Mount!
เชื่อมต่อแหล่งพลังงานที่ต้องการกับ Arduino และใช้รีโมทเพื่อหมุน Mount!
เชื่อมต่อแหล่งพลังงานที่ต้องการกับ Arduino และใช้รีโมทเพื่อหมุน Mount!

ปล่อยให้ Arduino เสียบอยู่กับคอมพิวเตอร์ของคุณหรือถอดปลั๊กออกจากคอมพิวเตอร์และใช้แบตเตอรี่ 9V เพื่อจ่ายไฟ DC ให้กับ Arduino สุดท้าย ใช้รีโมท IR ราคาถูกเพื่อควบคุมเซอร์โวและดังนั้นการวางแนวของที่วางโทรศัพท์!

หมายเลข 1 บนรีโมทควรตั้งค่าตำแหน่งเซอร์โวเป็น 0 องศา หมายเลข 2 ถึง 90 องศา และหมายเลข 3 ถึง 180 องศา ในขณะเดียวกันปุ่ม + และ - บนรีโมทควรเพิ่มหรือลดมุมของเซอร์โว 1 องศาตามลำดับ

หมายเหตุ: หากคุณใช้ IR Remote ที่แตกต่างจากที่แสดงในภาพนี้ อาจเป็นไปได้ว่ารหัส IR ที่สอดคล้องกับปุ่มต่างๆ จะเปลี่ยนไป หากเป็นเช่นนั้น ให้แก้ไขร่าง ServoIRandLCD เพื่อใช้รหัส IR เหล่านั้นแทน

ขั้นตอนที่ 6: อ่านสิ่งนี้เพื่ออธิบายซอร์สโค้ด

อ่านสิ่งนี้เพื่ออธิบายซอร์สโค้ด
อ่านสิ่งนี้เพื่ออธิบายซอร์สโค้ด
อ่านสิ่งนี้เพื่ออธิบายซอร์สโค้ด
อ่านสิ่งนี้เพื่ออธิบายซอร์สโค้ด

ซอร์สโค้ดสำหรับร่าง Arduino สามารถพบได้ที่ด้านล่างหรือในไฟล์.zip ที่แนบมาก่อนหน้านี้ ไลบรารีที่จำเป็นสามารถพบได้ในไฟล์.zip ที่แนบมาก่อนหน้านี้ในขั้นตอนที่ 4

สิ่งแรกที่โค้ดทำคือรวมไลบรารีที่จำเป็นเพื่อเรียกใช้ฟังก์ชันทั้งหมดในแบบร่าง ถัดไปจะประกาศพิน 9 บน Arduino ให้เป็นพินสัญญาณที่เปิดใช้งาน PWM สำหรับเซอร์โว นอกจากนี้ยังทำให้พิน 11 บน Arduino เป็นพินที่ใช้สำหรับตัวรับสัญญาณ IR ถัดไป จะประกาศตัวแปรจำนวนเต็มที่ใช้ในการติดตามตำแหน่งของเซอร์โวเป็นองศาและตั้งค่าเป็น 0 องศาในขั้นต้น จากนั้น จะสร้างอินสแตนซ์ของอ็อบเจ็กต์ที่จำเป็นสำหรับอ็อบเจ็กต์ IRrecv, ออบเจ็กต์เซอร์โว และอ็อบเจ็กต์ myDisplay LCD (ที่กำหนดค่าไว้ในบรรทัดเดียวกันด้วย) เพื่อให้สามารถใช้อ็อบเจ็กต์เหล่านี้ได้ในภายหลัง

ถัดไป ในฟังก์ชันการตั้งค่า พอร์ตอนุกรมจะเริ่มต้นที่ 9600 บิต/วินาที ดังนั้นจึงสามารถใช้มอนิเตอร์อนุกรมเพื่อติดตามตำแหน่งของเซอร์โวได้หากต้องการ นอกจากนี้ยังยึดวัตถุ myservo เข้ากับพิน 9 เริ่มตัวรับสัญญาณ IR และเริ่มต้นการแสดงผล LCD

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

สุดท้าย มุมปัจจุบันของเซอร์โวจะถูกส่งไปยังทั้งมอนิเตอร์แบบอนุกรมและจอ LCD โดยใช้ฟังก์ชัน myservo.read() และลูปหลักจะวนซ้ำไปเรื่อย ๆ

รหัสแหล่งที่มา:

#include //Arduino standard library#include //IR library #include "Wire.h" //Wire.h สำหรับ LCD (บางครั้งจำเป็น) #include "LiquidCrystal_I2C.h" //LCD library

#define servopin 9 // นี่กำหนดพิน 9 เป็นพินที่ใช้สำหรับสายควบคุมเซอร์โว (สีส้ม)

int RECV_PIN = 11; //IR photo-transistor ส่งเอาต์พุตไปที่พิน 11

int currentAngle = 0; //ประกาศตัวแปรจำนวนเต็ม currentAngle และตั้งค่าเป็น0

IRrecv irrecv(RECV_PIN); // แสดงตัวอย่างวัตถุตัวรับสัญญาณ IR decode_results ผลลัพธ์; // แสดงตัวอย่างวัตถุ decode_results วัตถุนี้แยกจากตัวรับ IR

เซอร์โว myservo; // สร้างอ็อบเจ็กต์เซอร์โวชื่อ 'myservo' // สามารถสร้างอ็อบเจ็กต์เซอร์โวได้สูงสุดแปดตัว

LiquidCrystal_I2C myDisplay(0x27, 16, 2); // สร้างวัตถุ LCD และตั้งค่า config

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

Serial.begin(9600); //เริ่มพอร์ตอนุกรม

myservo.attach(เซอร์โวปิน); //ติดเซอร์โวบนพิน 9 กับอ็อบเจกต์เซอร์โว

irrecv.enableIRIn(); //เปิดเครื่องรับ

myDisplay.init(); // เริ่มต้น LCD

myDisplay.backlight(); //เปิดไฟหลังจอ LCD

}

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

if (irrecv.decode(&results)) // ถ้าการส่งได้รับ…

{ Serial.print ("ได้รับค่า IR: ");

Serial.println(ผลลัพธ์.ค่า); //แสดงค่าที่ได้รับ

// ตีความคำสั่งที่ได้รับ… if (results.value == 16724175) //1 { //left myservo.write(0); }

ถ้า (results.value == 16718055) ///2 { //middle myservo.write (90); }

ถ้า (results.value == 167430445) ///3 { // right myservo.write (180); }

ถ้า (results.value == 16754775) //+ { // increment currentAngle = myservo.read (); myservo.write (มุมปัจจุบัน + 1); } if (results.value == 16769055) //- { //ลดค่า currentAngle = myservo.read (); myservo.write (มุมปัจจุบัน - 1); } }

irrecv.resume(); //รับค่าต่อไป

// Serial monitor พิมพ์ Serial.print ("ตำแหน่งเซอร์โวปัจจุบัน: ");

Serial.println(myservo.read()); //สิ่งนี้ดึงตำแหน่งเซอร์โวและส่งไปยังมอนิเตอร์แบบอนุกรม

//พิมพ์ LCD myDisplay.clear();

myDisplay.print("ระดับเซอร์โว: ");

myDisplay.print(myservo.read());

ล่าช้า(200); // หน่วงเวลาเพื่อให้การสั่งงานเซอร์โวเสถียร

}

ขั้นตอนที่ 7: ดูวิดีโอ Youtube ของฉันเพื่อขอความช่วยเหลือ

ดูวิดีโอ YouTube ที่ไม่เป็นสาธารณะของฉัน ซึ่งอธิบายและสาธิตโครงการอย่างครบถ้วน หากคุณมีคำถามใดๆ!

แนะนำ: