ትርፍ፡
- ለ Arduino/STM32/ESP32 ከ AI ጋር የተካተተ ኮድ የተሰጠውን መመዝገቢያ እና የሃርድዌር አውድ የማመንጨት ችሎታ
- በ AI ውፅዓት ውስጥ እንደ ማቋረጦች፣ የሰዓት ቆጣሪዎች እና የማይከለክሉ ዑደቶችን የማወቅ እና የማረም ችሎታ።
- ወደ ሃርድዌር ከመጫንዎ በፊት የተፈጠረውን ኮድ በማህደረ ትውስታ፣ በእውነተኛ ጊዜ እና ደህንነት የመገምገም ችሎታ
በሜካትሮኒክስ ውስጥ ማይክሮ መቆጣጠሪያው ሀሳቦች ከአካላዊው ዓለም ጋር የሚገናኙበት ነው. እንደ አርዱዪኖ፣ STM32፣ ESP32 ያሉ ካርዶች; ዳሳሾችን ያነባል፣ አንቀሳቃሾችን ያንቀሳቅሳል፣ ይገናኛል እና ይህን ሁሉ የሚያደርገው በውስን ማህደረ ትውስታ፣ ውስን የማቀናበሪያ ሃይል እና ጥብቅ የጊዜ መስፈርቶች ነው። አርቴፊሻል ኢንተለጀንስ በዚህ መስክ በጣም ጠቃሚ ነው፡ በሴንሰር ዳታ ሉህ ላይ ተመስርተው የመመዝገቢያ ቅንብሮችን ማውጣት፣ የግንኙነት ፕሮቶኮልን ኮድ ማድረግ፣ የሰዓት ቆጣሪ መቆራረጥን ማዘጋጀት ይችላል። ነገር ግን የተከተቱ ስርዓቶች AI በጣም "አሳማኝ ውሸት" ከሚፈጥሩባቸው ቦታዎች አንዱ ነው; ምክንያቱም የመመዝገቢያ አድራሻዎች፣ ቢት ጭምብሎች እና የጊዜ አጠባበቅ ባህሪ ለቦርዱ የተወሰኑ ናቸው እና አንድ ትንሽ ስህተት አጠቃላይ ባህሪውን ይረብሸዋል። በዚህ ክፍል ውስጥ፣ በ AI የተከተተ ኮድ እንዴት እንደሚፈጠር እና ወደ ሃርድዌር ከመጫንዎ በፊት እንዴት እንደሚገመግመው እንሸፍናለን።
የተከተተ ኮድ ከንፁህ ሶፍትዌር ልዩነት
የዴስክቶፕ ፕሮግራም ብዙ ማህደረ ትውስታ፣ ኦፕሬቲንግ ሲስተም እና የማረም ቀላልነት አለው። የተከተተ ኮድ ከእነዚህ ውስጥ አብዛኛዎቹ ይጎድላቸዋል፦
መጠን
ዴስክቶፕ
የተከተተ ስርዓት
ትውስታ
የጂቢ ደረጃ
የኪቢ ደረጃ (ለምሳሌ 2 ኪባ ራም)
ጊዜ
በአጠቃላይ ተለዋዋጭ
ጥብቅ ፣ እውነተኛ ጊዜ
ማረም
ቀላል (አራሚ፣ ሎግ)
ሃርድ (JTAG፣ ተከታታይ፣ LED)
የስህተት ውጤት
ፕሮግራሙ ተበላሽቷል
አንቀሳቃሽ/ሃርድዌር ሊበላሽ ይችላል።
የሃብት መዳረሻ
የስርዓተ ክወና ረቂቅ
ወደ መዝገብ ቤት በቀጥታ መድረስ
እነዚህ ልዩነቶች የ AI ውፅዓትን ለመገምገም የእርስዎን መስፈርት ይወስናሉ፡ የማህደረ ትውስታ አጠቃቀም፣ የእውነተኛ ጊዜ (የማይታገድ) እና የሃርድዌር መመዝገቢያ ትክክለኛነት ሁል ጊዜ በፍተሻ ዝርዝርዎ አናት ላይ ናቸው።
ማገጃ vs የማያግድ ኮድ
በጀማሪዎች (እና በተደጋጋሚ በ AI) በጣም የተለመደው ስህተት መዘግየት () መጠቀም ነው. መዘግየት (1000) ማቀነባበሪያውን ለ 1 ሰከንድ ይቆልፋል; በዚህ ጊዜ ውስጥ ምንም ሌላ ዳሳሾች ሊነበቡ አይችሉም, ምንም አዝራሮች ሊቆጣጠሩ አይችሉም. ይህ በሜካትሮኒክስ ውስጥ ተቀባይነት የለውም. በምትኩ ሚሊስ() ላይ የተመሰረተ የማያግድ ስርዓተ-ጥለት ስራ ላይ ይውላል።
// BAD: blocker - ፕሮሰሰር ለ 1 ሰከንድ ባዶ ሉፕ () ሌላ ማንኛውንም ሥራ መሥራት አይችልም { digitalWrite (LED, HIGH); መዘግየት (1000); // ሁሉም ነገር ይቆማል ዲጂታል ጻፍ (LED, LOW); መዘግየት (1000); // የአደጋ ጊዜ ቁልፍ በዚህ ጊዜ ሊነበብ አይችልም!}// ጥሩ፡ አለማገድ -- ምልክቱ አልተዘጋም፣ ሌሎች ተግባራት የሚከናወኑት ከሆነ (nowMs - previousMs >= interval) { previousMs = nowMs; ledStatus = !ledStatus; digitalWrite (LED, ledStatus); } buttonCheck(); // በእያንዳንዱ ዑደት ውስጥ ሊሠራ ይችላል sensorRead (); //በማንኛውም ዑደት ውስጥ መሮጥ ይችላል}
የማይከለክለው ስርዓተ-ጥለት የተከተተ ሜካትሮኒክስ መሰረት ነው፡ የመቆጣጠሪያው ዑደት ያለማቋረጥ ይፈስሳል፣ ምንም ተግባር ሌላ አይዘጋም። ኮድ በሚጽፉበት ጊዜ "መዘግየትን አይጠቀሙ, ሚሊስ-ተኮር ያልሆነ እገዳን ይፃፉ" መንገር የውጤቱን ጥራት በቀጥታ ያሻሽላል.
ጠቃሚ ምክር፡ መዘግየትን ፈልግ( ከ AI በተከተተው ኮድ ውስጥ። በዋናው መቆጣጠሪያ ዑደት ላይ መዘግየት ካዩ፣ ብዙውን ጊዜ ያ ኮድ ለእውነተኛ ጊዜ ስርዓት ተስማሚ አይደለም እና እንደገና መፃፍ አለበት።
ማቋረጥ እና ሰዓት ቆጣሪዎች
ጊዜ-ወሳኝ ኩነቶችን (የመቀየሪያ ምት፣አዝራር፣ፔርዲካል ሳምፕሊንግ) በዋናው ዙር ከመጠበቅ ይልቅ በማቋረጥ እንይዛለን። የማቋረጡ መደበኛ (አይኤስአር) አጭር እና በጥንቃቄ መፃፍ አለበት: ምንም መዘግየት, Serial.print ወይም ረጅም ስሌቶች በውስጡ; የተጋሩ ተለዋዋጮች ተለዋዋጭ ምልክት ተደርጎባቸዋል።
ተለዋዋጭ ረጅም ኢንኮደር ቆጣሪ = 0; // ISR እና loop ይጋራሉ -> ተለዋዋጭ ሁኔታ ባዶ enkoderISR() {// አጭር ISR፡ ብቻ ይቁጠሩ፣ ሌላ ስራ አይሰሩ (digitalRead(ENC_B)) enkoderCounter++; ሌላ encoderCounter--;} ባዶ ማዋቀር () {pinMode(ENC_A, INPUT_PULLUP); pinMode(ENC_B፣ INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(ENC_A)፣ enkoderISR፣ RISING)፣}void loop() {ረጅም ቆጣሪ; ምንም ማቋረጦች (); // አጭር ማቋረጦች ለአቶሚክ ንባብ ቆጣሪ = encoderCounter; ማቋረጦች (); //ከቆጣሪው ጋር ደህንነቱ በተጠበቀ ሁኔታ ያስተላልፉ...}
በዚህ ምሳሌ ውስጥ ሶስት ወሳኝ ነጥቦች ኤአይኤ ብዙ ጊዜ የሚያመልጣቸው ናቸው፡ (1) የተጋራው ኢንኮደር ቆጣቢ 'ተለዋዋጭ' መሆን አለበት አለበለዚያ የአቀናባሪው ማመቻቸት ዝማኔዎችን አያመልጥም። (2) ISR አጭር መሆን አለበት; (3) ባለ ብዙ ባይት ተለዋዋጭ በዋናው ሉፕ ውስጥ ሲያነቡ ለአቶሚክ ንባብ መቋረጦች ለአጭር ጊዜ መዘጋት አለባቸው፣ አለበለዚያ ISR በንባብ ጊዜ ጣልቃ ገብቶ ግማሽ/የተበላሸ እሴት ሊነበብ ይችላል (የዘር ሁኔታ)። እነዚህ ሦስቱ በ AI ኮድ ውስጥ መገኘታቸውን ያረጋግጡ።
ትክክለኛነት እና የውሂብ ሉህ ይመዝገቡ
AI የአንድን ዳሳሽ መመዝገቢያ አድራሻ ወይም የኤም.ሲ.ዩ ውቅር ቢት በሚያስገርም ሁኔታ ሊያሳስት ይችላል። ለምሳሌ የ MPU6050 IMU የኃይል አስተዳደር መዝገብ 0x6B ነው; AI ይህንን እንደ 0x6A ከሰጠ ፣ ኮዱ ተሰብስቧል ፣ የሚሰራ ይመስላል ፣ ግን ዳሳሹ አይነሳም። እንደዚህ ያሉ ስህተቶች የሚታወቁት ከዳታ ሉህ ጋር ሲወዳደር ብቻ ነው።
// MPU6050 መቀስቀሻ፡ በውሂብ ሉህ PWR_MGMT_1 = 0x6B፣ እሴት 0x00# MPU_ADDR 0x68# ይግለጹ PWR_MGMT_1 0x6B // <-- VERIFY from datasheetWire.beginTransmission(MPU_ADDR)፤Wire.write(PWR_MGMT_1)፤Wire.write(0x00)፤ // ከእንቅልፍ ሁነታ ይነሳሉWire.endTransmission (እውነት);
ትኩረት፡ እያንዳንዱን የመመዝገቢያ አድራሻ፣ የቢት ማስክ እና የI2C/SPI አድራሻ ከዳታ ሉህ ያረጋግጡ። እነዚህ እሴቶች ካርድ እና ቺፕ ልዩ ናቸው; AI "ያስታውሳል" የሚለው ዋጋ ከሌላ ቺፕ ክለሳ ሊሆን ይችላል። የተሳሳተ መዝገብ በጸጥታ ወደ የተሳሳተ ባህሪ ይመራል።
ደካማ ፈጣን/ጠንካራ ፍጥነት
ደካማ፡"የሙቀት ዳሳሽ በESP32 ላይ አንብብ።"(የትኛው ዳሳሽ? የትኛው ፕሮቶኮል? የትኛው ፒን? አጠቃላይ፣ የተሳሳተ ኮድ) STRONG:" DS18B20 የሙቀት ዳሳሽ በESP32 (Arduino framework) ላይ ከGPIO4 ከOneWire ጋር አንብብ። አለማገድ ይፃፉ፣ በየ 1 ሰከንድ ናሙና (በመዘግየት፣ ሚሊስ ላይ የተመሰረተ ስህተት እሴት 2 አዘጋጅ)። 85) እባክዎ በመጀመሪያው አስተያየት የሚጠቀሙባቸውን እያንዳንዱን ቤተ-መጽሐፍት ይግለጹ።
ኃይለኛ ማበረታቻ; ቺፕ፣ ማዕቀፍ፣ ዳሳሽ፣ ፕሮቶኮል፣ ፒን፣ የናሙና ንድፍ፣ የስህተት ሁኔታ እና የማህደረ ትውስታ ገደብ ይሰጣል። በዚህ መንገድ ውጤቱ የተረጋገጠ እና ተጨባጭ ነው.
የተከተተ ኮድ ዝርዝርን ይገምግሙ
የ AI ውፅዓት ከመጫንዎ በፊት፣ በዚህ ዝርዝር ውስጥ ያስተላልፉት።
- ማገድ፡ በዋናው ዑደት ውስጥ መዘግየት ወይም ረጅም እገዳ አለ?
- ተለዋዋጭ፡ ተለዋዋጮች ከአይኤስአር ጋር የሚለዋወጡ ናቸው?
- የአቶሚክ መዳረሻ፡ ባለብዙ ባይት የተጋራ ተለዋዋጭ ለማንበብ ደህንነቱ የተጠበቀ ነው?
- ይመዝገቡ፡ አድራሻዎቹ እና ቢት ጭምብሎች ከዳታ ሉህ ጋር ተኳሃኝ ናቸው?
- ማህደረ ትውስታ፡ ሕብረቁምፊ፣ ትልቅ ድርድሮች፣ መደጋገም የKB ደረጃ የትርፍ ፍሰት ይፈጥራል?
- የስህተት አያያዝ፡ ሴንሰር የማንበብ ስህተቶች፣ የግንኙነቶች ጊዜ ማብቂያዎች ይስተናገዳሉ?
- ደህንነቱ የተጠበቀ ጅምር፡ የአንቀሳቃሹ ውፅዓቶች በሚነሳበት ጊዜ ደህንነቱ በተጠበቀ ሁኔታ ውስጥ ተቀምጠዋል?
ሚኒ መያዣ
የተከተተ ሲስተሞች መሐንዲስ ባራን አይኤምዩን ለድሮን የሚነበብ ኮድ ይጽፋል። ኮዱ ያጠናቅራል እና የሚሰራ ይመስላል ፣ ግን የማዕዘን እሴቶቹ ትርጉም የለሽ ናቸው። ባራን የማረጋገጫ ዝርዝሩን ተግባራዊ ያደርጋል፡ የመመዝገቢያ አድራሻዎችን ከዳታ ሉህ ጋር በማነፃፀር AI ጋይሮስኮፕ ውቅር መመዝገቢያውን (ከ0x1B ይልቅ 0x1A) በስህተት እንዳወጣ ተረድቷል፣ ስለዚህ የስሜታዊነት መለኪያው የተሳሳተ ነው። አንዴ ከተስተካከለ እሴቶቹ ይቀመጣሉ። ከዚያም በዋናው ዑደት ውስጥ መዘግየት (10) ማሳሰቢያዎች; ይህንን ወደ ሚሊስ-ተኮር መዋቅር መለወጥ, ምክንያቱም የበረራ መቆጣጠሪያ ዑደትን ማገድ ተቀባይነት የለውም. በመጨረሻም, የተጋራው የቆጣሪ ተለዋዋጭ ተለዋዋጭ አለመሆኑን እና ያክላል. AI አጽሙን በፍጥነት ሰጠ; ነገር ግን የግምገማው ዝርዝር ሶስት የተለያዩ ስህተቶችን ተይዟል፡ መመዝገቢያ፣ ማገድ እና ተለዋዋጭ፣ እና ሃርድዌሩ ምንም አይነት አደጋ ላይ አልነበረም።
የተለመዱ ስህተቶች
- በዋናው መቆጣጠሪያ ዑደት ውስጥ መዘግየት()ን በመጠቀም የእውነተኛ ጊዜ ምላሽን መግደል።
- ከአይኤስአር ጋር የሚጋራውን ተለዋዋጭ ተለዋዋጭ ከማድረግ እና ጸጥ ያለ የውሂብ መበላሸትን ያስወግዱ።
- ባለብዙ ባይት የተጋራ ተለዋዋጭ ከአቶሚክ ያልሆነ ማንበብ እና የዘር ሁኔታን መፍጠር።
- በ AI የተሰጡትን የመመዝገቢያ/ቢት ጭምብሎች በውሂብ ሉህ አለማረጋገጥ።
- Strings እና ትልቅ ድርድርን በውስን RAM በመጠቀም የማህደረ ትውስታ ፍሰት መፍጠር።
- መጀመሪያ ላይ የአንቀሳቃሽ ውፅዓቶችን ደህንነት ማረጋገጥን በመርሳት ላይ።
በማጠቃለያው
- የተከተተ ኮድ; በተወሰነ የማስታወስ ችሎታ፣ በጠባብ ጊዜ እና በቀጥታ የመመዝገቢያ መዳረሻ ይሰራል።
- በዋናው ዑደት ውስጥ፣ ከመዘግየት ይልቅ ሚሊስ ላይ የተመሠረተ የማያግድ ንድፍ ጥቅም ላይ ይውላል።
- ISR አጭር ነው; የተጋሩ ተለዋዋጮች ተለዋዋጭ እና አቶሚክ ተደራሽ መሆን አለባቸው።
- የመመዝገቢያ አድራሻዎች እና ቢት ጭምብሎች ሁልጊዜ በመረጃ ወረቀቱ ላይ የተረጋገጡ ናቸው; AI ስህተት ሊሆን ይችላል.
- የማህደረ ትውስታ፣ የስህተት አያያዝ እና ደህንነቱ የተጠበቀ ጅምር ሁኔታ ሁል ጊዜ ይፈተሻሉ።
- ኃይለኛ ማበረታቻ; ቺፕ፣ ማዕቀፍ፣ ዳሳሽ፣ ፕሮቶኮል፣ ፒን እና እገዳዎችን ያካትታል።
የመተግበሪያ ተግባር
ዳሳሽ (ለምሳሌ DS18B20፣ MPU6050 ወይም HC-SR04) እና ማይክሮ መቆጣጠሪያ (Arduino/ESP32/STM32) ይምረጡ። AI በዚህ ክፍል ውስጥ ካለው ኃይለኛ ፈጣን አብነት ጋር የማይከለከል የንባብ ኮድ እንዲያመነጭ ያድርጉ። ከዚያም የግምገማ ማመሳከሪያ ዝርዝሩን ሰባት ንጥሎች አንድ በአንድ ይከተሉ፡ ቢያንስ አንድ የመመዝገቢያ/የፒን ዋጋን ከዳታ ሉህ ጋር ያወዳድሩ፣ የ loop መዘግየቶችን ያረጋግጡ፣ የተጋሩ ተለዋዋጮች ተለዋዋጭ ሁኔታን ያረጋግጡ። በመጀመሪያው ሙከራ ላይ ስንት እቃዎች "አልፈዋል" እና ስንት እርማት ያስፈልጋል? ያገኙትን እያንዳንዱን ችግር እና መፍትሄውን ያስተውሉ.