Ardruino 101: 4 Addımdan istifadə edərək Gecə İşığını Dəyişdirin (Şəkillərlə)
Ardruino 101: 4 Addımdan istifadə edərək Gecə İşığını Dəyişdirin (Şəkillərlə)
Anonim
Image
Image
Ardruino 101 istifadə edərək gecə işığını dəyişdirən rəng
Ardruino 101 istifadə edərək gecə işığını dəyişdirən rəng

Bu layihədə ardruino, Adafruit neo rgb Strips və 3D printerdən istifadə edərək gecə lampası hazırlayacaqsınız.

Diqqət yetirin ki, bu təqdimat sırf mənim məktəb layihəm üçündür. Bu layihənin kodu başqa bir layihədən götürülmüşdür. Bununla Ardruinoya gəldikdə mütəxəssis deyiləm.

Addım 1: Tələblər

Tələblər
Tələblər
Tələblər
Tələblər
Tələblər
Tələblər

Bu layihə üçün aşağıdakı avadanlıq və vasitələrə ehtiyacınız olacaq

Avadanlıq:

1 - A ardruino101 (ABŞ -da) və ya Genuino101 (ABŞ xaricində).

2 - Adafruitdən NeoPixel rgb led şeritler (5 volt).

3 - A ardruino usb konnektoru (B tipli A konnektoru).

4 - Ardruino, Ardruino IDE -dən bir proqram Bu təlimatda 1.8.5 versiyasını istifadə edəcəyik. Proqram kitabxana tələbləri: 101, Adafruit NeoPixel və Madgwick.

5 -Və avadanlıqlarınızı yerləşdirmək üçün bir obyekt. Bu vəziyyətdə 3D printerdən istifadə edəcəyəm. Bu 3D çap üçün fayl "Lamp Head" adlanan təsvirlərdə yerləşir. Qeyd edək ki, bu format 3D çap üçün hazır deyil. 3D printerlərinizdən asılı olaraq əvvəlcədən 3D obyektində təyin olunmuş 3d çap proqramını işə salmalısınız. Bəzən 3D çap ölçüsü sıfırlanır. beləliklə, diametrin 11 sm -dən 11 sm -ə qədər olduğundan əmin olun.

6 - Əsas lehimləmə dəsti.

Addım 2: Avadanlıq və Proqramı anlamaq

Ardruin/Genuino101

Aydınlaşdırmaq üçün Ardruino101 və genuino101 adların yanında tamamilə eynidir. Hər ikisi eyni xüsusiyyətlərə malikdir və eyni proqramdan istifadə edir.

Ardruino101, ardruino UNO və daha çox kimi əsas xüsusiyyətlərə malikdir. Ardruino101 -in əsas xüsusiyyəti, layihəmizdə istifadə edəcəyimiz akselerometr və giroskopdur. Ayrıca bu növ ardruino, 101 kitabxana uzantısına daxil olan CurrieIMU (Daxili Ölçmə Birimləri) adlı unikal kod kitabxanasına malikdir.

Bununla proqram haqqında danışaq.

Proqram və kitabxanalar

Ardruino IDE, əsas mənbə kodu olaraq python istifadə edir. ən çox ardruinonun işlədiyi əsas kod platvormdur. Bu proqramdan necə istifadə edəcəyinizə dair çoxlu onlayn dərslər var, buna görə də bu proqramla yeni tanışsınızsa əvvəlcə bunları araşdırmanızı məsləhət görürəm.

Bununla birlikdə istifadə etdiyimiz kitabxanalar aşağıdakılardır:

Sketch menyusundan> Kitabxanaya Daxil Et> Kitabxanaları İdarə Edin … Mətn daxiletmə qutusuna yazın

- 101 standartda ardruino 101 avtomatik olaraq ardruino IDE -yə daxil edilmir. Ardruino tipimizi kodlaşdırmaq üçün bu kitabxana uzantısına ehtiyacımız var.

-Adafruit NeoPixel, Neo piksel zolaqlarımızı kodlaşdırmaq üçün.

-Madgwick Xam məlumatları oxumaq və bu məlumatları xam, pitch və roll hesablamaq üçün.

Yox RGB zolaqları

İstifadə edəcəyim tip 5 voltlu və ya 5v tiplidir. Bu 5v ilə zolaqları idarə etmək üçün genişləndirilmiş bir enerji mənbəyinə ehtiyacım yoxdur. Bunun əvəzinə zolaqları idarə etmək və işıqlandırmaq üçün ardruinomuzu enerji mənbəyi kimi istifadə edəcəyəm.

Bu zolaqlara başlamazdan əvvəl bilməli olduğunuz bəzi məsləhətlər.

Əvvəlcə adafruitdən Neodigital RGB LED şeritlərə ehtiyacınız olacaq. Bu cür zolaqlar kodlardan istifadə etməklə əlçatandır. Bundan sonra bilməlisiniz ki, bu zolaqların arxa və ön tərəfi var. Bu arxa və ön tərəf lehimləmə üçün vacibdir. Ok düyməsinin ucundan uzaqlaşdığını göstərən ön tərəfi lehimlədiyinizdən əmin olun.

İşdə onlardan necə istifadə olunacağına dair bir bələdçi.

Torpaq bağlantısı (GND), gərginlik bağlantısı (V) və pin bağlantısı (DIN) haqqında unutmayın.

Addım 3: Komponentlərin Qurulması

Komponentlərin Qurulması
Komponentlərin Qurulması
Komponentlərin Qurulması
Komponentlərin Qurulması
Komponentlərin Qurulması
Komponentlərin Qurulması

Əvvəlcə tələblərdə tapa biləcəyiniz komponenti 3d çap etməlisiniz. Bu vəziyyətdə PLA istifadə edəcəyəm. Üst obyektin diametrinin 11 sm ilə 11 sm arasında olduğundan əmin olun. Bu, ardruino və zolaqların şeridə uyğun olmasını təmin edəcək. Hər bir 3D printerin çap prosesini hesablamaq üçün fərqli proqramlardan istifadə etdiyini unutmayın. Bununla birlikdə istifadə etdiyiniz fayl fərqli ölçüdə ola bilər, buna görə unutmayın.

Çapdan sonra ikinci komponentlərin bağlana biləcəyinə əmin olun. 3D çaplar birlikdə kürə meydana gətirir. Qəşəng uyğun gəlməlidirlər. Komponten itiriləcəksə, qapağın doldurulması üçün içəriyə bir az lent vurun. Və qalındırsa, zımpara istifadə edin.

Üçüncüsü, ardruino və zolaqlar üçün skematichs olduqca asandır. Zolaqları ardruinoya bağlamaq üçün 3 teldən istifadə edəcəksiniz. Diqqət yetirin ki, lehimlədiyim yeganə yer zolaqlardadır. Ardruinonun özündə deyil.

GND GND -yə gedir

DIN bir Pinə gedir (bizim halda ardruino üzərindəki pin6)

5V 5V -ə keçir

İstifadə etdiyiniz led şeritlərin miqdarının 30 -dan çox olmadığından əmin olun. Bundan sonra da bu kodu düzgün icra edə bilməyəcək. Bir qayçı işarəsi ilə göstərilmiş lazımsız zolaqları kəsə bilərsiniz.

Dördüncüsü, hər şey sahəyə mükəmməl uyğun olmalıdır. Çuxuru görmək və üstünə bir plastik çömçə qoymaq üçün 3d çapdan 1 -i arasında kəsişmə etməyimi istəyə bilərsiniz.

Addım 4: Kodlaşdırma

Buna görə kitabxananızda lazım olan bütün komponentlərə sahib olmalısınız.

Layihəni icra etmək üçün sizə lazım olan kod budur. Nəticə bu səhifədə göndərdiyim video linki kimi görünməlidir.

Bu kodun mənbəyini burada tapa bilərsiniz. Bu layihə, istifadənin arxasındakı kodu və alqaritmi daha yaxşı başa düşmək üçün zəruri addımları da əhatə edir.

#daxil edin #əlavə edin #daxil edin

#define PIN 6 // 11 piksel NeoPixel Strip

#define PIN1 7 // 1 piksel NeoPixel Strip #NUMPIXELS 30 təyin edin // Piksel sayı #NÜMUNƏ_HARİCƏSİNİ 25 təyin edin // Akselerometr və giroskop üçün nümunə götürmə sürəti

// Madgwick konfiqurasiyası

Madgwick filtri; işarəsiz uzun microsPerReading, microsPrevious; float accelScale, gyroScale;

// NeoPixel konfiqurasiyası

Adafruit_NeoPixel pikselləri = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Rəng boşluqları

RGBConverter rgbConverter; ikiqat h = 1; ikiqat s = 1; ikiqat v = 1; bayt rgb [3];

// Status Motion Lampası

// Vəziyyət 0 -> Hue -Pitch // State 1 -> Saturation seçin -Roll // State 2 -> Value Select -Yaw // State 3 -> Fix color volatile int statusLamp = 0;

boş quraşdırma () {

Serial.begin (9600);

// IMU -ya başlayın və süzün

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

// Akselerometr aralığını 2G olaraq təyin edin

CurieIMU.setAccelerometerRange (2); // Giroskop aralığını 250 dərəcə/saniyə olaraq təyin edin 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. müdaxilə (CURIE_IMU_TAP);

// dərəcəni düzəltmək üçün yeniləmələri sürətləndirmək üçün dəyişənləri işə salın

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

// NeoPixel 11 -i işə salın

piksel.begin (); piksel.show ();

// NeoPixel 1 -i işə salın

pikselStatus.begin (); piksel.show ();

// Statusu px ilə göstərin

setStatusPixel (statusLamp); }

boşluq döngəsi () {

int aix, aiy, aiz; // sürətləndirici int gix, gey, giz; üzmək balta, ay, az; float gx, gy, gz; float roll, meydança, yaw; statik imzasız uzun mikrosxəbər;

// məlumatları oxumağın və filtri yeniləməyin vaxtının olub olmadığını yoxlayın

microsNow = micros (); əgər (microsNow - microsPrevious> = microsPerReading) {

// CurieIMU -dan xam məlumatları oxuyun

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

// xam məlumatlardan cazibə qüvvəsinə və dərəcələrə/saniyə vahidlərinə çevirmək

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

// istiqaməti hesablayan filtri yeniləyin

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

// başlığı çap edin və yuvarlayın

roll = filter.getRoll (); meydança = filter.getPitch (); yaw = filter.getYaw ();

// əvvəlki dəfə artırırıq, buna görə də düzgün tempi saxlayırıq

microsPrevious = microsPrevious + microsPerReading;

// Yalnız Hue, Doygunluq və ya Dəyişiklik olarsa

if (statusLamp Hue if if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Translation angle pitch = pitch + 90; // h = pitch / 180.0 açılarından rəng kordinatları əldə edir

// Bucaq məhdudiyyətləri

// yalnız -90º -dən 90º = 180º -ə qədər yuvarlayın // 1 -ci vəziyyət -> Doygunluğu seçin (əgər roll> = -90 && roll <= 90 && statusLamp == 1) {// Dönüş bucağı silsiləsi = rulon + 90; // Bucaqlardan rəng kordinatları əldə edir s = roll / 180.0; }

// Dövlət 2 -> Dəyəri seçin

if (statusLamp == 2) {// yaw 0º - 360º v = yaw / 360.0; }

// rgb -ə çevirin

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Rəng:"); Serial. çap (h); Serial.print (" -"); Serial.çap (lar); Serial.print (" -"); Serial. çap (v); Serial.println ("");

Serial.print ("İstiqamət:");

Serial. çap (yaw); Serial.print (""); Serial.çap (meydança); Serial.print (""); Serial.println (rulon); */

// Piksellərin rəngini dəyişdirin

üçün (int px = 0; px <NUMPIXELS; px ++) {piksel.setPixelColor (px, piksel. Color (rgb [0], rgb [1], rgb [2])); piksel.show (); }}

// Statusu px ilə göstərin

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// 2G diapazonundan istifadə etdiyimiz üçün // -2g xəritələri -32768 xammal dəyərinə qədər +2g xəritələri 32767 xam dəyərə qədərdir.

float a = (aRaw * 2.0) / 32768.0;

qaytarmaq a; }

float convertRawGyro (int gRaw) {

// 250 dərəcə/saniyə aralığını istifadə etdiyimiz üçün // -250 xəritələr -32768 // +250 xəritələr 32767 xam dəyərə

float g = (gRaw * 250.0) / 32768.0;

qayıt g; }

statik boşluq hadisəsiCallback ()

{// (CurieIMU.getInterruptStatus (CURIE_IMU_TAP))) {Serial.print ("Tapılan statusLampına vurun:") varsa, bütün oxda tap tapın; Serial.println (statusLamp);

// Vəziyyəti dəyişdirin

statusLamp ++;

// Başlanğıc vəziyyəti

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

boşluq setStatusPixel (int statusPx)

{switch (statusPx) {halda 0: pixelStatus.setPixelColor (0, pikselStatus. Color (150, 0, 0)); pikselStatus.show (); fasilə; hal 1: pikselStatus.setPixelColor (0, pikselStatus. Color (0, 150, 0)); pikselStatus.show (); fasilə; hal 2: pikselStatus.setPixelColor (0, pikselStatus. Color (0, 0, 150)); pikselStatus.show (); fasilə; hal 3: pikselStatus.setPixelColor (0, pikselStatus. Color (0, 0, 0)); pikselStatus.show (); fasilə;

}

}