
สารบัญ:
- ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น
- ขั้นตอนที่ 2: ภาพรวมของ Arduino Timers สำหรับการสร้างสัญญาณ
- ขั้นตอนที่ 3: LED Blink
- ขั้นตอนที่ 4: LED Dimmer
- ขั้นตอนที่ 5: ตัวแปลงดิจิทัลเป็นอนาล็อก (DAC)
- ขั้นตอนที่ 6: เครื่องเมตรอนอม
- ขั้นตอนที่ 7: สเปกตรัมเสียง
- ขั้นตอนที่ 8: เซอร์โวมอเตอร์
- ขั้นตอนที่ 9: Voltage Doubler and Inverter
- ขั้นตอนที่ 10: การถ่ายโอนพลังงานแบบไร้สาย
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12

Arduino Uno หรือ Nano สามารถสร้างสัญญาณดิจิตอลที่แม่นยำบนหมุดเฉพาะ 6 ตัวโดยใช้ตัวจับเวลาในตัวสามตัว พวกเขาต้องการเพียงไม่กี่คำสั่งในการตั้งค่าและไม่ต้องใช้รอบ CPU เพื่อรัน!
การใช้ตัวจับเวลาอาจเป็นเรื่องน่ากลัวหากคุณเริ่มต้นจากแผ่นข้อมูลแบบเต็มของ ATMEGA328 ซึ่งมี 90 หน้าสำหรับคำอธิบายโดยเฉพาะ! คำสั่ง Arduino ในตัวหลายคำสั่งใช้ตัวจับเวลาอยู่แล้ว เช่น millis(), delay(), tone(), AnalogWrite() และ servo library แต่หากต้องการใช้พลังเต็มที่ คุณจะต้องตั้งค่าผ่านรีจิสเตอร์ ฉันแบ่งปันมาโครและฟังก์ชันบางอย่างที่นี่เพื่อให้ง่ายและโปร่งใสยิ่งขึ้น
หลังจากภาพรวมคร่าวๆ ของตัวจับเวลาแล้ว ให้ทำตาม 8 โครงการเจ๋งๆ ที่อาศัยการสร้างสัญญาณด้วยตัวจับเวลา
ขั้นตอนที่ 1: ส่วนประกอบที่จำเป็น

ในการสร้างทั้ง 8 โครงการ คุณจะต้อง:
- Arduino Uno หรือเข้ากันได้
- โล่ต้นแบบพร้อมมินิโปรโตบอร์ด
- สายจัมเปอร์เขียงหั่นขนม 6 สาย
- จัมเปอร์เขียงหั่นขนมสั้น 6 ชิ้น (ทำด้วยตัวเองจากลวดเชื่อมแกนแข็ง 10 ซม.)
- สายจระเข้2ตัว
- 1 สีขาว 5 มม. LED
- ตัวต้านทาน 220 โอห์ม
- ตัวต้านทาน 10kOhm
- โพเทนชิโอมิเตอร์ 10kOhm
- ตัวเก็บประจุเซรามิก 1muF 2 ตัว
- ตัวเก็บประจุ 10muF อิเล็กโทรไลต์ 1 ตัว
- 2 ไดโอด 1n4148 หรือใกล้เคียง
- ไมโครเซอร์โวมอเตอร์ 2 ตัว SG90
- ลำโพง 8 โอห์ม 1 ตัว
- ลวดเคลือบบาง 20 ม. (0.13 มม.)
ขั้นตอนที่ 2: ภาพรวมของ Arduino Timers สำหรับการสร้างสัญญาณ
Timer0 และ timer2 เป็นตัวจับเวลาแบบ 8 บิต ซึ่งหมายความว่าสามารถนับได้มากที่สุดตั้งแต่ 0 ถึง 255 Timer1 เป็นตัวจับเวลาแบบ 16 บิต ดังนั้นจึงสามารถนับได้ถึง 65535 ตัวจับเวลาแต่ละตัวมีขาออกที่เกี่ยวข้องกันสองพิน: 6 และ 5 สำหรับตัวจับเวลา0, 9 และ 10 สำหรับตัวจับเวลา1, 11 และ 3 สำหรับตัวจับเวลา2 ตัวจับเวลาจะเพิ่มขึ้นในแต่ละรอบนาฬิกาของ Arduino หรือในอัตราที่ลดลงตามปัจจัยก่อนสเกลซึ่งก็คือ 8, 64, 256 หรือ 1024 (32 และ 128 ได้รับอนุญาตสำหรับตัวจับเวลาด้วย 2) ตัวนับเวลาตั้งแต่ 0 ถึง 'TOP' แล้วทำซ้ำอีกครั้ง (PWM แบบเร็ว) หรือลงด้านล่าง (PWM ที่ถูกต้องในเฟส) ค่าของ 'TOP' จึงเป็นตัวกำหนดความถี่ พินเอาต์พุตสามารถตั้งค่า รีเซ็ต หรือพลิกค่าของ Output Compare Register ได้ ดังนั้นขาเอาต์พุตจะกำหนดรอบการทำงาน เฉพาะตัวจับเวลา1 เท่านั้นที่มีความสามารถในการตั้งค่าความถี่และรอบการทำงานอย่างอิสระสำหรับพินเอาต์พุตทั้งสอง
ขั้นตอนที่ 3: LED Blink




ความถี่ต่ำสุดที่สามารถเข้าถึงได้ด้วยตัวจับเวลา 8 บิตคือ 16MHz/(511*1024)=30, 6Hz เพื่อให้ LED กะพริบด้วย 1Hz เราต้องใช้ตัวจับเวลา1 ซึ่งสามารถเข้าถึงความถี่ที่เล็กกว่า 256 เท่า 0.12 Hz
เชื่อมต่อ LED กับขั้วบวก (ขายาว) กับพิน 9 และเชื่อมต่อแคโทดกับตัวต้านทาน 220 โอห์มกับกราวด์ อัปโหลดรหัส ไฟ LED จะกะพริบที่ 1Hz โดยมีรอบการทำงาน 50% ฟังก์ชัน loop() ว่างเปล่า: ตัวจับเวลาเริ่มต้นที่ setup() และไม่ต้องดำเนินการใดๆ เพิ่มเติม
ขั้นตอนที่ 4: LED Dimmer




การปรับความกว้างพัลส์เป็นวิธีที่มีประสิทธิภาพในการควบคุมความเข้มของ LED ด้วยไดรเวอร์ที่เหมาะสม จึงเป็นวิธีที่นิยมใช้ในการควบคุมความเร็วของมอเตอร์ไฟฟ้า เนื่องจากสัญญาณเปิดอยู่ 100% หรือปิด 100% จึงไม่สูญเสียพลังงานไปกับความต้านทานแบบอนุกรม โดยพื้นฐานแล้วมันเหมือนกับการกะพริบไฟ LED เร็วกว่าที่ตาจะติดตามได้ โดยหลักการแล้ว 50Hz นั้นเพียงพอแล้ว แต่อาจดูเหมือนสั่นเล็กน้อย และเมื่อ LED หรือดวงตาขยับ อาจส่งผลให้เกิด 'เส้นทาง' ที่ไม่ต่อเนื่องที่น่ารำคาญ การใช้พรีสเกล 64 พร้อมตัวจับเวลา 8 บิต เราจะได้ 16MHz/(64*256)=977Hz ซึ่งเหมาะสมกับวัตถุประสงค์ เราเลือก timer2 เพื่อให้ timer1 ยังคงใช้งานได้สำหรับฟังก์ชันอื่นๆ และเราจะไม่รบกวนฟังก์ชัน Arduino time() ซึ่งใช้ timer0
ในตัวอย่างนี้ รอบการทำงาน และด้วยเหตุนี้ความเข้มจึงถูกควบคุมโดยโพเทนชิออมิเตอร์ LED ดวงที่สองสามารถควบคุมได้อย่างอิสระด้วยตัวจับเวลาเดียวกันที่ขา 3
ขั้นตอนที่ 5: ตัวแปลงดิจิทัลเป็นอนาล็อก (DAC)




Arduino ไม่มีเอาต์พุตอนาล็อกที่แท้จริง โมดูลบางตัวใช้แรงดันอนาล็อกเพื่อควบคุมพารามิเตอร์ (แสดงคอนทราสต์ เกณฑ์การตรวจจับ ฯลฯ) ด้วยตัวเก็บประจุและตัวต้านทานเพียงตัวเดียว คุณสามารถใช้ตัวจับเวลา1 เพื่อสร้างแรงดันไฟฟ้าแอนะล็อกที่มีความละเอียด 5mV หรือดีกว่าได้
ตัวกรองสัญญาณความถี่ต่ำสามารถ 'เฉลี่ย' สัญญาณ PWM เป็นแรงดันอนาล็อกได้ ตัวเก็บประจุเชื่อมต่อผ่านตัวต้านทานไปยังขา PWM คุณสมบัติถูกกำหนดโดยความถี่ PWM และค่าของตัวต้านทานและตัวเก็บประจุ ความละเอียดของตัวจับเวลา 8 บิตจะเป็น 5V/256=20mV ดังนั้นเราจึงเลือกใช้ Timer1 เพื่อให้ได้ความละเอียด 10 บิต วงจร RC เป็นฟิลเตอร์กรองความถี่ต่ำลำดับแรกและจะมีระลอกคลื่นบ้าง มาตราส่วนเวลาของวงจร RC ควรมากกว่าระยะเวลาของสัญญาณ PWM มากเพื่อลดการกระเพื่อม ช่วงเวลาที่เราได้รับสำหรับความแม่นยำ 10 บิตคือ 1024/16MHz= 64mus หากเราใช้ตัวเก็บประจุ 1muF และตัวต้านทาน 10kOhm RC=10ms การกระเพื่อมจากจุดสูงสุดสู่จุดสูงสุดอยู่ที่ 5V*0.5*T/(RC)=16mV สูงสุด ซึ่งถือว่าเพียงพอแล้วที่นี่
โปรดทราบว่า DAC นี้มีอิมพีแดนซ์เอาต์พุตที่สูงมาก (10kOhm) ดังนั้นแรงดันไฟฟ้าจะลดลงอย่างมากหากดึงกระแสไฟ เพื่อหลีกเลี่ยงปัญหาดังกล่าว มันสามารถบัฟเฟอร์ด้วย opamp หรือสามารถเลือกชุดค่าผสมของ R และ C อื่นได้ เช่น 1kOhm กับ 10muF
ในตัวอย่าง เอาต์พุต DAC ถูกควบคุมด้วยโพเทนชิออมิเตอร์ แชนเนล DAC อิสระที่สองสามารถรันด้วยตัวจับเวลา1 บนพิน 10
ขั้นตอนที่ 6: เครื่องเมตรอนอม




เครื่องเมตรอนอมช่วยติดตามจังหวะเมื่อเล่นเพลง สำหรับพัลส์ที่สั้นมาก เอาต์พุตตัวจับเวลาของ Arduino สามารถป้อนโดยตรงไปยังลำโพง ซึ่งจะทำให้มีเสียงคลิกที่ได้ยินชัดเจน ด้วยโพเทนชิออมิเตอร์ ความถี่ในการตีสามารถควบคุมได้ตั้งแต่ 40 ถึง 208 ครั้งต่อนาที ใน 39 ขั้นตอน จำเป็นต้องใช้ Timer1 เพื่อความแม่นยำที่ต้องการ ค่าของ 'TOP' ซึ่งกำหนดความถี่ ถูกแก้ไขภายในฟังก์ชัน loop() และต้องให้ความสนใจ! คุณเห็นที่นี่ว่าโหมด WGM แตกต่างจากตัวอย่างอื่นๆ ที่มีความถี่คงที่: โหมดนี้ด้วย TOP ที่ตั้งค่าโดยการลงทะเบียน OCR1A มีการบัฟเฟอร์สองเท่าและป้องกัน TOP ที่หายไปและเกิดความผิดพลาดที่ยาวนาน อย่างไรก็ตาม นี่หมายความว่าเราสามารถใช้เอาต์พุตพินได้เพียง 1 พินเท่านั้น
ขั้นตอนที่ 7: สเปกตรัมเสียง




มนุษย์สามารถได้ยินความถี่เสียงมากกว่า 3 ระดับ ตั้งแต่ 20Hz ถึง 20kHz ตัวอย่างนี้สร้างคลื่นความถี่เต็มด้วยโพเทนชิออมิเตอร์ ตัวเก็บประจุ 10muF วางอยู่ระหว่างลำโพงและ Arduino เพื่อป้องกันกระแสไฟตรง Timer1 สร้างคลื่นสี่เหลี่ยม โหมดการสร้างรูปคลื่นที่นี่คือ PWM ที่ถูกต้องตามเฟส ในโหมดนั้น ตัวนับจะเริ่มนับถอยหลังเมื่อถึงด้านบน ซึ่งส่งผลให้พัลส์ที่มีค่าเฉลี่ยคงที่ แม้ว่ารอบการทำงานจะแตกต่างกันไป อย่างไรก็ตาม มันยังส่งผลให้เกิดช่วงเวลาที่ (เกือบ) เป็นสองเท่า และมันเพิ่งเกิดขึ้นที่พรีสเกล 8 นั้น timer1 ครอบคลุมสเปกตรัมที่ได้ยินทั้งหมดโดยไม่จำเป็นต้องเปลี่ยนพรีสเกล นอกจากนี้ เนื่องจากค่าของ TOP กำลังเปลี่ยนแปลงขณะเดินทาง การใช้ OCR1A เป็นตัวบนช่วยลดจุดบกพร่อง
ขั้นตอนที่ 8: เซอร์โวมอเตอร์




มีไลบรารีเซอร์โวที่ทรงพลัง แต่ถ้าคุณมีเซอร์โวเพียงสองตัวที่จะขับ คุณก็อาจทำโดยตรงด้วยตัวจับเวลา1 เช่นกัน ซึ่งจะทำให้ CPU ใช้หน่วยความจำน้อยลง และหลีกเลี่ยงการขัดจังหวะ เซอร์โว SG90 ยอดนิยมใช้สัญญาณ 50Hz และความยาวพัลส์จะกำหนดตำแหน่ง เหมาะสำหรับจับเวลา1. ความถี่ได้รับการแก้ไข ดังนั้นทั้งเอาต์พุตบนพิน 9 และพิน 10 สามารถใช้บังคับเซอร์โวได้อย่างอิสระ
ขั้นตอนที่ 9: Voltage Doubler and Inverter



บางครั้งโครงการของคุณต้องการแรงดันไฟฟ้าที่สูงกว่า 5V หรือแรงดันลบ อาจเป็นการเรียกใช้ MOSFET เพื่อเรียกใช้องค์ประกอบ piezo เพื่อขับเคลื่อน opamp หรือรีเซ็ต EEPROM หากการดึงกระแสไฟมีขนาดเล็กเพียงพอ สูงถึง ~5mA ปั๊มชาร์จอาจเป็นวิธีแก้ปัญหาที่ง่ายที่สุด: เพียง 2 ไดโอดและตัวเก็บประจุสองตัวที่เชื่อมต่อกับสัญญาณพัลซิ่งจากตัวจับเวลาทำให้ Arduino 5V เป็น 10V เพิ่มขึ้นสองเท่า ในทางปฏิบัติ มีไดโอด 2 หยด ดังนั้นในทางปฏิบัติจะเหมือนกับ 8.6V สำหรับตัวทวีคูณ หรือ -3.6V สำหรับอินเวอร์เตอร์
ความถี่ของคลื่นสี่เหลี่ยมควรจะเพียงพอที่จะปั๊มประจุที่เพียงพอผ่านไดโอด ตัวเก็บประจุ 1muF จะเคลื่อนที่ 5muC ของการเปลี่ยนแปลงเมื่อแรงดันไฟฟ้าเปลี่ยนแปลงระหว่าง 0 ถึง 5V ดังนั้นสำหรับกระแส 10mA ความถี่ต้องมีอย่างน้อย 2kHz ในทางปฏิบัติ ความถี่ที่สูงขึ้นจะดีกว่า เนื่องจากช่วยลดการกระเพื่อม ด้วยการนับเวลา 2 จาก 0 ถึง 255 โดยไม่มีพรีสเกล ความถี่คือ 62.5kHz ซึ่งทำงานได้ดี
ขั้นตอนที่ 10: การถ่ายโอนพลังงานแบบไร้สาย




ไม่ใช่เรื่องแปลกที่จะชาร์จนาฬิกาอัจฉริยะโดยไม่ต้องใช้สายเคเบิล แต่ก็สามารถเป็นส่วนหนึ่งของโครงการ Arduino ได้อย่างง่ายดาย ขดลวดที่มีสัญญาณความถี่สูงสามารถถ่ายโอนพลังงานไปยังอีกขดลวดที่อยู่ใกล้เคียงผ่านการเหนี่ยวนำโดยไม่ต้องสัมผัสทางไฟฟ้า
ขั้นแรกเตรียมขดลวด ฉันใช้ม้วนกระดาษขนาดเส้นผ่านศูนย์กลาง 8.5 ซม. และลวดเคลือบเส้นผ่านศูนย์กลาง 0.13 มม. เพื่อทำ 2 ม้วน: ม้วนหลัก 20 รอบ ม้วนรอง 50 รอบ การเหนี่ยวนำตัวเองของขดลวดประเภทนี้ที่มีขดลวด N และรัศมี R คือ ~5muH * N^2 * R ดังนั้นสำหรับ N=20 และ R=0.0425 ให้ L=85muH ซึ่งได้รับการยืนยันโดยผู้ทดสอบส่วนประกอบ เราสร้างสัญญาณที่มีความถี่ 516kHz ส่งผลให้มีอิมพีแดนซ์ 2pi*f*L=275Ohm ซึ่งสูงพอที่ Arduino จะไม่เกิดกระแสเกิน
เพื่อให้ขดลวดทำงานได้อย่างมีประสิทธิภาพสูงสุด เราต้องการใช้แหล่งจ่ายไฟฟ้ากระแสสลับที่แท้จริง มีเคล็ดลับที่สามารถทำได้: เอาต์พุตสองตัวของตัวจับเวลาสามารถรันในเฟสตรงข้าม โดยการกลับเอาต์พุตตัวใดตัวหนึ่ง เพื่อให้คล้ายกับคลื่นไซน์มากยิ่งขึ้น เราใช้ PWM ที่ถูกต้องตามเฟส ด้วยวิธีนี้ระหว่างพิน 9 ถึง 10 แรงดันไฟฟ้าจะสลับกันระหว่างทั้ง 0V, พิน 9 +5V, ทั้ง 0V, พิน 10 +5V เอฟเฟกต์จะแสดงในรูปภาพจากการติดตามขอบเขต (ด้วยพรีสเกล 1024 ขอบเขตของเล่นนี้ไม่มีแบนด์วิดท์มากนัก)
ต่อคอยล์หลักกับพิน 9 และ 10 ต่อ LED เข้ากับคอยล์ทุติยภูมิ เมื่อนำขดลวดทุติยภูมิมาใกล้ขดลวดปฐมภูมิ ไฟ LED จะสว่างขึ้น
แนะนำ:
โครงการ Arduino-Tamagotchi (ฉันคือทามาก็อตจิ): 5 ขั้นตอน (พร้อมรูปภาพ)

โครงการ Arduino-Tamagotchi (ฉันคือทามาก็อตจิ): ฉันเบื่อกับการกักตัวและตัดสินใจสร้าง Arduino Tamagotchi เพราะฉันเกลียดสัตว์หลายชนิด ฉันจึงเลือกตัวเองเป็นทามาก็อตจิ ก่อนอื่นฉันสร้างคอนโซลของฉันบนเขียงหั่นขนม การเดินสายไฟนั้นง่ายมาก มีเพียงสามปุ่ม คือ Buzzer และ
โครงการ Arduino แผง LED RGB 16x16: 5 ขั้นตอน (พร้อมรูปภาพ)

โปรเจ็กต์ Arduino แผงไฟ LED 16x16 RGB: สวัสดีทุกคน ฉันโพสต์โปรเจ็กต์นี้เพราะฉันอยากให้ทุกคนมีสถานที่ง่ายๆ ที่จะมาเล่นกับแผง LED RGB 16x16 RGB อันยอดเยี่ยมเหล่านี้ ฉันได้หยิบไอเดียจากโปรเจ็กต์อื่นมาแก้ไขสำหรับโปรเจ็กต์นี้ มันให้คุณ
กระถางต้นไม้อัจฉริยะอัตโนมัติ - (DIY, พิมพ์ 3 มิติ, Arduino, รดน้ำด้วยตัวเอง, โครงการ): 23 ขั้นตอน (พร้อมรูปภาพ)

กระถางต้นไม้อัจฉริยะอัตโนมัติ - (DIY, 3D Printed, Arduino, Self Watering, Project): สวัสดี บางครั้งเมื่อเราออกจากบ้านสักสองสามวันหรือยุ่งมาก ต้นไม้ในบ้าน (อย่างไม่ยุติธรรม) ต้องทนทุกข์เพราะไม่ได้รดน้ำเมื่อพวกเขา ต้องการมัน. นี่คือวิธีแก้ปัญหาของฉัน มันเป็นกระถางต้นไม้อัจฉริยะซึ่งรวมถึง: อ่างเก็บน้ำในตัว เซนโซ
โครงการ Arduino: ช่วงทดสอบโมดูล LoRa RF1276 สำหรับโซลูชันการติดตามด้วย GPS: 9 ขั้นตอน (พร้อมรูปภาพ)

โครงการ Arduino: ช่วงทดสอบโมดูล LoRa RF1276 สำหรับการติดตาม GPS วิธีแก้ไข: การเชื่อมต่อ: USB - SerialNeed: Chrome Browser Need: 1 X Arduino Mega Need: 1 X GPS Need: 1 X SD card Need: 2 X LoRa Modem RF1276Function: Arduino ส่งค่า GPS ไปยังฐานหลัก - เก็บข้อมูลฐานหลักใน Dataino Server Lora Module: Ultra long range
Magic Wand Target Practice (โครงการ IR Arduino): 7 ขั้นตอน (พร้อมรูปภาพ)

Magic Wand Target Practice (โครงการ IR Arduino): นี่คือวิธีที่ฉันทำโครงการของฉันสำหรับ Electronic Art โครงงานนี้มุ่งเน้นไปที่การใช้ Arduino Uno เพื่อสร้างอุปกรณ์สวมใส่ ฉันไม่ได้โฟกัสไปที่อุปกรณ์สวมใส่มากนัก ฉันเน้นที่การเล่นด้วยเซ็นเซอร์ IR และรีโมทคอนโทรลโดยเฉลี่ยของคุณ