Përmbajtje:

Ndryshimi i ngjyrës së dritës së natës duke përdorur Ardruino 101: 4 hapa (me fotografi)
Ndryshimi i ngjyrës së dritës së natës duke përdorur Ardruino 101: 4 hapa (me fotografi)

Video: Ndryshimi i ngjyrës së dritës së natës duke përdorur Ardruino 101: 4 hapa (me fotografi)

Video: Ndryshimi i ngjyrës së dritës së natës duke përdorur Ardruino 101: 4 hapa (me fotografi)
Video: Si të ndihmosh partneren të arrijë orgazmën 2024, Nëntor
Anonim
Image
Image
Ndryshimi i ngjyrës së dritës së natës duke përdorur Ardruino 101
Ndryshimi i ngjyrës së dritës së natës duke përdorur Ardruino 101

Në këtë projekt ju do të bëni një llambë nate duke përdorur ardruino, Adafruit neo rgb Strips dhe një printer 3D.

Vini re se kjo e pakuptueshme është thjesht për projektin tim shkollor. Kodi për këtë projekt bazohet në një projekt tjetër. Me atë që tha unë nuk jam ekspert kur bëhet fjalë për Ardruino.

Hapi 1: Kërkesat

Kërkesat
Kërkesat
Kërkesat
Kërkesat
Kërkesat
Kërkesat

Për këtë projekt ju do të keni nevojë për pajisjet dhe mjetet e mëposhtme

Hardware:

1 - Një ardruino101 (në SHBA) ose një Genuino101 (për jashtë SHBA).

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

3 - Një lidhës ardruino usb (lidhësi i tipit B në A).

4 - Një softuer nga Ardruino, Ardruino IDE Në këtë tutorial ne do të përdorim versionin 1.8.5. Kërkesat për bibliotekën e softuerit janë: 101, Adafruit NeoPixel dhe Madgwick.

5 -Dhe një objekt për të vendosur pajisjet tuaja. Në këtë rast unë do të përdor një printer 3D. Skedari për këtë printim 3D gjendet në përshkrimet e quajtura "Koka e llambës". Vini re se ky format skedari nuk është gati për printim 3D. Në varësi të printerëve tuaj 3D, së pari duhet të ekzekutoni paraprakisht programin e caktuar të printimit 3D në objektin 3D. Ndonjëherë shkalla e printimit 3D do të rivendoset. prandaj sigurohuni që diametri të jetë vendosur në 11 cm me 11 cm.

6 - Kompleti bazë i saldimit.

Hapi 2: Kuptimi i Harduerit dhe Softuerit

Ardruin/Genuino101

Vetëm për të sqaruar Ardruino101 dhe genuino101 janë jashtëzakonisht të njëjta pranë emrave. Të dy kanë të njëjtat specifikime dhe përdorin të njëjtin softuer.

Ardruino101 posedon specifikimet themelore si ardruino UNO dhe më shumë. Karakteristika kryesore e ardruino101 është përshpejtuesi dhe xhiroskopi që ne do të përdorim në projektin tonë. Gjithashtu ky lloj ardruino ka bibliotekën e tij unike të kodit të quajtur CurrieIMU (Njësitë e brendshme të matjes) e cila përfshihet në zgjerimin e bibliotekës 101.

Me atë që tha, le të flasim për softuerin.

Software dhe biblioteka

Ardruino IDE përdor python si kodin e tij kryesor burimor. është gjithashtu kodi kryesor platvorm ku shkon shumica e ardruino. Ka shumë mësime në internet se si ta përdorni këtë softuer, kështu që unë ju rekomandoj që t'i hulumtoni së pari nëse jeni i ri në këtë program.

Me këtë tha se bibliotekat që ne po përdorim janë këto:

Nga menyja Sketch,> Përfshi Bibliotekën> Menaxhoni Bibliotekat … Në kutinë e futjes së tekstit shkruani

- 101 Në standard ardruino 101 nuk përfshihet automatikisht në ardruino IDE. Ne kemi nevojë për këtë shtesë të bibliotekës në mënyrë që të kodojmë llojin tonë ardruino.

-Adafruit NeoPixel për të koduar shiritat tanë të pixel Neo.

-Madgwick Për të lexuar të dhënat e papërpunuara dhe për të llogaritur këto të dhëna në papërpunim, katran dhe rrotull.

Shirita neo RGB

Lloji që do të përdor është një lloj 5 tension ose 5v. Me këtë 5v nuk kam nevojë për një burim energjie të zgjatur për të kontrolluar shiritat e mi. Në vend të kësaj unë do të përdor ardruino -n time si burim energjie për të kontrolluar dhe ndezur shiritat.

Këtu janë disa këshilla që duhet të dini para se të filloni me këto shirita.

Së pari ju do të keni nevojë për shirita Neodigital RGB të udhëhequr nga adafruit. Ky lloj shiritash mund të bashkëproblehet duke përdorur kode. Tjetra që duhet të dini është se ka një të pasme dhe një anë të përparme në këto shirita. Kjo e pasme dhe e përparme është e rëndësishme për bashkimin. Sigurohuni që të lidhni pjesën e përparme ku çelësi i shigjetës është drejtuar nga maja.

Këtu është një udhëzues se si t'i përdorni ato.

Ekzistojnë 3 pika lidhëse që duhet të keni parasysh lidhjen e tokëzimit (GND), lidhjen e tensionit (V) dhe lidhjen e kunjit (DIN).

Hapi 3: Vendosja e Komponentëve

Vendosja e Komponentëve
Vendosja e Komponentëve
Vendosja e Komponentëve
Vendosja e Komponentëve
Vendosja e Komponentëve
Vendosja e Komponentëve

Së pari ju duhet të printoni në mënyrë 3D përbërësin që mund të gjeni në kërkesat. Në këtë rast unë do të përdor PLA. Sigurohuni që diametri i objektit të përgjithshëm të jetë 11cm me 11cm. Kjo do të sigurojë që ardruino dhe shiritat të përshtaten në shpere. Vini re se çdo printer 3D përdor programe të ndryshme për të llogaritur procesin e printimit. Me këtë tha se skedari që përdorni mund të shkallëzohet ndryshe, kështu që mbani në mend.

Së dyti pas printimit sigurohuni që përbërësit të jenë në gjendje të mbyllen. Printimet 3D së bashku përbëjnë një sferë. Ata duhet të përshtaten bukur. Nëse komponenti do të humbasë, atëherë vendosni një shirit në anën e brendshme, në mënyrë që kapaku të mbushet. Dhe nëse është e trashë përdorni letër zmerile.

Së treti skematichs për ardruino dhe shiritat janë mjaft të lehtë. Ju do të përdorni 3 tela për të lidhur shiritat me ardruino. Vini re se vendet e vetme që bashkoj janë në shirita. jo në vetë Ardruino.

GND shkon në GND

DIN shkon në një kunj (në rastin tonë pin6 në ardruino)

5V shkon në 5V

Sigurohuni që sasia e shiritave led që përdorni është kapak në 30. Tashmë atëherë dhe nuk do të arrijë të ekzekutojë siç duhet kodin. Ju thjesht mund të shkurtoni çdo shirit të pangopur të shfaqur me një shenjë gërshërë.

Së katërti Çdo gjë duhet të përshtatet mirë në sferë. Ju mund të dëshironi që unë të bëj një kryqëzim midis 1 të printimit 3d në mënyrë që të shihni luginën dhe të vendosni një plastikë të parë në krye.

Hapi 4: Kodimi

Pra, tani ju duhet të keni të gjithë përbërësit e nevojshëm në bibliotekën tuaj.

Këtu është kodi që ju nevojitet për të drejtuar projektin. Rezultati duhet të duket si lidhja e videos që dërgoj në këtë faqe.

Burimi i këtij kodi mund të gjendet këtu. Ky projekt përfshin gjithashtu hapat jo të thjeshtë për të kuptuar më mirë kodin dhe algaritmën që qëndron pas përdorimeve.

#përfshi #përfshi #përfshi #përfshi

#përcaktoni PIN 6 // 11 piksela NeoPixel Strip

#përcakto PIN1 7 // 1 piksel NeoPixel Strip #përcakto NUMPIXELS 30 // Numri i pikselave #përcakto SAMPLE_RATE 25 // Shkalla e marrjes së mostrave për përshpejtues dhe xhiroskop

// Konfigurimi i Madgwick

Filtri Madgwick; mikro i gjatë i panënshkruarPerR leximi, mikrosparaprak; noton accelScale, gyroScale;

// Konfigurimi NeoPixel

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

// Hapësira me ngjyra

RGBConverter rgbConverter; dyshe h = 1; dyshe s = 1; dyshe v = 1; byte rgb [3];

// Llamba e Lëvizjes së Statusit

// Gjendja 0 -> Zgjidhni Ngjyrën -Katran // Gjendja 1 -> Zgjidhni Ngopjen -Rrotulloni // Gjendja 2 -> Zgjidhni Vlera -Yaw // Gjendja 3 -> Rregulloni ngjyrën e paqëndrueshme int statusLamp = 0;

void setup () {

Serial.filloj (9600);

// filloni IMU dhe filtroni

CurieIMU.filloj (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filtër.filloj (SAMPLE_RATE);

// Vendosni diapazonin e përshpejtuesit në 2G

CurieIMU.setAccelerometerRange (2); // Vendosni gamën e xhiroskopit në 250 gradë/sekondë 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.ndërpret (CURIE_IMU_TAP);

// filloni variablat për të përshpejtuar azhurnimet në normën e saktë

microsPerReading = 1000000 / SAMPLE_RATE; microsPrecious = mikros ();

// Init NeoPixel 11

piksele.filloj (); piksele.shfaq ();

// Init NeoPixel 1

pixelsStatus.begin (); piksele.shfaq ();

// Shfaq statusin në px

setStatusPixel (statusLamp); }

lak void () {

int aix, aiy, aiz; // akcelerometër int gix, giy, giz; noton sëpatë, ay, az; noton gx, gy, gz; rrotull notash, katran, yaw; mikro të gjatë statike të panënshkruaraTani;

// kontrolloni nëse është koha për të lexuar të dhëna dhe azhurnuar filtrin

microsNow = micros (); nëse (microsNow - microsPrevious> = microsPerReading) {

// lexoni të dhëna të papërpunuara nga CurieIMU

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

// konvertohet nga të dhënat e papërpunuara në gravitet dhe gradë/njësi të dyta

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

// përditësoni filtrin, i cili llogarit orientimin

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

// printoni titullin, katranin dhe rrotullimin

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

// rritje herën e mëparshme, kështu që ne mbajmë ritmin e duhur

microsPrevious = microsPrevious + microsPerReading;

// Vetëm nëse ndryshoni Ngjyra, Ngopja ose Vlera

if (statusLamp zgjidhni Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transformoni këndin e katranit = katran + 90; // Merr kordine të ngjyrave nga këndet h = pitch / 180.0;}

// Kufizimet e këndeve

// rrotulloni vetëm -90º në 90º = 180º // Gjendja 1 -> zgjidhni Ngopjen nëse (rrotull> = -90 && rrotull <= 90 && statusLamp == 1) {// Transformoni këndin rrotull = rrotull + 90; // Merr kordina ngjyrash nga këndet s = roll / 180.0; }

// Gjendja 2 -> zgjidhni Vlera

nëse (statusLamp == 2) {// yaw 0º në 360º v = yaw / 360.0; }

// Shndërrohuni në rgb

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

Serial.print ("Orientimi:");

Serial.print (yaw); Serial.print (""); Serial.print (katran); Serial.print (""); Serial.println (roll); */

// Ndryshoni ngjyrën e pikselave

për (int px = 0; px <NUMPIXELS; px ++) {pixels.setPixelColor (px, pixels. Color (rgb [0], rgb [1], rgb [2])); piksele.shfaq (); }}

// Shfaq statusin në px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// meqenëse ne po përdorim gamën 2G // -2g harta në një vlerë të papërpunuar prej -32768 // +2g harta në një vlerë të papërpunuar prej 32767

noton a = (aRaw * 2.0) / 32768.0;

kthej a; }

float convertRawGyro (int gRaw) {

// pasi ne po përdorim diapazonin 250 gradë/sekonda // -250 harta në një vlerë të papërpunuar prej -32768 // +250 harta në një vlerë të papërpunuar prej 32767

noton g = (gRaw * 250.0) / 32768.0;

kthehu g; }

ngjarje statike e zbrazëtisëCallback ()

{// Zbuloni prekjen në të gjithë boshtin nëse (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Prekni statusLamp të zbuluar:"); Serial.println (statusLamp);

// Ndrysho gjendjen

statusLamp ++;

// Gjendja fillestare

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

void setStatusPixel (int statusPx)

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

}

}

Recommended: