Talaan ng mga Nilalaman:

Pagbabago ng Kulay ng Night Light Gamit ang Ardruino 101: 4 Hakbang (na may Mga Larawan)
Pagbabago ng Kulay ng Night Light Gamit ang Ardruino 101: 4 Hakbang (na may Mga Larawan)

Video: Pagbabago ng Kulay ng Night Light Gamit ang Ardruino 101: 4 Hakbang (na may Mga Larawan)

Video: Pagbabago ng Kulay ng Night Light Gamit ang Ardruino 101: 4 Hakbang (na may Mga Larawan)
Video: Веб-программирование – информатика для руководителей бизнеса 2016 2024, Nobyembre
Anonim
Image
Image
Ang Pagbabago ng Kulay ng Night Light Gamit ang Ardruino 101
Ang Pagbabago ng Kulay ng Night Light Gamit ang Ardruino 101

Sa proyektong ito, gagawa ka ng isang lampara sa gabi gamit ang ardruino, Adafruit neo rgb Strips at isang 3D printer.

Tandaan na ang hindi maipapasok ay puro para sa proyekto ng aking paaralan. Ang code para sa proyektong ito ay batay sa ibang proyekto. Sa sinabi kong hindi ako dalubhasa pagdating kay Ardruino.

Hakbang 1: Mga Kinakailangan

Mga Kinakailangan
Mga Kinakailangan
Mga Kinakailangan
Mga Kinakailangan
Mga Kinakailangan
Mga Kinakailangan

Para sa proyektong ito kakailanganin mo ang sumusunod na hardware at mga tool

Hardware:

1 - Isang ardruino101 (sa US) o isang Genuino101 (para sa labas ng US).

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

3 - Isang ardruino usb konektor (i-type ang B sa Isang konektor).

4 - Isang software mula sa Ardruino, Ardruino IDE Sa tutorial na ito gagamitin namin ang 1.8.5 na bersyon. Ang mga kinakailangan sa library ng software ay: 101, Adafruit NeoPixel at Madgwick.

5 -At isang bagay na mailalagay ang iyong hardware. Sa kasong ito ay gumagamit ako ng isang 3D printer. Ang file para sa 3D print na ito ay matatagpuan sa mga paglalarawan na tinatawag na "Lamp Head". Tandaan na ang format ng file na ito ay hindi handa sa 3D print. Nakasalalay sa iyong mga 3D printer dapat mo munang patakbuhin ang itinalagang 3d print software sa 3D na object muna. Minsan ang laki ng naka-print na 3D ay i-reset. kaya siguraduhin na ang diameter ay nakatakda sa 11 cm ng 11 cm.

6 - Pangunahing soldering kit.

Hakbang 2: Pag-unawa sa Hardware at Software

Ardruin / Genuino101

Linawin lamang ang Ardruino101 at genuino101 ay exacly pareho sa tabi ng mga pangalan. Parehong may parehong pagtutukoy at gumagamit ng parehong software.

Ang Ardruino101 ay nagtataglay ng mga pangunahing panoorin tulad ng ardruino UNO at marami pa. Ang pangunahing tampok ng ardruino101 ay ang accelerometer at gyroscope na gagamitin namin sa aming proyekto. Gayundin ang ganitong uri ng ardruino ay mayroong natatanging library ng code na tinatawag na CurrieIMU (Panloob na Mga Yunit ng pagsukat) na kasama sa extension ng library 101.

Sa nasabing sinabi ay pinag-uusapan ang tungkol sa software.

Larware at aklatan

Ang Ardruino IDE ay gumagamit ng python dahil pangunahing source code ito. ito rin ang pangunahing code ng platvorm kung saan tumatakbo ang karamihan sa ardruino. Mayroong maraming mga tutorial sa online kung paano gamitin ang software na ito kaya inirerekumenda ko sa iyo na saliksikin ang mga iyon kung bago ka sa programe na ito.

Sinabi na ang mga ginagamit naming aklatan ay ang mga sumusunod:

Mula sa menu ng Sketch,> Isama ang Library> Pamahalaan ang Mga Aklatan … Sa uri ng kahon ng input ng teksto sa

- 101 Sa standart ang ardruino 101 ay hindi awtomatikong kasama sa ardruino IDE. Kailangan namin ang extension ng library na ito upang mai-code ang aming uri ng ardruino.

-Adafruit NeoPixel upang mai-code ang aming Neo pixel strips.

-Madgwick Upang mabasa ang hilaw na data at upang makalkula ang data na ito sa raw, pitch at roll.

Neo RGB strips

Ang uri na gagamitin ko ay isang 5 boltahe o 5v na uri. Sa 5v na ito hindi ko kailangan ng isang pinahabang mapagkukunan ng kuryente upang makontrol ang aking mga piraso. Sa halip ay gagamitin ko ang aking ardruino bilang mapagkukunan ng kuryente upang makontrol at magaan ang mga piraso.

Narito ang ilang mga tip na kailangan mong malaman bago ka magsimula sa mga strip na ito.

Una kailangan mo ng isang Neodigital RGB na humantong mga piraso mula sa adafruit. Ang ganitong uri ng mga piraso ay maaaring gamitin sa paggamit ng mga code. Susunod na kailangan mong malaman ay na mayroong isang backside at isang frontside sa mga strips na ito. Ang likod at harapang ito ay mahalaga para sa paghihinang. Tiyaking solder mo ang front side kung saan ang arrow key ay tumuturo ang layo mula sa tip.

Narito ang isang gabay sa kung paano gamitin ang mga ito.

Mayroong 3 solder point na kailangan mong tandaan Ang koneksyon sa lupa (GND), Koneksyon ng Boltahe (V) at Koneksyon ng Pin (DIN).

Hakbang 3: Pag-set up ng Mga Components

Pag-set up ng Mga Sangkap
Pag-set up ng Mga Sangkap
Pag-set up ng Mga Sangkap
Pag-set up ng Mga Sangkap
Pag-set up ng Mga Sangkap
Pag-set up ng Mga Sangkap

Una kailangan mong i-print ang 3d ng sangkap na maaari mong makita sa mga kinakailangan. Sa kasong ito, gagamitin ko ang PLA. Siguraduhin na ang diameter ng labis na bagay ay 11cm ng 11cm. Tinitiyak nito na ang ardruino at ang mga strip ay magkakasya sa shpere. Tandaan na ang bawat 3D printer ay gumagamit ng mga difrent softwares upang makalkula ang proseso ng pag-print. Sa sinabi na ang file na iyong ginagamit ay maaaring ma-scale nang difrently kaya't tandaan mo iyon.

Pangalawa pagkatapos ng pag-print siguraduhin na ang mga sangkap ay maaaring magsara. Ang 3D na mga kopya nang magkasama ay bumubuo ng isang globo. Dapat silang magkasya nang maayos. Kung ang componten ay mawawala pagkatapos ay mag-ad ng ilang mga tape sa panloob na bahagi kaya napunan ang takip. At kung ito ay makapal na paggamit ng papel de liha.

Pangatlo ang mga skematich para sa ardruino at ang mga piraso ay medyo madali. Gumagamit ka ng 3 mga wire upang ikonekta ang mga piraso sa ardruino. Tandaan na ang mga lugar lamang na ako na maghinang ay nasa mga piraso. hindi sa Ardruino mismo.

Ang GND ay pupunta sa GND

Ang DIN ay pupunta sa isang Pin (sa aming kaso pin6 sa ardruino)

Ang 5V ay pupunta sa 5V

Siguraduhin na ang halaga ng led strips na iyong ginagamit ay cap sa 30. Ano pa man pagkatapos at mabibigo itong maayos na maisagawa ang code. Maaari mo lamang i-cut ng anumang hindi kinakailangang mga piraso ng displayd na may markang gunting.

Ang ika-apat na Evrything ay dapat magkasya nang maayos sa globo. Maaari mong gawin akong gumawa ng isang intersection sa pagitan ng 1 ng 3d print upang makita ang labangan at ilagay ang isang makikita sa labangan ng plastik sa itaas.

Hakbang 4: Pag-coding

Kaya sa ngayon dapat ay mayroon ka ng lahat ng mga sangkap na kinakailangan sa iyong silid-aklatan.

Narito ang code na kakailanganin mo upang mapatakbo ang proyekto. Ang resulta ay dapat magmukhang link ng video na ipinapadala ko sa pahinang ito.

Ang mapagkukunan ng code na ito ay matatagpuan dito. Kasama rin sa proyektong ito ang mga mahihirap na hakbang upang mas maunawaan ang code at algaritme sa likod ng mga gamit.

# isama # isama # isama # isama

# tukuyin ang PIN 6 // 11 pixel na NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Bilang ng mga píxels #define SAMPLE_RATE 25 // Sampling rate para sa accelerometer at gyroscope

// Madgwick configure

Madgwick filter; unsigned mahabang microsPerReading, microsPrevious; float accelScale, gyroScale;

// NeoPixel config

Adafruit_NeoPixel pixel = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Mga puwang ng kulay

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

// Lampara ng Paggalaw ng Katayuan

// State 0 -> Select Hue - Pitch // State 1 -> Select saturation - Roll // State 2 -> Select Value - Yaw // State 3 -> Fix color pabagu-bago int statusLamp = 0;

walang bisa ang pag-setup () {

Serial.begin (9600);

// simulan ang IMU at filter

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

// Itakda ang saklaw ng accelerometer sa 2G

CurieIMU.setAccelerometerRange (2); // Itakda ang saklaw ng gyroscope sa 250 degree / segundo 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);

// ipasimula ang mga variable upang mag-bilis ng mga pag-update upang maitama ang rate

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

// Init NeoPixel 11

pix.begin (); pix.show ();

// Init NeoPixel 1

pixelStatus.begin (); pix.show ();

// Ipakita ang katayuan sa px

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // accelerometer int gix, giy, giz; float ax, ay, az; float gx, gy, gz; float roll, pitch, yaw; static unsigned mahabang microsNow;

// suriin kung oras na upang basahin ang data at i-update ang filter

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

// basahin ang raw data mula sa CurieIMU

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

// convert mula sa hilaw na data patungo sa gravity at degree / second unit

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

// i-update ang filter, na tumutukoy sa oryentasyon

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

// print the heading, pitch and roll

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

// pagtaas ng nakaraang oras, kaya pinapanatili namin ang tamang bilis

microsPrevious = microsPrevious + microsPerReading;

// Tanging kung baguhin ang Hue, saturation o Halaga

kung (statusLamp select Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transform anggulo ng pitch = pitch + 90; // Nakakakuha ng mga cordinate ng kulay mula sa mga anggulo h = pitch / 180.0;}

// Mga paghihigpit sa Angles

// roll only -90º to 90º = 180º // State 1 -> piliin ang saturation kung (roll> = -90 && roll <= 90 && statusLamp == 1) {// Transform anggulo roll = roll + 90; // Nakakakuha ng mga cordinate ng kulay mula sa mga anggulo s = roll / 180.0; }

// State 2 -> piliin ang Halaga

kung (statusLamp == 2) {// yaw 0º hanggang 360º v = yaw / 360.0; }

// I-convert sa rgb

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

Serial.print ("Oryentasyon:");

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

// Baguhin ang kulay ng mga pixel

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

// Ipakita ang katayuan sa px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// dahil gumagamit kami ng 2G saklaw // -2g mga mapa sa isang hilaw na halaga ng -32768 // + 2g mga mapa sa isang hilaw na halaga ng 32767

float a = (aRaw * 2.0) / 32768.0;

ibalik a; }

float convertRawGyro (int gRaw) {

// dahil gumagamit kami ng saklaw na 250 degree / segundo // -250 na mga mapa sa isang hilaw na halagang -32768 // +250 na mga mapa sa isang hilaw na halaga ng 32767

float g = (gRaw * 250.0) / 32768.0;

bumalik g; }

static void eventCallback ()

{// Detect tap in all axis if (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Tapikin ang napansin na statusLamp:"); Serial.println (statusLamp);

// Baguhin ang estado

statusLamp ++;

// Init state

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

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelStatus.setPixelColor (0, pixelStatus. Color (150, 0, 0)); pixelStatus.show (); pahinga; case 1: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 150, 0)); pixelStatus.show (); pahinga; case 2: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 150)); pixelStatus.show (); pahinga; case 3: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 0)); pixelStatus.show (); pahinga;

}

}

Inirerekumendang: