INHOUDSOPGAWE:
2025 Outeur: John Day | [email protected]. Laas verander: 2025-01-23 12:53
Ek het die oneindige spieël raakgeloop en ek vind dit 'n wonderlike ding. Dit het my geïnspireer om 'n oneindige spieël te maak, maar ek het dit nodig gehad om 'n doel te hê. Daarom het ek besluit om 'n werkende oneindige spieëlhorlosie te maak. Dit is 'n oneindige spieël waarmee u die modi, spoed en kleure kan verander met behulp van potensiometers. (Let wel: dit is die eerste keer dat ek so iets maak)
Voorrade
Kom ons kyk na wat u nodig het om hierdie ding te maak!
Jy sal nodig hê…
1) 1 Arduino Uno
3) 1 broodbord
4) 1 Skyfskakelaar
5) 3 potensiometers
6) 1 9V battery
7) 5 meter WS2811 LED Strip
8) Kabeldraadsels
9) 'n Horlosie (die horlosie wat ek 'n groot moderne klok van 12 duim gebruik het)
10) Buigsame spieëlblad (die een wat ek spieëlblad gebruik het)
11) Privaatheidsfilm (die een wat ek One Way Mirror gebruik het)
12) Soldeer kan nodig wees, dit hang af van die materiaal wat u het
Stap 1: Bedrading
Die bedrading is redelik eenvoudig
- Die SPST -skakelaar skakel die LED's aan (A0)
- Die linker potensiometer beheer die lig (A1)
- Die middelste potensiometer beheer die modusse (A2)
- Die regte potensiometer beheer die spoed (A3)
Stap 2: Die kode
#insluit
#definieer PIN 6
#definieer NUM_LEDS 54
#definieer A0 A0
#definieer A1 A1
#definieer A2 A2
#definieer A3 A3
// Parameter 1 = aantal pixels in strook
// Parameter 2 = speldnommer (die meeste is geldig)
// Parameter 3 = pixeltipe vlae, voeg by indien nodig:
// NEO_KHZ800 800 KHz bitstroom (die meeste NeoPixel -produkte met WS2812 LED's)
// NEO_KHZ400 400 KHz (klassieke 'v1' (nie v2) FLORA -pixels, WS2811 -bestuurders)
// NEO_GRB Pixels word bedraad vir GRB -bitstroom (die meeste NeoPixel -produkte)
// NEO_RGB -pixels word bedraad vir RGB -bitstroom (v1 FLORA -pixels, nie v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
ongeldige opstelling () {
strip.begin ();
strip.show (); // Initialiseer alle pixels na 'af'
}
leemte -lus () {
if (analogRead (A0)> = 512) {
if (analogRead (A2)> = 768) {
if (analogRead (A3)> = 768) {
rainbowCycle (80, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} anders as (analogRead (A3)> = 512) {
rainbowCycle (60, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} anders as (analogRead (A3)> = 256) {
rainbowCycle (40, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
anders {
rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} anders as (analogRead (A2)> = 512) {
if (analogRead (A1)> = 768) {
CylonBounce (random (255), random (255), random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} anders as (analogRead (A1)> = 512) {
CylonBounce (random (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} anders as (analogRead (A1)> = 256) {
CylonBounce (0, random (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
anders {
CylonBounce (0, 0, random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} anders as (analogRead (A2)> = 256) {
if (analogRead (A1)> = 768) {
greep r, g, b;
r = ewekansig (255);
g = ewekansig (255);
b = ewekansig (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} anders as (analogRead (A1)> = 512) {
greep r, g, b;
r = ewekansig (255);
g = 0;
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} anders as (analogRead (A1)> = 256) {
greep r, g, b;
r = 0;
g = ewekansig (255);
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
anders {
greep r, g, b;
r = 0;
g = 0;
b = ewekansig (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
anders {if (analogRead (A1)> = 768) {
RunningLights (random (255), random (255), random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} anders as (analogRead (A1)> = 512) {
RunningLights (random (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} anders as (analogRead (A1)> = 256) {
RunningLights (1, random (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
anders {
RunningLights (1, 1, random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
} anders {
setAll (0, 0, 0);
}
}
void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
greep *c;
uint16_t i, j;
vir (j = 0; j <256*5; j ++) {// 5 siklusse van alle kleure op wiel
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
vir (i = 0; i <NUM_LEDS; i ++) {
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
c = wiel (((i * 256 / NUM_LEDS) + j) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
vertraging (SpeedDelay);
}
}
byte * wiel (byte WheelPos) {
statiese greep c [3];
as (WheelPos <85) {
c [0] = WheelPos * 3;
c [1] = 255 - WheelPos * 3;
c [2] = 0;
} anders as (WheelPos <170) {
WheelPos -= 85;
c [0] = 255 - WheelPos * 3;
c [1] = 0;
c [2] = WheelPos * 3;
} anders {
WheelPos -= 170;
c [0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
terugkeer c;
}
void CylonBounce (byte rooi, byte groen, byte blou, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {
int SpeedDelay;
int ReturnDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80; ReturnDelay = 120;}
anders as (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}
anders as (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}
anders {SpeedDelay = 20; ReturnDelay = 60;}
vir (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
setAll (0, 0, 0);
setPixel (i, rooi/10, groen/10, blou/10);
vir (int j = 1; j <= EyeSize; j ++) {
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
setPixel (i+j, rooi, groen, blou);
}
setPixel (i+EyeSize+1, rooi/10, groen/10, blou/10);
showStrip ();
vertraging (SpeedDelay);
}
vertraging (ReturnDelay);
vir (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {
setAll (0, 0, 0);
setPixel (i, rooi/10, groen/10, blou/10);
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
vir (int j = 1; j <= EyeSize; j ++) {
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
setPixel (i+j, rooi, groen, blou);
}
setPixel (i+EyeSize+1, rooi/10, groen/10, blou/10);
showStrip ();
vertraging (SpeedDelay);
}
vertraging (ReturnDelay);
}
void RunningLights (byte rooi, byte groen, byte blou, int oldA0, int oldA1, int oldA2, int oldA3) {
int Posisie = 0;
int WaveDelay;
as (analogRead (A3)> = 768) {WaveDelay = 80;}
anders as (analogRead (A3)> = 512) {WaveDelay = 60;}
anders as (analogRead (A3)> = 256) {WaveDelay = 40;}
anders {WaveDelay = 20;}
vir (int j = 0; j
{
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
Posisie ++; // = 0; // Posisie + koers;
vir (int i = 0; i
// sinusgolf, 3 offsetgolwe maak 'n reënboog!
// vlotvlak = sin (i + posisie) * 127 + 128;
// setPixel (i, vlak, 0, 0);
// vlotvlak = sin (i + posisie) * 127 + 128;
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
setPixel (i, ((sin (i + posisie) * 127 + 128)/255) * rooi, ((sin (i + posisie) * 127 + 128)/255) * groen, ((sin (i + posisie) * 127 + 128)/255) * blou);
}
showStrip ();
vertraging (WaveDelay);
}
}
void meteorRain (byte rooi, byte groen, byte blou, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {
setAll (0, 0, 0);
int SpeedDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80;}
anders as (analogRead (A3)> = 512) {SpeedDelay = 60;}
anders as (analogRead (A3)> = 256) {SpeedDelay = 40;}
anders {SpeedDelay = 20;}
vir (int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
// vervaag helderheid alle LED's een stap
vir (int j = 0; j
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
as ((! meteorRandomDecay) || (ewekansig (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// teken meteoor
vir (int j = 0; j <meteorSize; j ++) {
as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)
breek;
}
as ((i-j = 0)) {
setPixel (i-j, rooi, groen, blou);
}
}
showStrip ();
vertraging (SpeedDelay);
}
}
void fadeToBlack (int ledNo, byte fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
uint32_t oldColor;
uint8_t r, g, b;
int waarde;
oldColor = strip.getPixelColor (ledNo);
r = (oldColor & 0x00ff0000UL) >> 16;
g = (oldColor & 0x0000ff00UL) >> 8;
b = (oldColor & 0x000000ffUL);
r = (r <= 10)? 0: (int) r- (r*fadeValue/256);
g = (g <= 10)? 0: (int) g- (g*fadeValue/256);
b = (b <= 10)? 0: (int) b- (b*fadeValue/256);
strip.setPixelColor (ledNo, r, g, b);
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [ledNo].fadeToBlackBy (fadeValue);
#endif
}
// *** VERVANG HIER ***
leegte showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show ();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#endif
}
void setPixel (int Pixel, byte rooi, byte groen, byte blou) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor (Pixel, strip. Color (rooi, groen, blou));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [Pixel].r = rooi;
leds [Pixel].g = groen;
leds [Pixel].b = blou;
#endif
}
void setAll (byte rooi, byte groen, byte blou) {
vir (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, rooi, groen, blou);
}
showStrip ();
}
Stap 3: Maak die klok
Ek beveel aan dat u 'n glashorlosie aan die binnekant plat kry. Toe ek die buigsame spieël aan die binnekant van die horlosie aanbring, was daar 'n probleem as gevolg van die getalle binne -in die horlosie wat buig, die spieël buig, wat veroorsaak dat die oneindige spieël -effek nie gebeur nie. Die buigsame spieëlblad en die privaatheidsfilm moet so plat as moontlik wees. As u 'n horlosie kry, moet u seker maak dat u die LED sonder probleme kan plaas.
Stap 1: Maak die horlosie oop en verwyder die voorste glas
Stap 2: Trek die privaatheidsfilm op die voorste glas aan (hierdie video wys hoe u dit moet doen)
Stap 3: Pas die buigsame spieël aan die binnekant van die horlosie toe (verwyder die horlosies voordat u dit doen)
Stap 4: Maak 'n gaatjie in die middel sodat die horlosies weer ingeplaas kan word
Stap 5: Plaas die LED -strook om die binnekant van die horlosie (ek het 'n warm lijmpistool gebruik vir hierdie stap)
Stap 6: Skakel die LED -strook aan en plaas die glas bo -op die horlosie om te sien of die oneindige spieëleffek daar is
Stap 7: Nadat u klaar is met alles, sit die horlosie bymekaar en laat die drade na agter toe gaan
Stap 8: Geluk dat u die projek voltooi het en alles behoort goed te werk
As u enige vrae het, lewer 'n opmerking hier onder (weet dat ek moontlik nie kan reageer nie, maar ek sal my bes doen)
Aanbeveel:
Pulserende LED met behulp van 'n 555 timer en potensiometers: 4 stappe
Pulserende LED met behulp van 'n 555 -timer en potensiometers: groete! In hierdie instruksies sal ons u wys hoe u 'n LED -dimmer -stroombaan kan bou wat op 'n verstelbare tydlus loop met behulp van 'n potensiometer, 'n 555 -timer en ander basiese stroomonderdele. Ons het eers die idee vir hierdie projek gekry
2 potensiometers en 2 servo's: beheerde beweging met Arduino: 4 stappe
2 potensiometers en 2 servo's: beheerde beweging met Arduino: Eerstens moet u relevante materiaal versamel om hierdie stroombaan saam te stel
Lees ADC -waardes van potensiometers: 4 stappe
Lees ADC -waardes van potensiometers: In hierdie artikel sal ek u wys hoe u ADC -waardes vanaf 'n potensiometer kan lees. Dit is die basis van Arduino -programmering. wat analoog waardes lees met behulp van die analoog pen wat deur Arduino verskaf word. behalwe die potensio, is daar verskeie sensors wat
Beheer van 3 servomotors met 3 potensiometers en 'n Arduino: 11 stappe (met foto's)
Beheer van 3 servomotors met 3 potensiometers en 'n Arduino: Hallo daar. Dit is my eerste instruksie, so ek hoop dat u geduldig sal wees as ek foute maak met die opstel daarvan. Dit is vir beginners geskryf, sodat die meer gevorderde onder u baie hiervan kan oorslaan en dit net kan bedrieg. Die doel wat ek self gestel het
RGB Infinity -klok met eie BT -app: 15 stappe (met foto's)
RGB Infinity -klok met 'n eie BT -app: Normale digitale en analoog horlosies is vervelig; beplan dus om 'n koel horlosie met pasgemaakte kleure vir Dial, Uur, Minuut en Tweedehands te ontwikkel. Hiervoor wil u eers die klok ontwikkel met behulp van adresseerbare RGB LED -strook. Dan vir kommunikasie met A