Spisu treści:
- Autor John Day [email protected].
- Public 2024-01-30 11:31.
- Ostatnio zmodyfikowany 2025-06-01 06:10.
Ten projekt został wykonany z rozbitej lampy i nodeMCU. Tę dekoracyjną lampę można regulować w dowolnym kierunku i przymocować na materiałach magnetycznych lub postawić na stole. Można nim sterować w dwóch następujących trybach:
- Tryb sterowania bezprzewodowego, jak link do YouTube poniżej:
- Interaktywny tryb sterowania, jak link YouTube poniżej:
Krok 1: ZESTAWIENIE MATERIAŁÓW
Lista BOM:
W trybie interaktywnym używam MPU6050, aby uzyskać dane żyroskopowe z NodeMCU w celu kontrolowania koloru lampy.
Zdjęcie materiałów do tego projektu:
Krok 2: OBWÓD
Jest to bardzo prosty układ, jak na schemacie Fritzinga powyżej, ze wspólną anodą 1 RGB Led, trzema rezystorami ograniczającymi prąd R100 i MPU6050.
Odbłyśnik jest używany z wszelkich zepsutych lamp i podłączony do bazy nodeMCU za pomocą 2 śrub lub przyklej je mocnym klejem.
Roboty instalacyjne:
Schemat poniżej:
Krok 3: PODSTAWA MAGNETYCZNA - ELASTYCZNE RAMIĘ
Elastyczne ramię można ponownie wykorzystać z uszkodzonych elastycznych kranów. Coś w tym stylu:
Z kilkoma wskazówkami próbujemy połączyć je z podstawą magnesu trwałego na dole elastycznego ramienia. Na górze wykonaliśmy otwór do podłączenia do naszej płytki drukowanej i ładowarki słonecznej/akumulatorowej. Dzięki tej podstawie możemy umieścić lampę na powierzchni, takiej jak stół, podłoga….; lub może być przymocowany do materiałów magnetycznych, takich jak stalowy słupek, stalowa konstrukcja.
Krok 4: SOLAR - ŁADOWARKA AKUMULATORA
Pochodził z uszkodzonej lampy ładującej. Dodałem włącznik/wyłącznik i zasilanie przewodów zasilających do nodeMCU. Posiada również jedno gniazdo portu USB i jedną wtyczkę do ładowarki baterii.
Krok 5: POŁĄCZ WSZYSTKO RAZEM
Łączenie wszystkich części: NodeMCU i reflektor, ogniwa słoneczne i akumulatorowe, elastyczne ramię razem.
KONIEC
TRYB ŁADOWANIA
Krok 6: INTERAKTYWNY PROGRAM STEROWANIA
Kolor zmieni się, gdy dopasujemy elastyczne ramię lub obrócimy lampę.
INTERAKTYWNA LAMPA
| #włączać |
| // Adres urządzenia podrzędnego MPU6050 |
| const uint8_t MPU6050SlaveAddress = 0x68; |
| // Wybierz piny SDA i SCL do komunikacji I2C - Domyślny pin w WIRE LIBRARY: SCL - D1 & SDA - D2 na NODEMCU |
| // const uint8_t SCL = D1; |
| // const uint8_t SDA = D2; |
| const int R = 14; |
| const int G = 12; |
| const int B = 13; |
| // MPU6050 kilka adresów rejestru konfiguracji |
| 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, Temperatura, GyroX, GyroY, GyroZ; |
| pusta konfiguracja () { |
| pinMode(R, WYJŚCIE); |
| pinMode(G, WYJŚCIE); |
| pinMode(B, WYJŚCIE); |
| //Serial.begin(9600); |
| Wire.początek(SDA, SCL); |
| MPU6050_Init(); |
| } |
| pusta pętla () { |
| uint16_t Ax, Ay, Az, T, Gx, Gy, Gz; |
| uint16_t Czerwony, Zielony, Niebieski; |
| Read_RawValue (MPU6050SlaveAddress, MPU6050_REGISTER_ACCEL_XOUT_H); |
| // Weź wartość bezwzględną |
| Topór = mój Abs(AccelX); |
| Ay = mój Abs(Przyspieszenie); |
| Az = mój Abs(PrzyspieszenieZ); |
| // Skaluj w zakresie |
| Czerwony = mapa(Ax, 0, 16384, 0, 1023); |
| Zielony = mapa(Ay, 0, 16384, 0, 1023); |
| Niebieski = mapa(Az, 0, 16384, 0, 1023); |
| // Wydruk seryjny do sprawdzenia |
| //Serial.print("Czerwony:"); Serial.print(czerwony); |
| //Serial.print("Zielony: "); Serial.print (zielony); |
| //Serial.print("Niebieski: "); Serial.print (niebieski); |
| // Napisz analog do LED |
| analogZapis(R, czerwony); // R |
| analogZapis(G, zielony); // G |
| analogowyZapis(B, Niebieski); // B |
| opóźnienie(200); |
| } |
| void I2C_Write(uint8_t deviceAddress, uint8_t regAddress, uint8_t data){ |
| Wire.beginTransmission(adres urządzenia); |
| Wire.write(regAddress); |
| Drut.zapis(dane); |
| Wire.endTransmission(); |
| } |
| // Odczytaj wszystkie 14 rejestrów |
| void Read_RawValue(uint8_t deviceAddress, uint8_t regAddress){ |
| Wire.beginTransmission(adres urządzenia); |
| Wire.write(regAddress); |
| Wire.endTransmission(); |
| Wire.requestFrom(adres urządzenia, (uint8_t)14); |
| AccelX = (((int16_t)Przewód.odczyt()<<8) | Przew.odczyt()); |
| AccelY = (((int16_t)Przewód.odczyt()<<8) | Przew.odczyt()); |
| AccelZ = (((int16_t)Przewód.odczyt()<<8) | Przew.odczyt()); |
| Temperatura = (((int16_t)Przewód.odczyt()<<8) | Przew.odczyt()); |
| GyroX = (((int16_t)Przewód.odczyt()<<8) | Przew..odczyt()); |
| Żyroskop = (((int16_t)Przewód.odczyt()<<8) | Przew..odczyt()); |
| Żyroskop = (((int16_t)Przewód.odczyt()<<8) | Przew..odczyt()); |
| } |
| // Konfiguracja MPU6050 |
| nieważne MPU6050_Init(){ |
| opóźnienie(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);//ustaw +/-250 stopni/sekundę pełnej skali |
| I2C_Write(MPU6050SlaveAddress, MPU6050_REGISTER_ACCEL_CONFIG, 0x00);// ustaw +/- 2g pełna skala |
| 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); |
| } |
| // Całkowita wartość |
| float myAbs(float in){ |
| zwróć (w)>0?(w):-(w); |
| } |
zobacz rawPROGRAM LAMP INTERAKTYWNYCH hostowany przez ❤ by GitHub
Krok 7: BEZPRZEWODOWY PROGRAM STEROWANIA I APLIKACJA NA ANDROID
Innym sposobem możemy wykorzystać aplikację na Androida do sterowania LED RGB za pomocą Androida w sieci WiFi. Połącz aplikację na Androida: sterowanie NODEMCU aplikacja LED RGB
W przypadku programu Arduino możesz odwołać się do:
microcontrollerkits.blogspot.com/2016/05/es…
Po wgraniu programu do NodeMCU, pierwsze uruchomienie da nam adres IP NodeMCU na wydruku szeregowym. W moim przypadku jest to: 192.164.1.39 na porcie 80.
Teraz możemy sterować lampą bezprzewodową za pomocą laptopa/tabletu/telefonu komórkowego wpisując powyższy adres do przeglądarki internetowej.
Lub za pomocą aplikacji na Androida:
Krok 8: NIEKTÓRE ZDJĘCIA
Zalecana:
Łatwa bezprzewodowa lampa z kostką Rubika zmieniająca kolor w oparciu o pochylenie: 10 kroków (ze zdjęciami)
Bezprzewodowa lampa kostka Rubika z łatwą zmianą kolorów w oparciu o pochylenie: Dzisiaj zbudujemy tę niesamowitą lampę w kształcie kostki Rubika, która zmienia kolor w zależności od tego, która strona jest uniesiona. Kostka działa na małej baterii LiPo, ładowanej standardowym kablem micro-usb, a w moich testach ma żywotność baterii kilka dni. Ten
RAMIĘ ROBOTYCZNE Xbox 360 [ARDUINO]: RAMIĘ AXIOM: 4 kroki
RAMIĘ ROBOTYCZNE Xbox 360 [ARDUINO]: RAMIĘ AXIOM:
JAK ZŁOŻYĆ IMPONUJĄCE DREWNIANE RAMIĘ ROBOTA (CZĘŚĆ 3: RAMIĘ ROBOTA) -- W OPARCIU O MIKRO: WĘDZIK: 8 kroków
JAK ZŁOŻYĆ IMPONUJĄCE DREWNIANE RAMIĘ ROBOTA (CZĘŚĆ 3: RAMIĘ ROBOTA) -- W OPARCIU O MIKRO: BITN: Kolejny proces instalacji opiera się na zakończeniu trybu omijania przeszkód. Proces instalacji w poprzedniej sekcji jest taki sam, jak proces instalacji w trybie śledzenia linii. Następnie spójrzmy na ostateczną formę A
Bezprzewodowa ładowarka solarna: 5 kroków (ze zdjęciami)
Bezprzewodowa ładowarka słoneczna: Każdy uczeń zna trudności związane ze znalezieniem gniazdka do ładowania telefonu. Ta codzienna walka zmotywowała nas do znalezienia kreatywnego rozwiązania. Chcieliśmy stworzyć urządzenie ładujące, które w żadnych okolicznościach nie wymagało gniazdka, a także miało
Gra w Ponga na elastycznym ekranie na koszuli: 8 kroków (ze zdjęciami)
Pong Playing Flexible Screen on a Shirt: To jest mój kostium na Halloween na rok 2013. Prace nad nim trwały około roku, a jego stworzenie zajęło sporo godzin. Ekran ma 14 na 15 pikseli, więc dość niska rozdzielczość, ale wciąż może robić fajne rzeczy. To fizycznie ucieka
