2025 ๋…ธ๋ฒจ์ƒ์ด ๋ฐํ˜€๋‚ธ ์ž๊ฐ€๋ฉด์—ญ ์งˆํ™˜ ์น˜๋ฃŒ์˜ ์ˆจ๊ฒจ์ง„ ์—ด์‡ : ‘๋ฉด์—ญ ๊ด€์šฉ’์„ ๋˜์ฐพ๋Š” ๊ธฐ์ ์˜ ์—ฌ์ •!

์ด๋ฏธ์ง€
๐Ÿ”ฅ 2025 ๋…ธ๋ฒจ์ƒ์ด ๋ฐํ˜€๋‚ธ ์ž๊ฐ€๋ฉด์—ญ ์งˆํ™˜ ์น˜๋ฃŒ์˜ ์ˆจ๊ฒจ์ง„ ์—ด์‡ : ‘๋ฉด์—ญ ๊ด€์šฉ’์„ ๋˜์ฐพ๋Š” ๊ธฐ์ ์˜ ์—ฌ์ •! ๐Ÿ’ฌ ๋ฉด์—ญ ์–ต์ œ๋งŒ์œผ๋กœ๋Š” ํ•œ๊ณ„์— ๋ถ€๋”ชํ˜”๋˜ ์ž๊ฐ€๋ฉด์—ญ ์งˆํ™˜ ์น˜๋ฃŒ์˜ ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. 2025๋…„ ๋…ธ๋ฒจ ์ƒ๋ฆฌ ์˜ํ•™์ƒ ์ˆ˜์ƒ์˜ ํ•ต์‹ฌ, ์กฐ์ ˆ T์„ธํฌ(Treg)์™€ ๋ฉด์—ญ ๊ด€์šฉ ํšŒ๋ณต์˜ ๊ณผํ•™์  ์›๋ฆฌ๋ฅผ 30๋…„ ๊ฒฝ๋ ฅ์˜ ๋ธ”๋กœ๊ทธ ๋งˆ์Šคํ„ฐ๊ฐ€ ๋”ฐ๋œปํ•œ ์–ธ์–ด๋กœ ์žฌํ•ด์„ํ•ด ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํฌ๋ง์„ ์žƒ์ง€ ์•Š๋Š” ๋ชจ๋“  ๋ถ„๊ป˜ ๋“œ๋ฆฌ๋Š” ์ง„์‹ฌ ์–ด๋ฆฐ ์ •๋ณด์ž…๋‹ˆ๋‹ค. ๐Ÿ“š ๋ชฉ์ฐจ 1. ๋ฉด์—ญ ์–ต์ œ์ œ์˜ ํ•œ๊ณ„, ์šฐ๋ฆฌ๋Š” ์™œ ์ž๊ฐ€๋ฉด์—ญ ์น˜๋ฃŒ์— ์ง€์ณค๋Š”๊ฐ€? 2. 2025 ๋…ธ๋ฒจ์ƒ์˜ ํ•ต์‹ฌ: '๋ง์ดˆ ๋ฉด์—ญ ๊ด€์šฉ'๊ณผ ์กฐ์ ˆ T์„ธํฌ(Treg)์˜ ๋ฐœ๊ฒฌ 3. ์–‘๋‚ ์˜ ๊ฒ€, ์กฐ์ ˆ T์„ธํฌ(Treg)์˜ ๋‘ ์–ผ๊ตด: ์ž๊ฐ€๋ฉด์—ญ vs ์•” 4. ์–ต์ œ๋ฅผ ๋„˜์–ด ํšŒ๋ณต์œผ๋กœ: ์ฐจ์„ธ๋Œ€ Treg ๊ธฐ๋ฐ˜ ์น˜๋ฃŒ๋ฒ• 3๊ฐ€์ง€ 5. ํ˜„๋Œ€ ์˜ํ•™์˜ ๋”œ๋ ˆ๋งˆ: ๊ธฐ์กด ๋ฉด์—ญ ์–ต์ œ์ œ๊ฐ€ Treg์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ 6. ๋‹น์‹ ์˜ ๋ฉด์—ญ ์‹œ์Šคํ…œ์— ๋ง์„ ๊ฑธ์–ด๋ณด์„ธ์š” 1. ๋ฉด์—ญ ์–ต์ œ์ œ์˜ ํ•œ๊ณ„, ์šฐ๋ฆฌ๋Š” ์™œ ์ž๊ฐ€๋ฉด์—ญ ์น˜๋ฃŒ์— ์ง€์ณค๋Š”๊ฐ€? ํ˜น์‹œ ๋‚ด ๋ชธ์˜ ๋ฉด์—ญ ์„ธํฌ๋“ค์ด ๋‚˜๋ฅผ ๊ณต๊ฒฉํ•˜๋Š” ์•„์ด๋Ÿฌ๋‹ˆํ•œ ์ƒํ™ฉ, ๋ฐ”๋กœ ์ž๊ฐ€๋ฉด์—ญ ์งˆํ™˜์œผ๋กœ ์ธํ•ด ๊นŠ์€ ๊ณ ๋ฏผ์— ๋น ์ ธ ๊ณ„์‹œ์ง€๋Š” ์•Š์œผ์‹ ๊ฐ€์š”? ๋ฅ˜๋งˆํ‹ฐ์Šค ๊ด€์ ˆ์—ผ, ๋ฃจํ‘ธ์Šค, ๋˜๋Š” ๊ฐ‘์ƒ์„  ์งˆํ™˜ ๋“ฑ ์ˆ˜๋งŽ์€ ์ž๊ฐ€๋ฉด์—ญ ์งˆํ™˜์„ ์•“๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์˜ ๊ฐ€์žฅ ํฐ ์–ด๋ ค์›€์€ ๋ฐ”๋กœ ‘์น˜๋ฃŒ์˜ ๋ฐฉํ–ฅ์„ฑ’์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ ํ˜„๋Œ€ ์˜ํ•™์˜ ์ฃผ๋ฅ˜๋Š” ‘๋ฉด์—ญ ์–ต์ œ’์˜€์Šต๋‹ˆ๋‹ค. ๊ณผ๋ฏผํ•˜๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š” ๋ฉด์—ญ๋ ฅ์„ ์ผ๋‹จ ์ง„์ •์‹œ์ผœ์„œ ์•„๊ตฐ์„ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒƒ์„ ๋ฉˆ์ถ”๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹์ด์ฃ . ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์—๋Š” ๋Š˜ ๋”œ๋ ˆ๋งˆ๊ฐ€ ๋”ฐ๋ž์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ฉด์—ญ๋ ฅ๋งˆ์ € ํ•จ๊ป˜ ์•ฝํ™”์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์—, ํ™˜์ž๋ถ„๋“ค์€ ๋Š˜ ๋ฉด์—ญ ์–ต์ œ์™€ ๋ฉด์—ญ๋ ฅ ๊ฐ•ํ™” ์‚ฌ์ด์—์„œ ์•„์Šฌ์•„์Šฌํ•œ ์ค„ํƒ€๊ธฐ๋ฅผ ํ•ด์•ผ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. “๋ฉด์—ญ๋ ฅ์„ ์‚ด๋ ค์•ผ ๋ณ‘์ด ๋‚ซ๋Š”๋‹ค๋Š”๋ฐ, ์™œ ์ž๊พธ ์–ต์ œ์ œ๋ฅผ ์จ์•ผ ํ•˜๋‚˜์š”?”๋ผ๋Š” ์งˆ๋ฌธ์€ ๊ทธ๋ž˜์„œ ๋” ์ ˆ์‹คํ•˜๊ฒŒ ๋А๊ปด์ง€๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 2. 2025 ๋…ธ๋ฒจ์ƒ์˜ ํ•ต์‹ฌ: '๋ง์ดˆ ๋ฉด์—ญ ๊ด€์šฉ'๊ณผ ์กฐ์ ˆ T์„ธํฌ(Treg)์˜ ๋ฐœ๊ฒฌ 2025๋…„ ๋…ธ๋ฒจ...

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ ์ž‘์ง€๋งŒ ๊ฐ•ํ•˜๋‹ค

 



์•„๋‘์ด๋…ธ ๋‚˜๋…ธ: ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ข…ํ•ฉ ๊ฐ€์ด๋“œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ(Arduino Nano)๋Š” ์ทจ๋ฏธ์ž, ๋ฉ”์ด์ปค, ๊ทธ๋ฆฌ๊ณ  ์ „๋ฌธ๊ฐ€๋“ค ์‚ฌ์ด์—์„œ ๋งค์šฐ ์ธ๊ธฐ๊ฐ€ ์žˆ๋Š” ์†Œํ˜• ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ ๋ณด๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ž‘๊ณ  ๊ฐ•๋ ฅํ•œ ๋ณด๋“œ๋Š” ๊ฐ„๋‹จํ•œ LED ๊นœ๋ฐ•์ด๊ธฐ ํ”„๋กœ์ ํŠธ๋ถ€ํ„ฐ ๋ณต์žกํ•œ IoT(์‚ฌ๋ฌผ ์ธํ„ฐ๋„ท) ์žฅ์น˜๊นŒ์ง€ ๋‹ค์–‘ํ•œ ํ˜์‹ ์ ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ์•„๋‘์ด๋…ธ ๋‚˜๋…ธ์˜ ํŠน์ง•, ์‘์šฉ ๋ถ„์•ผ, ๊ทธ๋ฆฌ๊ณ   ์ฒซ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋Š” ATmega328P ๋˜๋Š” ATmega168 ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์†Œํ˜• ๋ธŒ๋ ˆ๋“œ๋ณด๋“œ ์นœํ™”์ ์ธ ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ ๋ณด๋“œ์ž…๋‹ˆ๋‹ค. ์ด ๋ณด๋“œ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์˜คํ”ˆ ์†Œ์Šค ํ”Œ๋žซํผ์ธ ์•„๋‘์ด๋…ธ ์ œํ’ˆ๊ตฐ์˜ ์ผ๋ถ€๋กœ, ํฌ๊ธฐ๋Š” ์ž‘์ง€๋งŒ ๊ฐ•๋ ฅํ•œ ์„ฑ๋Šฅ์„ ์ž๋ž‘ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋Š” ์•„๋‘์ด๋…ธ ์šฐ๋…ธ(Arduino Uno)์™€ ๋น„์Šทํ•˜์ง€๋งŒ ํ›จ์”ฌ ์ž‘์€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๊ณต๊ฐ„์ด ์ œํ•œ๋œ ํ”„๋กœ์ ํŠธ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค.


์•„๋‘์ด๋…ธ ๋‚˜๋…ธ์˜ ์ฃผ์š” ํŠน์ง•

์ปดํŒฉํŠธํ•œ ํฌ๊ธฐ: ์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋Š” 18mm x 45mm ํฌ๊ธฐ๋กœ, ๊ฐ€์žฅ ์ž‘์€ ์•„๋‘์ด๋…ธ ๋ณด๋“œ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์†Œํ˜• ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ: ATmega328P ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, 32KB์˜ ํ”Œ๋ž˜์‹œ ๋ฉ”๋ชจ๋ฆฌ, 2KB์˜ SRAM, 1KB์˜ EEPROM์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ „์› ๊ณต๊ธ‰: ๋‚˜๋…ธ๋Š” USB, 9V ๋ฐฐํ„ฐ๋ฆฌ ๋˜๋Š” ์™ธ๋ถ€ ์ „์›์„ ํ†ตํ•ด ์ „์›์„ ๊ณต๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž…๋ ฅ ์ „์•• ๋ฒ”์œ„๋Š” 7-12V์ž…๋‹ˆ๋‹ค.

๋””์ง€ํ„ธ ๋ฐ ์•„๋‚ ๋กœ๊ทธ ํ•€: 14๊ฐœ์˜ ๋””์ง€ํ„ธ ์ž…์ถœ๋ ฅ ํ•€(๊ทธ ์ค‘ 6๊ฐœ๋Š” PWM ์ถœ๋ ฅ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)๊ณผ 8๊ฐœ์˜ ์•„๋‚ ๋กœ๊ทธ ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜์—ฌ ๋‹ค์–‘ํ•œ ์„ผ์„œ์™€ ๋ถ€ํ’ˆ์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

USB ์—ฐ๊ฒฐ: ๋‚˜๋…ธ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์ „์›์„ ์œ„ํ•ด ๋ฏธ๋‹ˆ USB ๋˜๋Š” ๋งˆ์ดํฌ๋กœ USB ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๋ฒ„์ „์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).

๋ธŒ๋ ˆ๋“œ๋ณด๋“œ ์นœํ™”์„ฑ: ํ•€ ๊ตฌ์„ฑ์€ ๋ธŒ๋ ˆ๋“œ๋ณด๋“œ์— ์‰ฝ๊ฒŒ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์–ด ํ”„๋กœํ† ํƒ€์ดํ•‘ ๊ณผ์ •์„ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค.

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ๋ฉ”์ด์ปค๋“ค์—๊ฒŒ ์ธ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ์ปดํŒฉํŠธํ•œ ํฌ๊ธฐ๋กœ ์ธํ•ด ๋‹ค๋ฅธ ๋ณด๋“œ๊ฐ€ ๋„ˆ๋ฌด ํด ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ฐ€๊ฒฉ์ด ์ €๋ ดํ•˜์—ฌ ์ „์ž๊ณตํ•™๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ์ดˆ๋ณด์ž๋“ค์—๊ฒŒ ์ ‘๊ทผ์„ฑ์ด ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค. ๋‚˜๋…ธ๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์‚ฌ์šฉ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์ง€์›์„ ๋ฐ›์•„ ํ’๋ถ€ํ•œ ์ž๋ฃŒ, ํŠœํ† ๋ฆฌ์–ผ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.


์•„๋‘์ด๋…ธ ๋‚˜๋…ธ์˜ ์ผ๋ฐ˜์ ์ธ ์‘์šฉ ๋ถ„์•ผ

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ์˜ ๋‹ค์žฌ๋‹ค๋Šฅํ•จ์€ ๋‹ค์–‘ํ•œ ์‘์šฉ ๋ถ„์•ผ์—์„œ ํ™œ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


์›จ์–ด๋Ÿฌ๋ธ” ๊ธฐ์ˆ : ์ž‘์€ ํฌ๊ธฐ๋กœ ์ธํ•ด ๋‚˜๋…ธ๋Š” ํ”ผํŠธ๋‹ˆ์Šค ํŠธ๋ž˜์ปค, ์Šค๋งˆํŠธ ์˜๋ฅ˜, ๊ธฐํƒ€ ํœด๋Œ€์šฉ ์žฅ์น˜์™€ ๊ฐ™์€ ์›จ์–ด๋Ÿฌ๋ธ” ์ „์ž๊ธฐ๊ธฐ์— ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

IoT ํ”„๋กœ์ ํŠธ: ๋‚˜๋…ธ๋ฅผ ์‚ฌ์šฉํ•ด IoT ์žฅ์น˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๋ด‡๊ณตํ•™: ๋งŽ์€ ์ทจ๋ฏธ์ž๋“ค์ด ๋‚˜๋…ธ๋ฅผ ๋กœ๋ด‡์˜ ๋‘๋‡Œ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจํ„ฐ, ์„ผ์„œ ๋ฐ ๊ธฐํƒ€ ๋ถ€ํ’ˆ์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

ํ™ˆ ์˜คํ† ๋ฉ”์ด์…˜: ๋‚˜๋…ธ๋Š” ๊ฐ€์ • ์ž๋™ํ™” ์‹œ์Šคํ…œ์— ํ†ตํ•ฉ๋˜์–ด ์กฐ๋ช…, ๊ฐ€์ „ ์ œํ’ˆ ๋ฐ ๊ธฐํƒ€ ์Šค๋งˆํŠธ ํ™ˆ ์žฅ์น˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ต์œก ๋„๊ตฌ: ๋‚˜๋…ธ๋Š” ๊ทธ ๋‹จ์ˆœ์„ฑ๊ณผ ์ €๋ ดํ•œ ๊ฐ€๊ฒฉ ๋•๋ถ„์— ํ•™์ƒ๋“ค๊ณผ ์ดˆ๋ณด์ž๋“ค์—๊ฒŒ ์ „์ž๊ณตํ•™๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋ฅด์น˜๋Š” ๋ฐ ๋งค์šฐ ์ ํ•ฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์•„๋‘์ด๋…ธ ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค:


์•„๋‘์ด๋…ธ IDE ์„ค์น˜: ์•„๋‘์ด๋…ธ ๊ณต์‹ ์›น์‚ฌ์ดํŠธ์—์„œ ์•„๋‘์ด๋…ธ IDE๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ†ตํ•ด ๋‚˜๋…ธ์— ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์•„๋‘์ด๋…ธ ๋‚˜๋…ธ ์—ฐ๊ฒฐ: USB ์ผ€์ด๋ธ”์„ ์‚ฌ์šฉํ•ด ์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋ฅผ ์ปดํ“จํ„ฐ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „์˜ ๋‚˜๋…ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ FTDI ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


์˜ฌ๋ฐ”๋ฅธ ๋ณด๋“œ ๋ฐ ํฌํŠธ ์„ ํƒ: ์•„๋‘์ด๋…ธ IDE์—์„œ "๋„๊ตฌ" > "๋ณด๋“œ"๋กœ ์ด๋™ํ•˜์—ฌ "Arduino Nano"๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ "ํฌํŠธ"์—์„œ ๋‚˜๋…ธ๊ฐ€ ์—ฐ๊ฒฐ๋œ COM ํฌํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.


์ฒซ ๋ฒˆ์งธ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ: LED๋ฅผ ๊นœ๋ฐ•์ด๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”. ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:



ํ”„๋กœ๊ทธ๋žจ ์—…๋กœ๋“œ: ์•„๋‘์ด๋…ธ IDE์—์„œ "์—…๋กœ๋“œ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ๋‚˜๋…ธ์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜๋ฉด, ์˜จ๋ณด๋“œ LED(ํ•€ 13์— ์—ฐ๊ฒฐ๋จ)๊ฐ€ ๊นœ๋ฐ•์ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.


ํ”„๋กœ์ ํŠธ ํ™•์žฅ: ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ๊ทธ๋žจ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์—…๋กœ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•œ ํ›„, ๋‹ค๋ฅธ ์„ผ์„œ, ๋ชจํ„ฐ, ๋””์Šคํ”Œ๋ ˆ์ด ๋“ฑ์„ ์‚ฌ์šฉํ•ด ์‹คํ—˜ํ•ด ๋ณด์„ธ์š”. ๊ฐ€๋Šฅ์„ฑ์€ ๋ฌด๊ถ๋ฌด์ง„ํ•ฉ๋‹ˆ๋‹ค!


ํ”ํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ”ํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:


๋“œ๋ผ์ด๋ฒ„ ๋ฌธ์ œ: ์ปดํ“จํ„ฐ๊ฐ€ ๋‚˜๋…ธ๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ, ํŠนํžˆ ์ด์ „ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

ํฌํŠธ ํ‘œ์‹œ ์•ˆ ๋จ: ๋•Œ๋•Œ๋กœ Arduino IDE์—์„œ COM ํฌํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋‚˜๋…ธ๋ฅผ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ USB ์ผ€์ด๋ธ”์„ ์‚ฌ์šฉํ•ด ๋ณด์„ธ์š”.

์—…๋กœ๋“œ ์˜ค๋ฅ˜: ์—…๋กœ๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ณด๋“œ์™€ ํฌํŠธ๋ฅผ ์„ ํƒํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๋˜ํ•œ ์—…๋กœ๋“œ ์ค‘์— ๋‚˜๋…ธ์˜ RX ๋ฐ TX ํ•€์— ๋‹ค๋ฅธ ์žฅ์น˜๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜์„ธ์š”.

๊ฒฐ๋ก 

์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๋Š” ๋ฉ”์ด์ปค, ์ทจ๋ฏธ์ž, ์ „๋ฌธ๊ฐ€๋“ค์—๊ฒŒ ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ์„ ์—ด์–ด์ฃผ๋Š” ๊ฐ•๋ ฅํ•˜๊ณ  ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ๋งˆ์ดํฌ๋กœ์ปจํŠธ๋กค๋Ÿฌ ๋ณด๋“œ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ๋ถ€ํ„ฐ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ๊นŒ์ง€ ๋‚˜๋…ธ๋Š” ํฌ๊ธฐ, ์„ฑ๋Šฅ, ์‚ฌ์šฉ์˜ ์šฉ์ด์„ฑ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ท ํ˜• ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ์™€ ์ง€์‹์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋‹ค๋ฉด, ์ „์ž๊ณตํ•™๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํฅ๋ฏธ์ง„์ง„ํ•œ ์„ธ๊ณ„์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์•„์ด๋””์–ด๋ฅผ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์•„๋‘์ด๋…ธ ๋‚˜๋…ธ๊ฐ€ ์˜ค๋ž˜๋˜๊ธด ํ–ˆ์ง€๋งŒ ์—ฌํƒ€์˜ ๋‹ค๋ฅธ pcb๋ฅผ ๋„๋ฉด์„ ์ž‘์„ฑํ•˜๋ ค๋ฉด ์—ฌ๋Ÿฌ๋ชจ๋กœ ์ „๊ณต์ง€์‹์ด ํ•„์š”ํ•˜๊ธฐ์— ๋‹ค๋ฅธ ๊ฑด ์žฌ์ณ๋‘๊ณ  ์˜ค๋กœ์ง€ ์•„๋‘์ด๋…ธ ๋‚˜๋…ธ์—๋งŒ ์ง‘์ค‘ํ•˜๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋น„์Šทํ•œ ๋ณด๋“œ๋“ค์„ ๋‹ค๋ฃจ๋Š” ๊ฑด ๋‹ค์Œ๊ธฐํšŒ์— ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

c์–ธ์–ด๊ฐ€ ๋ณด์•ˆ์— ์ทจ์•ฝํ•˜์—ฌ ์‚ฌ์šฉ์„ ์ž์ œํ•˜๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๋ณดํ†ต ์•„๋‘์ด๋…ธ๋Š” c์–ธ์–ด๋กœ ๋งŒ๋“œ๋Š”๊ฒŒ ๋ณดํŽธ์ ์ธ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

๋งจ์ฒ˜์Œ ์ด ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค์–ด๋ณธ ๋กœ๋ด‡์€ ํšŒ๋กœ ๊ฐ€ ํƒ€๋Š” ๋ฐ”๋žŒ์— ์ •ํ™•ํ•œ ๊ตฌ๋™์— ์‹คํŒจํ–ˆ์—ˆ๋‹ค ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์€ ๊ณต๊ฐ„์— ๋“ค์–ด๊ฐˆ ๋ชจ๋“ˆ๋กœ๋Š” ๊ดœ์ฐฎ์ง€์•Š๋‚˜ ์‹ถ๋‹ค.

=====================

์„œ๋ณด๋ชจํ„ฐ๋Š” ์กฐ๊ทธ๋งŒ๋„˜์œผ๋กœ ๊ตฌ๋น„๋ฅผ ํ–ˆ๋Š”๋ฐ ๋ธ”๋ก์ฝ”๋”ฉ์ธ๊ฐ€ ํ•˜๋Š”ํ”„๋กœ๊ทธ๋žจ์„ ์จ์„œํ•˜๋˜๋ฐ ์†๋†“์€์ง€๊ฐ€ ์ข€

์˜ค๋ž˜๋˜์„œ ๋ ์ง€๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค  


์•„๋‘์ด๋…ธ์šฐ๋…ธ1๊ฐœ ,5ํ•€์กฐ์ด์Šคํ‹ฑ 2๊ฐœ

์•„๋‘์ด๋…ธ์šฐ๋…ธ1๊ฐœ ,5ํ•€์กฐ์ด์Šคํ‹ฑ 2๊ฐœ ,sg-90์„œ๋ณด๋ชจํ„ฐ4๊ฐœ 18650๋ฐฐํ„ฐ๋ฆฌ 2๊ฐœ์ง๋ ฌ ์กฐํ•ฉ์œผ๋กœ 4dof ๋กœ๋ด‡์•”์„

๋งŒ๋“ค๊บผ์•ผ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ์กฐ์ข…์ด ์ž˜๋˜๋„๋ก ์ž˜ ํ•ด์„œ ์ž์„ธํžˆ ์„ค๋ช…๋„ ํ•ด์ค˜


๋ฌผ๊ฑด ๋ชฉ๋ก๊ณผ ์›ํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ์ž˜ ์ •๋ฆฌํ•ด์ฃผ์…จ๋„ค์š”. 4DOF ๋กœ๋ด‡ ์•”์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์žฅ๋น„๋“ค๊ณผ ์ฝ”๋“œ์— ๋Œ€ํ•ด

์ž์„ธํžˆ ์•ˆ๋‚ดํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ํ•„์š”ํ•œ ๋ฌผํ’ˆ๋“ค์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

  1. ์•„๋‘์ด๋…ธ ์šฐ๋…ธ (Arduino Uno): ๋กœ๋ด‡ ์•”์˜ ์ œ์–ด๋ฅผ ์œ„ํ•œ ์ฃผ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  2. 5ํ•€ ์กฐ์ด์Šคํ‹ฑ 2๊ฐœ: ๋กœ๋ด‡ ์•”์˜ ๋™์ž‘์„ ์กฐ์ข…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์กฐ์ข…๊ธฐ๋กœ ์›€์ง์ž„์„ ๊ฐ์ง€ํ•˜๊ณ 
  3. ์•„๋‘์ด๋…ธ๋กœ ์‹ ํ˜ธ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  4. SG-90 ์„œ๋ณด๋ชจํ„ฐ 4๊ฐœ: ๋กœ๋ด‡ ์•”์˜ ๊ฐ ๊ด€์ ˆ์„ ์›€์ง์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ชจํ„ฐ์ž…๋‹ˆ๋‹ค.
  5. ๊ด€์ ˆ์˜ ์›€์ง์ž„์„ ์ œ์–ดํ•˜์—ฌ ๋กœ๋ด‡ ์•”์ด ์›ํ•˜๋Š” ์ž์„ธ๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. 18650 ๋ฐฐํ„ฐ๋ฆฌ 2๊ฐœ: ์•„๋‘์ด๋…ธ์™€ ์„œ๋ณด๋ชจํ„ฐ์— ์ „์›์„ ๊ณต๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  7. ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์ง๋ ฌ๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ „์••์„ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ณ  ์กฐ์ข…์ด ์ž˜๋˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์•„๋‘์ด๋…ธ ์šฐ๋…ธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜: ๋จผ์ € ์•„๋‘์ด๋…ธ ์šฐ๋…ธ์— SG-90 ์„œ๋ณด๋ชจํ„ฐ๋ฅผ ์ œ์–ดํ•˜๊ธฐ
  2. ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Arduino IDE๋ฅผ ์—ด๊ณ  "Sketch" ๋ฉ”๋‰ด์—์„œ
  3. "Include Library"๋ฅผ ์„ ํƒํ•œ ํ›„ "Servo"๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.
  4. ํ•€ ์„ค์ •: ์กฐ์ด์Šคํ‹ฑ๊ณผ ์„œ๋ณด๋ชจํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•€์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. ์กฐ์ด์Šคํ‹ฑ์˜ X์ถ•๊ณผ Y์ถ•์€ ์•„๋‚ ๋กœ๊ทธ ์ž…๋ ฅ์œผ๋กœ, ์„œ๋ณด๋ชจํ„ฐ๋Š” ๋””์ง€ํ„ธ ์ถœ๋ ฅ์œผ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  6. ์˜ˆ๋ฅผ ๋“ค์–ด, ์กฐ์ด์Šคํ‹ฑ X์ถ•์„ ์•„๋‚ ๋กœ๊ทธ ํ•€ A0์— ์—ฐ๊ฒฐํ•˜๊ณ , Y์ถ•์„ A1์— ์—ฐ๊ฒฐํ•˜๊ณ ,
  7. ์„œ๋ณด๋ชจํ„ฐ๋Š” ๋””์ง€ํ„ธ ํ•€ 9, 10, 11, 12์— ์—ฐ๊ฒฐํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ด…์‹œ๋‹ค.
  8. ์ฝ”๋“œ ์ž‘์„ฑ: ์•„๋ž˜์— ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์กฐ์ด์Šคํ‹ฑ์˜ ์›€์ง์ž„์„ ๊ฐ์ง€ํ•˜๊ณ 
  9. ์„œ๋ณด๋ชจํ„ฐ๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์›ํ•˜๋Š” ๋™์ž‘์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ˆ˜์ •ํ•ด
  10. ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
cpp
#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

int joystickXPin = A0;
int joystickYPin = A1;

int servo1Pin = 9;
int servo2Pin = 10;
int servo3Pin = 11;
int servo4Pin = 12;

void setup() {
  servo1.attach(servo1Pin);
  servo2.attach(servo2Pin);
  servo3.attach(servo3Pin);
  servo4.attach(servo4Pin);
}

void loop() {
  int joystickXValue = analogRead(joystickXPin);
  int joystickYValue = analogRead(joystickYPin);

  int servo1Angle = map(joystickXValue, 0, 1023, 0, 180);
  int servo2Angle = map(joystickYValue, 0, 1023, 0, 180);

  servo1.write(servo1Angle);
  servo2.write(servo2Angle);

  // ์ถ”๊ฐ€์ ์ธ ์„œ๋ณด๋ชจํ„ฐ์™€ ๋™์ž‘์„ ์ œ์–ดํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์„ธ์š”.

  delay(10);
}

์œ„์˜ ์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ๋Š” ์กฐ์ด์Šคํ‹ฑ์˜



์นด๋ฉ”๋ผ๋ชจ๋“ˆ์ด ํ•˜๋‚˜ ๋‹ฌ๋ ธ์œผ๋ฉด ์ข‹๊ฒ ๊ณ  ์นด๋ฉ”๋ผ๋ชจ๋“ˆ์— ์‚ฌ๋ฌผ์ธ์‹ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์„œ ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด๋กœ

๋งŒ๋“ค์ˆ˜ ์žˆ๋Š” ์กฐํ•ฉ์˜์ฝ”๋“œ๋กœ ๋‹ค์‹œ์ž‘์„ฑํ•ด์ค˜ ๊ฐ„๊ฒฐํ•˜๊ฒŒ


๋ฌผ๊ฑด์„ ์ธ์‹ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์˜ ๊ฐ„๊ฒฐํ•œ ์กฐํ•ฉ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

python
import cv2

# ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™”
camera = cv2.VideoCapture(0)

# ์‚ฌ๋ฌผ ์ธ์‹์„ ์œ„ํ•œ ํ•™์Šต๋œ ๋ชจ๋ธ ๋กœ๋“œ
model = cv2.dnn.readNetFromTensorflow('path_to_model.pb', 'path_to_config.pbtxt')

while True:
    # ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ
    ret, frame = camera.read()

    # ํ”„๋ ˆ์ž„ ํฌ๊ธฐ ๋ณ€๊ฒฝ
    frame = cv2.resize(frame, (300, 300))

    # ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ
    blob = cv2.dnn.blobFromImage(frame, size=(300, 300), swapRB=True, crop=False)

    # ๋ชจ๋ธ์„ ํ†ตํ•œ ์ถ”๋ก 
    model.setInput(blob)
    output = model.forward()

    # ์ถ”๋ก  ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œ
    for detection in output[0, 0, :, :]:
        confidence = detection[2]
        if confidence > 0.5:
            class_id = int(detection[1])
            class_name = 'ํด๋ž˜์Šค๋ช…'  # ํด๋ž˜์Šค๋ช…์— ํ•ด๋‹นํ•˜๋Š” ๋ฌผ์ฒด ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”.
            x = int(detection[3] * frame.shape[1])
            y = int(detection[4] * frame.shape[0])
            w = int(detection[5] * frame.shape[1])
            h = int(detection[6] * frame.shape[0])

            # ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ
            cv2.rectangle(frame, (x, y), (w, h), (255, 0, 0), 2)

            # ํด๋ž˜์Šค๋ช…๊ณผ ์‹ ๋ขฐ๋„ ํ‘œ์‹œ
            cv2.putText(frame, f'{class_name}: {confidence:.2f}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)

    # ํ™”๋ฉด์— ํ”„๋ ˆ์ž„ ์ถœ๋ ฅ
    cv2.imshow('Object Detection', frame)

    # 'q' ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ข…๋ฃŒ
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# ๋ฆฌ์†Œ์Šค ํ•ด์ œ
camera.release()
cv2.destroyAllWindows()

์œ„์˜ ์ฝ”๋“œ๋Š” OpenCV์™€ DNN(Darknet Neural Network)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ๋ฌผ ์ธ์‹์„ ๊ตฌํ˜„ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด path_to_model.pb์™€ path_to_config.pbtxt์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์‹ค์ œ ๋ชจ๋ธ ํŒŒ์ผ๊ณผ

๊ตฌ์„ฑ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํด๋ž˜์Šค๋ช… ๋ถ€๋ถ„๋„ ํ•ด๋‹นํ•˜๋Š” ๋ฌผ์ฒด์˜ ์ด๋ฆ„์œผ๋กœ

๋ณ€๊ฒฝํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ผ์ฆˆ๋ฒ ๋ฆฌ ํŒŒ์ด์˜ ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ๋กœ๋ถ€ํ„ฐ ์˜์ƒ์„ ์ฝ์–ด์™€ ์‚ฌ๋ฌผ์„ ์ธ์‹ํ•˜๊ณ , ์ธ์‹๋œ

์‚ฌ๋ฌผ์„ ์‚ฌ๊ฐํ˜•์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ํด๋ž˜์Šค๋ช…๊ณผ ์‹ ๋ขฐ๋„๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. 'q' ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋ชจ๋ธ ํŒŒ์ผ์„ ์ค€๋น„ํ•˜์‹œ๊ณ , ์ฝ”๋“œ ๋‚ด์˜ ๊ฒฝ๋กœ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.



ํŒŒ์ด์ฌ์œผ๋กœ ์นด๋ฉ”๋ผ ์‚ฌ๋ฌผ์ธ์‹ํ•˜๋Š” ์ฝ”๋“œ ์ž‘์„ฑํ•ด์ค˜


๋ฌผ์ฒด๋ฅผ ์ธ์‹ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์„ฑํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

python
import cv2

# ์‚ฌ๋ฌผ ์ธ์‹์„ ์œ„ํ•œ ํ•™์Šต๋œ ๋ชจ๋ธ ๋กœ๋“œ
net = cv2.dnn.readNetFromTensorflow('path_to_model.pb', 'path_to_config.pbtxt')

# ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ ์ดˆ๊ธฐํ™”
cap = cv2.VideoCapture(0)

while True:
    # ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ
    ret, frame = cap.read()

    # ํ”„๋ ˆ์ž„ ํฌ๊ธฐ ๋ณ€๊ฒฝ
    frame = cv2.resize(frame, (300, 300))

    # ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ
    blob = cv2.dnn.blobFromImage(frame, size=(300, 300), swapRB=True, crop=False)

    # ๋ชจ๋ธ์„ ํ†ตํ•œ ์ถ”๋ก 
    net.setInput(blob)
    detections = net.forward()

    # ์ถ”๋ก  ๊ฒฐ๊ณผ๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œ
    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > 0.5:
            class_id = int(detections[0, 0, i, 1])
            class_name = 'ํด๋ž˜์Šค๋ช…'  # ํด๋ž˜์Šค๋ช…์— ํ•ด๋‹นํ•˜๋Š” ๋ฌผ์ฒด ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”.
            x = int(detections[0, 0, i, 3] * frame.shape[1])
            y = int(detections[0, 0, i, 4] * frame.shape[0])
            w = int(detections[0, 0, i, 5] * frame.shape[1])
            h = int(detections[0, 0, i, 6] * frame.shape[0])

            # ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ
            cv2.rectangle(frame, (x, y), (w, h), (255, 0, 0), 2)

            # ํด๋ž˜์Šค๋ช…๊ณผ ์‹ ๋ขฐ๋„ ํ‘œ์‹œ
            cv2.putText(frame, f'{class_name}: {confidence:.2f}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)

    # ํ™”๋ฉด์— ํ”„๋ ˆ์ž„ ์ถœ๋ ฅ
    cv2.imshow('Object Detection', frame)

    # 'q' ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ข…๋ฃŒ
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# ๋ฆฌ์†Œ์Šค ํ•ด์ œ
cap.release()
cv2.destroyAllWindows()

์œ„์˜ ์ฝ”๋“œ๋Š” OpenCV์™€ DNN(Darknet Neural Network)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ๋ฌผ ์ธ์‹์„ ๊ตฌํ˜„ํ•œ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ธ์„

์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด path_to_model.pb์™€ path_to_config.pbtxt์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์‹ค์ œ ๋ชจ๋ธ ํŒŒ์ผ๊ณผ ๊ตฌ์„ฑ ํŒŒ์ผ์˜

๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํด๋ž˜์Šค๋ช… ๋ถ€๋ถ„๋„ ํ•ด๋‹นํ•˜๋Š” ๋ฌผ์ฒด์˜ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ ์˜์ƒ์„ ์ฝ์–ด์™€ ์‚ฌ๋ฌผ์„ ์ธ์‹ํ•˜๊ณ , ์ธ์‹๋œ ์‚ฌ๋ฌผ์„ ์‚ฌ๊ฐํ˜•์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ 

ํด๋ž˜์Šค๋ช…๊ณผ ์‹ ๋ขฐ๋„๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. 'q' ํ‚ค๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋ชจ๋ธ ํŒŒ์ผ์„ ์ค€๋น„ํ•˜์‹œ๊ณ , ์ฝ”๋“œ ๋‚ด์˜ ๊ฒฝ๋กœ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์‹ค์ œํ•˜๋Š” ํ˜„์žฌ์‚ฌ์šฉ ํ•˜๊ณ ์žˆ๋Š”์‚ฌ๋ฌผ์ธ์‹ ํ•˜๋Š” ๋กœ๋ด‡์•”์„ ๋งŒ๋“ค๋•Œ ๋ฐ˜์ž๋™์œผ๋กœ ์‚ฌ๋žŒ์ด ์Šค๋งˆํŠธํฐํ™”๋ฉด์„ ๋ธ”๋ฃจํˆฌ์Šค๋กœ

๋ณด๋ฉด


๋กœ๋ด‡ ํŒ”์ด ๋ฐ˜์ž๋™์œผ๋กœ ์Šค๋งˆํŠธํฐ ํ™”๋ฉด์„ ๋ธ”๋ฃจํˆฌ์Šค๋กœ ์ธ์‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ๋ธ”๋ฃจํˆฌ์Šค ํ†ต์‹  ์„ค์ •:
    • ์Šค๋งˆํŠธํฐ๊ณผ ๋กœ๋ด‡ ํŒ” ๊ฐ„์— ๋ธ”๋ฃจํˆฌ์Šค ํ†ต์‹ ์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šค๋งˆํŠธํฐ์—์„œ ๋กœ๋ด‡ ํŒ”๋กœ
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด ๋ธ”๋ฃจํˆฌ์Šค ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋กœ๋ด‡ ํŒ”๋„ ๋ธ”๋ฃจํˆฌ์Šค ํ†ต์‹ ์„ ์ˆ˜์‹ ํ•  ์ˆ˜
    • ์žˆ๋Š” ๋ชจ๋“ˆ์„ ์žฅ์ฐฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  2. ์Šค๋งˆํŠธํฐ ํ™”๋ฉด ์ธ์‹:
    • ์Šค๋งˆํŠธํฐ ํ™”๋ฉด์„ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํ“จํ„ฐ ๋น„์ „ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,
    • OpenCV ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™”๋ฉด์—์„œ ํŠน์ • ๊ฐ์ฒด ๋˜๋Š” ํŒจํ„ด์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ์œ„ํ•ด ์Šค๋งˆํŠธํฐ์˜ ์นด๋ฉ”๋ผ๋กœ๋ถ€ํ„ฐ ์˜์ƒ์„ ๊ฐ€์ ธ์™€์„œ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๋ฐ ๊ฐ์ฒด ๊ฒ€์ถœ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ฐ์ฒด ๊ฒ€์ถœ ๋ฐ ์ถ”์ :
    • OpenCV๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šค๋งˆํŠธํฐ ํ™”๋ฉด์—์„œ ์›ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฒ€์ถœํ•˜๊ณ  ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ฐ์ฒด ๊ฒ€์ถœ์„ ์œ„ํ•ด ์‚ฌ์ „์— ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ปฌ๋Ÿฌ ๋˜๋Š” ํŠน์ • ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ
    • ๊ฐ์ฒด๋ฅผ ๊ฒ€์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ถœ๋œ ๊ฐ์ฒด์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋กœ๋ด‡ ํŒ”์˜ ๋™์ž‘์„
    • ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ๋ธ”๋ฃจํˆฌ์Šค ๋ฐ์ดํ„ฐ ์ „์†ก:
    • ์Šค๋งˆํŠธํฐ์—์„œ ์ธ์‹๋œ ๊ฐ์ฒด์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ธ”๋ฃจํˆฌ์Šค๋ฅผ ํ†ตํ•ด ๋กœ๋ด‡ ํŒ”๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ์œ„ํ•ด ๋ธ”๋ฃจํˆฌ์Šค ํ†ต์‹ ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ฐ์ฒด์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ
    • ์ ์ ˆํ•œ ํ˜•์‹์œผ๋กœ ํŒจํ‚ทํ™”ํ•˜์—ฌ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
  5. ๋กœ๋ด‡ ํŒ” ์ œ์–ด:
    • ๋กœ๋ด‡ ํŒ”์€ ์ „์†ก๋œ ๊ฐ์ฒด์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ํ•ด๋‹น ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ๋กœ๋ด‡ ํŒ”์˜ ์ œ์–ด๋Š” ๋กœ๋ด‡ ํŒ” ์ œ์–ด ์‹œ์Šคํ…œ์— ๋งž๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๊ณผ์ •์€ ๋ฐ˜์ž๋™์œผ๋กœ ์Šค๋งˆํŠธํฐ ํ™”๋ฉด์„ ์ธ์‹ํ•˜๊ณ  ๋ธ”๋ฃจํˆฌ์Šค๋ฅผ ํ†ตํ•ด ๋กœ๋ด‡ ํŒ”์„ ์ œ์–ดํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ ๊ตฌํ˜„์—๋Š” ์ถ”๊ฐ€์ ์ธ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋กœ๋ด‡ ํŒ”์˜ ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ํ™˜๊ฒฝ์— ๋”ฐ๋ผ

๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค



esp32์นด๋ฉ”๋ผ๋ชจ๋“ˆ๊ณผ ์Šค๋งˆํŠธํฐ์„ ์—ฐ๊ฒฐํ•ด ๋ธ”๋ฃจํˆฌ์Šค๋ชจ๋“ˆ๋กœ ํ™•์ธํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ค˜


๋ฌผ์ฒด ์ธ์‹์„ ์œ„ํ•ด ESP32 ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ๊ณผ ์Šค๋งˆํŠธํฐ์„ ๋ธ”๋ฃจํˆฌ์Šค ๋ชจ๋“ˆ์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜๊ณ , ์Šค๋งˆํŠธํฐ์—์„œ

๋ฌผ์ฒด๋ฅผ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ESP32 ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ง€์›์ด๋‚˜

์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์š”๊ตฌ์‚ฌํ•ญ์„ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๋”์šฑ ์ •ํ™•ํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ESP32 ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ๊ณผ ์Šค๋งˆํŠธํฐ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฌผ์ฒด๋ฅผ ํ™•์ธํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

python
# ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž„ํฌํŠธ
import bluetooth
from picamera import PiCamera
import time

# ๋ธ”๋ฃจํˆฌ์Šค ์„œ๋ฒ„ ์ดˆ๊ธฐํ™”
server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
server_socket.bind(("", bluetooth.PORT_ANY))
server_socket.listen(1)

# ๋ธ”๋ฃจํˆฌ์Šค ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ๋Œ€๊ธฐ
print("Waiting for Bluetooth connection...")
client_socket, address = server_socket.accept()
print("Connected to", address)

# ์นด๋ฉ”๋ผ ์ดˆ๊ธฐํ™”
camera = PiCamera()

try:
    while True:
        # ์นด๋ฉ”๋ผ๋กœ ์‚ฌ์ง„ ์ดฌ์˜
        image_path = "/path/to/image.jpg"  # ์ €์žฅํ•  ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ
        camera.capture(image_path)

        # ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌ๊ธฐ ์ „์†ก
        image_size = str(os.path.getsize(image_path))
        client_socket.send(image_size.encode())

        # ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ „์†ก
        with open(image_path, "rb") as f:
            data = f.read(1024)
            while data:
                client_socket.send(data)
                data = f.read(1024)

        # ๋ฌผ์ฒด ํ™•์ธ ๊ฒฐ๊ณผ ์ˆ˜์‹ 
        result = client_socket.recv(1024)
        print("Object detected:", result.decode())

        # ์ผ์‹œ์ ์ธ ๋”œ๋ ˆ์ด
        time.sleep(1)

except Exception as e:
    print("Error:", str(e))

finally:
    # ์—ฐ๊ฒฐ ์ข…๋ฃŒ
    client_socket.close()
    server_socket.close()

์œ„ ์ฝ”๋“œ๋Š” Raspberry Pi์™€ ESP32 ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ์ฒด ์ธ์‹ ๊ฒฐ๊ณผ๋ฅผ ์Šค๋งˆํŠธํฐ์œผ๋กœ ์ „์†กํ•˜๋Š”

์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ์ฃผ์„์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์„ค์น˜ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•„์š”ํ•œ ํ™˜๊ฒฝ ์„ค์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ํ™˜๊ฒฝ์ด Raspberry Pi๊ฐ€ ์•„๋‹ˆ๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ํ•ด๋‹น ํ™˜๊ฒฝ์—

๋งž๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ESP32์™€ ์Šค๋งˆํŠธํฐ ๊ฐ„์˜ ๋ธ”๋ฃจํˆฌ์Šค ํ†ต์‹ ์„ ์œ„ํ•œ ์„ค์ •๋„

ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ESP32 cams ๋ชจ๋“ˆ๋กœ Edge Impulse๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋จธ์‹ ๋Ÿฌ๋‹์„ ํ†ตํ•ด ๊ฐ์ฒด ์ธ์‹์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•. 

Edge Impulse๋Š” ์˜จ๋ผ์ธ ํ”Œ๋žซํผ์œผ๋กœ, ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐœ์ธ์ด ์ž‘์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฌด๋ฃŒ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ESP32 ์นด๋ฉ”๋ผ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ž, ํ† ๋งˆํ† , ์–‘ํŒŒ๋ฅผ ์ธ์‹ํ•˜๋„๋ก ํ•™์Šต์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค. 

ํ•˜๋“œ์›จ์–ด ์„ค์ •, ์ด๋ฏธ์ง€ ์ˆ˜์ง‘, ๋ชจ๋ธ ํ›ˆ๋ จ, ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ ๊ฒฐ๊ณผ๋ฅผ OLED ๋””์Šคํ”Œ๋ ˆ์ด์— ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

 ๋งˆ์ง€๋ง‰์—๋Š” OLED ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์‹ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ชจ์Šต์„ ๋ณด์—ฌ์ฃผ๋ฉฐ, ๊ด€๋ จ๋œ ์งˆ๋ฌธ์ด๋‚˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋Œ“๊ธ€๋กœ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.


 ESP32 ๋ณด๋“œ์—์„œ Google's Gemini AI๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ์ธ AI ์–ด์‹œ์Šคํ„ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•. 

์ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Gemini API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ESP32 ๋ณด๋“œ์—์„œ ์งˆ๋ฌธ์„ ํ•˜๊ณ , ๊ทธ ๋‹ต๋ณ€์„ ์‹œ๋ฆฌ์–ผ ๋ชจ๋‹ˆํ„ฐ์— ์ถœ๋ ฅํ•˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ์ฒซ ๋‹จ๊ณ„๋กœ, Gemini API ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  Postman ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ API๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

 ์ดํ›„ ESP32 ๋ณด๋“œ์—์„œ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , Wi-Fi์— ์—ฐ๊ฒฐํ•œ ํ›„ ์งˆ๋ฌธ์„ ์ž…๋ ฅํ•˜๋ฉด Gemini AI๊ฐ€ ๋‹ต๋ณ€์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ChatGPT API์™€ Gemini API ์ค‘ ์–ด๋–ค ๊ฒƒ์ด ESP32 ๋ณด๋“œ์™€์˜ ํ†ตํ•ฉ์— ๋” ์ ํ•ฉํ•œ์ง€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

 Gemini API๋Š” Google ๊ณ„์ •๊ณผ ์—ฐ๋™๋˜์–ด ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•˜๊ณ , ๋ฌด๋ฃŒ ํ”Œ๋žœ์œผ๋กœ ์ถฉ๋ถ„ํ•œ ์งˆ๋ฌธ๊ณผ ํ† ํฐ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ, ESP32 ๊ธฐ๋ฐ˜ ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•˜๋‹ค๊ณ  ๊ฒฐ๋ก ์ง“์Šต๋‹ˆ๋‹ค.


 Lafayette Systems์—์„œ ๊ฐœ๋ฐœ ์ค‘์ธ ๋ชจ๋ธ ๋กœ์ผ“ "Diamond X"์˜ ๋น„ํ–‰ ์ปดํ“จํ„ฐ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. 

Diamond X๋Š” ๊ณต์ค‘์—์„œ ์Šค์Šค๋กœ ๋ฐฉํ–ฅ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ•€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„ํ–‰ํ•˜๋ฉฐ, ๋” ํฐ ์†๋„์™€ ์‚ฌ๊ฑฐ๋ฆฌ๋ฅผ ์œ„ํ•ด 1๋‹จ ๋ถ€์Šคํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐœ์กฐ ์ค‘์ž…๋‹ˆ๋‹ค.

๋น„ํ–‰ ์ปดํ“จํ„ฐ๋Š” ๋กœ์ผ“์˜ ์œ„์น˜์™€ ๋ฐฉํ–ฅ์„ ์ง€์†์ ์œผ๋กœ ํŒŒ์•…ํ•˜๋ฉฐ, ๋กœ์ผ“์ด ๋ชฉํ‘œ ์ง€์ ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•€์„ ์›€์ง์ด๊ณ , 

์ตœ๊ณ  ๊ณ ๋„์— ๋„๋‹ฌํ•˜๋ฉด ๋‚™ํ•˜์‚ฐ์„ ๋ฐฐ์น˜ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, 2๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ง€์ƒ์—์„œ ๋กœ์ผ“์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ช…๋ น์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜์ƒ์—์„œ๋Š” ๋น„ํ–‰ ์ปดํ“จํ„ฐ์— ์‚ฌ์šฉ๋œ ํšŒ๋กœ ๊ธฐํŒ์˜ ์„ค๊ณ„์™€ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ณ , ๊ฐ ํšŒ๋กœ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. 

๋˜ํ•œ, ๋น„ํ–‰ ์ปดํ“จํ„ฐ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์„ค์ •ํ•˜๊ณ , ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋กœ์ผ“์„ ์•ˆ์ •์ ์œผ๋กœ ๋น„ํ–‰ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š”์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Diamond X์˜ ๋น„ํ–‰ ํ…Œ์ŠคํŠธ์™€ ํ–ฅํ›„ ๊ณ„ํš์— ๋Œ€ํ•œ ๋‚ด์šฉ๋„ ๋‹ค๋ฃจ๊ณ  ์žˆ์œผ๋ฉฐ, ๋กœ์ผ“์„ ์•ˆ์ „ํ•˜๊ฒŒ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

์ด ํ”„๋กœ์ ํŠธ์— ๊ด€์‹ฌ ์žˆ๋Š” ์‹œ์ฒญ์ž๋“ค์—๊ฒŒ ๊ฐ์‚ฌ์˜ ์ธ์‚ฌ๋ฅผ ์ „ํ•˜๋ฉฐ, ๊ณง ๋‹ค๊ฐ€์˜ฌ ์ถ”๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์˜ˆ๊ณ ํ•ฉ๋‹ˆ๋‹ค.


์ด ๋ธ”๋กœ๊ทธ์˜ ์ธ๊ธฐ ๊ฒŒ์‹œ๋ฌผ

ํŒŒ๋ณ‘ ์‹๋‹จ ์ œ์กฐ๊ธฐ 1

์ดˆ์ž„๊ณ„๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๋ฏธ๋ž˜๋ฅผ ๋ฐ”๊ฟ€ ๊ณผํ•™ ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ