İçindekiler:
- Adım 1: Gereksinimler
- Adım 2: Donanım ve Yazılımı Anlama
- Adım 3: Bileşenleri Ayarlama
- Adım 4: Kodlama
Video: Ardruino 101 Kullanarak Renk Değiştiren Gece Lambası: 4 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:21
Bu projede ardruino, Adafruit neo rgb Strips ve 3D yazıcı kullanarak bir gece lambası yapacaksınız.
Bu anlaşılmaz kitabın tamamen okul projem için olduğunu unutmayın. Bu projenin kodu başka bir projeden alınmıştır. Bununla birlikte, Ardruino söz konusu olduğunda uzman olmadığımı söyledi.
Adım 1: Gereksinimler
Bu proje için aşağıdaki donanım ve araçlara ihtiyacınız olacak
Donanım:
1 - Bir ardruino101 (ABD'de) veya bir Genuino101 (ABD dışında).
2 - Adafruit'ten (5 volt) NeoPixel rgb led şeritler.
3 - Bir ardruino usb konektörü (B tipi - A konektörü).
4 - Ardruino'dan bir yazılım, Ardruino IDE Bu eğitimde 1.8.5 sürümünü kullanacağız. Yazılım kitaplığı gereksinimleri şunlardır: 101, Adafruit NeoPixel ve Madgwick.
5 - Ve donanımınızı barındıracak bir nesne. Bu durumda 3D yazıcı kullanacağım. Bu 3D baskının dosyası "Lamba Başlığı" adlı açıklamalarda yer almaktadır. Bu dosya biçiminin 3B baskıya hazır olmadığını unutmayın. 3B yazıcılarınıza bağlı olarak, öncelikle 3B nesne üzerinde belirlenen 3B yazdırma yazılımını çalıştırmanız gerekir. Bazen 3D baskının ölçeği sıfırlanır. bu nedenle çapın 11 cm x 11 cm olarak ayarlandığından emin olun.
6 - Temel lehim takımı.
Adım 2: Donanım ve Yazılımı Anlama
Ardruin/Genuino101
Sadece açıklığa kavuşturmak için Ardruino101 ve genuino101 isimlerinin yanında tamamen aynıdır. Her ikisi de aynı özelliklere sahiptir ve aynı yazılımı kullanır.
Ardruino101, ardruino UNO ve daha fazlası gibi temel özelliklere sahiptir. ardruino101'in ana özelliği projemizde kullanacağımız ivmeölçer ve jiroskoptur. Ayrıca bu tür ardruino, kütüphane uzantısı 101'de bulunan CurrieIMU (Dahili ölçüm Birimleri) adlı benzersiz kod kitaplığına sahiptir.
Bununla birlikte yazılım hakkında konuşalım.
Yazılım ve kütüphaneler
Ardruino IDE, ana kaynak kodu olarak python kullanır. aynı zamanda çoğu ardruino'nun çalıştığı ana kod platformudur. Bu yazılımın nasıl kullanılacağına dair çevrimiçi birçok öğretici var, bu yüzden bu programda yeniyseniz, önce bunları araştırmanızı tavsiye ederim.
Bununla birlikte, kullandığımız kütüphaneler şunlardır:
Çizim menüsünden, > Kitaplığı Dahil Et > Kitaplıkları Yönet… Metin giriş kutusuna şunu yazın:
- 101 Standart olarak ardruino 101, ardruino IDE'ye otomatik olarak dahil edilmez. Arduino türümüzü kodlamak için bu kütüphane uzantısına ihtiyacımız var.
- Neo piksel şeritlerimizi kodlamak için Adafruit NeoPixel.
-Madgwick Ham verileri okumak ve bu verileri ham, zift ve rulo olarak hesaplamak için.
Neo RGB şeritler
Kullanacağım tip 5 voltaj veya 5v tipidir. Bu 5v ile şeritlerimi kontrol etmek için genişletilmiş bir güç kaynağına ihtiyacım yok. Bunun yerine, şeritleri kontrol etmek ve aydınlatmak için güç kaynağı olarak ardruino'mu kullanacağım.
İşte bu şeritlere başlamadan önce bilmeniz gereken bazı ipuçları.
Öncelikle adafruit'ten Neodigital RGB led şeritlere ihtiyacınız olacak. Bu tür şeritler, kodlar kullanılarak kontrol edilebilir. Sonra bilmeniz gereken, bu şeritlerde bir arka ve bir ön taraf var. Bu arka ve ön taraf lehimleme için önemlidir. Ok tuşunun uçtan uzağa baktığı ön tarafı lehimlediğinizden emin olun.
İşte bunları nasıl kullanacağınıza dair bir rehber.
Aklınızda bulundurmanız gereken 3 lehim noktası vardır. Toprak bağlantısı(GND), Gerilim bağlantısı(V) ve Pin bağlantısı(DIN).
Adım 3: Bileşenleri Ayarlama
Öncelikle, gereksinimlerde bulabileceğiniz bileşeni 3 boyutlu olarak yazdırmanız gerekecektir. Bu durumda PLA kullanacağım. Genel nesnenin çapının 11 cm x 11 cm olduğundan emin olun. Bu, ardruino ve şeritlerin çerçeveye sığmasını sağlayacaktır. Her 3D yazıcının, yazdırma sürecini hesaplamak için farklı yazılımlar kullandığını unutmayın. Bununla birlikte, kullandığınız dosyanın farklı şekilde ölçeklenebileceğini söyledi, bu yüzden bunu aklınızda bulundurun.
Baskıdan sonra bileşenlerin kapanabildiğinden emin olun. 3D baskılar birlikte bir küre oluşturur. Güzelce oturmalılar. Bileşen kaybolacaksa, kapağı doldurmak için iç tarafa biraz bant yapıştırın. Ve kalın olacaksa zımpara kağıdı kullanın.
Üçüncüsü, ardruino ve şeritler için skematichler oldukça kolaydır. Şeritleri ardruinoya bağlamak için 3 kablo kullanacaksınız. Lehim yaptığım tek yerin şeritler üzerinde olduğuna dikkat edin. Ardruino'nun kendisinde değil.
GND, GND'ye gidiyor
DIN bir Pin'e gider (bizim durumumuzda ardruino'daki pin6)
5V, 5V'a gidiyor
Kullandığınız led şeritlerin miktarının 30'da olduğundan emin olun. Bundan sonra, kodu düzgün bir şekilde yürütemez. Makas işareti ile gösterilen herhangi bir ihtiyaç duyulmayan şeritleri kolayca kesebilirsiniz.
Dördüncü Evrything küreye güzelce oturmalıdır. Oluğu görmek ve üstüne bir şeffaf plastik yerleştirmek için 3 boyutlu baskının 1'i arasında bir kesişme yaptığımı beğenebilirsin.
Adım 4: Kodlama
Yani şimdiye kadar kütüphanenizde ihtiyaç duyulan tüm bileşenlere sahip olmalısınız.
İşte projeyi çalıştırmak için ihtiyacınız olacak kod. Sonuç, bu sayfada gönderdiğim video bağlantısı gibi görünmelidir.
Bu kodun kaynağı burada bulunabilir. Bu proje aynı zamanda kullanımların arkasındaki kodu ve algaritmeyi daha iyi anlamak için gerekli adımları da içermektedir.
#include #include #include #include
#define PIN 6 // 11 piksel NeoPixel Strip
#define PIN1 7 // 1 piksel NeoPixel Strip #define NUMPIXELS 30 // Piksel sayısı #define SAMPLE_RATE 25 // İvmeölçer ve jiroskop için örnekleme oranı
// Madgwick yapılandırması
Madgwick filtresi; imzasız uzun microsPerReading, microsÖnceki; float accelScale, gyroScale;
// NeoPixel yapılandırması
Adafruit_NeoPixel piksel = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pikselStatus = Adafruit_NeoPixel(1, 7, NEO_GRB + NEO_KHZ800);
// Renk uzayları
RGBDönüştürücü rgbDönüştürücü; çift h = 1; çift s = 1; çift v = 1; bayt rgb[3];
// Durum Hareket Lambası
// Durum 0 -> Ton Seç - Pitch // Durum 1 -> Doygunluğu Seç - Döndür // Durum 2 -> Değer Seç - Sapma // Durum 3 -> Renk uçuculuğunu düzelt int statusLamp = 0;
geçersiz kurulum() {
Seri.başla(9600);
// IMU'yu başlat ve filtrele
CurieIMU.begin(); CurieIMU.setGyroRate(SAMPLE_RATE); CurieIMU.setAccelerometerRate(SAMPLE_RATE); filter.begin(SAMPLE_RATE);
// İvmeölçer aralığını 2G olarak ayarla
CurieIMU.setAccelerometerRange(2); // Jiroskop aralığını 250 derece/saniye olarak ayarlayın CurieIMU.setGyroRange(250);
CurieIMU.autoCalibrateAccelerometerOffset(X_AXIS, 0);
CurieIMU.autoCalibrateAccelerometerOffset(Y_AXIS, 0); CurieIMU.autoCalibrateAccelerometerOffset(Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset();
CurieIMU.attachInterrupt(eventCallback);
CurieIMU.setDetectionThreshold(CURIE_IMU_TAP, 950); CurieIMU.interrupts(CURIE_IMU_TAP);
// hızı düzeltmek için güncellemeleri hızlandırmak için değişkenleri başlat
microsPerReading = 1000000 / SAMPLE_RATE; microsÖnceki = micros();
// NeoPixel 11'i Başlat
piksel.begin(); piksel.göster();
// NeoPixel 1'i Başlat
pikselStatus.begin(); piksel.göster();
// Durumu px olarak göster
setStatusPixel(statusLamp); }
boşluk döngüsü () {
int aix, aiy, aiz; // ivmeölçer int gix, giy, giz; kayan balta, ay, az; yüzer gx, gy, gz; şamandıra rulosu, eğim, sapma; statik işaretsiz uzun microsNow;
// verileri okuma ve filtreyi güncelleme zamanının gelip gelmediğini kontrol edin
microsNow = micros(); if (microsNow - microsPrevious >= microsPerReading) {
// CurieIMU'dan ham verileri oku
CurieIMU.readMotionSensor(aix, aiy, aiz, gix, giy, giz);
// ham verileri yerçekimi ve derece/saniye birimlerine dönüştür
ax = convertRawAcceleration(aix); ay = convertRawAcceleration(aiy); az = convertRawAcceleration(aiz); gx = convertRawGyro(gix); gy = convertRawGyro(giy); gz = convertRawGyro(giz);
// oryantasyonu hesaplayan filtreyi güncelle
filter.updateIMU(gx, gy, gz, balta, ay, az);
// başlığı, adımı ve ruloyu yazdır
rulo = filtre.getRoll(); saha = filtre.getPitch(); sapma = filtre.getYaw();
// önceki zamanı artır, böylece uygun hızda kalalım
microsPrevious = microsPrevious + microsPerReading;
// Yalnızca Ton, Doygunluk veya Değer değiştirilirse
if (statusLamp Hue seçin if (pitch >= -90 && pitch <= 90 && statusLamp == 0) { // Transform açı aralığı = aralık + 90; // h = aralık / 180.0 açılarından renk koordinatlarını alır; }
// Açı kısıtlamaları
// sadece yuvarlanma -90º - 90º = 180º // Durum 1 -> Doygunluğu seçin if (yuvarlanma >= -90 && yuvarlanma <= 90 && statusLamp == 1) { // Dönüş açısı yuvarlanma = yuvarlanma + 90; // Açılardan renk koordinatlarını alır s = roll / 180.0; }
// Durum 2 -> Değeri seçin
if (statusLamp == 2) { // 0º - 360º sapma v = sapma / 360.0; }
// rgb'ye dönüştür
rgbConverter.hsvToRgb(h, s, v, rgb); /* Serial.print("Renk: "); Seri.baskı(h); Seri.print(" - "); Seri.baskı(lar); Seri.print(" - "); Seri.baskı(v); Seri.println(" ");
Serial.print("Yönlendirme: ");
Serial.print(yaw); Seri.print(" "); Seri.baskı(aralık); Seri.print(" "); Seri.println(rulo); */
// Piksellerin rengini değiştir
for (int px = 0; px < NUMPIXELS; px++) { piksel.setPixelColor(px, piksel. Color(rgb[0], rgb[1], rgb[2])); piksel.göster(); } }
// Durumu px olarak göster
setStatusPixel(statusLamp); } }
float convertRawAcceleration(int aRaw) {
// 2G aralığı kullandığımız için // -2g, -32768 ham değerine eşlenir // +2g, ham 32767 değerine eşlenir
kayan nokta a = (aRaw * 2.0) / 32768.0;
bir dönüş; }
float convertRawGyro(int gRaw) {
// 250 derece/saniye aralığı kullandığımız için // -250 harita ham değeri -32768 // +250 harita ham değeri 32767
kayan nokta g = (gRaw * 250.0) / 32768.0;
dönüş g; }
statik geçersiz eventCallback()
{ // Tüm eksenlerde musluğu algıla if (CurieIMU.getInterruptStatus(CURIE_IMU_TAP)) { Serial.print("Tap algılandı statusLamp: "); Serial.println(statusLamp);
// Durumu değiştir
durumLamp++;
// Başlangıç durumu
if (statusLamp > 3) { statusLamp = 0; } } }
geçersiz setStatusPixel(int statusPx)
{ geçiş (statusPx) { durum 0: pikselStatus.setPixelColor(0, pikselStatus. Color(150, 0, 0)); pikselStatus.show(); kırmak; durum 1: pikselStatus.setPixelColor(0, pikselStatus. Color(0, 150, 0)); pikselStatus.show(); kırmak; durum 2: pikselStatus.setPixelColor(0, pikselStatus. Color(0, 0, 150)); pikselStatus.show(); kırmak; durum 3: pikselStatus.setPixelColor(0, pikselStatus. Color(0, 0, 0)); pikselStatus.show(); kırmak;
}
}
Önerilen:
Sıcak Koltuk: Renk Değiştiren Isıtmalı Yastık Yapın: 7 Adım (Resimlerle)
Sıcak Koltuk: Renk Değiştiren Isıtmalı Yastık Yapın: Soğuk kış günlerinde kendinizi sıcak tutmak ister misiniz? Hot Seat, en heyecan verici e-tekstil olanaklarından ikisini kullanan bir projedir - renk değişimi ve ısı! Isınan bir koltuk minderi yapacağız ve kullanıma hazır olduğunda ortaya ç
Eğme Tabanlı Kolay Renk Değiştiren Kablosuz Rubik Küp Lambası: 10 Adım (Resimlerle)
Kolay Eğim Tabanlı Renk Değiştiren Kablosuz Rubik Küp Lambası: Bugün, hangi tarafın yukarıda olduğuna göre renk değiştiren bu harika Rubik Küp benzeri lambayı yapacağız. Küp, standart bir mikro-usb kablosuyla şarj edilen küçük bir LiPo pille çalışır ve testlerimde birkaç günlük pil ömrüne sahiptir. Bu
Renk Değiştirilebilir Gece Lambası: 5 Adım
Renk Değiştirilebilir Gece Lambası: Hey millet! Bir süredir üzerinde çalıştığım projemi paylaşmak istiyorum. Bu proje https://www.instructables.com/id/Interactive-Touch'dan ilham almıştır… Başlangıçta proje, A noktası ile nokta arasındaki zaman farkını ölçerek çalışır
Detaylı Parçaların Dökümü: Protez Parmaklar (Parlayan, Isıyla Renk Değiştiren ve Daha Fazlası): 10 Adım (Resimlerle)
Ayrıntılı Parçaların Dökümü: Protez Parmaklar (Parlayan, Isıyla Renk Değiştiren ve Daha Fazlası…): Bu, küçük, karmaşık parçaların ucuza dökümü hakkında bir kılavuzdur. Döküm uzmanı olmadığımı söylemeliyim, ancak gereklilik genellikle buluşun anası olduğu için - buradaki süreçlerin bazıları iyi çalıştı. Nigel Ackland ile Londra'daki Future Fest'te tanıştım ve
RGB LED Ucuz ve Kolay Renk Değiştiren Gece Lambası: 3 Adım
RGB LED Ucuz ve Kolay Renk Değiştiren Gece Lambası: Bu proje biraz oynadıktan ve çözdükten sonra oldukça kolaydı, bu biraz zaman aldı. Fikir, rengi bir anahtarla değiştirebilmek ve bir ayrıca led karartma seçenekleri. Bunlar, ihtiyacınız olacak öğelerdir