Warna Mengubah Cahaya Malam Menggunakan Ardruino 101: 4 Langkah (dengan Gambar)
Warna Mengubah Cahaya Malam Menggunakan Ardruino 101: 4 Langkah (dengan Gambar)
Anonim
Image
Image
Warna Mengubah Cahaya Malam Menggunakan Ardruino 101
Warna Mengubah Cahaya Malam Menggunakan Ardruino 101

Dalam projek ini, anda akan membuat lampu malam menggunakan ardruino, Adafruit neo rgb Strips dan pencetak 3D.

Perhatikan bahawa ini boleh dilakukan semata-mata untuk projek sekolah saya. Kod untuk projek ini berdasarkan dari projek lain. Dengan mengatakan bahawa saya bukan pakar ketika datang ke Ardruino.

Langkah 1: Keperluan

Keperluan
Keperluan
Keperluan
Keperluan
Keperluan
Keperluan

Untuk projek ini, anda memerlukan perkakasan dan alat berikut

Perkakasan:

1 - Ardruino101 (di AS) atau Genuino101 (untuk luar AS).

2 - Jalur LED NeoPixel rgb dari adafruit (5 volt).

3 - Penyambung usb ardruino (penyambung jenis B hingga A).

4 - Perisian dari Ardruino, Ardruino IDE Dalam tutorial ini kita akan menggunakan versi 1.8.5. Keperluan perpustakaan perisian adalah: 101, Adafruit NeoPixel dan Madgwick.

5 -Dan objek untuk menempatkan perkakasan anda. Dalam kes ini saya akan menggunakan pencetak 3D. Fail untuk cetakan 3D ini terdapat dalam keterangan yang disebut "Kepala Lampu". Perhatikan bahawa format fail ini belum siap dicetak 3D. Bergantung pada pencetak 3D anda, anda mesti terlebih dahulu menjalankan perisian cetak 3d yang ditentukan pada objek 3D terlebih dahulu. Kadang-kadang skala cetakan 3D akan ditetapkan semula. jadi pastikan diameternya ditetapkan 11 cm x 11 cm.

6 - Kit pematerian asas.

Langkah 2: Memahami Perkakasan dan Perisian

Ardruin / Genuino101

Hanya untuk menjelaskan Ardruino101 dan genuino101 sama persis dengan nama. Kedua-duanya mempunyai spesifikasi yang sama dan menggunakan perisian yang sama.

Ardruino101 mempunyai spesifikasi asas seperti ardruino UNO dan banyak lagi. Ciri utama ardruino101 adalah pecutan dan giroskop yang akan kami gunakan dalam projek kami. Juga jenis ardruino ini mempunyai perpustakaan kod uniknya yang disebut CurrieIMU (Unit pengukuran dalaman) yang termasuk dalam peluasan perpustakaan 101.

Dengan itu mari kita bercakap mengenai perisian.

Software dan perpustakaan

Ardruino IDE menggunakan python kerana ia adalah kod sumber utama. ia juga merupakan platvorm kod utama di mana kebanyakan ardruino berjalan. Terdapat banyak tutorial dalam talian mengenai cara menggunakan perisian ini, jadi saya mengesyorkan anda meneliti terlebih dahulu jika anda baru menggunakan program ini.

Dengan mengatakan bahawa perpustakaan yang kami gunakan adalah berikut:

Dari menu Sketsa,> Sertakan Perpustakaan> Urus Perpustakaan … Pada kotak input teks ketik

- 101 Pada mulanya ardruino 101 tidak dimasukkan secara automatik ke ardruino IDE. Kami memerlukan peluasan perpustakaan ini untuk membuat kod jenis ardruino kami.

-Adafruit NeoPixel untuk membuat kod jalur piksel Neo kami.

-Madgwick Untuk membaca data mentah dan untuk mengira data ini menjadi raw, pitch and roll.

Jalur Neo RGB

Jenis yang akan saya gunakan ialah jenis 5 voltan atau 5v. Dengan 5v ini saya tidak memerlukan sumber kuasa yang diperluaskan untuk mengawal jalur saya. Sebagai gantinya saya akan menggunakan ardruino saya sebagai sumber kuasa untuk mengawal dan menyalakan jalur.

Berikut adalah beberapa petua yang perlu anda ketahui sebelum anda memulakan cara ini.

Mula-mula anda memerlukan jalur LED RGB Neodigital dari adafruit. Jalur jenis ini dapat dikawal dengan menggunakan kod. Anda perlu tahu bahawa terdapat bahagian belakang dan bahagian depan pada jalur ini. Bahagian belakang dan depan ini penting untuk pematerian. Pastikan anda memateri bahagian depan di mana kekunci anak panah menghala ke hujung.

Berikut adalah panduan bagaimana menggunakannya.

Terdapat 3 titik solder yang perlu anda perhatikan Sambungan tanah (GND), Sambungan voltan (V) dan Sambungan Pin (DIN).

Langkah 3: Menyiapkan Komponen

Menyiapkan Komponen
Menyiapkan Komponen
Menyiapkan Komponen
Menyiapkan Komponen
Menyiapkan Komponen
Menyiapkan Komponen

Mula-mula anda perlu mencetak 3d komponen yang anda dapati dalam keperluan. Dalam kes ini, saya akan menggunakan PLA. Pastikan garis pusat objek berukuran 11cm hingga 11cm. Ini akan memastikan bahawa ardruino dan jalurnya sesuai di dalam ruang. Perhatikan bahawa setiap pencetak 3D menggunakan perisian difrent untuk mengira proses pencetakannya. Dengan mengatakan fail yang anda gunakan mungkin diskalakan sedikit demi sedikit, jadi ingatlah.

Kedua selepas cetakan pastikan komponen dapat ditutup. Cetakan 3D bersama-sama membentuk sfera. Mereka mesti sesuai dengan baik. Sekiranya komponen hilang, masukkan pita ke bahagian dalam sehingga penutupnya diisi. Dan jika hendak menggunakan kertas pasir tebal.

Ketiga skema untuk ardruino dan jalur agak mudah. Anda akan menggunakan 3 wayar untuk menghubungkan jalur ke ardruino. Perhatikan bahawa satu-satunya tempat saya solder adalah pada jalur. bukan pada Ardruino itu sendiri.

GND pergi ke GND

DIN pergi ke Pin (dalam kes kami pin6 di ardruino)

5V menuju ke 5V

Pastikan jumlah jalur dipimpin yang anda gunakan adalah had 30. Selanjutnya dan itu akan gagal melaksanakan kod dengan betul. Anda hanya boleh memotong mana-mana jalur yang tidak disalurkan dengan tanda gunting.

Evrything Keempat harus sesuai dengan bidangnya. Anda mahu saya membuat persimpangan antara 1 cetakan 3d untuk melihat palung dan meletakkan plastik palung di bahagian atas.

Langkah 4: Pengekodan

Jadi sekarang anda mesti mempunyai semua komponen yang diperlukan di perpustakaan anda.

Inilah kod yang anda perlukan untuk menjalankan projek. Hasilnya kelihatan seperti pautan video yang saya hantar di halaman ini.

Sumber kod ini boleh didapati di sini. Projek ini juga merangkumi langkah-langkah yang perlu untuk lebih memahami kod dan algaritme di sebalik penggunaannya.

#sertakan #sertakan #sertakan #sertakan

#tentukan PIN 6 // 11 piksel Jalur NeoPixel

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Bilangan piksel #define SAMPLE_RATE 25 // Kadar pensampelan untuk pecutan dan giroskop

// Konfigurasi Madgwick

Penapis Madgwick; mikroskop panjang yang tidak ditandatanganiPerReading, mikroSebelumnya; float accelScale, gyroScale;

// Konfigurasi NeoPixel

Piksel Adafruit_NeoPixel = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Piksel Adafruit_NeoPixelStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Ruang warna

RGBConverter rgbConverter; berganda h = 1; berganda s = 1; berganda v = 1; bait rgb [3];

// Lampu Gerak Status

// State 0 -> Select Hue - Pitch // State 1 -> Select Saturation - Roll // State 2 -> Select Value - Yaw // State 3 -> Perbaiki status int volatile warnaLamp = 0;

batal persediaan () {

Serial.begin (9600);

// mulakan IMU dan tapis

CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);

// Tetapkan julat pecutan ke 2G

CurieIMU.setAccelerometerRange (2); // Tetapkan julat giroskop hingga 250 darjah / kedua 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. gangguan (CURIE_IMU_TAP);

// memulakan pemboleh ubah untuk mempercepat kemas kini untuk memperbetulkan kadar

microsPerReading = 1000000 / SAMPLE_RATE; microsPre sebelumnya = mikro ();

// Init NeoPixel 11

piksel.begin (); piksel.show ();

// Init NeoPixel 1

pixelsStatus.begin (); piksel.show ();

// Tunjukkan status dalam px

setStatusPixel (statusLamp); }

gelung kosong () {

int aix, aiy, aiz; // accelerometer int gix, giy, giz; kapak apungan, ay, az; terapung gx, gy, gz; float roll, pitch, yaw; mikro panjang yang tidak ditandatangani statikSekarang;

// periksa sama ada sudah tiba masanya untuk membaca data dan mengemas kini penapis

microsNow = mikros (); if (microsNow - microsPre sebelumnya> = microsPerReading) {

// baca data mentah dari CurieIMU

CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);

// tukar dari data mentah menjadi graviti dan darjah / unit kedua

ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);

// kemas kini penapis, yang mengira orientasi

filter.updateIMU (gx, gy, gz, ax, ay, az);

// cetak tajuk, nada dan gulung

roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();

// kenaikan masa sebelumnya, jadi kami mengikuti langkah yang tepat

microsPre sebelumnya = microsPre sebelumnya + microsPerReading;

// Hanya jika menukar Warna, Ketepuan atau Nilai

if (statusLamp pilih Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transform angle pitch = pitch + 90; // Mendapatkan kordinat warna dari sudut h = pitch / 180.0;}

// Sekatan sudut

// roll sahaja -90º hingga 90º = 180º // Nyatakan 1 -> pilih Ketepuan jika (roll> = -90 && roll <= 90 && statusLamp == 1) {// Transform angle roll = roll + 90; // Mendapatkan kordinat warna dari sudut s = roll / 180.0; }

// Nyatakan 2 -> pilih Nilai

jika (statusLamp == 2) {// yaw 0º hingga 360º v = yaw / 360.0; }

// Tukar ke rgb

rgbConverter.hsvToRgb (h, s, v, rgb); / * Serial.print ("Warna:"); Cetakan bersiri (h); Cetakan bersiri ("-"); Cetakan bersiri; Cetakan bersiri ("-"); Cetakan bersiri (v); Serial.println ("");

Serial.print ("Orientasi:");

Serial.print (menguap); Cetakan bersiri (""); Cetakan bersiri (nada); Cetakan bersiri (""); Serial.println (roll); * /

// Tukar warna piksel

untuk (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2])); piksel.show (); }}

// Tunjukkan status dalam px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// kerana kami menggunakan julat 2G // -2g peta hingga nilai mentah -32768 // + peta 2g hingga nilai mentah 32767

terapung a = (aRaw * 2.0) / 32768.0;

mengembalikan a; }

float convertRawGyro (int gRaw) {

// kerana kita menggunakan jarak 250 darjah / saat // -250 peta hingga nilai mentah -32768 // +250 peta hingga nilai mentah 32767

apungan g = (gRaw * 250.0) / 32768.0;

pulangan g; }

peristiwa kekosongan statik Panggilan ()

{// Kesan ketukan di semua paksi jika (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Ketuk statusLamp yang dikesan:"); Serial.println (statusLamp);

// Tukar keadaan

statusLamp ++;

// Keadaan Init

jika (statusLamp> 3) {statusLamp = 0; }}}

batal setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); rehat; kes 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); rehat; kes 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); rehat; kes 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); rehat;

}

}

Disyorkan: