äžè¬ã«ãç§ã®ãã©ã©ã€ã«ã®å Žåãããã³ä»ã®å€ãã®å Žåãç§ã¯ãã®ããã«è¡ããªããã°ãªããŸããïŒæçãèŠãŠããããäžæåæ¢ããèè ã®åŸã«ãããæ°åç¹°ãè¿ããèŠç¶ããŸããã äœããæ確ã§ã¯ãªãå Žå-å·»ãæ»ããããå¯æ¥ã«èŠããã ããããããªãã®æãå¿ããå Žåãããããã¹ãŠå·»ãäžããæ¹æ³ã¯ïŒ ããã«ãç§ã®å Žåã巚倧ãªã¢ã³ãŒãã£ãªã³ã§ã¯ãªããŠããããã€ãã¯ããããã©ã©ã€ã«ã§ã¯å¿ããã ã ãããããªãã¯èªåã®è¶³ã§äœæ¥ããå¿ èŠããããŸãã
äœå¹Žãåãé²æ©çãªäººé¡å šå¡ãPS / 2ããŒããŒãã䜿çšããŠãããšãã圌ãã¯ãããžã§ã¯ãã®ããã«äœåãã®USBããŒããŒããæã£ãŠããŸããã ãã¡ããããããã1å°ã®ãã·ã³ã«æ¥ç¶ãã1å°ã§CtrlãæŒãã2å°ç®ã§AltãæŒãã3å°ç®ã§DelãæŒããŸããã å¹æãéæãããŸããã ãã以æ¥ãUSBããŒããŒãã¯å®å šã«äžŠåã«åäœããããšãç¥ã£ãŠããã®ã§ãå¥ã®ããŒããŒããæ¥ç¶ããŠã¡ã€ã³ããŒããŒããå©ãã代ããã«ããã€ãã®ã³ãŒããéä¿¡ã§ããŸãã
ããã§ãããŒããŒãã®ãµããããŠããã¬ãŒã€ãŒã®å¶åŸ¡ã³ãŒããéä¿¡ããããã«ãäœããšããã¢ã€ãã¢ãçãŸããŸããã ãã¬ãŒã€ãŒãšããŠãæåã¯VLCãã¬ãŒã€ãŒãéžæããŸãããããã¯ãã³ã³ãããŒã«ãã¿ã³ãååã«ææžåãããŠããããã§ãããåŸã§éžæããã³ãŒãã¯ããã«ã¹ã¯ãªãŒã³ã¢ãŒãã§YouTubeã®ãããªãèŠããšãã«ãŸã£ããåãç®çãæã€ããšãããããŸããã ããã¯è¯ãããšã§ããè€æ°ã®ãªã³ã©ã€ã³ãã¥ãŒã§ã¯ãåºåã®å°è±¡ã«å¯ŸããŠãäœããäœè ã®é ã«æµ®ãã¶ããã§ãã ããŠã³ããŒããããåç»ãèŠãã®ã¯ããã»ã©å«ççã§ã¯ãããŸããã
ãã®ãããããã€ã¹ã®èšèšãéå§ããŸãã
äœæ¥ããžãã¯
æåã¯ãããã€ãã®ããã«ãäœããããšæããŸããããããããç¬èªã®æ©èœãåããŠããŸãã æåã«ããããã®æ©èœã®3ã4ãã«ãŠã³ãããŸããããªã³ããªããããã§ã®é¢šã颚ã®æ»ãã ããããããããç§ã¯ãããã©ããããã®ãã©ã¹ããã¯ãå¿ èŠãšããããèãåºããŸãã-ã¿ããã§ããã«ãç解ããæ¹æ³ããããŠæ²ããã£ãã§ãã ãã®ãããããžãã¯å šäœãæ ¹æ¬çã«ä¿®æ£ããããšã決å®ãããŸããã ã©ããªæ©èœãå¿ èŠã§ããïŒ ã¹ã¿ãŒãã¹ãããããã ããå€ãã®å ŽåãåãããŒãéåžžã¯ã¹ããŒã¹ã§ãã³ã°ããŸãã ãããŠå·»ãæ»ãã VLC Playerã«ã¯ãShift +å·ŠãããããŸãã çµå±ã®ãšãããYouTubeãå€æããŸããã ãããŠãããªããããæããªãããã以äžã®æ©èœã¯ãããŸããã
ãããïŒ ããã«ã«ãã¹ã¿ãŒã-ã¹ããããæ©èœãçæé䜿çšãããé·ã-ãå·»ãæ»ããæ©èœã䜿çšãããŸãããã
å°æ¥çã«ã¯ãæ©èœãæ¡åŒµã§ããŸãã ã¢ãŒã«ã¹ä¿¡å·ãèªèããããã«ããã«ããã¬ãŒãã³ã°ã§ããŸãã ãã®èããç¥ã£ã劻ã¯ãã¢ã€ãªãã·ã¥ãã³ã¹ã®èŠçŽ ã䜿çšããŠå¶åŸ¡ã€ã³ãã«ã¹ãã³ãŒãã£ã³ã°ããããšãææ¡ããŸãã...äžè¬ã«ãå¿ èŠã«å¿ããŠæ©èœãæ¡åŒµã§ããŸãã ãããã1ã€ã®ããšã¯æããã§ãã1ã€ã®ããã«ã§ååã§ãã ããŠãä»ã¯é·æŒããšçæŒãã®èªèãè¡ããŸãã
ååŠ
家ã§ã¹ãªããã§æ©ã人ã«ã¯ãéåžžã«ç°¡åãªè§£æ±ºçããããŸãïŒThingiverseã®Webãµã€ãã§èŠã€ããŸããïŒã çŽåŸã1ã»ã³ããè¶ ãããã¿ã³ãåããç®±åã®ãªããžã§ã¯ãã«ãã蟌ã¿ãããã«ãååŸããŸãã åé¡ã¯ãç§ã¯ã¹ãªããã奜ãã§ã¯ãªããšããããšã§ãããã®ããããã®ãªãã·ã§ã³ã¯å人çã«ã¯é©ããŠããŸããã 足ãçããªãããã«ãããåºãé¢ãå¿ èŠã§ãã
倧éã®ããã«ãã¢ãªãšã¯ã¹ãã¬ã¹ã§è²©å£²ãããŠããŸãããããã¹ã€ãããšããåèªãæ€çŽ¢ããå¿ èŠããããŸãã ããã®äŸ¡æ Œã¯30ã«ãŒãã«ããå§ãŸããŸããããã®äŸ¡æ Œã§ã¯é éè²»çšã¯çŽ400ã«ãŒãã«ã«ãªããŸãã æ€çŽ¢ããåŸããäŸ¡æ Œãšé éæãã®åèšã150ã«ãŒãã«ã«ãªãããã«ãèŠã€ããããšãå¯èœã§ããããšãããããŸããã ãã ããå¹³åã§æ°ãæåŸ ããªããã°ãªããŸããïŒæè¿3ãæéSDã«ãŒããè³Œå ¥ããŸããïŒã
ããã§ãç§ã¯ããéãæ¹æ³ã§è¡ããŸããïŒ3Dããªã³ã¿ãŒã§ããã«ãäœããŸããã å人çãªçµéšïŒããã³Thingiverseã®ãã¹ãŠã®ãªãã·ã§ã³ïŒã¯ã軞ãéå±ã§ãªããã°ãªããªãããšã瀺ããŠããŸããããã§ãªããã°ããã¹ãŠãããã«å£ããŠããŸããŸãã ããããåãä»ããããæ¢åã®M6x60å®¶å ·çšãã«ããšãé£æ¥ããã©ãžãªããŒãã«ãããã¿ã³ïŒPSW-13ïŒãåããã§ããéããã©ã¹ããã¯ã®ããã«èŒªéãæããŸããã ããããœãŒã¹è³æã®èŠãç®ã§ãïŒ
äžååã«æ¿å ¥ãããŠããŸãã ã芧ã®ãšãããäž»ãªèšèšäžã®ç¹åŸŽã¯ãå°ãªããšã4ããªã¡ãŒãã«ã®åãã®å£ã§ãã ãããã®ãã©ã¡ãŒã¿ãŒã䜿çšãããšãç©ãããªãããã¿ã€ããŒã§ãéåžžã«èä¹ æ§ãé«ããªããŸãã ãã¿ã³ã¯ãããããªãã§åãä»ããããŸãããã®äžã«ç©ºã®éšåããããšããã©ã¹ããã¯ãç Žæããéåžžã«ããä¿æãããŸãã
ããã¯ã»ãšãã©ã³ã³ãã€ã«ãããããŒãžã§ã³ã§ãïŒ
ããã«ã¢ã»ã³ããªã¯æ¬¡ã®ãšããã§ãã
ååãšããŠãSTLãã¡ã€ã«ãæ·»ä»ããŸããã解決çã¯å®å šã§ã¯ãããŸããã§ããã ããã§ãã誰ã§ããããç¹°ãè¿ãããšãã§ããŸãïŒå¯Ÿå¿ããããããšPSW-13ãã¿ã³ãä»ããM6x60ãã«ããèŠã€ããå ŽåïŒã ã¯ãããŠååã§ã-ã¡ã«ããã¯ã«ã¹ã¿ã³ããæŒããŠALIã§æ³šæã§ããŸãã
USBããã€ã¹
æè¿PSoCãç©æ¥µçã«å®£äŒããŠããŸãããããã«ã§PSoCã䜿çšããããšã¯åäŸã®ãªãç¡é§ã§ãã æè¯ã®ãœãªã¥ãŒã·ã§ã³ã¯STM32F103C8T6ã«åºã¥ãããã¬ããããŒãã§ãããALI Expressã§çŽ120ã«ãŒãã«ïŒé éãå«ãïŒã§æ³šæã§ããããã«ãªããŸããã
ãã¡ãããAVRã«åºã¥ããå®äŸ¡ãªããŒãããããšæšæž¬ã§ããŸãããäŸ¡æ Œå·®ã¯ããã»ã©å€§ãããªããSTM32ã¯JTAGãä»ãããããã°ã«ããéçºæéãå€§å¹ ã«ççž®ãããŸãã 1æéïŒèªå® ã§ãïŒ-è²»çšãããããŸãã ãããã£ãŠããããã€ã¹ã®äŸ¡æ Œ+人件費ããšããç·ååºæºã«ããã°ãSTM32F103ã¯ãã®ã¿ã¹ã¯ã«æé©ãªãªãã·ã§ã³ã§ãã ããã«ããã®ãããªå Žåã«åããŠããã®ãããªã¢ãã¯ã¢ããã12ããŒã¹çšæããŠããã®ã§ãé éåŸ æ©æéã¯ãŒãã«ãªããŸããã
ãã®ããããããŒã¹ã«ããæ¢è£œã®USBããŒããŒãã®ããããµãŒãã£ã³ãããŸããã Habrã«é¢ããèšäºã§USBããŠã¹ã®äœãæ¹ãèŠã€ããŸããã ããããããŒããŒããå¿ èŠã§ãã ããŒããŒãã®ãããã¯ã«ã€ããŠã¯ããã©ãŒã©ã ã§ããããã®è³¢ããã³ããèŠã€ããŸããïŒããããäœãæºåãã§ããŠãããããã£ãã§ãïŒã ããããæ±ããè ã¯åžžã«èŠã€ããŸãã å¿ èŠãªãã®ããã¹ãŠæã£ãŠããçŽ æŽãããèšäºã次ã«ç€ºããŸãïŒã³ãŒãã«ã¯1ã€ãããŸããããã®éãã·ã¢èªãšããæœåšçãªDeadLockãæããŠããŸããããç¬èªã®ã³ãŒããäœæããŸãïŒã äž»ãªããšã¯ããã¹ãŠã®æé ãæ確ã«èšè¿°ãããŠããããšã§ããCubeMXã§äœæãããå®æãããéãããUSBããŒããŒããååŸããæ¹æ³ã§ãã èè ãããªãã£ãå¯äžã®ããšã¯ãããŒã³ãŒããå ¬éããªãããšã§ããã ããã«è¿œå ããŸãïŒ
è»èã®ããšã¯ãææ°ããŒãžã§ã³ã®Cube MXã§ã¯ããã¡ã€ã«ãé¢æ°ãããã«ã¯å®æ°ã®ååããã®èšäºã§æå®ããããã®ãšãããã«ç°ãªããŸãããé¡æšã«ãã£ãŠãã¹ãŠãããã«èŠã€ãããŸãã æ°ããããŒãžã§ã³ã®ããã¹ããæžãããšã¯ã§ããŸãããéçºè ãåã³ãã¹ãŠãå€æŽããªããšããä¿èšŒã¯ã©ãã«ãããŸããïŒ åœŒãã¯ãããããã®ã奜ãã§ãã äžè¬çã«ãç§ã®äŸã§ã¯ã¢ããã°ãèŠãããšãã§ããŸãã
ã ããã Cube MXã§åºæ¬ãããžã§ã¯ããäœæããäžèšã®èšäºã§æšå¥šãããŠãããã¹ãŠã®å€æŽãå ããŸããã 次ã¯ïŒ 次ã«ããã¿ã³ããŒãã®èª¬æãè¿œå ããŸãã PB12ãéžæããŸããïŒå¯Ÿå¿ããé£çµ¡å ããã¬ããããŒãã®é ã«ããããã§ãïŒã ç§ã¯åžžã«Konstantin Chizhovã®mcucppã©ã€ãã©ãªã䜿çšããŠéãæ±ãããããããžã§ã¯ãããããã£ã®ã-C99ããã¯ãå®çŸ©ãåé€ãã main.cã®ååãmain.cppã«å€æŽããŠããã宣èšãè¿œå ããŸãã
typedef Mcucpp::IO::Pb12 pedal1;
mainïŒïŒé¢æ°ã«ããŒãåæåãè¿œå ããŸãïŒããŒãã¯ãããã³ã°ãæå¹ã«ããèã®æ¹åãèšå®ãããµã¹ãã³ããŒããªã³ã«ããŸãïŒïŒ
pedal1::ConfigPort::Enable(); pedal1::SetDirRead(); pedal1::SetPullUp (pedal1::Port::PullUp);
å®éã«ã¯ããã¹ãŠãåæåãããŸãã Verilogããã»ã¹ã®ã€ã¡ãŒãžã§æ¬äœãäœæããããšã«ããŸããã çç±ãããããŸããããã ãããã£ãã ãã§ãã ãã®ããã»ã¹ã¯éåžžãã¯ããã¯ãã«ã¹ã§åŒã³åºãããŸãã ã·ã¹ãã ãã£ãã¯ã¯å®å šã«ãã£ãã¯ãšããŠååŸãããããšã«ããŸããã ãã®ããã stm32f1xx_it.cãã¡ã€ã«ã®ã·ã¹ãã ãã£ãã¯ãã³ãã©ãŒã®éåžžã®æ©èœã次ã®ããã«è¿œå ãããŸããã
åãããã¹ãïŒ
void SysTick_Handler(void) { /* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); HAL_SYSTICK_IRQHandler(); /* USER CODE BEGIN SysTick_IRQn 1 */ TickProcess(); /* USER CODE END SysTick_IRQn 1 */ }
TickProcessïŒïŒé¢æ°èªäœãmainã«é 眮ããŸãã cpp ã æåã«å šäœãæ€èšãã次ã«éšåçã«æ€èšããŸãã
å®å
šãªæ©èœã¯æ¬¡ã®ãšããã§ãã
uint8_t report [8] = {0,0,0,0,0,0,0,0}; uint32_t* pReport = (uint32_t*)report; extern "C" void TickProcess() { // 20!!! static const int shortTime = 700; // static const int longTime = 2000; // static int localTick = 0; static int tickDuringButton = 0; static bool bButtonStatePrev; bool bButtonState = pedal1::IsSet(); // if ((!bButtonState) && bButtonStatePrev) { tickDuringButton = 0; } // if (bButtonState && (!bButtonStatePrev)) { // // , 50 () if ((tickDuringButton >100)&&(tickDuringButton < shortTime)) { // report [2] = 0x2C; } } // if ((!bButtonState) && (!bButtonStatePrev)) { if ((tickDuringButton == shortTime)||(tickDuringButton > longTime)) { // Shift+ report [0] = 2; // Shift report [2] = 0x50; // } } // bButtonStatePrev = bButtonState; tickDuringButton += 1; if (localTick++ % 20 == 0) { USBD_HID_SendReport (&hUsbDeviceFS,report,sizeof(report)); pReport [0] = 0; pReport [1] = 0; } }
ãã®ãã³ãã©ãŒã§å®è£ ãããæåã®ã¿ã¹ã¯ã¯ç°¡åã§ãã 20ããªç§ããšã«ãæŒããããã¿ã³ã«é¢ããæ å ±ãå«ãã¬ããŒããéä¿¡ããŸãïŒãã¿ã³ããªãå Žåã¯ããŒãã ãã§éä¿¡ããŸãïŒã é¢æ°ã¯ããªç§ããšã«åŒã³åºããããããã¬ããŒãã¯20ã®åŒã³åºãã®ããããã«éä¿¡ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãé¢æ°ã®å é ã«å€æ°ããããŸãã
static int localTick = 0;
æåŸã®ã³ãŒãïŒããŒã¿ãéä¿¡ããåŸã次ã®ã»ãã·ã§ã³ãããŒãã®éä¿¡ãéå§ããããã«ãããã¡ãŒãæ¶å»ããŸãïŒïŒ
if (localTick++ % 20 == 0) { USBD_HID_SendReport (&hUsbDeviceFS,report,sizeof(report)); pReport [0] = 0; pReport [1] = 0; }
2çªç®ã®ã¿ã¹ã¯ã¯ããè€éã§ãã ããã«ãèžãæ§è³ªã远跡ããåŸç¶ã®æåºã®ããã«ã¬ããŒããåããŸãã ã€ããªãã®ãŒã¯Verilogã«äŒŒãŠãããšèšã£ãã®ã¯ãªãã§ããïŒ ç§ã¯ãã€ããã®ãããªèšèªã®éãããã£ããããŠããã®ã§ããã¿ã³ã®çŸåšã®ç¶æ ãæ ŒçŽããå€æ°ããããŸãïŒ
bool bButtonState = pedal1::IsSet();
ãŸãã以åã®ç¶æ ãä¿åãããå€æ°ããããŸãïŒæãåºãããã«ã以åã®ç¶æ ã¯ã1 msã¿ã€ããŒããã®ä»¥åã®å²ã蟌ã¿åŠçäžã®ãã¿ã³ã®ç¶æ ã§ãïŒã
static bool bButtonStatePrev;
æŒããããã¿ã³ã®å€ã¯false ãæŒããããã¿ã³ã®å€ã¯trueã§ãã ãããã£ãŠããã¿ã³ã®åçãªç¶æ ã«ã€ããŠã¯ãã€ã§ãçµè«ä»ããããšãã§ããŸãã
bButtonState | bButtonStatePrev | ç¶æ |
---|---|---|
æ¬åœ | æ¬åœ | é·ããªãªãŒã¹ |
æ¬åœ | åœ | åã®ã¡ãžã£ãŒã§ãªãªãŒã¹ |
åœ | æ¬åœ | åã®å°ç¯ã§æŒããã |
åœ | åœ | é·æŒã |
2ã€ã®å®æ°ãå°å ¥ããŸãã çæŒãã®æéãèšå®ããŸãã ãã¬ã¹ã®æç¶æéã700ããªç§æªæºã®å Žåã¯ãçåœã§ãã 2çªç®ã¯ãèªåãªããŒãããªã³ã«ãªãæéãèšå®ããŸãã 700ããªç§åŸã«ããŒã³ãŒãã®éä¿¡ãéå§ãããšããã¬ãŒã€ãŒã¯æ¥æ¿ã«å·»ãå§ããŸãã ããã¯çµéšçã«ç¹å®ãããŠããŸãã ãããã£ãŠãäœæ¥ã®ããžãã¯ã¯æ¬¡ã®ãšããã§ãã700ããªç§åŸãåäžã®ã³ãŒããShift + Leftããéä¿¡ããããã®åŸããŠãŒã¶ãŒã¯ããã«ãæŸãæ©äŒãäžããããŸãã ããã«ãæŒãç¶ããŠããå Žåã2ç§ããã¯ãããã«ãæŸããããŸã§ãã®ã³ãŒãã®ç¶ç¶çãªéä¿¡ãæ¢ã«éå§ãããŠããŸãã
const int shortTime = 700; // const int longTime = 2000; //
ãã¿ã³ãæŒãããŠããæéã¯å€æ°ã«ä¿åãããŸãïŒ
static int tickDuringButton = 0;
ãã¿ã³ãæŒãããã°ããã®å Žåããã®å€æ°ããŒãã«ããŠãæ°ããæéã®æž¬å®ãéå§ããŸãã
// if ((!bButtonState) && bButtonStatePrev) { tickDuringButton = 0; }
ãã¿ã³ããªãªãŒã¹ãããã°ããã®å Žåã¯ãæŒãããæéã確èªããŸãã ã»ãã®å°ãïŒä»ã§ã¯ã100ããªç§æªæºããšè¡šç€ºãããŠããŸãïŒ-ããã¯ãããã¹ãã§ãã ããã¯ã«ãŠã³ããããŸããã ãã®ã¯ãªãã¯ã¯ç¡èŠããŠãã ããã çæŒãã®æéãè¶ ããŠäœãããªãå Žåãé·æŒããäžã§åŠçãããŸãã çæŒãã§ããããã¡ã«ã¬ããŒããäœæããŸãïŒã¹ããŒã¹ã空ããç¶æ ã§ã¬ããŒããäœæãããŸãïŒã
// if (bButtonState && (!bButtonStatePrev)) { // // , 100 () if ((tickDuringButton >100)&&(tickDuringButton < shortTime)) { // report [2] = 0x2C; } }
ãã¿ã³ãé·æŒããããŠããå Žåã次ã®2ã€ã®å Žåã«ãShift +å·Šããéä¿¡ããŸãã
- ãã¿ã³ã¯æ£ç¢ºã«700ããªç§ä¿æãããŸãïŒåäžããã±ãŒãžïŒã
- ãã¿ã³ã¯2ç§ä»¥äžä¿æãããŸãïŒãã¿ã³ãæŸããããŸã§ãåŸç¶ã®åã¬ããŒãã§éä¿¡ããŸãïŒã
// if ((!bButtonState) && (!bButtonStatePrev)) { if ((tickDuringButton == shortTime)||(tickDuringButton > longTime)) { // Shift+ report [0] = 2; // Shift report [2] = 0x50; // } }
å®éãããããã¹ãŠã§ãã ãã®ã³ãŒãã¯ãCube MXãäœæãããéããšã¯éããŸããã çµã¿ç«ãŠããã©ãã·ã¥...ãããããšã©ãŒãªãã§ã¯äžå¯èœã§ãïŒããã§ã¯ãã¹ãŠæãŸããããŸããããæåã¯ããããªãã§ã¯ã§ããŸããã§ããïŒãJTAGãããã°ïŒAVRã«ããã«ã¡ã¯ïŒãä»ããŠ10åã§ããããèå¥ãã瞫補ããŠããŸããç§ãã¡ã¯å¹žãã§ã...
代æ¿èšèš
äžè¬çã«ããã®ãããªããšã¯ãã©ã©ã€ã«ïŒãŸãã¯ãããªãã¥ãŒããªã¢ã«ã®ä»ã®èŠèŽïŒãªãã§äŸ¿å©ã§ãã ç¹ã«ãç§ã¯ãããã®äžã«æšªããããè ¹éšã«ã©ãããããã眮ããŠãã¥ãŒã¹ãèªãã®ã奜ãã§ãã ããã¹ããã¹ã¯ããŒã«ããã«ã¯ãåžžã«å³æãæ²ããŠããå¿ èŠããããããã¯ã²ãã®çã¿ã«ã€ãªãããŸãã ãããã£ãŠãé·ãéãè ãæ²ããã«ããŒãžãã¹ã¯ããŒã«ã§ãã倧ããªèµ€ããã¿ã³ã倢èŠãŠããŸããã å®éã«ã¯ãå®¶å ·ã®ãã«ããå°éã®ãããã°ã«ãŒã«çœ®ãæããŠãããã«ãšåãã³ã³ããŒãã³ãã§äœãããšãã§ããŸãã åèšïŒPSW13ãã¿ã³ãSTM32F103C8T6ãã¬ããããŒãã3Dããªã³ã¿ãŒçšãã©ã¹ããã¯ããããã¡ã«ãæ¥çå€ã ããŠãããã¡ãŒã ãŠã§ã¢ãã§ã¯ãçæŒãã§ãPgDnãã«ãé·æŒãã§ãUpãã«ã³ãŒãã眮ãæããŸããã
ãããã«
足ã䜿ã£ãŠãæãå¿ãããšãã«ãããªãã¥ãŒããªã¢ã«ã®è¡šç€ºãå¶åŸ¡ã§ããŸãã ãããè¡ãã«ã¯ãUSBããŒããŒãã®æäœãã·ãã¥ã¬ãŒããã1ââã€ã®ããã«ã ãã§ãã 1ã€ã®ããã«ã§è€æ°ã®ããŒã³ãŒããéä¿¡ããããŸããŸãªã¿ã€ãã®ããŒã¹ãããŒã¯ã«åºã¥ããŠéžæã§ããŸãã ãã®èšäºã§ã¯ã2ã€ã®ã¿ã€ãïŒçæŒããšé·æŒãïŒã解æããããã«ã«ã€ããŠæ€èšããŸãã
ã¡ã«ããºã ã¯ãã¢ãªãšã¯ã¹ãã¬ã¹ã®ããããã¹ã€ããããšããèšèã§èŠã€ããããšãã§ãã3Dããªã³ã¿ãŒã§å°å·ããããšãã§ããŸãã é»åæ©åšãšããŠããã¬ããããŒãSTM32F103C8T6ã䜿çšã§ããŸãã ããã¡ãŒã ãŠã§ã¢ãã¯ãSTM32ã³ã³ãããŒã©ãŒã®ã¡ãŒã«ãŒã®Cube MXã«ãã£ãŠäœæããããéãã«åºã¥ããŠ1æé以å ã«å®è¡ãããŸãã è¿œå ã®ã³ãŒãã¯ãããã¹ãã®ããã€ãã®ç»é¢ãå æããŸãïŒ2Kã®è§£å床-1ç»é¢ïŒã
äžè¬ã«ãããã€ã¹å šäœïŒæ©æ¢°+ããã¡ãŒã ãŠã§ã¢ãïŒã¯1æ©ã§å®å šã«èšèšããã3Dããªã³ã¿ãŒã§ã¡ã«ããã¯ãå°å·ããã®ã«çŽ4æéããããŸããã
ããã«å°å·çšã®æºåãã§ããSTLãã¡ã€ã«ã¯ããããããŠã³ããŒãã§ããŸã ïŒå€æ°ã®ãµããŒããé¿ããããã«ããããèŠçŽ ã0.4 mmäžããããšãæãŸããã§ãïŒè¡šé¢ããããã«äžžããªã£ãŠããããšãå€æããã¢ãã«ãäžãããšãå°å·éšåãå¹³ãã«ãªããŸãïŒã
ã倧ããªèµ€ããã¿ã³ãã®STLãã¡ã€ã«ã¯ã ããããããŠã³ããŒãã§ããŸã ã
ãããžã§ã¯ãã®æ¢è£œã®ãœãŒã¹ãã¡ã€ã«ãšãã¡ãŒã ãŠã§ã¢ã®HEXãã¡ã€ã«ã¯ã ããããããŠã³ããŒãã§ããŸã ã
ãã®èšäºã®å ¬éæ¥ã¯å¶ç¶ã§ã¯ãããŸããã è©è°äŒã¯ããã®ãããªããšã«é¢ããèšäºããã®æ¥ãæ·±å»ãªãµã€ãã«æ²èŒããæ¹ãè¯ããšå€æããŸããã ãããå®éã«ã¯ããAlexey ArkhipovskyãããDmitry KalininãããCranberry ShowãããAlexey Kodenkoããšãããã¬ãŒãºã§èŠã€ãã£ããããªãèŠããšãã¢ã«ãããã¯ãã©ã©ã€ã«ã¯ã¢ã»ã³ãã©ãŒã®ãããªãã®ã§ããããšãæããã«ãªããŸãã ããã«ã¯ã絶察çãªã·ã³ãã«ããšå¿ æ»ã®è¡šçŸåãçµã¿åããããŠããŸãã ãSergey Vorontsovããšãããã¬ãŒãºã«ããããã®ããŒã«ã®äœ¿çšæ¹æ³ãåŠã¶ããšãã§ããŸãã
å ç®
8ãææäœããåŸãPSW-13ãã¿ã³ã¯å€ãã®æ©èœã®ãã¡1ã€ã§æ©èœãå§ããéåžžã«åŒ·ãå§åãããã£ãã 亀æããããšãããšãéåžžã«èå³æ·±ã詳现ãå€æããŸããã åã®ãã¿ã³ãšåæã«è³Œå ¥ããæ°ãããã¿ã³ã¯ããŸã£ããç°ãªããã¯ãŒãªã¶ãŒããæã¡ããŸã£ããç°ãªãäœçœ®ã§åäœããŸãã ãã®çµæã圌女ã¯ãã€ãç§ã®ããã«ãèžãã§ããŸããã ãã¬ã¡ã«ã§ãããæœããªããã°ãªããŸããã§ããã 誰ãç§ã®ååŠãç¹°ãè¿ãã®ã-èŠããŠãããŠãã ããã ãã¿ã³ããã¡ã€ã«ã§ä¿®æ£ãããããã®éãè¡ãå¿ èŠãããå ŽåããããŸã-å¢å ãããããã«ãé»æ°ããŒããã¹ã«ã«ããããŸãã ãã®ãã¿ã³ã®ãã©ã¹ããã¯éšåã®åçŸæ§ã¯ããã»ã©é«ããããŸããã§ããã ããããäžè¬çã«-ãã®ãããªæ¹èšã®åŸããã¹ãŠãåã³åäœããŸãã