תוכן עניינים:
וִידֵאוֹ: מנורה אלחוטית ללא שמש עם זרוע מגנטית מגנטית: 8 שלבים (עם תמונות)
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
פרויקט זה נעשה ממנורה שבורה ומ- nodeMCU. ניתן להתאים מנורה דקורטיבית לכל כיוון ולהצמיד אותה לחומרים מגנטיים או לשים אותה על השולחן. ניתן לשלוט בשני מצבים כדלקמן:
- מצב שליטה אלחוטית, כקישור YouTube להלן:
- מצב שליטה אינטראקטיבי, כקישור YouTube להלן:
שלב 1: שטר חומרים
רשימת B. O. M:
עבור מצב אינטראקטיבי, אני משתמש ב- MPU6050 כדי לקבל נתוני ג'יירו מ- NodeMCU לשליטה בצבע המנורה.
תמונת חומרים לפרויקט זה:
שלב 2: מעגל
זהו מעגל פשוט מאוד, כמו סכמטי Fritzing לעיל, עם סוג ROD LED אחת RGB, שלושה נגדי זרם גבול R100 & MPU6050.
הרפלקטור משמש מכל מנורות שבורות ומחובר לבסיס nodeMCU על ידי 2 ברגים או הדבק אותם בעזרת דבק חזק.
עבודות התקנה:
סכמטי להלן:
שלב 3: בסיס מגנטי - זרוע גמישה
ניתן לעשות שימוש חוזר בזרוע גמישה מברזי מים גמישים שבורים. משהו כזה:
עם כמה טיפים, אנו מנסים לחבר אותם לבסיס המגנט הקבוע בתחתית הזרוע הגמישה. למעלה, יצרנו חור מקדחה לחיבור ללוח המעגלים ולמטען סולארי/סוללה. בעזרת בסיס זה, אנו יכולים לשים מנורה על משטח כמו שולחן, רצפות …; או שניתן לחבר אותו על חומרים מגנטיים כמו עמוד פלדה, מבנה פלדה.
שלב 4: סולאר - מטען סוללות
זה בא מנורת טעינה פגומה. הוספתי מתג הפעלה/כיבוי ואספקת חוטי חשמל ל- nodeMCU. יש לו גם שקע אחד ליציאת USB ותקע אחד למטען סוללות.
שלב 5: חבר את הכל ביחד
חיבור כל החלקים: NodeMCU ומשקף, תאים סולאריים וסוללות, זרוע גמישה יחד.
סיים
מצב טעינה
שלב 6: תוכנית בקרה אינטראקטיבית
הצבע ישתנה כאשר נתאים את הזרוע הגמישה או נסובב את המנורה.
מנורה אינטראקטיבית
#לִכלוֹל |
// כתובת התקן MPU6050 Slave |
const uint8_t MPU6050SlaveAddress = 0x68; |
// בחר סיכות SDA ו- SCL לתקשורת I2C - ברירת מחדל של סיכה בספריית WIRE: SCL - D1 & SDA - D2 ב- NODEMCU |
// const uint8_t SCL = D1; |
// const uint8_t SDA = D2; |
const int R = 14; |
const int G = 12; |
const int B = 13; |
// MPU6050 מעט כתובות רישום תצורות |
const uint8_t MPU6050_REGISTER_SMPLRT_DIV = 0x19; |
const uint8_t MPU6050_REGISTER_USER_CTRL = 0x6A; |
const uint8_t MPU6050_REGISTER_PWR_MGMT_1 = 0x6B; |
const uint8_t MPU6050_REGISTER_PWR_MGMT_2 = 0x6C; |
const uint8_t MPU6050_REGISTER_CONFIG = 0x1A; |
const uint8_t MPU6050_REGISTER_GYRO_CONFIG = 0x1B; |
const uint8_t MPU6050_REGISTER_ACCEL_CONFIG = 0x1C; |
const uint8_t MPU6050_REGISTER_FIFO_EN = 0x23; |
const uint8_t MPU6050_REGISTER_INT_ENABLE = 0x38; |
const uint8_t MPU6050_REGISTER_ACCEL_XOUT_H = 0x3B; |
const uint8_t MPU6050_REGISTER_SIGNAL_PATH_RESET = 0x68; |
int16_t AccelX, AccelY, AccelZ, טמפרטורה, GyroX, GyroY, GyroZ; |
הגדרת בטל () { |
pinMode (R, OUTPUT); |
pinMode (G, OUTPUT); |
pinMode (B, OUTPUT); |
//Serial.begin(9600); |
Wire.begin (SDA, SCL); |
MPU6050_Init (); |
} |
לולאת חלל () { |
uint16_t Ax, Ay, Az, T, Gx, Gy, Gz; |
uint16_t אדום, ירוק, כחול; |
Read_RawValue (MPU6050SlaveAddress, MPU6050_REGISTER_ACCEL_XOUT_H); |
// קח ערך מוחלט |
Ax = myAbs (AccelX); |
Ay = myAbs (AccelY); |
Az = myAbs (AccelZ); |
// קנה מידה בטווח |
אדום = מפה (Ax, 0, 16384, 0, 1023); |
ירוק = מפה (איי, 0, 16384, 0, 1023); |
כחול = מפה (Az, 0, 16384, 0, 1023); |
// הדפסה סדרתית לבדיקה |
//Serial.print("Red: "); Serial.print (אדום); |
//Serial.print("גרין: "); Serial.print (ירוק); |
//Serial.print("Blue: "); הדפסה סידורי (כחול); |
// כתוב אנלוגי ל- LED |
analogWrite (R, אדום); // ר |
analogWrite (G, ירוק); // G |
analogWrite (B, כחול); // ב |
עיכוב (200); |
} |
void I2C_Write (uint8_t deviceAddress, uint8_t regAddress, uint8_t data) { |
Wire.beginTransmission (deviceAddress); |
Wire.write (regAddress); |
Wire.write (נתונים); |
Wire.endTransmission (); |
} |
// קרא את כל 14 הרשמים |
void Read_RawValue (uint8_t deviceAddress, uint8_t regAddress) { |
Wire.beginTransmission (deviceAddress); |
Wire.write (regAddress); |
Wire.endTransmission (); |
Wire.requestFrom (deviceAddress, (uint8_t) 14); |
AccelX = (((int16_t) Wire.read () << 8) | Wire.read ()); |
AccelY = (((int16_t) Wire.read () << 8) | Wire.read ()); |
AccelZ = (((int16_t) Wire.read () << 8) | Wire.read ()); |
טמפרטורה = (((int16_t) Wire.read () << 8) | Wire.read ()); |
GyroX = (((int16_t) Wire.read () << 8) | Wire.read ()); |
GyroY = (((int16_t) Wire.read () << 8) | Wire.read ()); |
GyroZ = (((int16_t) Wire.read () << 8) | Wire.read ()); |
} |
// הגדר את MPU6050 |
בטל MPU6050_Init () { |
עיכוב (150); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_SMPLRT_DIV, 0x07); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_PWR_MGMT_1, 0x01); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_PWR_MGMT_2, 0x00); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_CONFIG, 0x00); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_GYRO_CONFIG, 0x00); // set +/- 250 מעלות/שנייה בקנה מידה מלא |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_ACCEL_CONFIG, 0x00); // set +/- 2g בקנה מידה מלא |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_FIFO_EN, 0x00); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_INT_ENABLE, 0x01); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_SIGNAL_PATH_RESET, 0x00); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_USER_CTRL, 0x00); |
} |
// ערך מוחלט |
float myAbs (float in) { |
החזרה (ב)> 0? (ב):-(ב); |
} |
צפה בתכנית מנורה אינטראקטיבית המתארחת אצל ❤ על ידי GitHub
שלב 7: תוכנית בקרה אלחוטית ויישום אנדרואיד
דרך נוספת, אנו יכולים להשתמש באפליקציית Android לשליטה ב- RGB LED עם אנדרואיד ברשת WiFi. קישור אפליקציית אנדרואיד: אפליקציית LED RGB LED NODEMCU
לתוכנית Arduino, אתה יכול להתייחס ל:
microcontrollerkits.blogspot.com/2016/05/es…
לאחר העלאת התוכנית ל- NodeMCU, ההרצה הראשונה תיתן לנו את כתובת ה- IP של NodeMCU בהדפסה טורית. במקרה שלי, הוא: 192.164.1.39 ביציאה 80.
כעת, אנו יכולים לשלוט במנורה אלחוטית עם מחשב נייד/ טאבלט/ טלפון נייד על ידי הזנת כתובת למעלה ב- Internet Explorer.
או באמצעות אפליקציית Android: