İçindekiler:
Video: Potansiyometreli Sonsuz Ayna Saati: 3 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Sonsuzluk aynasına rastladım ve gerçekten harika olduğunu gördüm. Bu bana bir sonsuzluk aynası yapmak için ilham verdi ama bir amacım olması gerekiyordu. Bu yüzden, çalışan bir sonsuzluk aynalı saat yapmaya karar verdim. Bu, potansiyometre kullanarak modları, hızı ve renkleri değiştirmenize izin veren bir sonsuzluk aynasıdır. (Not: İlk defa böyle bir şey yapıyorum)
Gereçler
Bu şeyi yapmak için neye ihtiyacınız olduğuna bakalım!
İhtiyacın olacak…
1) 1 Arduino Uno
3) 1 Ekmek Tahtası
4) 1 Sürgülü Anahtar
5) 3 Potansiyometre
6) 1 9V pil
7) 5 metre WS2811 LED Şerit
8) Jumper Kablo Telleri
9) Bir Saat (12 inç Büyük Modern Saat kullandığım Saat)
10) Esnek Ayna Levhası (Ayna Levha kullandığım)
11) Gizlilik Filmi (Tek Yönlü Ayna kullandığım)
12) Lehimleme gerekli olabilir, bu, sahip olduğunuz malzemelere bağlıdır.
Adım 1: Kablolama
Kablolama oldukça basit
- SPST Anahtarı LED'leri açar ve kapatır (A0)
- Sol potansiyometre ışığı kontrol eder (A1)
- Orta potansiyometre, modları kontrol eder (A2)
- Sağ potansiyometre hızı kontrol eder (A3)
2. Adım: Kod
#Dahil etmek
#define PIN 6
#define NUM_LEDS 54
#define A0 A0
#define A1 A1
#define A2 A2
#define A3 A3
// Parametre 1 = şeritteki piksel sayısı
// Parametre 2 = pin numarası (çoğu geçerlidir)
// Parametre 3 = piksel tipi bayraklar, gerektiği gibi ekleyin:
// NEO_KHZ800 800 KHz bit akışı (çoğu NeoPixel ürünü, WS2812 LED'li)
// NEO_KHZ400 400 KHz (klasik 'v1' (v2 değil) FLORA pikselleri, WS2811 sürücüleri)
// NEO_GRB Pikselleri, GRB bit akışı için kablolanmıştır (çoğu NeoPixel ürünü)
// NEO_RGB Pikseller RGB bit akışı için kablolanmıştır (v2 değil v1 FLORA pikselleri)
Adafruit_NeoPixel şeridi = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
geçersiz kurulum() {
strip.begin();
şerit.göster(); // Tüm pikselleri 'kapalı' olarak başlat
}
boşluk döngüsü () {
if(analogRead(A0)>=512){
if(analogRead(A2)>=768){
if(analogRead(A3)>=768){
gökkuşağıCycle(80, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}else if(analogRead(A3)>=512){
gökkuşağıCycle(60, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}else if(analogRead(A3)>=256){
gökkuşağıCycle(40, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}
Başka{
gökkuşağıCycle(20, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}
} else if(analogRead(A2)>=512){
if(analogRead(A1)>=768){
CylonBounce(rastgele(255), rastgele(255), rastgele(255), 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}else if(analogRead(A1)>=512){
CylonBounce(rastgele(255), 0, 0, 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}else if(analogRead(A1)>=256){
CylonBounce(0, rastgele(255), 0, 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}
Başka{
CylonBounce(0, 0, rastgele(255), 4, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}
}else if(analogRead(A2)>=256){
if(analogRead(A1)>=768){
bayt r, g, b;
r = rastgele(255);
g = rastgele(255);
b = rastgele(255);
meteorRain(r, g, b, 10, 20, true, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}else if(analogRead(A1)>=512){
bayt r, g, b;
r = rastgele(255);
g = 0;
b = 0;
meteorRain(r, g, b, 10, 20, true, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}else if(analogRead(A1)>=256){
bayt r, g, b;
r = 0;
g = rastgele(255);
b = 0;
meteorRain(r, g, b, 10, 20, true, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}
Başka{
bayt r, g, b;
r = 0;
g = 0;
b = rastgele(255);
meteorRain(r, g, b, 10, 20, true, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}
}
else{ if(analogRead(A1)>=768){
RunningLights(random(255), rastgele(255), rastgele(255), analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}else if(analogRead(A1)>=512){
RunningLights(rastgele(255), 1, 1, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}else if(analogRead(A1)>=256){
RunningLights(1, rastgele(255), 1, analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}
Başka{
RunningLights(1, 1, rastgele(255), analogRead(A0), analogRead(A1), analogRead(A2), analogRead(A3));
}
}
}Başka{
setAll(0, 0, 0);
}
}
void gökkuşağıCycle(int SpeedDelay, int eskiA0, int eskiA1, int eskiA2, int eskiA3) {
bayt *c;
uint16_t ben, j;
for(j=0; j<256*5; j++) { // çarkta tüm renklerden 5 döngü
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
for(i=0; i< NUM_LEDS; i++) {
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
c=Çark(((i * 256 / NUM_LEDS) + j) & 255);
setPixel(i, *c, *(c+1), *(c+2));
}
showStrip();
gecikme (Hız Gecikmesi);
}
}
bayt * Tekerlek(bayt WheelPos) {
statik bayt c[3];
if(WheelPos < 85) {
c[0]=WheelPos * 3;
c[1]=255 - WheelPos * 3;
c[2]=0;
} else if(WheelPos < 170) {
TekerlekPos -= 85;
c[0]=255 - WheelPos * 3;
c[1]=0;
c[2]=WheelPos * 3;
} Başka {
TekerlekPos -= 170;
c[0]=0;
c[1]=WheelPos * 3;
c[2]=255 - WheelPos * 3;
}
dönüş c;
}
void CylonBounce(byte red, byte green, byte blue, int EyeSize, int eskiA0, int eskiA1, int eskiA2, int eskiA3){
int SpeedDelay;
int ReturnDelay;
if(analogRead(A3)>=768){SpeedDelay=80;ReturnDelay=120;}
else if(analogRead(A3)>=512){SpeedDelay=60;ReturnDelay=100;}
else if(analogRead(A3)>=256){SpeedDelay=40;ReturnDelay=80;}
else{SpeedDelay=20;ReturnDelay=60;}
for(int i = 0; i < NUM_LEDS-EyeSize-2; i++) {
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
setAll(0, 0, 0);
setPixel(i, kırmızı/10, yeşil/10, mavi/10);
for(int j = 1; j <= EyeSize; j++) {
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
setPixel(i+j, kırmızı, yeşil, mavi);
}
setPixel(i+EyeSize+1, kırmızı/10, yeşil/10, mavi/10);
showStrip();
gecikme (Hız Gecikmesi);
}
gecikme (Dönüş Gecikmesi);
for(int i = NUM_LEDS-EyeSize-2; i > 0; i--) {
setAll(0, 0, 0);
setPixel(i, kırmızı/10, yeşil/10, mavi/10);
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
for(int j = 1; j <= EyeSize; j++) {
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
setPixel(i+j, kırmızı, yeşil, mavi);
}
setPixel(i+EyeSize+1, kırmızı/10, yeşil/10, mavi/10);
showStrip();
gecikme (Hız Gecikmesi);
}
gecikme (DönüşGecikmesi);
}
void RunningLights(byte red, byte green, byte blue, int oldA0, int oldA1, int oldA2, int oldA3) {
int Konum=0;
int WaveDelay;
if(analogRead(A3)>=768){WaveDelay=80;}
else if(analogRead(A3)>=512){WaveDelay=60;}
else if(analogRead(A3)>=256){WaveDelay=40;}
başka{WaveDelay=20;}
for(int j=0; j
{
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
Pozisyon++; // = 0; //Konum + Oran;
for(int i=0; ben
// sinüs dalgası, 3 ofset dalga gökkuşağı yapar!
//float level = sin(i+Position) * 127 + 128;
//setPixel(i, seviye, 0, 0);
//yüzer seviye = sin(i+Konum) * 127 + 128;
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
setPixel(i, ((günah(i+Konum) * 127 + 128)/255)*kırmızı, ((sin(i+Konum) * 127 + 128)/255)*yeşil, ((sin(i+Konum) * 127 + 128)/255)*mavi);
}
showStrip();
gecikme (Dalga Gecikmesi);
}
}
void meteorRain(byte red, byte green, byte blue, 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;}
else if(analogRead(A3)>=512){SpeedDelay=60;}
else if(analogRead(A3)>=256){SpeedDelay=40;}
başka{SpeedDelay=20;}
for(int i = 0; i < NUM_LEDS+NUM_LEDS; i++) {
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
// tüm LED'ler bir adımda parlaklığı azaltır
for(int j=0; j
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
if((!meteorRandomDecay) || (rastgele(10)>5)) {
fadeToBlack(j, meteorTrailDecay);
}
}
// meteor çiz
for(int j = 0; j < meteorSize; j++) {
if(oldA0!=analogRead(A0)||((oldA1-256)>analogRead(A1))||((oldA1+256)analogRead(A2))||((oldA2+256)analogRead(A3))| |((eskiA3+256)
kırmak;
}
if((i-j =0)) {
setPixel(i-j, kırmızı, yeşil, mavi);
}
}
showStrip();
gecikme (Hız Gecikmesi);
}
}
void fadeToBlack(int ledNo, byte fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPiksel
uint32_t eskiRenk;
uint8_t r, g, b;
int değeri;
oldColor = strip.getPixelColor(ledNo);
r = (eskiRenk & 0x00ff0000UL) >> 16;
g = (eskiRenk & 0x0000ff00UL) >> 8;
b = (eskiRenk & 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
// HızlıLED
ledler[ledNo].fadeToBlackBy(fadeValue);
#endif
}
// *** BURAYA DEĞİŞTİR ***
geçersiz showStrip() {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPiksel
şerit.göster();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// HızlıLED
FastLED.show();
#endif
}
void setPixel(int Pixel, bayt kırmızı, bayt yeşil, bayt mavi) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPiksel
strip.setPixelColor(Pixel, strip. Color(kırmızı, yeşil, mavi));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// HızlıLED
ledler[Piksel].r = kırmızı;
ledler[Piksel].g = yeşil;
ledler[Piksel].b = mavi;
#endif
}
void setAll(bayt kırmızı, bayt yeşil, bayt mavi) {
for(int i = 0; i < NUM_LEDS; i++) {
setPixel(i, kırmızı, yeşil, mavi);
}
showStrip();
}
Adım 3: Saati Oluşturma
İçi düz bir cam saat almanızı tavsiye ederim. Esnek aynayı saatin içine uygularken saatin içindeki sayıların dışarı çıkması nedeniyle bir sorun vardı, ayna bükülüyordu ve sonsuzluk aynası efekti olmuyordu. Olabildiğince düz olması için esnek ayna tabakasına ve Gizlilik Filmine sahip olmanız gerekir. Bir saat alıyorsanız, LED'i sorunsuz bir şekilde yerleştirebildiğinizden emin olun.
Adım 1: Saati açın ve ön camı çıkarın
2. Adım: Gizlilik Filmini ön cama yerleştirin (Bu video size nasıl yapılacağını gösterir)
Adım 3: Esnek aynayı saatin iç tarafına uygulayın (Bunu yapmadan önce saat kollarını çıkarın)
Adım 4: Saat ibrelerinin geri yerleştirilmesi için ortada bir delik açın
Adım 5: LED şeridi saatin iç duvarlarının etrafına yerleştirin (Bu adım için sıcak tutkal tabancası kullandım)
Adım 6: Sonsuzluk aynası efektinin orada olup olmadığını görmek için LED şeridi açın ve camı saatin üstüne yerleştirin.
7. Adım: Her şey bittiğinde saati bir araya getirin ve kabloların arkaya geçmesine izin verin.
8. Adım: Tebrikler projeyi tamamladınız ve her şey yolunda gitmeli
Herhangi bir sorunuz varsa lütfen aşağıya yorum yapın (Bilin ki cevap veremeyebilirim ama elimden geleni yapacağım)
Önerilen:
Sonsuz Ayna Saati Yapın: 15 Adım (Resimlerle)
Sonsuz Ayna Saati Yapın: Önceki bir projede, nihai amacımın onu bir saate dönüştürmek olduğu bir sonsuzluk aynası yaptım. (Renkli Sonsuzluk Aynası Yap) Yaptıktan sonra bunun peşine düşmedim çünkü havalı görünse de onunla ilgili birkaç şey vardı
KOLAY Sonsuz Ayna Küpü Yapın - 3D Baskı YOK ve Programlama YOK: 15 Adım (Resimlerle)
KOLAY Sonsuz Ayna Küpü Yapın | 3D Baskı YOK ve Programlama YOK: Herkes iyi bir sonsuzluk küpünü sever, ancak bunları yapmak zor olacak gibi görünüyor. Bu Eğitilebilirlik için amacım, size adım adım nasıl yapılacağını göstermektir. Sadece bu değil, size verdiğim talimatlarla bir tane yapabileceksiniz
Sonsuz Ayna Küpü Yap: 12 Adım (Resimlerle)
Sonsuz Ayna Küpü Yapın: İlk sonsuzluk aynamı yaparken bilgi ararken, sonsuzluk küplerinin bazı görüntü ve videolarına rastladım ve kesinlikle kendimden bir tane yapmak istedim. Beni engelleyen asıl şey, bunu farklı bir şekilde yapmak istememdi
Kolay DIY Sonsuz Ayna Saati: 3 Adım
Kolay DIY Sonsuz Ayna Saati: Normal saatinizden sıkıldıysanız, bu harika DIY Sonsuz Ayna Saatini yapmayı deneyin. Odanızın seviyesini yükseltmek için
IKEA Resim Çerçevesinde Sonsuz Aynalı Duvar Saati: 4 Adım
IKEA Resim Çerçevesinde Sonsuz Aynalı Duvar Saati: Merhabalar, hep bir duvar saati yapmak istemişimdir. IKEA gibi mağazalarda çok sayıda harika duvar saati var. Bu ticari saatlerle ilgili bazı sorunlarım vardı. Benim için çok gürültülüler (sürekli tic-tac rahatsız edici), akrepleri göremiyorum