สารบัญ:
- ขั้นตอนที่ 1: ข้อกำหนด
- ขั้นตอนที่ 2: ทำความเข้าใจเกี่ยวกับฮาร์ดแวร์และซอฟต์แวร์
- ขั้นตอนที่ 3: การตั้งค่าส่วนประกอบ
- ขั้นตอนที่ 4: การเข้ารหัส
วีดีโอ: เปลี่ยนสีไฟกลางคืนโดยใช้ Ardruino 101: 4 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:07
ในโครงการนี้ คุณจะต้องสร้างโคมไฟกลางคืนโดยใช้ ardruino, Adafruit neo rgb Strips และเครื่องพิมพ์ 3 มิติ
โปรดทราบว่าคำสั่งสอนนี้มีไว้สำหรับโครงการโรงเรียนของฉันเท่านั้น รหัสสำหรับโครงการนี้มาจากโครงการอื่น ด้วยที่กล่าวว่าฉันไม่ใช่ผู้เชี่ยวชาญเมื่อพูดถึง Ardruino
ขั้นตอนที่ 1: ข้อกำหนด
สำหรับโครงการนี้ คุณจะต้องมีฮาร์ดแวร์และเครื่องมือดังต่อไปนี้
ฮาร์ดแวร์:
1 - ardruino101 (ในสหรัฐอเมริกา) หรือ Genuino101 (สำหรับนอกสหรัฐอเมริกา)
2 - แถบนำ NeoPixel rgb จาก adafruit (5 โวลต์)
3 - ขั้วต่อ usb ardruino (ขั้วต่อชนิด B ถึง A)
4 - ซอฟต์แวร์จาก Ardruino, Ardruino IDE ในบทช่วยสอนนี้ เราจะใช้เวอร์ชัน 1.8.5 ข้อกำหนดของไลบรารีซอฟต์แวร์คือ: 101, Adafruit NeoPixel และ Madgwick
5 - และวัตถุสำหรับจัดเก็บฮาร์ดแวร์ของคุณ ในกรณีนี้ ฉันจะใช้เครื่องพิมพ์ 3 มิติ ไฟล์สำหรับการพิมพ์ 3 มิตินี้จะอยู่ในคำอธิบายที่เรียกว่า "Lamp Head" โปรดทราบว่ารูปแบบไฟล์นี้ไม่พร้อมสำหรับการพิมพ์ 3 มิติ คุณต้องเรียกใช้ซอฟต์แวร์การพิมพ์ 3 มิติที่กำหนดบนวัตถุ 3 มิติก่อน ทั้งนี้ขึ้นอยู่กับเครื่องพิมพ์ 3 มิติของคุณ บางครั้งขนาดของการพิมพ์ 3 มิติจะรีเซ็ต ดังนั้น ตรวจสอบให้แน่ใจว่าเส้นผ่านศูนย์กลางตั้งไว้ที่ 11 ซม. คูณ 11 ซม.
6 - ชุดบัดกรีพื้นฐาน
ขั้นตอนที่ 2: ทำความเข้าใจเกี่ยวกับฮาร์ดแวร์และซอฟต์แวร์
Ardruin/Genuino101
เพียงเพื่อชี้แจง Ardruino101 และ genuino101 นั้นเหมือนกันทุกประการข้างชื่อ ทั้งสองมีข้อกำหนดเดียวกันและใช้ซอฟต์แวร์เดียวกัน
Ardruino101 มีสเปกพื้นฐาน เช่น ardruino UNO และอื่นๆ คุณสมบัติหลักของ ardruino101 คือมาตรความเร่งและไจโรสโคปที่เราจะใช้ในโครงการของเรา นอกจากนี้ ardruino ประเภทนี้ยังมีไลบรารีโค้ดเฉพาะที่เรียกว่า CurrieIMU (Internal Measuring Units) ซึ่งรวมอยู่ในส่วนขยายไลบรารี 101
ด้วยที่กล่าวว่าเรามาพูดคุยเกี่ยวกับซอฟต์แวร์
ซอฟต์แวร์และไลบรารี
Ardruino IDE ใช้ python เนื่องจากเป็นซอร์สโค้ดหลัก นอกจากนี้ยังเป็น platvorm รหัสหลักที่ ardruino ส่วนใหญ่ทำงาน มีบทเรียนออนไลน์มากมายเกี่ยวกับวิธีการใช้ซอฟต์แวร์นี้ ดังนั้นฉันขอแนะนำให้คุณค้นคว้าข้อมูลเหล่านั้นก่อน หากคุณยังใหม่กับโปรแกรมนี้
โดยที่กล่าวว่าไลบรารีที่เราใช้อยู่มีดังต่อไปนี้:
จากเมนู Sketch > รวมไลบรารี > จัดการไลบรารี… ในช่องป้อนข้อความให้พิมพ์
- 101 ที่มาตรฐาน ardruino 101 จะไม่รวมอยู่ใน ardruino IDE โดยอัตโนมัติ เราต้องการส่วนขยายไลบรารีนี้เพื่อเข้ารหัสประเภท ardruino ของเรา
-Adafruit NeoPixel เพื่อเข้ารหัสแถบพิกเซล Neo ของเรา
-Madgwick เพื่ออ่านข้อมูลดิบและคำนวณข้อมูลนี้เป็นข้อมูลดิบ ขว้างและม้วน
แถบ Neo RGB
ประเภทที่ฉันจะใช้คือประเภท 5 แรงดันไฟฟ้าหรือประเภท 5v ด้วย 5v นี้ฉันไม่ต้องการแหล่งพลังงานเพิ่มเติมเพื่อควบคุมแถบของฉัน แต่ฉันจะใช้ ardruino เป็นแหล่งพลังงานในการควบคุมและทำให้แถบสว่างขึ้น
นี่คือเคล็ดลับบางอย่างที่คุณต้องรู้ก่อนเริ่มใช้งานแถบนี้
ก่อนอื่นคุณต้องมีแถบ LED Neodigital RGB จาก adafruit แถบชนิดนี้ควบคุมได้โดยใช้รหัส ต่อไปคุณต้องรู้ก่อนว่าแถบนี้มีด้านหลังและด้านหน้า ด้านหลังและด้านหน้านี้มีความสำคัญต่อการบัดกรี ตรวจสอบให้แน่ใจว่าคุณประสานด้านหน้าโดยที่ปุ่มลูกศรชี้ออกจากปลาย
นี่คือคำแนะนำเกี่ยวกับวิธีการใช้งาน
มีจุดบัดกรี 3 จุดที่คุณต้องคำนึงถึง การเชื่อมต่อกราวด์ (GND), การเชื่อมต่อแรงดันไฟฟ้า (V) และ การเชื่อมต่อพิน (DIN)
ขั้นตอนที่ 3: การตั้งค่าส่วนประกอบ
ขั้นแรก คุณจะต้องพิมพ์ส่วนประกอบ 3 มิติ ซึ่งคุณสามารถหาได้ในข้อกำหนด ในกรณีนี้ ฉันจะใช้ PLA ตรวจสอบให้แน่ใจว่าเส้นผ่านศูนย์กลางของวัตถุโดยรวมคือ 11 ซม. x 11 ซม. สิ่งนี้จะช่วยให้มั่นใจได้ว่า ardruino และแถบจะพอดีกับ shpere โปรดทราบว่าเครื่องพิมพ์ 3 มิติแต่ละเครื่องใช้ซอฟต์แวร์ที่แตกต่างกันในการคำนวณกระบวนการพิมพ์ ไฟล์ที่คุณใช้อาจมีการปรับขนาดต่างกัน ดังนั้นโปรดระลึกไว้เสมอว่า
วินาทีหลังการพิมพ์ ตรวจสอบให้แน่ใจว่าส่วนประกอบต่างๆ สามารถปิดได้ การพิมพ์ 3 มิติรวมกันเป็นทรงกลม พวกเขาควรจะพอดีอย่างดี หากส่วนประกอบสูญหาย ให้ติดเทปที่ด้านในเพื่อให้ฝาเต็ม และถ้าหนาให้ใช้กระดาษทราย
ประการที่สาม skematichs สำหรับ ardruino และแถบนั้นค่อนข้างง่าย คุณจะใช้สายไฟ 3 เส้นเพื่อเชื่อมต่อแถบกับ ardruino โปรดทราบว่าสถานที่เดียวที่ฉันบัดกรีอยู่บนแถบ ไม่ใช่บน Ardruino เอง
GND ไปที่ GND
DIN ไปที่พิน (ในกรณีของเรา pin6 บน ardruino)
5V ไปที่ 5V
ตรวจสอบให้แน่ใจว่าจำนวนแถบนำที่คุณใช้อยู่ที่ 30 อีกต่อไปแล้วและจะไม่สามารถรันโค้ดได้อย่างถูกต้อง คุณสามารถตัดแถบที่ไม่ได้ใช้ซึ่งแสดงเครื่องหมายกรรไกรได้ง่ายๆ
สิ่งที่สี่ Evrything ควรพอดีอย่างดีในทรงกลม คุณอาจเหมือนว่าฉันทำจุดตัดระหว่าง 1 ของการพิมพ์ 3 มิติเพื่อดูรางและวางพลาสติกรางน้ำที่ด้านบน
ขั้นตอนที่ 4: การเข้ารหัส
ตอนนี้คุณควรมีส่วนประกอบทั้งหมดที่จำเป็นในห้องสมุดของคุณ
นี่คือรหัสที่คุณต้องการเพื่อเรียกใช้โครงการ ผลลัพธ์ควรมีลักษณะเหมือนลิงก์วิดีโอที่ฉันส่งในหน้านี้
แหล่งที่มาของรหัสนี้สามารถพบได้ที่นี่ โปรเจ็กต์นี้ยังรวมถึงขั้นตอนที่จำเป็นเพื่อให้เข้าใจโค้ดและอัลกอริทึมที่อยู่เบื้องหลังการใช้งานได้ดียิ่งขึ้น
#รวม #รวม #รวม #รวม
#define PIN 6 // 11 พิกเซล NeoPixel Strip
#define PIN1 7 // 1 พิกเซล NeoPixel Strip #define NUMPIXELS 30 // จำนวนพิกเซล #define SAMPLE_RATE 25 // อัตราการสุ่มตัวอย่างสำหรับมาตรความเร่งและไจโรสโคป
// การกำหนดค่า Madgwick
ตัวกรองแมดจ์วิค; microsPerReading แบบยาวที่ไม่ได้ลงนาม, microsPrevious; ลอย accelScale, gyroScale;
// การกำหนดค่า NeoPixel
พิกเซล Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel พิกเซลสถานะ = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);
// ช่องว่างสี
RGBConverter rgbConverter; สองเท่า ชั่วโมง = 1; ดับเบิ้ล s = 1; ดับเบิล v = 1; ไบต์ rgb[3];
// สถานะหลอดไฟเคลื่อนไหว
// State 0 -> Select Hue - Pitch // State 1 -> Select Saturation - Roll // State 2 -> Select Value - Yaw // State 3 -> แก้ไขสี int statusLamp = 0;
การตั้งค่าเป็นโมฆะ () {
Serial.begin(9600);
// เริ่ม IMU และตัวกรอง
CurieIMU.begin(); CurieIMU.setGyroRate(SAMPLE_RATE); CurieIMU.setAccelerometerRate(SAMPLE_RATE); filter.begin(SAMPLE_RATE);
// ตั้งค่าช่วงมาตรความเร่งเป็น 2G
CurieIMU.setAccelerometerRange(2); // ตั้งค่าไจโรสโคปเป็น 250 องศา/วินาที CurieIMU.setGyroRange(250);
CurieIMU.autoCalibrateเครื่องวัดความเร่งออฟเซ็ต (X_AXIS, 0);
CurieIMU.autoCalibrateเครื่องวัดความเร่งออฟเซ็ต (Y_AXIS, 0); CurieIMU.autoCalibrateเครื่องวัดความเร่งออฟเซ็ต (Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset();
CurieIMU.attachInterrupt (เหตุการณ์Callback);
CurieIMU.setDetectionThreshold (CURIE_IMU_TAP, 950); CurieIMU.interrupts(CURIE_IMU_TAP);
// เริ่มต้นตัวแปรเพื่อเร่งการอัพเดตเพื่อแก้ไขอัตรา
microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = ไมโคร ();
// เริ่มต้น NeoPixel 11
พิกเซล.begin(); พิกเซล.show();
// เริ่มต้น NeoPixel 1
pixelStatus.begin(); พิกเซล.show();
// แสดงสถานะเป็น px
setStatusPixel (ไฟสถานะ); }
วงเป็นโมฆะ () {
int aix, aiy, aiz; //มาตรความเร่ง int gix, giy, giz; ขวานลอย, ay, az; ลอย gx, gy, gz; ม้วนลอย, ขว้าง, หันเห; microsNow แบบยาวที่ไม่ได้ลงนามแบบคงที่;
// ตรวจสอบว่าได้เวลาอ่านข้อมูลและอัปเดตตัวกรองหรือไม่
microsNow = ไมโคร (); ถ้า (microsNow - microsPrevious >= microsPerReading) {
// อ่านข้อมูลดิบจาก CurieIMU
CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);
// แปลงจากข้อมูลดิบเป็นหน่วยแรงโน้มถ่วงและหน่วยองศา/วินาที
ขวาน = convertRawAcceleration(aix); ay = convertRawAcceleration(aiy); az = แปลงRawAcceleration(aiz); gx = แปลงRawGyro(gix); gy = convertRawGyro(giy); gz = แปลงRawGyro(giz);
// อัปเดตตัวกรองซึ่งคำนวณการวางแนว
filter.updateIMU(gx, gy, gz, ax, ay, az);
// พิมพ์หัวเรื่อง ขว้างและม้วน
ม้วน = filter.getRoll(); ระยะห่าง = filter.getPitch(); หันเห = filter.getYaw();
// เพิ่มเวลาก่อนหน้านี้เพื่อให้เราก้าวอย่างเหมาะสม
microsPrevious = microsPrevious + microsPerReading;
// เฉพาะในกรณีที่เปลี่ยน Hue, Saturation หรือ Value
if (statusLamp เลือก Hue if (pitch >= -90 && pitch <= 90 && statusLamp == 0) { // เปลี่ยนมุม pitch = pitch + 90; // รับพิกัดสีจากมุม h = pitch / 180.0; }
// ข้อ จำกัด ของมุม
// ม้วนเท่านั้น -90ºถึง90º = 180º // สถานะ 1 -> เลือกความอิ่มตัวถ้า (ม้วน >= -90 && ม้วน <= 90 && statusLamp == 1) { // เปลี่ยนมุมม้วน = ม้วน + 90; // รับพิกัดสีจากมุม s = ม้วน / 180.0; }
// สถานะ 2 -> เลือกค่า
ถ้า (statusLamp == 2) { // yaw 0º ถึง 360º v = yaw / 360.0; }
// แปลงเป็น rgb
rgbConverter.hsvToRgb(h, s, v, rgb); /* Serial.print("สี: "); Serial.print(h); Serial.print(" - "); Serial.print(s); Serial.print(" - "); Serial.print(v); Serial.println(" ");
Serial.print("การวางแนว: ");
Serial.print(หันเห); Serial.print(" "); Serial.print(พิทช์); Serial.print(" "); Serial.println(ม้วน); */
// เปลี่ยนสีของพิกเซล
สำหรับ (int px = 0; px < NUMPIXELS; px++) { pixels.setPixelColor(px, pixels. Color(rgb[0], rgb[1], rgb[2])); พิกเซล.show(); } }
// แสดงสถานะเป็น px
setStatusPixel (ไฟสถานะ); } }
float convertRawAcceleration (int aRaw) {
// เนื่องจากเราใช้ช่วง 2G // -2g จับคู่กับค่าดิบที่ -32768 // +2g จับคู่กับค่าดิบ 32767
float a = (aRaw * 2.0) / 32768.0;
ส่งคืน a; }
float convertRawGyro (int gRaw) {
// เนื่องจากเราใช้ช่วง 250 องศา/วินาที // -250 จับคู่กับค่าดิบที่ -32768 // +250 จับคู่กับค่าดิบ 32767
float g = (gRaw * 250.0) / 32768.0;
กลับกรัม; }
โมฆะคงที่ eventCallback()
{ // ตรวจจับการแตะในแกนทั้งหมดหาก (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) { Serial.print ("ตรวจพบการแตะ statusLamp: "); Serial.println (ไฟสถานะ);
// เปลี่ยนสถานะ
สถานะLamp++;
// สถานะเริ่มต้น
ถ้า (statusLamp > 3) { statusLamp = 0; } } }
เป็นโมฆะ setStatusPixel (int statusPx)
{ สวิตช์ (statusPx) { กรณี 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelStatus.show(); หยุดพัก; กรณีที่ 1: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 150, 0)); pixelStatus.show(); หยุดพัก; กรณีที่ 2: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 0, 150)); pixelStatus.show(); หยุดพัก; กรณีที่ 3: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 0, 0)); pixelStatus.show(); หยุดพัก;
}
}
แนะนำ:
Inkscape 101: 12 ขั้นตอน
Inkscape 101: คำแนะนำนี้จัดทำและออกแบบมาสำหรับ Meetup ของ Makerspace เพื่อแนะนำผู้เข้าร่วมเกี่ยวกับ Inkscape ซึ่งเป็นซอฟต์แวร์เวกเตอร์กราฟิกฟรีที่เราใช้สำหรับการออกแบบเครื่องตัดเลเซอร์ *อัปเดต 12.28.20 ด้วยเวอร์ชัน Inkscape 1.0
Arduino 101: หลักสูตรจาก Tech Guy: 4 ขั้นตอน
Arduino 101: หลักสูตรจากนักเทคโนโลยี: ฉันหวังว่าหลาย ๆ คนโดยเฉพาะมือใหม่ที่ต้องการดำดิ่งสู่โลกของ Arduino จะพบว่าสิ่งนี้และบทความ / คำแนะนำอื่น ๆ ของฉัน (ซึ่งฉันจะโพสต์เป็นประจำ) มีประโยชน์ .สิ่งนี้จะไม่เหมือนกับบทเรียนการคัดลอก&วางปกติ มัน
IoT 101: Prendiendo Un LED Usando Blynk Y Photon: 8 ขั้นตอน
IoT 101:Prendiendo Un LED Usando Blynk Y Photon: En este primer tutorial de Internet of Things แสดงภาพและภาพ LED เชื่อมต่อด้วย Photon ใช้งานบน IoT llamada Blynk
Comm 101 วิธีแต่งตัวให้ฮอกกี้!: 9 ขั้นตอน
Comm 101 วิธีการแต่งตัวสำหรับฮอกกี้!: ฉันจะสอนวิธีใส่อุปกรณ์ฮอกกี้ให้คุณ เชื่อหรือไม่ว่ามีวิธีของความบ้าคลั่งนี้ ฉันจะผ่านแต่ละขั้นตอนทีละขั้นตอน
บ้านของ Ardruino: 6 ขั้นตอน (พร้อมรูปภาพ)
Ardruino's Home: IntroductionArduino's Home เป็นสิ่งปลูกสร้างแบบอินเทอร์แอคทีฟที่คุณสามารถใช้ได้ในหลายสถานการณ์ ใกล้คริสต์มาสแล้วและคุณต้องการบ้านที่สร้างเองเพื่อใช้ในเมืองคริสต์มาสของคุณหรือไม่? ใช้ Arduino's Home เพื่อทำให้หมู่บ้านของซานต้าน่าอยู่มากขึ้น ทำ