İçindekiler:

Ardruino 101 Kullanarak Renk Değiştiren Gece Lambası: 4 Adım (Resimlerle)
Ardruino 101 Kullanarak Renk Değiştiren Gece Lambası: 4 Adım (Resimlerle)

Video: Ardruino 101 Kullanarak Renk Değiştiren Gece Lambası: 4 Adım (Resimlerle)

Video: Ardruino 101 Kullanarak Renk Değiştiren Gece Lambası: 4 Adım (Resimlerle)
Video: RENKLİ AY GECE LAMBASI YAPTIK (Povodu Rgb Kontrol Kartı Projesi) 2024, Kasım
Anonim
Image
Image
Ardruino 101 Kullanarak Renk Değiştiren Gece Lambası
Ardruino 101 Kullanarak Renk Değiştiren Gece Lambası

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

Gereksinimler
Gereksinimler
Gereksinimler
Gereksinimler
Gereksinimler
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

Bileşenleri Ayarlama
Bileşenleri Ayarlama
Bileşenleri Ayarlama
Bileşenleri Ayarlama
Bileşenleri Ayarlama
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: