Мазмұны:

Түнгі шамды өзгерту Ardruino 101: 4 қадаммен (суреттермен)
Түнгі шамды өзгерту Ardruino 101: 4 қадаммен (суреттермен)

Бейне: Түнгі шамды өзгерту Ardruino 101: 4 қадаммен (суреттермен)

Бейне: Түнгі шамды өзгерту Ardruino 101: 4 қадаммен (суреттермен)
Бейне: Arduino Қазақша [9] Батырма - 1 2024, Желтоқсан
Anonim
Image
Image
Түсті өзгерту Ardruino 101 көмегімен түнгі жарық
Түсті өзгерту Ardruino 101 көмегімен түнгі жарық

Бұл жобада сіз түнгі шамды ardruino, Adafruit neo rgb Strips және 3D принтері арқылы жасайсыз.

Назар аударыңыз, бұл нұсқаулық тек менің мектеп жобасына арналған. Бұл жобаның коды басқа жобадан алынған. Мен Ардруино туралы айтатын болсам, мен сарапшы емеспін.

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

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

Бұл жоба үшін сізге келесі құралдар мен құралдар қажет болады

Жабдық:

1 - ardruino101 (АҚШ -та) немесе Genuino101 (АҚШ -тан тыс жерлерде).

2 - Adafruit -тен NeoPixel rgb жолақтары (5 вольт).

3 - ardruino 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 негізгі код ретінде питонды пайдаланады. бұл сонымен қатар ardruino жұмыс істейтін негізгі платформалық код. Интернетте бұл бағдарламалық жасақтаманы қолдануға арналған көптеген оқулықтар бар, сондықтан егер сіз бұл бағдарламамен жаңадан таныс болсаңыз, алдымен оларды зерттеуге кеңес беремін.

Осыған сәйкес біз пайдаланатын кітапханалар келесідей:

Эскиз мәзірінен> Кітапхананы қосу> Кітапханаларды басқару … мәтін енгізу жолағына енгізіңіз

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

-Adafruit NeoPixel Neo пиксель жолақтарын кодтау үшін.

-Мэдгвик Шикі деректерді оқу және бұл деректерді шикіге, қадамға және айналдыруға есептеу үшін.

RGB жолақтары жоқ

Мен қолданатын түрі - 5 кернеу немесе 5 вольт. Осы 5В көмегімен маған жолақтарды басқару үшін кеңейтілген қуат көзі қажет емес. Оның орнына мен аркруиноны жолақтарды басқару мен жарықтандыру үшін қуат көзі ретінде қолданамын.

Бұл жолақтарды бастамас бұрын білуіңіз керек бірнеше кеңестер.

Алдымен сізге адафруттен Neodigital RGB сымды жолақтар қажет болады. Мұндай жолақтарды кодтарды қолдану арқылы қолдануға болады. Бұдан кейін сіз бұл жолақтардың артқы және алдыңғы жағы бар екенін білуіңіз керек. Бұл артқы және алдыңғы жағы дәнекерлеу үшін маңызды. Көрсеткі пернесі ұшынан алшақ тұрған алдыңғы жағын дәнекерлегеніңізге көз жеткізіңіз.

Міне, оларды пайдалану бойынша нұсқаулық.

Жерге қосылу (GND), кернеу қосылымы (V) және түйреуіш қосылымы (DIN) туралы есте сақтау қажет 3 дәнекерлеу нүктесі бар.

3 -қадам: компоненттерді орнату

Компоненттерді баптау
Компоненттерді баптау
Компоненттерді баптау
Компоненттерді баптау
Компоненттерді баптау
Компоненттерді баптау

Алдымен сіз талаптардан таба алатын компонентті 3D басып шығаруыңыз керек. Бұл жағдайда мен PLA қолданамын. Нысанның диаметрі 11 см -ден 11 см -ге дейін екеніне көз жеткізіңіз. Бұл ардруино мен белдеулердің шперге сәйкес келуін қамтамасыз етеді. Есіңізде болсын, әрбір 3D принтері басып шығару процесін есептеу үшін әр түрлі бағдарламалық жасақтаманы қолданады. Осыған байланысты сіз қолданатын файл әр түрлі болуы мүмкін, сондықтан оны есте сақтаңыз.

Басып шығарудан кейін екінші компоненттер жабылатынына көз жеткізіңіз. 3D басып шығару сфераны құрайды. Олар жақсы үйлесуі керек. Егер контент жоғалатын болса, қақпақты толтыру үшін ішкі жағына таспаны жабыстырыңыз. Ал егер ол қалың болса, зімпараны қолданыңыз.

Үшіншіден, ардруино мен жолақтарға арналған скематичтер өте оңай. Жолақтарды ardruino -ға қосу үшін сіз 3 сымды қолданасыз. Жолақтарда мен дәнекерлейтін жалғыз орын бар екенін ескеріңіз. Ардруиноның өзінде емес.

GND GND -ге барады

DIN түйреуішке өтеді (біздің жағдайда ardruino -дағы pin6)

5В 5В дейін өтеді

Қолданылатын жолақтардың саны 30 -ға тең екеніне көз жеткізіңіз. Содан кейін ол кодты дұрыс орындамайды. Қайшы белгісі бар кез келген қажетсіз жолақтарды кесуге болады.

Төртінші үйірме сфераға жақсы сәйкес келуі керек. Үстіңгі жағын көру үшін пластикті орналастыру үшін мен 3D басып шығарудың 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];

// Қозғалыс күйінің шамы

// 0 күйі -> Реңкті таңдау -Пит // күй 1 -> Қанықтылықты таңдау -орау // күй 2 -> Мәнді таңдау -Yaw // күй 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. үзулер (CURIE_IMU_TAP);

// жылдамдықты түзету үшін жаңартуларды жылдамдату үшін айнымалыларды инициализациялаңыз

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

// Init NeoPixel 11

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

// Init NeoPixel 1

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

// Күйді пиксельде көрсету

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // акселерометр int gix, giy, giz; қалтқы балта, ай, аз; float 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 (giy); 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 Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Transform angle pitch = pitch + 90; // h = pitch / 180.0 бұрыштарынан түсті координаттар алады.

// Бұрыштарды шектеу

// тек айналдыру -90º -тан 90º = 180º -ге дейін // 1 -ші күй -> Қанықтылықты таңдаңыз, егер (ролл> = -90 && ролик <= 90 && statusLamp == 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 («Түс:»); Serial.print (h); Serial.print (« -»); Сериялық баспа (лар); 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 ++) {piksel.setPixelColor (пиксель, пиксель Түс (rgb [0], rgb [1], rgb [2]))); пиксель.шоу (); }}

// Күйді пиксельде көрсету

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// біз 2G ауқымын қолданатындықтан // -2g карталары -32768 шикі мәніне // +2g карталары шикі мәнге 32767

float a = (aRaw * 2.0) / 32768.0;

қайтару а; }

float convertRawGyro (int gRaw) {

// біз 250 градус/секунд диапазонын қолданатындықтан // -250 картасы -32768 шикі мәніне // +250 картасы шикі мәнге 32767

float g = (gRaw * 250.0) / 32768.0;

қайтару g; }

static void eventCallback ()

{// Егер (CurieIMU.getInterruptStatus (CURIE_IMU_TAP))) Serial.print («Табылған күй шамы:») болса, барлық осьте түртуді анықтаңыз; Serial.println (statusLamp);

// Күйді өзгерту

statusLamp ++;

// Бастапқы күй

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

жарамсыз setStatusPixel (int statusPx)

{switch (statusPx) {0 жағдай: pixelStatus.setPixelColor (0, pixelStatus. Color (150, 0, 0))); pixelStatus.show (); үзіліс; 1 -жағдай: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 150, 0)); pixelStatus.show (); үзіліс; 2 -жағдай: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 150)); pixelStatus.show (); үзіліс; 3 -жағдай: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 0))); pixelStatus.show (); үзіліс;

}

}

Ұсынылған: