Мазмуну:

Түнкү жарыктын түсүн өзгөртүү Ardruino 101: 4 кадам (Сүрөттөр менен)
Түнкү жарыктын түсүн өзгөртүү Ardruino 101: 4 кадам (Сүрөттөр менен)

Video: Түнкү жарыктын түсүн өзгөртүү Ardruino 101: 4 кадам (Сүрөттөр менен)

Video: Түнкү жарыктын түсүн өзгөртүү Ardruino 101: 4 кадам (Сүрөттөр менен)
Video: Дүйнө жүзү боюнча Cessna учкучу! 🛩🌥🌎 - Geographical Adventures GamePlay 🎮📱 🇰🇬 2024, Ноябрь
Anonim
Image
Image
Түнкү жарыктын түсүн өзгөртүү Ardruino 101
Түнкү жарыктын түсүн өзгөртүү Ardruino 101

Бул долбоордо сиз ardruino, Adafruit neo rgb Strips жана 3D принтерин колдонуп түнкү чырак чыгарасыз.

Белгилей кетчү нерсе, бул киришүү менин мектеп долбоорум үчүн гана. Бул долбоордун коду башка долбоордон алынган. Муну менен, мен Ardruinoго келгенде эксперт эмесмин.

1 -кадам: талаптар

Талаптар
Талаптар
Талаптар
Талаптар
Талаптар
Талаптар

Бул долбоор үчүн сизге төмөнкү жабдыктар жана шаймандар керек болот

Аппараттык:

1 - A ardruino101 (АКШда) же Genuino101 (АКШдан тышкары).

2 - Adafruitтен алынган NeoPixel rgb тилкелери (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, ardruino UNO жана башкалар сыяктуу негизги өзгөчөлүктөргө ээ. Ardruino101дин негизги өзгөчөлүгү - бул биздин долбоордо колдоно турган акселерометр жана гироскоп. Ардруинонун бул түрүндө 101 китепкана кеңейтүүсүнө киргизилген CurrieIMU (Ички өлчөө бирдиги) деп аталган уникалдуу код китепканасы бар.

Муну менен программалык камсыздоо жөнүндө сүйлөшөлү.

Программалык камсыздоо жана китепканалар

Ardruino IDE pythonду негизги булак коду катары колдонот. бул дагы эң башкы платформа, бул жерде көпчүлүк ardruino иштейт. Бул программаны кантип колдонуу керектиги боюнча интернетте көптөгөн үйрөткүчтөр бар, ошондуктан, эгер сиз бул программага жаңы болсоңуз, алгач ошолорду изилдөөнү сунуштайм.

Муну менен биз колдонуп жаткан китепканалар төмөнкүлөр:

Эскиз менюсунан,> Китепкананы кошуу> Китепканаларды башкаруу… Текст киргизүү кутусуна териңиз

- 101 стандарт боюнча ardruino 101 автоматтык түрдө ardruino IDEге кошулбайт. Ардруино түрүн коддоо үчүн бизге бул китепкана кеңейтүүсү керек.

-Adafruit NeoPixel биздин Neo пикселдик тилкелерибизди коддоо үчүн.

-Мэдгвик Чийки маалыматтарды окуу жана бул маалыматтарды чийки, чайыр жана жылдыруу үчүн эсептөө үчүн.

Не RGB тилкелери

Мен колдоно турган түрү 5 чыңалуу же 5v түрү. Бул 5v менен менин тилкелеримди көзөмөлдөө үчүн узартылган энергия булагынын кереги жок. Анын ордуна, мен аркруиномду тилкелерди көзөмөлдөө жана жарыктандыруу үчүн энергия булагы катары колдоном.

Бул тилкелерди баштоодон мурун билишиңиз керек болгон кээ бир кеңештер.

Биринчиден, адафруттан Neodigital RGB LED тилкелери керек болот. Мындай тилкелерди коддорду колдонуу менен колдонууга болот. Кийинки сиз бул тилкелердин арткы жана алдыңкы тарабы бар экенин билишиңиз керек. Бул арткы жана алдыңкы тарабы ширетүү үчүн маанилүү. Жебе баскычы учу менен алысыраак турган алдыңкы жагын ширеткениңизди текшериңиз.

Бул жерде аларды кантип колдонуу боюнча көрсөтмө бар.

Жерде туташуу (GND), чыңалуу байланышы (V) жана пин туташуусу (DIN) жөнүндө эстен чыгарбоо керек болгон 3 ширетүүчү пункт бар.

3 -кадам: Компоненттерди орнотуу

Компоненттерди орнотуу
Компоненттерди орнотуу
Компоненттерди орнотуу
Компоненттерди орнотуу
Компоненттерди орнотуу
Компоненттерди орнотуу

Адегенде сиз талаптардан таба турган компонентти 3d басып чыгарышыңыз керек. Бул учурда мен PLAны колдоном. Объекттин диаметри 11смден 11смге чейин экенин текшериңиз. Бул аркруино менен тилкелердин шперге туура келишин камсыз кылат. Белгилей кетсек, ар бир 3D принтер басып чыгаруу процессин эсептөө үчүн башка программаларды колдонот. Муну менен сиз колдонгон файлдын масштабы башкача болушу мүмкүн, ошондуктан муну эске алыңыз.

Экинчиден, басып чыгаргандан кийин, компоненттер жабылып калышы керек. 3D басылмалар бирге сфераны түзөт. Алар жарашыктуу турушу керек. Эгерде контент жоготула турган болсо, анда капкак толтурулгандыктан ички жагына лента чаптаңыз. Ал эми калын болсо, кумду колдонуңуз.

Үчүнчүдөн, ardruino үчүн скематичтер жана тилкелер абдан оңой. Сиз тилкелерди ardruino менен туташтыруу үчүн 3 зым колдоносуз. Белгилей кетчү нерсе, мен soldering жерлери тилкелерде гана. Ардруинонун өзүндө эмес.

GND GNDге барат

DIN пинге кетет (биздин учурда ardruino боюнча pin6)

5V 5Vга барат

Сиз колдонгон LED тилкелеринин суммасы 30га жеткенин текшериңиз. Дагы, ошондо ал кодду туура аткара албайт. Сиз жөн гана кайчы белгиси менен көрсөтүлгөн бардык керексиз тилкелерди кесип аласыз.

Төртүнчү Evrything чөйрөсүнө жакшы дал келиши керек. Сиз кааласаңыз болот, мен 3 -басылманын 1инин ортосунда кесилиш жасап, тешикти көрүп, үстүнө пластинканы көрүңүз.

4 -кадам: Коддоо

Ошентип, азырынча сиздин китепканаңызга керектүү бардык компоненттер болушу керек.

Бул жерде долбоорду иштетүү үчүн сизге керек болгон код. Жыйынтык мен бул баракчага жөнөткөн видео шилтемедей болушу керек.

Бул коддун булагын бул жерден тапса болот. Бул долбоор коддорду жана колдонуунун артындагы алгаритмди жакшыраак түшүнүү үчүн керектүү кадамдарды камтыйт.

#кошуу #кошуу #кошуу #кошуу

#аныктоо PIN 6 // 11 пикселдик NeoPixel Strip

#аныктоо PIN1 7 // 1 пикселдик NeoPixel Strip #NUMPIXELSти аныктоо 30 // Пикселдердин саны #SAMPLE_RATE 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];

// Статус Motion Lamp

// Мамлекет 0 -> Түс тандоо -Чайыр // Мамлекет 1 -> Каныккандыкты тандоо -Ролл // Мамлекет 2 -> Баалоону тандоо -Яв // Мамлекет 3 -> Түстүн туруксуз int абалын оңдооLamp = 0;

жараксыз орнотуу () {

Serial.begin (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.interrupts (CURIE_IMU_TAP);

// туура чен үчүн жаңыртууларды ылдамдатуу үчүн өзгөрмөлөрдү баштоо

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

// Init NeoPixel 11

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

// Init NeoPixel 1

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

// Статусун пикселде көрсөтүү

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // акселерометр int gix, giy, giz; сүзүүчү балта, ай, аз; gx, gy, gz; калкып жүрүүчү түрмөк, чайыр, жаа; статикалык белгиси жок узун microsNow;

// маалыматтарды окуу жана чыпканы жаңыртуу убактысы келгенин текшериңиз

microsNow = micros (); эгер (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 (гиз);

// багытты эсептеген чыпканы жаңыртуу

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

// рубриканы, питти жана роллду басып чыгаруу

roll = filter.getRoll (); кадам = filter.getPitch (); yaw = filter.getYaw ();

// мурунку убакытты көбөйтүү, ошондуктан биз туура темпте жүрөбүз

microsPrevious = microsPrevious + microsPerReading;

// Түстү, Каныккандыкты же Маанини өзгөртсө гана

if (statusLamp Hue if if (pitch> = -90 && pitch <= 90 && statusLamp == 0)

// Бурчтар боюнча чектөөлөр

// тоголок гана -90ºдан 90º = 180ºге чейин // 1 -абал -> Каныккандыгын тандаңыз, эгерде (ролл> = -90 && roll <= 90 && statusLamp == 1) {// Түз бурчтун түрмөгү = түрмөк + 90; // Түстүү координаттарды бурчтардан алат s = roll / 180.0; }

// 2 -абал -> маанини тандаңыз

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

// rgbга айландыруу

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

Serial.print ("Багыты:");

Serial.print (yaw); Serial.print (""); Serial.print (кадам); Serial.print (""); Serial.println (түрмөк); */

// Пикселдердин түсүн өзгөртүү

үчүн (int px = 0; px <NUMPIXELS; px ++) {pixel.setPixelColor (px, пиксел. Color (rgb [0], rgb [1], rgb [2]))); piksel.show (); }}

// Статусун пикселде көрсөтүү

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 чийки мааниге чейин

float g = (gRaw * 250.0) / 32768.0;

кайтаруу g; }

static void eventCallback (), Serial.println (statusLamp);

// Абалды өзгөртүү

statusLamp ++;

// Баштапкы абал

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

боштук setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelStatus.setPixelColor (0, pixelStatus. Color (150, 0, 0))); pikselStatus.show (); тыныгуу; 1 -жагдай: pixelStatus.setPixelColor (0, пиксельСтатус. 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 (); тыныгуу;

}

}

Сунушталууда: