Агуулгын хүснэгт:

Ardruino 101: 4 алхамыг ашиглан шөнийн гэрлийг өөрчлөх өнгө (зурагтай)
Ardruino 101: 4 алхамыг ашиглан шөнийн гэрлийг өөрчлөх өнгө (зурагтай)

Видео: Ardruino 101: 4 алхамыг ашиглан шөнийн гэрлийг өөрчлөх өнгө (зурагтай)

Видео: Ardruino 101: 4 алхамыг ашиглан шөнийн гэрлийг өөрчлөх өнгө (зурагтай)
Видео: 50 САМЫХ ИННОВАЦИОННЫХ ЛИЧНЫХ ТРАНСПОРТНЫХ СРЕДСТВ 2021–2022 гг. 2024, Арваннэгдүгээр
Anonim
Image
Image
Ardruino 101 ашиглан шөнийн гэрлийг өөрчлөх өнгө
Ardruino 101 ашиглан шөнийн гэрлийг өөрчлөх өнгө

Энэхүү төсөлд та ardruino, Adafruit neo rgb Strips болон 3D принтер ашиглан шөнийн чийдэн хийх болно.

Энэхүү танилцуулга нь зөвхөн миний сургуулийн төсөлд зориулагдсан болохыг анхаарна уу. Энэ төслийн код нь өөр төслөөс үндэслэсэн болно. Үүнийг хэлэхэд би Ардруиногийн хувьд шинжээч биш.

Алхам 1: Шаардлага

Шаардлага
Шаардлага
Шаардлага
Шаардлага
Шаардлага
Шаардлага

Энэ төслийг хэрэгжүүлэхийн тулд танд дараах тоног төхөөрөмж, багаж хэрэгсэл хэрэгтэй болно

Техник хангамж:

1 - ardruino101 (АНУ -д) эсвэл Genuino101 (АНУ -аас гадуур).

2 - Adafruit -аас NeoPixel rgb LED тууз (5 вольт).

3 - Ардруино USB холбогч (В хэлбэрээс А хэлбэрийн холбогч).

4 - Ardruino, Ardruino IDE -ийн програм хангамж Энэхүү гарын авлагад бид 1.8.5 хувилбарыг ашиглах болно. Програм хангамжийн номын сангийн шаардлагууд нь: 101, Adafruit NeoPixel, Madgwick.

5 -Мөн таны тоног төхөөрөмжийг байрлуулах объект. Энэ тохиолдолд би 3D принтер ашиглах болно. Энэхүү 3D хэвлэлийн файл нь "Дэнлүүний толгой" гэсэн тайлбар дээр байрладаг. Энэ файлын формат нь 3D хэвлэхэд бэлэн биш гэдгийг анхаарна уу. 3D принтерээс хамааран та эхлээд 3D объект дээр 3d хэвлэх програм хангамжийг ажиллуулах ёстой. Заримдаа 3D хэвлэлийн хэмжээг дахин тохируулах болно. Тиймээс диаметрийг 11 см -ээс 11 см -ээр тохируулсан эсэхийг шалгаарай.

6 - Үндсэн гагнуурын хэрэгсэл.

Алхам 2: Тоног төхөөрөмж, програм хангамжийг ойлгох

Ардруин/Генуино101

Тодруулахын тулд Ardruino101 ба genuino101 нь нэрний хажууд яг адилхан юм. Аль аль нь ижил үзүүлэлттэй бөгөөд ижил програм хангамж ашигладаг.

Ardruino101 нь UNRO ardruino гэх мэт үндсэн үзүүлэлтүүдийг агуулдаг. Ardruino101 -ийн гол онцлог нь бидний төсөлд ашиглах акселерометр ба гироскоп юм. Мөн энэ төрлийн ардруино нь 101 номын сангийн өргөтгөлд багтсан CurrieIMU (Дотоод хэмжих нэгж) нэртэй өвөрмөц кодын сантай.

Үүний дараа програм хангамжийн талаар ярилцъя.

Програм хангамж ба номын сан

Ardruino IDE нь python -ийг үндсэн эх код болгон ашигладаг. Энэ нь мөн ихэнх ардруино ажилладаг үндсэн платформ юм. Энэ програмыг хэрхэн ашиглах талаар онлайнаар маш олон гарын авлага байдаг тул хэрэв та энэ програмд шинээр орсон бол эхлээд судалж үзэхийг танд зөвлөж байна.

Үүнтэй холбогдуулан бидний ашиглаж буй номын сангууд дараах байдалтай байна.

Sketch цэснээс> Номын санг оруулах> Номын санг удирдах … Текст оруулах талбарт оруулна уу

- 101 Стандартаар ardruino 101 нь ardruino IDE -д автоматаар ордоггүй. Ардруино төрлөө кодлохын тулд бидэнд энэ номын сангийн өргөтгөл хэрэгтэй болно.

-Adafruit NeoPixel нь манай Neo пиксел туузыг кодлох зорилгоор.

-Мэдгвик Түүхий өгөгдлийг уншиж, энэ өгөгдлийг түүхий, давирхай, өнхрүүлгээр тооцоолохын тулд.

RGB тууз байхгүй

Миний ашиглах төрөл бол 5 хүчдэл эсвэл 5 вольтын төрөл юм. Энэхүү 5v -ийн тусламжтайгаар зурвасуудаа удирдахын тулд өргөтгөсөн тэжээлийн эх үүсвэр хэрэггүй болно. Үүний оронд би ардруиногоо туузыг хянах, гэрэлтүүлэх тэжээлийн эх үүсвэр болгон ашиглах болно.

Энэхүү туузыг эхлүүлэхийн өмнө мэдэх хэрэгтэй хэдэн зөвлөмжийг энд оруулав.

Нэгдүгээрт, adafruit -аас Neodigital RGB LED тууз хэрэгтэй болно. Энэ төрлийн туузыг кодыг ашиглах замаар ашиглах боломжтой. Дараа нь та энэ зурвас дээр арын болон урд тал байгаа гэдгийг мэдэх хэрэгтэй. Энэ арын болон урд тал нь гагнуурын ажилд чухал үүрэгтэй. Сумны түлхүүрийг үзүүрээс нь холдуулж буй урд талыг гагнахаа мартуузай.

Тэдгээрийг хэрхэн ашиглах талаархи гарын авлага энд байна.

Газардуулгын холболт (GND), хүчдэлийн холболт (V) ба зүү холболт (DIN) гэдгийг санаж байх ёстой 3 гагнуурын цэг байдаг.

Алхам 3: Бүрэлдэхүүн хэсгүүдийг тохируулах

Бүрэлдэхүүн хэсгүүдийг тохируулах
Бүрэлдэхүүн хэсгүүдийг тохируулах
Бүрэлдэхүүн хэсгүүдийг тохируулах
Бүрэлдэхүүн хэсгүүдийг тохируулах
Бүрэлдэхүүн хэсгүүдийг тохируулах
Бүрэлдэхүүн хэсгүүдийг тохируулах

Эхлээд та шаардлагуудаас олж болох бүрэлдэхүүн хэсгийг 3d хэвлэх хэрэгтэй болно. Энэ тохиолдолд би PLA ашиглах болно. Нэмэлт объектын диаметр нь 11см -ээс 11см -тэй эсэхийг шалгаарай. Энэ нь ардруино ба туузыг бэхэлгээнд бэхлэх болно. 3D принтер бүр хэвлэх явцыг тооцоолохын тулд өөр өөр програм хангамж ашигладаг болохыг анхаарна уу. Үүнтэй холбогдуулан таны ашиглаж буй файлыг өөр өөр хэмжээтэй болгож болох тул үүнийг санаарай.

Хоёрдугаарт хэвлэсний дараа бүрэлдэхүүн хэсгүүд хаагдах боломжтой эсэхийг шалгаарай. 3D хэвлэмэл нь хамтдаа бөмбөрцөг үүсгэдэг. Тэд сайхан таарч байх ёстой. Хэрэв контент алдагдах юм бол дотор талд нь соронзон хальс байрлуулж тагийг бөглө. Хэрэв энэ нь зузаан байвал зүлгүүр ашиглана уу.

Гуравдугаарт, ардруино ба туузны скематичууд нь маш хялбар байдаг. Туузыг ардруино руу холбохын тулд та 3 утас ашиглах болно. Миний гагнах цорын ганц газар бол туузан дээр байдаг гэдгийг анхаарна уу. Ардруино дээр биш.

GND нь GND руу явдаг

DIN нь Pin руу очдог (бидний тохиолдолд ardruino дээрх pin6)

5V нь 5V хүртэл явдаг

Таны ашигладаг LED туузны хэмжээ 30 -аас хэтрэхгүй байгаа эсэхийг шалгаарай. Дараа нь энэ нь кодыг зохих ёсоор гүйцэтгэх боломжгүй болно. Та хайчаар дүрсэлсэн шаардлагагүй туузыг хайчилж болно.

Дөрөвдүгээрт бүх зүйл бөмбөрцөгт тохирсон байх ёстой. Би тэвшийг харахын тулд 3 -р хэвлэлийн 1 -ийн хооронд огтлолцол хийж, орой дээр нь хуванцар хавтан байрлуулахыг хүсч байна.

Алхам 4: Кодлох

Тиймээс та одоо номын санд шаардлагатай бүх бүрэлдэхүүн хэсгүүдийг агуулсан байх ёстой.

Төслийг ажиллуулахад танд хэрэгтэй код энд байна. Үр дүн нь миний энэ хуудсанд илгээсэн видео линк шиг харагдах ёстой.

Энэ кодын эх сурвалжийг эндээс олж болно. Энэхүү төсөл нь ашиглалтын ард байгаа код, алгаритмыг илүү сайн ойлгохын тулд шаардлагатай алхамуудыг багтаасан болно.

#оруулах #оруулах #оруулах #оруулах

#тодорхойлох PIN 6 // 11 пикселийн NeoPixel Strip

#тодорхойлох PIN1 7 // 1 пикселийн NeoPixel Strip #NUMPIXELS 30 -ийг тодорхойлох // Пикселийн тоо #ТОГТООХ_ХУРААНЫ ТОДОРХОЙЛОХ 25 // Акселерометр ба гироскопын дээж авах хурд

// Madgwick -ийн тохиргоо

Madgwick шүүлтүүр; гарын үсэг зураагүй урт microsPerReading, microsPrevious; float accelScale, gyroScale;

// NeoPixel тохиргоо

Adafruit_NeoPixel пиксел = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Өнгөний орон зай

RGBConverter rgbConverter; давхар h = 1; давхар s = 1; давхар v = 1; байт rgb [3];

// Status Motion Lamp

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

хүчингүй тохиргоо () {

Цуваа эхлэх (9600);

// IMU -ийг эхлүүлж, шүүнэ үү

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

// Акселерометрийн хүрээг 2G болгож тохируулна уу

CurieIMU.setAccelerometerRange (2); // Гироскопын хүрээг 250 градус/секунд болгон тохируулах 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. тасалдаг (CURIE_IMU_TAP);

// ханшийг засахын тулд шинэчлэлтүүдийг хурдасгахын тулд хувьсагчдыг эхлүүлнэ

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

// NeoPixel 11 -ийг эхлүүлнэ үү

пиксел.begin (); пиксел.шоу ();

// NeoPixel 1 -ийг эхлүүлнэ үү

pikselStatus.begin (); пиксел.шоу ();

// Статусыг пикселээр харуулах

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // accelerometer int gix, giy, giz; хөвөх сүх, ай, аз; хөвөх gx, gy, gz; хөвөх өнхрөх, давирхай, эвхэх; статик гарын үсэг зураагүй урт микроОдоо;

// өгөгдлийг уншиж, шүүлтүүрийг шинэчлэх цаг болсон эсэхийг шалгаарай

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

// CurieIMU -аас түүхий өгөгдлийг унших

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

// түүхий өгөгдлөөс таталцал ба градус/секундын нэгж рүү хөрвүүлэх

ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (хувцас); gz = convertRawGyro (giz);

// чиг баримжаа тооцдог шүүлтүүрийг шинэчлэх

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

// гарчиг, давирхай, өнхрүүлгийг хэвлэх

өнхрөх = filter.getRoll (); давирхай = filter.getPitch (); yaw = filter.getYaw ();

// өмнөх цагийг нэмэгдүүлснээр бид зохих хурдыг хадгалж байна

microsPrevious = microsPrevious + microsPerReading;

// Зөвхөн өнгө, ханалт эсвэл утгыг өөрчилсөн тохиолдолд

if (statusLamp Hue if if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transform angle pitch = pitch + 90; // h = pitch / 180.0;

// Өнцгийн хязгаарлалт

// өнхрүүлэх нь зөвхөн -90º -аас 90º = 180º // Төлөв 1 -> ханасан байдлыг сонгоно уу (өнхрөх> = -90 && өнхрөх <= 90 && төлөвLamp == 1) {// Өөрчлөх өнцөг өнхрөх = өнхрөх + 90; // Өнгөний координатыг s = roll / 180.0 өнцгөөс олж авдаг; }

// Төлөв 2 -> Утга сонгоно уу

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

// rgb болгон хөрвүүлэх

rgbConverter.hsvToRgb (h, s, v, rgb); /* Serial.print ("Өнгө:"); Цуваа.хэвлэх (h); Serial.print (" -"); Цуваа.хэв (ууд); Serial.print (" -"); Цуваа.хэвлэх (v); Serial.println ("");

Serial.print ("Чиглэл:");

Цуваа.хэвлэх (эвхэх); Serial.print (""); Цуваа.хэвлэх (давирхай); Serial.print (""); Serial.println (өнхрөх); */

// Пикселийн өнгийг өөрчлөх

for (int px = 0; px <NUMPIXELS; px ++) {piksel.setPixelColor (px, пиксел. Color (rgb [0], rgb [1], rgb [2]))); пиксел.шоу (); }}

// Статусыг пикселээр харуулах

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// бид 2G мужийг ашиглаж байгаа тул // -2g газрын зургийг -32768 түүхий утга болгон авав // +2g газрын зургийг 32767 түүхий утга болгоно

float a = (aRaw * 2.0) / 32768.0;

буцах a; }

float convertRawGyro (int gRaw) {

// бид 250 градус/секундын мужийг ашиглаж байгаа тул // -250 газрын зургийг -32768 түүхий утга болгон +250 газрын зургийг 32767 түүхий утга болгоно.

хөвөх g = (gRaw * 250.0) / 32768.0;

буцах g; }

static void eventCallback ()

{// (CurieIMU.getInterruptStatus (CURIE_IMU_TAP))) Serial.print ("Tap statusLamp:" товшино уу) байвал бүх тэнхлэгт байгаа товчлуурыг илрүүлэх; Serial.println (statusLamp);

// Төлөвийг өөрчлөх

statusLamp ++;

// Анхны төлөв

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

хүчингүй setStatusPixel (int statusPx)

{switch (statusPx) {тохиолдол 0: pixelStatus.setPixelColor (0, pixelStatus. Color (150, 0, 0))); pikselStatus.show (); завсарлага; тохиолдол 1: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 150, 0))); pikselStatus.show (); завсарлага; 2 -р тохиолдол: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 150)); pikselStatus.show (); завсарлага; 3 -р тохиолдол: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 0))); pikselStatus.show (); завсарлага;

}

}

Зөвлөмж болгож буй: