Sadržaj:

Promjena boje noćnog svjetla pomoću Ardruina 101: 4 koraka (sa slikama)
Promjena boje noćnog svjetla pomoću Ardruina 101: 4 koraka (sa slikama)

Video: Promjena boje noćnog svjetla pomoću Ardruina 101: 4 koraka (sa slikama)

Video: Promjena boje noćnog svjetla pomoću Ardruina 101: 4 koraka (sa slikama)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Studeni
Anonim
Image
Image
Noćno svjetlo mijenja boju pomoću Ardruina 101
Noćno svjetlo mijenja boju pomoću Ardruina 101

U ovom ćete projektu izrađivati noćnu svjetiljku koristeći ardruino, Adafruit neo rgb trake i 3D pisač.

Imajte na umu da je ovo uljez čisto za moj školski projekt. Kôd za ovaj projekt temelji se na drugom projektu. S tim da nisam stručnjak što se tiče Ardruina.

Korak 1: Zahtjevi

Zahtjevi
Zahtjevi
Zahtjevi
Zahtjevi
Zahtjevi
Zahtjevi

Za ovaj projekt trebat će vam sljedeći hardver i alati

Hardver:

1 - Ardruino101 (u SAD -u) ili Genuino101 (za izvan SAD -a).

2 - NeoPixel rgb LED trake od adafruit -a (5 volti).

3 - Ardruino USB priključak (konektor tipa B do A).

4 - Softver iz Ardruina, Ardruino IDE U ovom vodiču koristit ćemo verziju 1.8.5. Zahtjevi za biblioteku softvera su: 101, Adafruit NeoPixel i Madgwick.

5 -I objekt za smještaj vašeg hardvera. U ovom slučaju koristit ću 3D pisač. Datoteka za ovaj 3D ispis nalazi se u opisima pod nazivom "Lamp Head". Imajte na umu da ovaj format datoteke nije spreman za 3D ispis. Ovisno o vašim 3D pisačima, najprije morate prethodno pokrenuti određeni softver za 3D ispis na 3D objektu. Ponekad će se skala 3D ispisa poništiti. pa provjerite je li promjer postavljen na 11 cm na 11 cm.

6 - Osnovni komplet za lemljenje.

Korak 2: Razumijevanje hardvera i softvera

Ardruin/Genuino101

Samo da pojasnimo Ardruino101 i genuino101 su potpuno isti uz imena. Obje imaju iste specifikacije i koriste isti softver.

Ardruino101 posjeduje osnovne specifikacije poput ardruino UNO i više. Glavna značajka ardruino101 je akcelerometar i žiroskop koje ćemo koristiti u svom projektu. Također ova vrsta ardruina ima svoju jedinstvenu biblioteku kodova pod nazivom CurrieIMU (Interne mjerne jedinice) koja je uključena u bibliotečko proširenje 101.

Uz to, razgovarajmo o softveru.

Softver i knjižnice

Ardruino IDE koristi python kao glavni izvorni kod. to je ujedno i glavna platforma za šifriranje većine ardruina. Na internetu postoji mnogo uputstava o korištenju ovog softvera pa vam preporučujem da prvo istražite ako ste tek započeli s ovim programom.

Uz to, knjižnice koje koristimo su sljedeće:

Na izborniku Sketch> Include Library> Manage Libraries … U okvir za unos teksta upišite

- 101 Standardno, ardruino 101 nije automatski uključen u ardruino IDE. Ovo nam je proširenje knjižnice potrebno za kodiranje našeg tipa ardruino.

-Adafruit NeoPixel za kodiranje naših Neo piksela.

-Madgwick Kako biste pročitali neobrađene podatke i izračunali te podatke u sirovo, pitch and roll.

Neo RGB trake

Tip koji ću koristiti je naponski ili 5v. S ovim 5V ne treba mi prošireni izvor napajanja za kontrolu mojih traka. Umjesto toga, ja ću koristiti svoj ardruino kao izvor napajanja za kontrolu i osvjetljavanje traka.

Evo nekoliko savjeta koje morate znati prije nego počnete s ovim trakama.

Prvo će vam trebati Neodigital RGB LED trake od adafruta. Ova vrsta traka može se kontrolirati pomoću kodova. Sljedeće što trebate znati je da se na ovim trakama nalaze stražnja i prednja strana. Ova stražnja i prednja strana važna su za lemljenje. Pazite da lemite prednju stranu gdje je tipka sa strelicom okrenuta od vrha.

Evo vodiča kako ih koristiti.

Postoje tri točke lemljenja koje morate imati na umu Uzemljenje (GND), Napon (V) i Pin (DIN).

Korak 3: Postavljanje komponenti

Postavljanje komponenti
Postavljanje komponenti
Postavljanje komponenti
Postavljanje komponenti
Postavljanje komponenti
Postavljanje komponenti

Prvo ćete morati 3D ispisati komponentu koju možete pronaći u zahtjevima. U ovom slučaju koristit ću PLA. Pobrinite se da promjer općeg predmeta bude 11 x 11 cm. To će osigurati da ardruino i trake stanu u špeku. Imajte na umu da svaki 3D pisač koristi različite softvere za izračun procesa ispisa. S obzirom na to da bi se datoteka koju koristite mogla različito skalirati pa to imajte na umu.

Drugo nakon ispisa, provjerite mogu li se komponente zatvoriti. 3D ispisi zajedno čine sferu. Trebali bi se lijepo uklopiti. Ako želite izgubiti komponentu, nalijepite traku na unutarnju stranu tako da je kapa ispunjena. A ako je riječ o debelom, upotrijebite brusni papir.

Treće, skematići za ardruino i trake su prilično laki. Za spajanje traka na ardruino upotrijebit ćete 3 žice. Imajte na umu da jedino mjesto gdje lemim je na trakama. ne na samom Ardruinu.

GND ide u GND

DIN ide na pin (u našem slučaju pin6 na ardruinu)

5V ide na 5V

Provjerite je li količina LED traka koju koristite ograničena na 30. Više od toga i neće uspjeti pravilno izvršiti kôd. Možete jednostavno izrezati sve nepotrebne trake prikazane znakom škara.

Četvrto bi se sve trebalo lijepo uklopiti u sferu. Moglo bi vam se svidjeti da sam napravio raskrižje između 1 3D ispisa kako bih vidio korita i na vrh postavio plastično korito.

Korak 4: Kodiranje

Dakle, do sada biste trebali imati sve potrebne komponente u svojoj knjižnici.

Evo koda koji će vam trebati za pokretanje projekta. Rezultat bi trebao izgledati kao video veza koju šaljem na ovoj stranici.

Izvor ovog koda možete pronaći ovdje. Ovaj projekt također uključuje i manje važne korake za bolje razumijevanje koda i algarita iza upotreba.

#include #include #include #include

#define PIN 6 // NeoPixel Strip od 11 piksela

#define PIN1 7 // NeoPixel Strip od 1 piksela #define NUMPIXELS 30 // Broj piksela #define SAMPLE_RATE 25 // Brzina uzorkovanja za akcelerometar i žiroskop

// Madgwickova konfiguracija

Madgwick filter; nepotpisano dugo microsPerReading, microsPrevious; float accelScale, gyroScale;

// NeoPixel konfiguracija

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

// Prostori boja

RGBConverter rgbConverter; dvostruki h = 1; dvostruki s = 1; dvostruki v = 1; bajt rgb [3];

// Status Motion Lamp

// Stanje 0 -> Odabir nijanse -Pitch // Stanje 1 -> Odabir zasićenja -Roll // Stanje 2 -> Odabir vrijednosti -Jaw // Stanje 3 -> Ispravljanje promjenjive boje int statusLamp = 0;

void setup () {

Serial.begin (9600);

// pokretanje IMU -a i filtriranje

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

// Podesite raspon akcelerometra na 2G

CurieIMU.setAccelerometerRange (2); // Postavite raspon žiroskopa na 250 stupnjeva/sekundu 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.prekida (CURIE_IMU_TAP);

// inicijalizirati varijable za usklađivanje ažuriranja radi ispravne stope

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

// Init NeoPixel 11

pikseli.begin (); pikseli.show ();

// Pokreni NeoPixel 1

pixelsStatus.begin (); pikseli.show ();

// Prikaži status u px

setStatusPixel (statusna svjetiljka); }

void loop () {{100} {101}

int aix, aiy, aiz; // akcelerometar int gix, giy, giz; plovak sjekira, ay, az; float gx, gy, gz; float roll, pitch, yaw; statički nepotpisani dugi microsNow;

// provjeravamo je li vrijeme za čitanje podataka i ažuriranje filtra

microsNow = micros (); if (microsNow - microsPrevious> = microsPerReading) {

// čita neobrađene podatke iz CurieIMU -a

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

// pretvaranje iz sirovih podataka u gravitaciju i stupnjeve/sekundu

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

// ažuriranje filtra koji izračunava orijentaciju

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

// ispis naslova, pitch and roll

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

// povećavamo prethodni put, pa držimo pravilan tempo

microsPrevious = microsPrevious + microsPerReading;

// Samo ako promijenite Hue, Saturation ili Value

if (statusLamp odaberite Hue ako (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Pretvorite pitch angle = pitch + 90; // Dobiva kordinate boje iz kutova h = pitch / 180.0;}

// Ograničenja kutova

// samo kotrljajte -90º do 90º = 180º // Stanje 1 -> odaberite zasićenje ako (rola>> -90 && roll <= 90 && statusLamp == 1) {// Pretvorite kutni kotrljaj = roll + 90; // Dobiva kordinate boje iz kutova s = roll / 180,0; }

// Stanje 2 -> odaberite vrijednost

if (statusLamp == 2) {// zakretanje 0º do 360º v = zavijanje / 360,0; }

// Pretvori u rgb

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Boja:"); Serijski.tisak (h); Serial.print (" -"); Serijski.ispis (i); Serial.print (" -"); Serijski.ispis (v); Serial.println ("");

Serial.print ("Orijentacija:");

Serijski.tisak (zakrivljenje); Serial.print (""); Serijski.ispis (visina); Serial.print (""); Serial.println (rola); */

// Promjena boje piksela

for (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pikseli. Boja (rgb [0], rgb [1], rgb [2])); pikseli.show (); }}

// Prikaži status u px

setStatusPixel (statusna svjetiljka); }}

float convertRawAcceleration (int aRaw) {

// budući da koristimo 2G raspon // -2g karte do sirove vrijednosti -32768 // +2g karte do sirove vrijednosti 32767

float a = (aRaw * 2.0) / 32768.0;

vratiti a; }

float convertRawGyro (int gRaw) {

// budući da koristimo raspon od 250 stupnjeva/sekundi // -250 karata do neobrađene vrijednosti -32768 // +250 karata do sirove vrijednosti od 32767

plovak g = (gRaw * 250,0) / 32768,0;

povrat g; }

static void eventCallback ()

{// Otkrivanje dodira na svim osama if (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Dodirnite otkriveno statusno svjetlo:"); Serial.println (statusLamp);

// Promjena stanja

statusLamp ++;

// Init stanje

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

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelsStatus.setPixelColor (0, pixelsStatus. Color (150, 0, 0)); pixelsStatus.show (); pauza; slučaj 1: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 150, 0)); pixelsStatus.show (); pauza; slučaj 2: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 150)); pixelsStatus.show (); pauza; slučaj 3: pixelsStatus.setPixelColor (0, pixelsStatus. Color (0, 0, 0)); pixelsStatus.show (); pauza;

}

}

Preporučeni: