Indholdsfortegnelse:
![Infinity -spejlur med potentiometre: 3 trin Infinity -spejlur med potentiometre: 3 trin](https://i.howwhatproduce.com/images/005/image-14245-j.webp)
Video: Infinity -spejlur med potentiometre: 3 trin
![Video: Infinity -spejlur med potentiometre: 3 trin Video: Infinity -spejlur med potentiometre: 3 trin](https://i.ytimg.com/vi/4TSHzi94Qb0/hqdefault.jpg)
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:26
![Infinity -spejlur med potentiometre Infinity -spejlur med potentiometre](https://i.howwhatproduce.com/images/005/image-14245-1-j.webp)
Jeg stødte på uendeligt spejl, og jeg syntes, det var en virkelig sej. Dette inspirerede mig til at lave et uendeligt spejl, men jeg havde brug for det for at have et formål. Så jeg besluttede mig for at lave et fungerende uendeligt spejlur. Dette er et uendeligt spejl, der giver dig mulighed for at ændre tilstande, hastighed og farver ved hjælp af potentiometre. (Bemærk: Det er første gang jeg laver sådan noget)
Forbrugsvarer
Lad os dykke ned i, hvad du har brug for for at lave denne ting!
Du får brug for…
1) 1 Arduino Uno
3) 1 brødbræt
4) 1 skydekontakt
5) 3 Potentiometre
6) 1 9V batteri
7) 5 meter WS2811 LED Strip
8) Jumper kabeltråde
9) Et ur (uret jeg brugte 12 tommer stort moderne ur)
10) Fleksibelt spejlark (det jeg brugte spejlark)
11) Privacy Film (den jeg brugte One Way Mirror)
12) Lodning kan være påkrævet, dette afhænger af, hvilke materialer du har
Trin 1: Ledningsføring
![Ledninger Ledninger](https://i.howwhatproduce.com/images/005/image-14245-2-j.webp)
![Ledninger Ledninger](https://i.howwhatproduce.com/images/005/image-14245-3-j.webp)
Ledningerne er ganske enkle
- SPST -kontakten tænder og slukker LED'erne (A0)
- Det venstre potentiometer styrer lyset (A1)
- Det midterste potentiometer styrer tilstande (A2)
- Det højre potentiometer styrer hastigheden (A3)
Trin 2: Koden
#omfatte
#definer PIN 6
#define NUM_LEDS 54
#definer A0 A0
#definer A1 A1
#definer A2 A2
#definer A3 A3
// Parameter 1 = antal pixels i strimmel
// Parameter 2 = pin -nummer (de fleste er gyldige)
// Parameter 3 = pixeltypeflag, tilføj efter behov:
// NEO_KHZ800 800 KHz bitstream (de fleste NeoPixel -produkter m/WS2812 lysdioder)
// NEO_KHZ400 400 KHz (klassisk 'v1' (ikke v2) FLORA -pixels, WS2811 -drivere)
// NEO_GRB Pixels er tilsluttet GRB bitstream (de fleste NeoPixel -produkter)
// NEO_RGB Pixels er forbundet til RGB -bitstrøm (v1 FLORA -pixels, ikke v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
ugyldig opsætning () {
strip.begin ();
strip.show (); // Initialiser alle pixels til 'off'
}
void loop () {
hvis (analogRead (A0)> = 512) {
hvis (analogRead (A2)> = 768) {
hvis (analogRead (A3)> = 768) {
rainbowCycle (80, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} ellers hvis (analogRead (A3)> = 512) {
rainbowCycle (60, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} ellers hvis (analogRead (A3)> = 256) {
rainbowCycle (40, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
andet{
rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} ellers hvis (analogRead (A2)> = 512) {
hvis (analogRead (A1)> = 768) {
CylonBounce (random (255), random (255), random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} ellers hvis (analogRead (A1)> = 512) {
CylonBounce (tilfældig (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} ellers hvis (analogRead (A1)> = 256) {
CylonBounce (0, random (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
andet{
CylonBounce (0, 0, random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} ellers hvis (analogRead (A2)> = 256) {
hvis (analogRead (A1)> = 768) {
byte r, g, b;
r = tilfældig (255);
g = tilfældig (255);
b = tilfældig (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} ellers hvis (analogRead (A1)> = 512) {
byte r, g, b;
r = tilfældig (255);
g = 0;
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} ellers hvis (analogRead (A1)> = 256) {
byte r, g, b;
r = 0;
g = tilfældig (255);
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
andet{
byte r, g, b;
r = 0;
g = 0;
b = tilfældig (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
ellers {if (analogRead (A1)> = 768) {
RunningLights (random (255), random (255), random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} ellers hvis (analogRead (A1)> = 512) {
RunningLights (random (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} ellers hvis (analogRead (A1)> = 256) {
RunningLights (1, random (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
andet{
RunningLights (1, 1, random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
}andet{
setAll (0, 0, 0);
}
}
void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
byte *c;
uint16_t i, j;
for (j = 0; j <256*5; j ++) {// 5 cykler af alle farver på hjulet
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
for (i = 0; i <NUM_LEDS; i ++) {
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
c = Hjul (((i * 256 / NUM_LEDS) + j) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
forsinkelse (SpeedDelay);
}
}
byte * Wheel (byte WheelPos) {
statisk byte c [3];
hvis (WheelPos <85) {
c [0] = WheelPos * 3;
c [1] = 255 - WheelPos * 3;
c [2] = 0;
} ellers hvis (WheelPos <170) {
WheelPos -= 85;
c [0] = 255 - WheelPos * 3;
c [1] = 0;
c [2] = WheelPos * 3;
} andet {
WheelPos -= 170;
c [0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
returnere c;
}
void CylonBounce (byte rød, byte grøn, byte blå, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {
int SpeedDelay;
int ReturnDelay;
hvis (analogRead (A3)> = 768) {SpeedDelay = 80; ReturnDelay = 120;}
ellers hvis (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}
ellers hvis (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}
ellers {SpeedDelay = 20; ReturnDelay = 60;}
for (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
setAll (0, 0, 0);
setPixel (i, rød/10, grøn/10, blå/10);
for (int j = 1; j <= EyeSize; j ++) {
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
setPixel (i+j, rød, grøn, blå);
}
setPixel (i+EyeSize+1, rød/10, grøn/10, blå/10);
showStrip ();
forsinkelse (SpeedDelay);
}
forsinkelse (ReturnDelay);
for (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {
setAll (0, 0, 0);
setPixel (i, rød/10, grøn/10, blå/10);
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
for (int j = 1; j <= EyeSize; j ++) {
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
setPixel (i+j, rød, grøn, blå);
}
setPixel (i+EyeSize+1, rød/10, grøn/10, blå/10);
showStrip ();
forsinkelse (SpeedDelay);
}
forsinkelse (ReturnDelay);
}
void RunningLights (byte rød, byte grøn, byte blå, int oldA0, int oldA1, int oldA2, int oldA3) {
int Position = 0;
int WaveDelay;
hvis (analogRead (A3)> = 768) {WaveDelay = 80;}
ellers hvis (analogRead (A3)> = 512) {WaveDelay = 60;}
ellers hvis (analogRead (A3)> = 256) {WaveDelay = 40;}
ellers {WaveDelay = 20;}
for (int j = 0; j
{
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
Position ++; // = 0; // Position + sats;
for (int i = 0; i
// sinusbølge, 3 offsetbølger laver en regnbue!
// float level = sin (i + Position) * 127 + 128;
// setPixel (i, niveau, 0, 0);
// float level = sin (i + Position) * 127 + 128;
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
setPixel (i, ((sin (i + Position) * 127 + 128)/255) * rød, ((sin (i + Position) * 127 + 128)/255) * grøn, ((sin (i + Position) * 127 + 128)/255) * blå);
}
showStrip ();
forsinkelse (WaveDelay);
}
}
void meteorRain (byte rød, byte grøn, byte blå, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {
setAll (0, 0, 0);
int SpeedDelay;
hvis (analogRead (A3)> = 768) {SpeedDelay = 80;}
ellers hvis (analogRead (A3)> = 512) {SpeedDelay = 60;}
ellers hvis (analogRead (A3)> = 256) {SpeedDelay = 40;}
ellers {SpeedDelay = 20;}
for (int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
// fade lysstyrke alle lysdioder et trin
for (int j = 0; j
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
hvis ((! meteorRandomDecay) || (tilfældig (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// tegne meteor
for (int j = 0; j <meteorSize; j ++) {
hvis (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
pause;
}
hvis ((i-j = 0)) {
setPixel (i-j, rød, grøn, blå);
}
}
showStrip ();
forsinkelse (SpeedDelay);
}
}
void fadeToBlack (int ledNo, byte fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
uint32_t oldColor;
uint8_t r, g, b;
int værdi;
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);
#Afslut Hvis
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [ledNo].fadeToBlackBy (fadeValue);
#Afslut Hvis
}
// *** ERSTAT TIL HER ***
void showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show ();
#Afslut Hvis
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#Afslut Hvis
}
void setPixel (int Pixel, byte rød, byte grøn, byte blå) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor (Pixel, strip. Color (rød, grøn, blå));
#Afslut Hvis
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds [Pixel].r = rød;
lysdioder [Pixel].g = grøn;
lysdioder [Pixel].b = blå;
#Afslut Hvis
}
void setAll (byte rød, byte grøn, byte blå) {
for (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, rød, grøn, blå);
}
showStrip ();
}
Trin 3: Oprettelse af uret
![Oprettelse af uret Oprettelse af uret](https://i.howwhatproduce.com/images/005/image-14245-4-j.webp)
![Oprettelse af uret Oprettelse af uret](https://i.howwhatproduce.com/images/005/image-14245-5-j.webp)
![Oprettelse af uret Oprettelse af uret](https://i.howwhatproduce.com/images/005/image-14245-6-j.webp)
Jeg vil anbefale at få et glasur, der er fladt indvendigt. Da jeg påførte det fleksible spejl på indersiden af uret, var der et problem på grund af, at tallene inde i uret sprang ud, spejlet bøjede, hvilket resulterede i, at uendelig spejleffekten ikke skete. Du skal have det fleksible spejlark og Privacy Film for at være så fladt som muligt. Hvis du får et ur, skal du sørge for at placere LED'en indeni uden problemer.
Trin 1: Åbn uret, og fjern det forreste glas
Trin 2: Tag Privacy Film på frontglaset (Denne video viser dig, hvordan du gør det)
Trin 3: Påfør det fleksible spejl på indersiden af uret (Fjern urets hænder, før du gør dette)
Trin 4: Lav et hul i midten, så urets hænder kan placeres tilbage
Trin 5: Placer LED -strimlen rundt om urets indvendige vægge (jeg brugte en varm limpistol til dette trin)
Trin 6: Tænd for LED -strimlen, og anbring glasset oven på uret for at se, om uendelig spejleffekten er der
Trin 7: Når du er færdig med alt, skal du sætte uret sammen og lade ledningerne passere til bagsiden
Trin 8: Tillykke, du har gennemført projektet, og alt skal fungere fint
Hvis du har spørgsmål, bedes du kommentere dem herunder (vide, at jeg muligvis ikke kan svare, men jeg vil gøre mit bedste)
Anbefalede:
Pulserende LED ved hjælp af en 555 timer og potentiometre: 4 trin
![Pulserende LED ved hjælp af en 555 timer og potentiometre: 4 trin Pulserende LED ved hjælp af en 555 timer og potentiometre: 4 trin](https://i.howwhatproduce.com/images/005/image-13063-j.webp)
Pulserende LED ved hjælp af en 555 timer og potentiometre: Hilsen! I denne instruktive vil vi vise dig, hvordan du konstruerer et LED Dimmer kredsløb, der kører på en justerbar timet loop ved hjælp af et potentiometer, en 555 timer og andre grundlæggende kredsløbskomponenter. Vi fik først ideen til dette projekt fra
2 potentiometre og 2 servoer: kontrolleret bevægelse med Arduino: 4 trin
![2 potentiometre og 2 servoer: kontrolleret bevægelse med Arduino: 4 trin 2 potentiometre og 2 servoer: kontrolleret bevægelse med Arduino: 4 trin](https://i.howwhatproduce.com/images/006/image-16882-j.webp)
2 potentiometre og 2 servoer: kontrolleret bevægelse med Arduino: Først skal du samle relevante materialer for at sammensætte dette kredsløb
Læs ADC -værdier fra potentiometre: 4 trin
![Læs ADC -værdier fra potentiometre: 4 trin Læs ADC -værdier fra potentiometre: 4 trin](https://i.howwhatproduce.com/images/001/image-144-59-j.webp)
Læs ADC -værdier fra potentiometre: I denne artikel vil jeg vise dig, hvordan du læser ADC -værdier fra et potentiometer. Dette er grundlaget for Arduino -programmering. som læser analoge værdier ved hjælp af den analoge pin leveret af Arduino. udover at bruge potentio, er der flere sensorer, der
Infinity -spejl og bord (med afslappede værktøjer): 7 trin (med billeder)
![Infinity -spejl og bord (med afslappede værktøjer): 7 trin (med billeder) Infinity -spejl og bord (med afslappede værktøjer): 7 trin (med billeder)](https://i.howwhatproduce.com/images/002/image-5141-28-j.webp)
Infinity Mirror and Table (With Casual Tools): Hej alle sammen, For et stykke tid siden stødte jeg på dette instruerbare og blev straks taget med det og ville lave mit eget, men kunne ikke få fingrene i 1) Envejs plexiglas spejl eller 2) En CNC -router. Efter lidt søgen kom jeg på
Styring af 3 servomotorer med 3 potentiometre og en Arduino: 11 trin (med billeder)
![Styring af 3 servomotorer med 3 potentiometre og en Arduino: 11 trin (med billeder) Styring af 3 servomotorer med 3 potentiometre og en Arduino: 11 trin (med billeder)](https://i.howwhatproduce.com/images/006/image-17694-11-j.webp)
Styring af 3 servomotorer med 3 potentiometre og en Arduino: Hej der. Dette er min første instruerbare, så jeg håber, at du vil være tålmodig med mig, hvis jeg laver fejl ved opsætningen. Det er skrevet til begyndere, så de mere avancerede blandt jer kan springe meget over dette og bare komme til at koble det til. Målet satte jeg mig selv