Arduino pirrkirin û rêveberiya demê

Testa Arduino ku bi milîsan re pirr kar bike

Ez ne pisporekî Arduino me, digel ku demek dirêj plakaya min hebû min bi zor lêpirsîn nekir. Demên ku min ew bikar aniye wekî amûrek kopîkirin û şîfrekirina kodê ye ku jixwe hatî afirandin lê bêyî ku pir zêde balkêş hebe ku bi rastî fêr bibe ka ew çawa dixebite lê bi tenê bi mebesta ku ew bixebite û ji min re bikêr be. Di vê Sersalê de min dîmenê Nativity-ê bi hin LED û sensorek ultrasiyonê HC-SR04 hinekî lihevanîn. I ez sekinîm ku tiştê ku divê were kirin temaşe dikim.

Min tenê dixwest bi du LEDyên ji eynî sînyalê tiştên cihêreng bikim. Whoops. Ez zû zû li tiştê ku ez difikirim dê rast bim gava ku hûn dest bi tevhevkirina Arduino bikin yek ji wan sînorên yekem e ku hûn pê re têne. You hûn ne hewce ne ku wê pir tevlihev bikin. Ez tenê qala hin LED-an dikim, hûn fêhm dikin ku hûn nikarin ya ku hûn dixwazin rast bikin.

Ka em ji destpêkê ve zelal bikin pirzimanî li Arduino tune, du kar bi paralel nayên kirin. Lê teknîk hene ku pir zû bangan bikin ku wusa dixuye ku bi hev re dixebitin.

Ez meseleyê bi hûrgulî vedibêjim. Di Sersalê de min Dîmenek ji dayikbûnê saz kir û dixwest ku dema keçên min nêz bibin hin çirayên Çêliyê werin pêxistin. Tiştek tevlihev nine. Min tenê dixwest ku du şaxên ronahiyên rêber li gorî nirxên sensorek nêzîkê cûda bixebitin.

Min dixwest dema ku kesek ji 10 cm nêziktir bibûya

Abone navnîşa nameya me

  • Yek ji şaxên çirayên ku dê biçin stêrkan dê 10 çirkeyan bimîne
  • Ku yê din ê ku biçe hundurê xaniyan dê 10 saniyeyan bimîne lê ji ber ku ew ji dîmenê zayînê veqetiyan.

Sade ne wusa? ji ber ku ev dikare bibe sedema pirsgirêkên mezin. Ji ber ku Arduino ne gengaz e ku pir-peywirdarkirinê be, ew yek ferman li pey yekê dimeşe.

 

dorpêçkirina LED-ê şewitandin û pirrjimara ultrasonic

Min kiriye a bi sensor ultrasonîk HC-SR04 ve tê girêdan û 2 LED, her yek dê wekhevî bi şaxek Betlîsê be. Beşa yekem ne pir henek e, ji ber ku ew sazkirin û xebitandina sansorê ultrasiyonê di LOOP de vesaz dike, lê hûn dikarin vê yekê li bi hezaran cîhan bibînin. Mîna rojek din heke ez bêtir lêpirsînim ez taybetîyek dikim, ji bo naha hûn li vir in (biborînin ku hûn kredîdîtan danîn, lê nayê bîra min ku min ew ji ku derê derxist)

Koda HC-SR04 li ser Arduino

int ledPin1 = 8; int ledPin2 = 7; navbera dirêj; dem dirêj; dema dirêj; timepast dirêj; sazkirina betaliyê () {// destpêkirina pîneya dîjîtal LED_BUILTIN wekî encam. pinMode (ledPin1, OUTPUT); pinMode (ledPin2, OUTPUT); Serial.begin (9600); pinMode (3, DERVE); / * aktîvkirina pin 9 wekî encam: ji bo pêlika ultrasonîk * / pinMode (2, INPUT); / * aktîvkirina pînê 8 wekî têkevtin: dema vekişîna ultrasiyon * /} // fonksiyona xelek her û her diherike her û her valahiya xeletiyê () {digitalWrite (3, LOW); / * Ji ber aramkirina sansor * / derengmayîna Mîkrosekondan (5); digitalWrite (3, HIGH); / * şandina nebza ultrasonîk * / derengmayîna Mîkrosekondan (10); dem = pulseIn (2, HIGH); / * Fonksiyon ji bo pîvandina dirêjahiya pulsa ku tê. Dema ku di navbera şandina nebza ultrasonîk de û dema ku sensor bîskê werdigire dipîve, ango ev e: ji dema ku pîneya 12 dest bi wergirtina bagerê dike, HIGH, heya ku ew vê yekê radiwestîne, LOWN,, dirêjahiya nebza tê * / dûr = int (0.017 * dem); / * formula ji bo hesibandina mesafeya bidestxistina nirxê jimareyeka jimar * / / * centimetopandina bi santîmetre ji hêla serial monitor * / Serial.println ("Dûr"); Serial.println (mesafe); Serial.println ("cm"); taloqkirin (1000);

Bi vê yekê, dê mesafeya ku ji hêla sansorê ultrason ve hatî pîvandin were nerîn û hilanîn

Çareseriya operasyona LEDS

Yekem tiştê ku tê hişê meriv dest bi danîna derengan dike. Ez nizanim çima lê hemî destpêker derengiyê difikirin () û ew vebijarkan pir bi sînor dike ji ber ku dema ku dereng tê bikar anîn () lijneyê kar berdewam nake û ji ber vê yekê hûn di wê dema ragirtinê de nikarin tiştek din bikin. Çareserî karanîna mîlîs e ()

Li vir min çareseriyek hêsan a li ser bingeha heke û kontroyan dît. Wekî ku mamosteyek min digot, her tişt dikare bi gelek ger di rêzê de were bername kirin. Lê bê guman rastî ne pir elegant e.

// heke mesafeya ji 10 kêmtir e, em du LED an şax vedikin û dest bi hejmartina demê bi mîlîs dikin () heke (mesafeya <10) {digitalWrite (ledPin1, HIGH); digitalWrite (ledPin2, HIGH); dema niha = mîlî (); } // heke mesafeya ji 10 mezintir be em ê wexta ku jê ve hatî vedan derbas kiriye kontrol bikin û heke ew ji ya nîşankirî mezintir be em ê LED1-ê vegerînin heke (mesafeya> 10) {timepast = mîlî () - dema niha ; digitalWrite (ledPin1, LOW); // heke mesafeya ji 10000î mezintir be em ê LED2-ê vegerînin (timepast> 10000) {digitalWrite (ledPin2, LOW); }}}

Armanca vê kodê ev e ku Arduino bi berdewamî wan sê ifan bicîh tîne da ku ew wusa bilez di nav wan re derbas bibe ku wusa dixuye ku ew di heman demê de çend tiştan dike. Lê wekî ku jixwe em dizanin, ew yek bi yek înfaza hevokan didomîne.

Carekê mesafeyê tête pîvandin û di guhêrbar de tête hilanîn dûr, ger dê werin nirxandin:

  • Yekem kontrol dike ka mesafeya ji 10 cm ya xwestî kêmtir e. Ger wusa be, em du LED-ê vedigerînin û bi mîlîs dest bi jimartina demê dikin ()
  • û em ê biçin ya duyemîn ger ji bo mesafeya ji 10 cm mezintir. Ger ew lihevhatî be, em dema ku derbas bûye û rêberiya 1, ku tenê bi dûr ve girêdayî bû, deaktîv bikin.
  • Em ê biçin sêyemîn heke em li ku binihêrin ka ji 10 saniyeyan zêdetir derbas nebûye ji ber ku kontro hatiye aktîf kirin, û heke wusa be, pin 2 vemirînin
  • So vî awayî xelek berdewam dike. Again dîsa.

Di dawiyê de, û her çend çareserî kar kir, ji min re eşkere bû ku divê ev pirsgirêk ji hêla gelek kesan ve hatibe jiyîn û pêdivî bû ku çareseriyek ortodoksî hebe. Min dest bi lêgerînê kir û yekê baş (ku bê guman ne tenê yek e) ji kurên Bernameya Adafruit û object-oriented. Ew ji afirandina tiştan bi dersên diyarkirî pêk tê da ku zû bang bikin û ne hewce be ku kodê sed carî di bernameya me de dubare bikin.

Ku di dawiyê de "heman" wekî çareseriya min bi ger + jimarvan lê pir hêjatir û ku kodek pir xwendîtir û pir jêhatîtir peyda dike.

Birêvebirina pirr peywiran bêguman dibe sedema rêveberiya demê li Arduino. Di destpêkê de ev ne di gotarê de bû lê ez difikirim ku pir balkêş e.

Erkên Arduino û demjimêr

Wekî ku min berê şîrove kir Ez difikirim ku bi derengî ve girêdayîbûnek mezin heye () , dibe ku ji ber ku mirovên dest pê dikin vê fonksiyonê di hemî mînakan de dibînin ku bi gelemperî ji tîrêjê ve li her ronahiya trafîkê an jî manipulasyona LEDS-ê têne rakirin û vemirandin.

Delay pirsgirêkek pir mezin heye û ew jî ew e ku dema ku em bang dikin derengxistin() ji bo demek her tişt rawestîne. Heyet ne sensorekê dixwîne, ne jî ew bidarvekirina hevokan, an tiştek li tiştek dike, tenê li benda dema ku me jê re gotiye derbas bibe û bê guman heke em dixwazin panelê ji yekê zêdetir li di heman demê de ev ne guncan e.

Em ê neçar bimînin ku lê binihêrin millis () Hetta delayMicroseconds () Me jî heye mîkro () ku ji ber ku bername dest bi darvekirinê kiriye hejmara microsecondan vedigerîne

Bê derengî çavê xwe bikişînin

Mînakek xweş e ku hûn bibînin ka ew çawa dixebite Blinka efsanewî lê bêyî dereng bimeşînin. Cûdahiya serekî ev e ku em fonksiyona derengî () ji bîr dikin û milîs bikar tînin () da ku em bikaribin wextê di navbera emeliyetan de bihejmêrin.

2 şîroveyên li ser "Arduino pirzimanî û rêveberiya demê"

Leave a comment