Daftar Isi:

Mengubah Warna Lampu Malam Menggunakan Ardruino 101: 4 Langkah (dengan Gambar)
Mengubah Warna Lampu Malam Menggunakan Ardruino 101: 4 Langkah (dengan Gambar)

Video: Mengubah Warna Lampu Malam Menggunakan Ardruino 101: 4 Langkah (dengan Gambar)

Video: Mengubah Warna Lampu Malam Menggunakan Ardruino 101: 4 Langkah (dengan Gambar)
Video: Arduino Traffic Light 4 Jalan Lampu Lalu Lintas Empat Arah Program Tutorial DIY @tptumetro 2024, Juli
Anonim
Image
Image
Mengubah Warna Lampu Malam Menggunakan Ardruino 101
Mengubah Warna Lampu Malam Menggunakan Ardruino 101

Dalam proyek ini Anda akan membuat lampu malam menggunakan ardruino, Adafruit neo rgb Strips dan printer 3D.

Perhatikan bahwa instruksi ini murni untuk proyek sekolah saya. Kode untuk proyek ini didasarkan dari proyek lain. Dengan itu saya bukan ahli dalam hal Ardruino.

Langkah 1: Persyaratan

Persyaratan
Persyaratan
Persyaratan
Persyaratan
Persyaratan
Persyaratan

Untuk proyek ini, Anda akan memerlukan perangkat keras dan alat berikut:

Perangkat keras:

1 - Sebuah ardruino101 (di AS) atau Genuino101 (untuk di luar AS).

2 - Strip led rgb NeoPixel dari adafruit (5 volt).

3 - Konektor usb ardruino (konektor tipe B ke A).

4 - Software dari Ardruino, Ardruino IDE Dalam tutorial ini kita akan menggunakan versi 1.8.5. Persyaratan perpustakaan perangkat lunak adalah: 101, Adafruit NeoPixel dan Madgwick.

5 -Dan objek untuk menampung perangkat keras Anda. Dalam hal ini saya akan menggunakan printer 3D. File untuk cetakan 3D ini terletak di deskripsi yang disebut "Kepala Lampu". Perhatikan bahwa format file ini belum siap cetak 3D. Tergantung pada printer 3D Anda, Anda harus terlebih dahulu menjalankan perangkat lunak cetak 3d yang ditentukan pada objek 3D terlebih dahulu. Terkadang skala cetakan 3D akan diatur ulang. jadi pastikan diameter diatur ke 11 cm kali 11 cm.

6 - Kit penyolderan dasar.

Langkah 2: Memahami Perangkat Keras dan Perangkat Lunak

Ardruin/Genuino101

Sekedar mengklarifikasi Ardruino101 dan genuino101 sama persis di samping namanya. Keduanya memiliki spesifikasi yang sama dan menggunakan software yang sama.

Ardruino101 memiliki spesifikasi dasar seperti ardruino UNO dan banyak lagi. Fitur utama ardruino101 adalah akselerometer dan giroskop yang akan kami gunakan dalam proyek kami. Juga jenis ardruino ini memiliki pustaka kode unik yang disebut CurrieIMU (Unit Pengukuran Internal) yang termasuk dalam ekstensi pustaka 101.

Dengan itu mari kita bicara tentang perangkat lunak.

Perangkat lunak dan perpustakaan

Ardruino IDE menggunakan python sebagai kode sumber utamanya. itu juga platform kode utama di mana sebagian besar ardruino berjalan. Ada banyak tutorial online tentang cara menggunakan perangkat lunak ini, jadi saya sarankan Anda menelitinya terlebih dahulu jika Anda baru mengenal program ini.

Dengan itu perpustakaan yang kami gunakan adalah sebagai berikut:

Dari menu Sketsa, > Sertakan Perpustakaan > Kelola Perpustakaan… Di kotak input teks ketik

- 101 Pada standar, ardruino 101 tidak otomatis disertakan ke dalam IDE ardruino. Kami membutuhkan ekstensi perpustakaan ini untuk mengkodekan tipe ardruino kami.

-Adafruit NeoPixel untuk mengkodekan strip piksel Neo kami.

-Madgwick Untuk membaca data mentah dan menghitung data ini menjadi mentah, pitch and roll.

Strip Neo RGB

Tipe yang akan saya gunakan adalah tipe 5 voltase atau 5v. Dengan 5v ini saya tidak memerlukan sumber daya tambahan untuk mengontrol strip saya. Sebaliknya saya akan menggunakan ardruino saya sebagai sumber daya untuk mengontrol dan menyalakan strip.

Berikut adalah beberapa tips yang perlu Anda ketahui sebelum memulai strip ini.

Pertama, Anda memerlukan strip LED Neodigital RGB dari adafruit. Jenis strip ini dapat dikontrol menggunakan kode. Selanjutnya yang perlu Anda ketahui adalah bahwa ada bagian belakang dan bagian depan pada strip ini. Bagian belakang dan depan ini penting untuk penyolderan. Pastikan Anda menyolder sisi depan tempat tombol panah mengarah menjauh dari ujungnya.

Berikut adalah panduan tentang cara menggunakannya.

Ada 3 titik solder yang perlu Anda ingat Koneksi ground (GND), koneksi Tegangan (V) dan koneksi Pin (DIN).

Langkah 3: Menyiapkan Komponen

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

Pertama, Anda perlu mencetak 3d komponen yang dapat Anda temukan di persyaratan. Dalam hal ini saya akan menggunakan PLA. Pastikan diameter objek keseluruhan adalah 11cm kali 11cm. Ini akan memastikan bahwa ardruino dan strip akan pas di shpere. Perhatikan bahwa setiap printer 3D menggunakan perangkat lunak yang berbeda untuk menghitung proses pencetakannya. Dengan demikian, file yang Anda gunakan mungkin diskalakan secara berbeda, jadi ingatlah itu.

Kedua setelah print pastikan komponen sudah bisa close. Cetakan 3D bersama-sama membentuk bola. Mereka harus cocok dengan baik. Jika komponennya hilang maka tempelkan selotip di bagian dalam sehingga tutupnya terisi. Dan jika ingin tebal gunakan amplas.

Ketiga skema untuk ardruino dan stripnya cukup mudah. Anda akan menggunakan 3 kabel untuk menghubungkan strip ke ardruino. Perhatikan bahwa satu-satunya tempat saya menyolder adalah pada strip. bukan pada Ardruino itu sendiri.

GND pergi ke GND

DIN masuk ke Pin (dalam kasus kami pin6 di ardruino)

5V menjadi 5V

Pastikan jumlah strip led yang Anda gunakan adalah 30. Lebih dari itu dan itu akan gagal mengeksekusi kode dengan benar. Anda cukup memotong strip yang tidak diperlukan yang ditampilkan dengan tanda gunting.

Keempat Semuanya harus pas dengan baik di dalam bola. Anda bisa seperti saya membuat persimpangan antara 1 dari cetakan 3d untuk melihat palung dan menempatkan plastik tembus pandang di atas.

Langkah 4: Pengkodean

Jadi sekarang Anda harus memiliki semua komponen yang dibutuhkan di perpustakaan Anda.

Berikut adalah kode yang Anda perlukan untuk menjalankan proyek. Hasilnya akan terlihat seperti tautan video yang saya kirim di halaman ini.

Sumber kode ini dapat ditemukan di sini. Proyek ini juga mencakup langkah-langkah yang diperlukan untuk lebih memahami kode dan algoritma di balik penggunaannya.

#sertakan #sertakan #sertakan #sertakan

#define PIN 6 // 11 piksel NeoPixel Strip

#define PIN1 7 // 1 piksel NeoPixel Strip #define NUMPIXELS 30 // Jumlah piksel #define SAMPLE_RATE 25 // Laju pengambilan sampel untuk akselerometer dan giroskop

// konfigurasi Madgwick

Filter Madgwick; microsPerReading panjang yang tidak ditandatangani, microsSebelumnya; float accelScale, gyroScale;

// konfigurasi NeoPixel

Adafruit_NeoPixel piksel = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelsStatus = Adafruit_NeoPixel(1, 7, NEO_GRB + NEO_KHZ800);

// Ruang warna

RGBKonverter rgbKonverter; ganda h = 1; ganda s = 1; ganda v = 1; byte rgb[3];

// Lampu Gerakan Status

// State 0 -> Pilih Hue - Pitch // State 1 -> Pilih Saturation - Roll // State 2 -> Pilih Value - Yaw // State 3 -> Fix color volatile int statusLamp = 0;

batalkan pengaturan() {

Serial.begin(9600);

// mulai IMU dan filter

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

// Setel rentang akselerometer ke 2G

CurieIMU.setAccelerometerRange(2); // Atur rentang giroskop ke 250 derajat/detik 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);

// inisialisasi variabel untuk mempercepat pembaruan ke tingkat yang benar

microsPerReading = 1000000 / SAMPLE_RATE; microsSebelumnya = micros();

// Init NeoPixel 11

piksel.mulai(); piksel.tampilkan();

// Inisi NeoPixel 1

pikselStatus.begin(); piksel.tampilkan();

// Tampilkan status dalam px

setStatusPixel(statusLamp); }

lingkaran kosong() {

int aix, ai, aiz; //akselerometer int gix, giy, giz; kapak mengambang, ay, az; mengambang gx, gy, gz; float roll, pitch, yaw; mikro lama yang tidak ditandatangani statisSekarang;

// periksa apakah sudah waktunya untuk membaca data dan memperbarui filter

mikroSekarang = mikro(); if (microsNow - microsPrevious >= microsPerReading) {

// membaca data mentah dari CurieIMU

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

// konversi dari data mentah ke unit gravitasi dan derajat/detik

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

// perbarui filter, yang menghitung orientasi

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

// cetak heading, pitch and roll

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

// menambah waktu sebelumnya, jadi kami menjaga kecepatan yang tepat

microsPrevious = microsPrevious + microsPerReading;

// Hanya jika mengubah Hue, Saturation atau Value

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

// Pembatasan sudut

// roll only -90º to 90º = 180º // State 1 -> pilih Saturation if (roll >= -90 && roll <= 90 && statusLamp == 1) { // Transform angle roll = roll + 90; // Memperoleh koordinat warna dari sudut s = roll / 180.0; }

// Status 2 -> pilih Nilai

if (statusLamp == 2) { // yaw 0º hingga 360º v = yaw / 360,0; }

// Konversikan ke rgb

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

Serial.print("Orientasi: ");

Serial.print(yaw); Serial.print(""); Serial.print(pitch); Serial.print(""); Serial.println(gulungan); */

// Ubah warna piksel

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

// Tampilkan status dalam px

setStatusPixel(statusLamp); } }

float convertRawAcceleration(int aRaw) {

// karena kami menggunakan rentang 2G // -2g memetakan ke nilai mentah -32768 // +2g memetakan ke nilai mentah 32767

float a = (aRaw * 2.0) / 32768.0;

kembalikan; }

float convertRawGyro(int gRaw) {

// karena kita menggunakan rentang 250 derajat/detik // -250 memetakan ke nilai mentah -32768 // +250 memetakan ke nilai mentah 32767

float g = (gRaw * 250.0) / 32768.0;

kembali g; }

static void eventCallback()

{ // Deteksi tap di semua sumbu if (CurieIMU.getInterruptStatus(CURIE_IMU_TAP)) { Serial.print("Tap terdeteksi statusLamp: "); Serial.println(statusLamp);

// Ubah status

statusLamp++;

// Inisiasi status

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

batalkan setStatusPixel(int statusPx)

{ switch (statusPx) { case 0: pixelsStatus.setPixelColor(0, pixelsStatus. Color(150, 0, 0)); pikselStatus.show(); merusak; kasus 1: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 150, 0)); pikselStatus.show(); merusak; case 2: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 0, 150)); pikselStatus.show(); merusak; case 3: pixelsStatus.setPixelColor(0, pixelsStatus. Color(0, 0, 0)); pikselStatus.show(); merusak;

}

}

Direkomendasikan: