สารบัญ:

นาฬิกากราฟแท่ง Nixie: 6 ขั้นตอน (พร้อมรูปภาพ)
นาฬิกากราฟแท่ง Nixie: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: นาฬิกากราฟแท่ง Nixie: 6 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: นาฬิกากราฟแท่ง Nixie: 6 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: Vintage Display Technology Pt.5: A Nixie-Bargraph Meter-Clock 2024, กรกฎาคม
Anonim
นาฬิกา Nixie Bargraph
นาฬิกา Nixie Bargraph
นาฬิกา Nixie Bargraph
นาฬิกา Nixie Bargraph

แก้ไข 9/11/17 ด้วยความช่วยเหลือของ Kickstarter ฉันได้ออกชุดสำหรับชุดนาฬิกานี้แล้ว! ประกอบด้วยบอร์ดควบคุมและหลอด Nixie IN-9 2 หลอด สิ่งที่คุณต้องทำคือเพิ่ม Arduino/Raspberry Pi/อื่นๆ ของคุณเอง สามารถหาชุดคิทได้ แต่คลิกที่ลิงค์นี้ !

ดังนั้นฉันจึงเห็นนาฬิกา Nixie จำนวนมากทางออนไลน์และคิดว่ามันดูดี แต่ฉันไม่ต้องการใช้เงิน 100 เหรียญขึ้นไปกับนาฬิกาที่ไม่มีแม้แต่หลอดด้วยซ้ำ! ดังนั้นด้วยความรู้ด้านอิเล็กทรอนิกส์เพียงเล็กน้อย ฉันจึงได้ออกล่ารอบๆ หลอดนิกซี่ต่างๆ และวงจร ฉันต้องการสร้างความแตกต่างเล็กน้อยกับนาฬิกา nixie ที่ดูคล้ายคลึงกันโดยทั่วไป ในที่สุดฉันก็เลือกใช้หลอดกราฟแท่ง Nixie IN-9 เหล่านี้เป็นท่อบางยาวและความสูงของพลาสมาที่เรืองแสงขึ้นอยู่กับกระแสที่ผ่านท่อ ท่อด้านซ้ายเพิ่มขึ้นทีละชั่วโมง และท่อทางด้านขวาเป็นนาที พวกมันมีลีดเพียงสองอันเท่านั้น และทำให้การสร้างวงจรตรงไปตรงมามากขึ้น ในการออกแบบนี้มีท่อชั่วโมงและนาที โดยมีความสูงของพลาสมาในแต่ละท่อแทนเวลาปัจจุบัน เวลาจะถูกเก็บไว้โดยใช้ไมโครคอนโทรลเลอร์ Adafruit Trinket และนาฬิกาเรียลไทม์ (RTC)

ขั้นตอนที่ 1: การประกอบชิ้นส่วน

การประกอบชิ้นส่วน
การประกอบชิ้นส่วน

มีสองส่วน ส่วนแรกคือส่วนอิเล็กทรอนิกส์ และส่วนที่สองคือส่วนการติดตั้งและการตกแต่ง ส่วนประกอบอิเล็กทรอนิกส์ที่ต้องใช้คือ: Adafruit Trinket 5V - $7.95 (www.adafruit.com/products/1501) Adafruit RTC - $9 (www.adafruit.com/products/264) 2x Nixie IN-9 bargraph ~ $3 ต่อหลอดบน eBay 1x แหล่งจ่ายไฟ Nixie 140v ~ $ 12 บน eBay 4x 47 uF ตัวเก็บประจุอิเล็กโทรไลต์ 4x 3.9 kOhm ตัวต้านทาน 2x 1 kOhm potentiometer 2x ทรานซิสเตอร์ MJE340 NPN แรงดันสูง ~ $ 1 แต่ละตัว 1x LM7805 5v regulator ~ $ 1 1x ซ็อกเก็ต 2.1 มม. ~ $ 1 1x กล่องโครงการพร้อม pcb ~ $ 5 1x แหล่งจ่ายไฟ DC 12v (ฉันพบของเก่าจากอุปกรณ์ที่ลืมไปนานแล้ว) บัดกรี สายเชื่อมต่อ ฯลฯ การติดตั้ง: ฉันตัดสินใจติดตั้งอุปกรณ์อิเล็กทรอนิกส์ในกล่องพลาสติกสีดำขนาดเล็กของโปรเจ็กต์ จากนั้นจึงติดตั้งหลอดกับกลไกนาฬิกาแบบโบราณ เพื่อทำเครื่องหมายชั่วโมงและนาที ฉันใช้ลวดทองแดงพันรอบหลอด ชิ้นส่วนยึด: การเคลื่อนไหวของนาฬิกาโบราณ - $10 eBay Copper wire - $3 eBay Hot glue gun

ขั้นตอนที่ 2: วงจร

วงจร
วงจร
วงจร
วงจร
วงจร
วงจร
วงจร
วงจร

ขั้นตอนแรกคือการสร้างแหล่งจ่ายไฟ Nixie นี่เป็นชุดเล็ก ๆ ที่ดีจาก eBay รวมถึง PCB เล็กน้อยและเพียงแค่ต้องการส่วนประกอบที่จะบัดกรีเข้ากับบอร์ด การจ่ายไฟเฉพาะนี้แปรผันระหว่าง 110-180v ควบคุมได้ด้วยหม้อขนาดเล็กบนกระดาน ใช้ไขควงขนาดเล็กปรับเอาต์พุตเป็น ~140v ก่อนที่ฉันจะทำทุกอย่าง ฉันต้องการทดสอบหลอด nixie ของฉัน เพื่อทำสิ่งนี้ ฉันสร้างวงจรทดสอบอย่างง่ายโดยใช้หลอดเดียว ทรานซิสเตอร์ และโพเทนชิออมิเตอร์ 10k ที่ฉันวางไว้ ดังที่เห็นในรูปแรก การจ่ายไฟ 140v ถูกต่อเข้ากับขั้วบวกของท่อ (ขาขวา) จากนั้นแคโทด (ขาซ้าย) จะเชื่อมต่อกับขาสะสมของทรานซิสเตอร์ MJE340 แหล่งจ่ายไฟ 5v เชื่อมต่อกับหม้อ 10k ที่แบ่งกราวด์เป็นฐานทรานซิสเตอร์ ในที่สุดอีซีแอลทรานซิสเตอร์จะเชื่อมต่อผ่านตัวต้านทานกระแสไฟ 300 โอห์มกับกราวด์ หากคุณไม่คุ้นเคยกับทรานซิสเตอร์และอุปกรณ์อิเล็กทรอนิกส์ ไม่เป็นไร แค่ต่อสายแล้วเปลี่ยนความสูงของพลาสม่าด้วยปุ่มหม้อ! เมื่อมันได้ผล เราก็สามารถดูการทำนาฬิกาของเราได้ วงจรนาฬิกาแบบเต็มสามารถดูได้ในแผนภาพวงจรที่สอง หลังจากการค้นคว้า ฉันพบการสอนที่สมบูรณ์แบบบนเว็บไซต์ Adafruit learn ซึ่งทำเกือบทุกอย่างตามที่ฉันต้องการจะทำ คุณสามารถดูบทช่วยสอนได้ที่นี่: https://learn.adafruit.com/trinket-powered-analog-m… บทช่วยสอนนี้ใช้ตัวควบคุม Trinket และ RTC เพื่อควบคุมแอมป์มิเตอร์แบบอะนาล็อกสองตัว ใช้การปรับความกว้างพัลส์ (PWM) เพื่อควบคุมการโก่งตัวของเข็ม ขดลวดของแอมป์มิเตอร์จะเฉลี่ย PWM เป็นสัญญาณ dc ที่มีประสิทธิภาพ อย่างไรก็ตาม หากเราใช้ PWM เพื่อขับเคลื่อนหลอดโดยตรง การมอดูเลตความถี่สูงหมายความว่าแถบพลาสมาจะไม่ "ยึด" กับฐานของท่อ และคุณจะมีแถบโฮเวอร์ เพื่อหลีกเลี่ยงปัญหานี้ ฉันเฉลี่ย PWM โดยใช้ตัวกรองความถี่ต่ำที่มีค่าคงที่เป็นเวลานานเพื่อรับสัญญาณ DC เกือบ มีความถี่ตัด 0.8 Hz ซึ่งถือว่าใช้ได้เนื่องจากเรากำลังอัปเดตเวลานาฬิกาทุก 5 วินาทีเท่านั้น นอกจากนี้ เนื่องจากกราฟแท่งมีช่วงชีวิตที่จำกัดและอาจจำเป็นต้องเปลี่ยน และไม่ใช่ว่าทุกหลอดจะเหมือนกันทุกประการ ฉันจึงรวมหม้อ 1k ไว้หลังหลอดด้วย ซึ่งช่วยให้ปรับแต่งเพื่อปรับความสูงของพลาสมาสำหรับทั้งสองหลอดได้ ในการเชื่อมต่อเครื่องประดับเล็กกับนาฬิกาเรียลไทม์ (RCT) ให้เชื่อมต่อ Trinket-pin 0 กับ RTC-SDA, Trinket-pin 2 กับ RTC-SCL และ Trinket-5v ถึง RTC-5v และ Trinket GND กับกราวด์ RTC สำหรับส่วนนี้ อาจเป็นประโยชน์ในการดูคำแนะนำนาฬิกา Adafruit https://learn.adafruit.com/trinket-powered-analog-… เมื่อ Trinket และ RTC ต่อสายอย่างถูกต้องแล้ว ให้ต่อหลอด nixie ทรานซิสเตอร์ ตัวกรอง ฯลฯ บนเขียงหั่นขนมอย่างระมัดระวังตามแผนภาพวงจร

ในการรับ RTC และ Trinket คุณต้องดาวน์โหลดไลบรารี่ที่ถูกต้องจาก Adafruit Github ก่อน คุณต้องมี TinyWireM.h และ TInyRTClib.h ขั้นแรก เราต้องการปรับเทียบหลอด อัปโหลดภาพร่างการสอบเทียบที่ส่วนท้ายของคำแนะนำนี้ หากภาพร่างในตอนท้ายไม่ได้ผล ให้ลองใช้ภาพร่างนาฬิกา Adafruit ฉันได้ปรับแต่งภาพร่างนาฬิกา Adafruit เพื่อให้ทำงานได้อย่างมีประสิทธิภาพสูงสุดกับหลอด nixie แต่ภาพร่าง Adafruit จะทำงานได้ดี

ขั้นตอนที่ 3: การสอบเทียบ

การสอบเทียบ
การสอบเทียบ

เมื่อคุณอัปโหลดภาพร่างการสอบเทียบแล้ว จะต้องทำเครื่องหมายการสำเร็จการศึกษา

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

การตั้งค่าที่สองจะปรับเทียบหลอดนาที เปลี่ยนระหว่าง 0, 15, 30, 45 และ 60 นาที ทุกๆ 5 วินาที

การตั้งค่าล่าสุดจะทำซ้ำในแต่ละชั่วโมงที่เพิ่มขึ้น ต่างจากนาฬิกา Adafruit ที่ตัวระบุชั่วโมงจะขยับทีละครั้งทุก ๆ ชั่วโมง เป็นเรื่องยากที่จะได้รับการตอบสนองเชิงเส้นในแต่ละชั่วโมงเมื่อใช้มิเตอร์แบบแอนะล็อก

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

ฉันลืมถ่ายรูปกระบวนการนี้ แต่คุณสามารถดูได้จากภาพว่ามีการต่อสายไฟอย่างไร แม้ว่าฉันจะใช้กาวน้อยกว่ามากเพื่อติดลวด

ขั้นตอนที่ 4: การติดตั้งและการตกแต่ง

การติดตั้งและการตกแต่ง
การติดตั้งและการตกแต่ง
การติดตั้งและการตกแต่ง
การติดตั้งและการตกแต่ง
การติดตั้งและการตกแต่ง
การติดตั้งและการตกแต่ง

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

ขั้นตอนที่ 5: Arduino Sketch - การปรับเทียบ

#define HOUR_PIN 1 // แสดงชั่วโมงผ่าน PWM บน Trinket GPIO #1

#define MINUTE_PIN 4 // การแสดงนาทีผ่าน PWM บน Trinket GPIO #4 (ผ่านการโทรด้วย Timer 1)

int ชั่วโมง = 57;int นาที = 57; //ตั้งค่าขั้นต่ำpwm

การตั้งค่าเป็นโมฆะ () { pinMode (HOUR_PIN, OUTPUT); โหมดพิน (MINUTE_PIN, OUTPUT); PWM4_init(); //ตั้งค่าเอาต์พุต PWM

}

void loop () {// ใช้สิ่งนี้เพื่อปรับแต่งหม้อ nixie เพื่อให้แน่ใจว่าความสูงของท่อสูงสุดตรงกับ analogWrite (HOUR_PIN, 255); analogWrite4(255); // ใช้สิ่งนี้เพื่อปรับเทียบการเพิ่มทีละนาที

/*

analogWrite4(57); // นาที 0 ล่าช้า (5000); analogWrite4(107); // นาที 15 ล่าช้า (5000); analogWrite4(156); // นาที 30 ล่าช้า (5000); analogWrite4(206); // นาที 45 ล่าช้า (5000); analogWrite4(255); // นาที 60 ล่าช้า (5000);

*/

// ใช้สิ่งนี้เพื่อปรับเทียบการเพิ่มชั่วโมง /*

analogWrite (HOUR_PIN, 57); // 57 คือเอาต์พุตขั้นต่ำและสอดคล้องกับความล่าช้า 1am/pm (4000); // หน่วงเวลา 4 วินาที analogWrite (HOUR_PIN, 75); // 75 คือเอาต์พุตที่ตรงกับความล่าช้า 2am/pm (4000); analogWrite (HOUR_PIN, 93); // 93 คือเอาต์พุตที่ตรงกับความล่าช้า 3am/pm (4000); analogWrite (HOUR_PIN, 111); // 111 คือเอาต์พุตที่ตรงกับความล่าช้า 4am/pm (4000); analogWrite (HOUR_PIN, 129); // 129 คือเอาต์พุตที่ตรงกับเวลา 5am/pm (4000); analogWrite (HOUR_PIN, 147); // 147 คือเอาต์พุตที่ตรงกับความล่าช้า 6.00 น./น. (4000); analogWrite (HOUR_PIN, 165); // 165 คือเอาต์พุตที่ตรงกับเวลา 7.00 น./20.00 น. (4000); analogWrite (HOUR_PIN, 183); // 183 เป็นเอาต์พุตที่ตรงกับความล่าช้า 8.00 น./น. (4000); analogWrite (HOUR_PIN, 201); // 201 คือเอาต์พุตที่ตรงกับความล่าช้า 9.00/00 น. (4000); analogWrite (HOUR_PIN, 219); // 219 คือเอาต์พุตที่ตรงกับเวลา 10.00 น./20.00 น. (4000); analogWrite (HOUR_PIN, 237); // 237 คือเอาต์พุตที่ตรงกับความล่าช้า 11am/pm (4000); analogWrite (HOUR_PIN, 255); // 255 คือเอาต์พุตที่ตรงกับเวลา 12.00 น./20.00 น

*/

}

โมฆะ PWM4_init () {// ตั้งค่า PWM บน Trinket GPIO #4 (PB4, pin 3) โดยใช้ Timer 1 TCCR1 = _BV (CS10); // ไม่มีพรีสเกลเลอร์ GTCCR = _BV (COM1B1) | _BV (PWM1B); // ล้าง OC1B เมื่อเปรียบเทียบ OCR1B = 127; // รอบการทำงานเริ่มต้นที่ 50% OCR1C = 255; // ความถี่ }

// ฟังก์ชั่นที่อนุญาตให้ analogWrite บน Trinket GPIO #4 เป็นโมฆะ analogWrite4 (uint8_t duty_value) { OCR1B = duty_value; // หน้าที่อาจเป็น 0 ถึง 255 (0 ถึง 100%) }

ขั้นตอนที่ 6: Arduino Sketch - นาฬิกา

// Adafruit Trinket นาฬิกาอนาล็อก

// ฟังก์ชันวันที่และเวลาโดยใช้ DS1307 RTC ที่เชื่อมต่อผ่าน I2C และ TinyWireM lib

// ดาวน์โหลดไลบรารีเหล่านี้จากที่เก็บ Github ของ Adafruit และ // ติดตั้งในไดเร็กทอรี Arduino Libraries #include #include

// สำหรับการดีบัก รหัสซีเรียลที่ไม่แสดงข้อคิดเห็น ให้ใช้ FTDI Friend ด้วยพิน RX ที่เชื่อมต่อกับพิน 3 // คุณจะต้องใช้โปรแกรมเทอร์มินัล (เช่น ฟรีแวร์ PuTTY สำหรับ Windows) ที่ตั้งค่าเป็น // พอร์ต USB ของเพื่อน FTDI ที่ 9600 บอด Uncomment out Serial commands เพื่อดูว่ามีอะไรขึ้น //#define HOUR_PIN 1 // Hour display via PWM on Trinket GPIO #1 #define MINUTE_PIN 4 // นาทีที่แสดงผ่าน PWM บน Trinket GPIO #4 (ผ่าน Timer 1 calls) //SendOnlySoftwareSerial Serial (3); // การส่งข้อมูลแบบอนุกรมบน Trinket Pin 3 RTC_DS1307 rtc; // ตั้งค่านาฬิกาเรียลไทม์

การตั้งค่าเป็นโมฆะ () { pinMode (HOUR_PIN, OUTPUT); // กำหนดพินมิเตอร์ PWM เป็นเอาต์พุต pinMode (MINUTE_PIN, OUTPUT); PWM4_init(); // ตั้งเวลา 1 เพื่อทำงาน PWM บน Trinket Pin 4 TinyWireM.begin(); // เริ่ม I2C rtc.begin(); // เริ่ม DS1307 นาฬิกาตามเวลาจริง //Serial.begin(9600); // เริ่ม Serial Monitor ที่ 9600 baud ถ้า (! rtc.isrunning ()) { //Serial.println ("RTC ไม่ทำงาน!"); // บรรทัดต่อไปนี้ตั้งค่า RTC เป็นวันที่ & เวลาที่ร่างนี้ถูกคอมไพล์ rtc.adjust(DateTime(_DATE_, _TIME_)); }}

วงเป็นโมฆะ () { uint8_t hourvalue, minutesvalue; uint8_t hourvoltage, แรงดันนาที;

DateTime ตอนนี้ = rtc.now(); // รับข้อมูล RTC hourvalue = now.hour(); // รับชั่วโมง if(hourvalue > 12) hourvalue -= 12; // นาฬิกานี้คือ 12 ชั่วโมง minutesvalue = now.minute(); // รับนาที

นาทีแรงดันไฟฟ้า = แผนที่ (ค่านาที, 1, 60, 57, 255); // แปลงนาทีเป็นรอบการทำงานของ PWM

ถ้า (ค่าชั่วโมง == 1) { analogWrite (HOUR_PIN, 57); } ถ้า (ค่าชั่วโมง == 2) { analogWrite (HOUR_PIN, 75); // แต่ละชั่วโมงสอดคล้องกับ +18 } if(hourvalue == 3){ analogWrite(HOUR_PIN, 91); }

ถ้า (ค่าชั่วโมง == 4) { analogWrite (HOUR_PIN, 111); } ถ้า (ค่าชั่วโมง == 5) { analogWrite (HOUR_PIN, 126); } if(hourvalue ==6){ analogWrite(HOUR_PIN, 147); } ถ้า (ค่าชั่วโมง == 7) { analogWrite (HOUR_PIN, 165); } if(hourvalue == 8){ analogWrite(HOUR_PIN, 183); } ถ้า (ค่าชั่วโมง == 9) { analogWrite (HOUR_PIN, 201); } ถ้า (ค่าชั่วโมง == 10) { analogWrite (HOUR_PIN, 215); } ถ้า (ค่าชั่วโมง == 11) { analogWrite (HOUR_PIN, 237); } ถ้า (ค่าชั่วโมง == 12) { analogWrite (HOUR_PIN, 255); }

analogWrite4 (แรงดันนาที); // นาที แอนะล็อกเขียนยังคงเหมือนเดิมในขณะที่การแมปทำงาน // โค้ดเพื่อให้โปรเซสเซอร์เข้าสู่โหมดสลีปอาจจะดีกว่า - เราจะหน่วงเวลา (5000); // ตรวจสอบเวลาทุกๆ 5 วินาที คุณสามารถเปลี่ยนสิ่งนี้ได้ }

โมฆะ PWM4_init () {// ตั้งค่า PWM บน Trinket GPIO #4 (PB4, pin 3) โดยใช้ Timer 1 TCCR1 = _BV (CS10); // ไม่มีพรีสเกลเลอร์ GTCCR = _BV (COM1B1) | _BV (PWM1B); // ล้าง OC1B เมื่อเปรียบเทียบ OCR1B = 127; // รอบการทำงานเริ่มต้นเป็น 50% OCR1C = 255; // ความถี่ }

// ฟังก์ชั่นที่อนุญาตให้ analogWrite บน Trinket GPIO #4 เป็นโมฆะ analogWrite4 (uint8_t duty_value) { OCR1B = duty_value; // หน้าที่อาจเป็น 0 ถึง 255 (0 ถึง 100%) }

แนะนำ: