INHOUDSOPGAWE:

Kleurveranderende naglig met Ardruino 101: 4 stappe (met foto's)
Kleurveranderende naglig met Ardruino 101: 4 stappe (met foto's)

Video: Kleurveranderende naglig met Ardruino 101: 4 stappe (met foto's)

Video: Kleurveranderende naglig met Ardruino 101: 4 stappe (met foto's)
Video: Octopus changes color and texture - Eilat 2024, November
Anonim
Image
Image
Kleurveranderende naglig met Ardruino 101
Kleurveranderende naglig met Ardruino 101

In hierdie projek maak u 'n naglamp met ardruino, Adafruit neo rgb Strips en 'n 3D -drukker.

Let daarop dat hierdie onveranderlike uitsluitlik vir my skoolprojek is. Die kode vir hierdie projek is gebaseer op 'n ander projek. Met dit gesê, is ek nie 'n kenner wat Ardruino betref nie.

Stap 1: Vereistes

Vereistes
Vereistes
Vereistes
Vereistes
Vereistes
Vereistes

Vir hierdie projek benodig u die volgende hardeware en gereedskap

Hardeware:

1 - 'n Ardruino101 (in die VSA) of 'n Genuino101 (vir buite die VSA).

2 - NeoPixel rgb led strips van adafruit (5 volt).

3 - 'n Ardruino usb -aansluiting (tipe B tot A -aansluiting).

4 - 'n Sagteware van Ardruino, Ardruino IDE In hierdie tutoriaal gebruik ons die 1.8.5 -weergawe. Sagteware -biblioteekvereistes is: 101, Adafruit NeoPixel en Madgwick.

5 -En 'n voorwerp om u hardeware te huisves. In hierdie geval gebruik ek 'n 3D -drukker. Die lêer vir hierdie 3D -druk is geleë in die beskrywings genaamd "Lampkop". Let daarop dat hierdie lêerformaat nie gereed is vir 3D -druk nie. Afhangende van u 3D -drukkers, moet u vooraf die aangewese 3D -druksagteware op die 3D -voorwerp gebruik. Soms word die skaal van die 3D -druk herstel. maak dus seker dat die deursnee op 11 cm by 11 cm is.

6 - Basiese soldeerstel.

Stap 2: Verstaan die hardeware en sagteware

Ardruin/Genuino101

Net om te verduidelik dat Ardruino101 en genuino101 presies dieselfde is as die name. Albei het dieselfde spesifikasies en gebruik dieselfde sagteware.

Ardruino101 beskik oor die basiese spesifikasies soos die ardruino UNO en meer. Die belangrikste kenmerk van ardruino101 is die versnellingsmeter en die gyroscoop wat ons in ons projek gaan gebruik. Hierdie tipe ardruino het ook sy unieke kodebiblioteek genaamd CurrieIMU (interne meeteenhede) wat ingesluit is in die biblioteekuitbreiding 101.

Met dit gesê, kan ons praat oor die sagteware.

Sagteware en biblioteke

Ardruino IDE gebruik python as die hoofbronkode. dit is ook die hoofkode platvorm waar die meeste ardruino werk. Daar is baie tutoriale aanlyn oor hoe om hierdie sagteware te gebruik, dus ek beveel u aan om dit eers te ondersoek as u nuut is in hierdie program.

Met dit gesê, is die biblioteke wat ons gebruik die volgende:

Vanuit die Skets -kieslys,> Sluit biblioteek in> Bestuur biblioteke … Tik in die teksinvoerboks

- 101 By die begin word die ardruino 101 nie outomaties by die ardruino IDE ingesluit nie. Ons benodig hierdie biblioteekuitbreiding om ons ardruino -tipe te kodeer.

-Adafruit NeoPixel om ons Neo -pixelstroke te kodeer.

-Madgwick Om die rou data te lees en om hierdie data te bereken na raw, pitch and roll.

Nee RGB -stroke

Die tipe wat ek wil gebruik, is 'n 5 -spanning of 5v -tipe. Met hierdie 5v het ek nie 'n uitgebreide kragbron nodig om my strokies te beheer nie. In plaas daarvan gebruik ek my ardruino as die kragbron om die stroke te beheer en te verlig.

Hier is 'n paar wenke wat u moet weet voordat u met hierdie stroke begin.

Eerstens benodig u 'n Neodigital RGB LED -strook van adafruit. Hierdie soort stroke kan met kodes bestuur word. U moet weet dat daar 'n agterkant en 'n voorkant op hierdie stroke is. Hierdie agterkant en voorkant is belangrik vir die soldeer. Maak seker dat u die voorkant soldeer waar die pyltjie van die punt af wys.

Hier is 'n gids oor hoe u dit kan gebruik.

U moet drie soldeerpunte in gedagte hou Aardaansluiting (GND), spanningsaansluiting (V) en penaansluiting (DIN).

Stap 3: Die opstel van die komponente

Die opstel van die komponente
Die opstel van die komponente
Die opstel van die komponente
Die opstel van die komponente
Die opstel van die komponente
Die opstel van die komponente

Eerstens moet u die komponent wat u in die vereistes kan vind, 3d -druk. In hierdie geval gebruik ek PLA. Maak seker dat die deursnee van die voorwerp 11 cm x 11 cm is. Dit verseker dat die ardruino en die stroke in die winkel pas. Let daarop dat elke 3D -drukker verskillende sagteware gebruik om die drukproses te bereken. Met dit gesê, kan die lêer wat u gebruik, sterk afgeskaal word, so hou dit in gedagte.

Tweede keer na die druk, maak seker dat die komponente kan sluit. Die 3D -afdrukke vorm saam 'n bol. Hulle moet mooi pas. As die komponent verloor, plak dan 'n bietjie band aan die binnekant sodat die dop gevul word. En as dit te dik is, gebruik skuurpapier.

In die derde plek is die skematichs vir die ardruino en die stroke redelik maklik. U gebruik drie drade om die stroke aan die ardruino te koppel. Let daarop dat die enigste plekke waar ek soldeer op die stroke is. nie op die Ardruino self nie.

GND gaan na GND

DIN gaan na 'n speld (in ons geval pin6 op die ardruino)

5V gaan na 5V

Maak seker dat die hoeveelheid ledstroke wat u gebruik 'n maksimum van 30 het, en dan sal die kode nie behoorlik uitgevoer kan word nie. U kan eenvoudig die ongesnyde stroke sny met 'n skêrbord.

Vierde Evrything moet mooi in die sfeer pas. U sou kon dink dat ek 'n kruising tussen 1 van die 3D -druk gemaak het om die trog te sien en 'n seepbak -plastiek bo -op te plaas.

Stap 4: Kodering

U behoort dus al die nodige komponente in u biblioteek te hê.

Hier is die kode wat u benodig om die projek te kan uitvoer. Die resultaat moet lyk soos die videokoppel wat ek op hierdie bladsy stuur.

Die bron van hierdie kode kan hier gevind word. Hierdie projek bevat ook die nodige stappe om die kode en algaritme agter die gebruike beter te verstaan.

#include #include #include #include

#definieer PIN 6 // 11 pixels NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #definieer NUMPIXELS 30 // Aantal píxels #definieer SAMPLE_RATE 25 // Monstertempo vir versnellingsmeter en gyroscoop

// Madgwick -opset

Madgwick filter; ongetekende lang mikroblaaiePerLees, mikrosVoorheen; float accelScale, gyroScale;

// NeoPixel -opset

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

// Kleur spasies

RGBConverter rgbConverter; dubbel h = 1; dubbel s = 1; dubbel v = 1; greep rgb [3];

// Status bewegingslamp

// Staat 0 -> Kies kleur -toonhoogte // toestand 1 -> kies versadiging -rol // toestand 2 -> kies waarde -gaaf // toestand 3 -> Los kleurvlugtige int statusLamp = 0 op;

ongeldige opstelling () {

Serial.begin (9600);

// begin die IMU en filter

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

// Stel die versnellingsmeterbereik op 2G

CurieIMU.setAccelerometerRange (2); // Stel die gyroscoopreeks op 250 grade/sekonde 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.onderbrekings (CURIE_IMU_TAP);

// inisieer veranderlikes om opdaterings te pas om die koers korrek te maak

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

// Eerste NeoPixel 11

pixels.begin (); pixels.show ();

// Eerste NeoPixel 1

pixelsStatus.begin (); pixels.show ();

// Wys status in px

setStatusPixel (statusLamp); }

leemte -lus () {

int aix, aiy, aiz; // versnellingsmeter int gix, giy, giz; vlotbyl, ay, az; float gx, gy, gz; float roll, pitch, yaw; statiese ongetekende lang mikro`s Nou;

// kyk of dit tyd is om data te lees en die filter op te dateer

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

// lees rou data van CurieIMU

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

// skakel van rou data na gravitasie en grade/sekonde eenhede om

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

// werk die filter op, wat die oriëntasie bereken

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

// druk die opskrif, trek en rol

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

// verhoog die vorige keer, sodat ons die regte pas hou

microsPrevious = microsPrevious + microsPerReading;

// Slegs as die kleur, versadiging of waarde verander word

if (statusLamp kies Hue if (toonhoogte> = -90 && toonhoogte <= 90 && statusLamp == 0) {// Transformeer hoekhoogte = toonhoogte + 90; // Verkry kleurkoördinate vanuit hoeke h = toonhoogte / 180,0;}

// Hoeke beperkings

// rol slegs -90º tot 90º = 180º // Staat 1 -> kies Versadiging as (rol> = -90 && rol <= 90 && statusLamp == 1) {// Transformeer hoekrol = rol + 90; // Verkry kleurkoordinate vanuit hoeke s = rol / 180.0; }

// Noem 2 -> kies Waarde

as (statusLamp == 2) {// yaw 0º tot 360º v = yaw / 360.0; }

// Skakel om na rgb

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Kleur:"); Reeks.afdruk (h); Serial.print (" -"); Reeks.afdruk (ke); Serial.print (" -"); Reeks.afdruk (v); Serial.println ("");

Serial.print ("Oriëntasie:");

Reeks.afdruk (yaw); Serial.print (""); Reeks.afdruk (toonhoogte); Serial.print (""); Serial.println (rol); */

// Verander die kleur van die pixels

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

// Wys status in px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// aangesien ons 2G reeks gebruik // -2g kaarte tot 'n rou waarde van -32768 // +2g kaarte tot 'n rou waarde van 32767

dryf a = (aRaw * 2.0) / 32768.0;

gee terug a; }

float convertRawGyro (int gRaw) {

// aangesien ons 250 grade/sekondes reeks gebruik // -250 kaarte tot 'n rou waarde van -32768 // +250 kaarte tot 'n rou waarde van 32767

float g = (gRaw * 250.0) / 32768.0;

terugkeer g; }

static void eventCallback ()

{// Ontdek kraan in alle as as (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Tik opgespoor statusLamp:"); Serial.println (statusLamp);

// Verander toestand

statusLamp ++;

// Oorspronklike toestand

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

void setStatusPixel (int statusPx)

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

}

}

Aanbeveel: