๊ธ€

[DIY ์Šค๋งˆํŠธํŒœ] ์•„์ด๋””์–ด: XH-M609 + Ideal Diode๋ฅผ ์ด์šฉํ•œ ์ž๋™ ์ „์› ์ „ํ™˜ ๋ชจ๋“ˆ (ํƒœ์–‘๊ด‘ DC ์ „์› ์šฐ์„  ์‚ฌ์šฉ)

์ด๋ฏธ์ง€
[DIY] ํƒœ์–‘๊ด‘ DC ์ „์› ์šฐ์„  ์‚ฌ์šฉํ•˜๊ธฐ XH-M609 + Ideal Diode๋ฅผ ์ด์šฉํ•œ ์ž๋™ ์ „์› ์ „ํ™˜ ๋ชจ๋“ˆ ํƒœ์–‘๊ด‘ ํŒจ๋„์—์„œ ์ „๋ ฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๋•Œ๋Š” ํƒœ์–‘๊ด‘์„ ์šฐ์„  ์‚ฌ์šฉํ•˜๊ณ , ์ผ์‚ฌ๋Ÿ‰์ด ๋ถ€์กฑํ•ด ์ „์••์ด ๋–จ์–ด์ง€๋ฉด 12V SMPS๋ฅผ ๋ณด์กฐ ์ „์›์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ž๋™ ์ „์› ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค. ํƒœ์–‘๊ด‘์ด ์ถฉ๋ถ„ํ•˜๋ฉด ํƒœ์–‘๊ด‘์„ ์‚ฌ์šฉํ•˜๊ณ , ๋ถ€์กฑํ•˜๋ฉด SMPS๋กœ ์ „ํ™˜ํ•œ๋‹ค. ์—ฌ๊ธฐ์— Ideal Diode ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‘ ์ „์›์ด ์„œ๋กœ ์—ญ๋ฅ˜ํ•˜์ง€ ์•Š๋„๋ก ๋งŒ๋“ค๊ณ , XH-M609์˜ ์ „์•• ๊ฐ์ง€ ๋ฐ ๋ฆด๋ ˆ์ด ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ํƒœ์–‘๊ด‘ ์ „์›์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•˜๋„๋ก ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. 1. ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ ์ด๋ฒˆ ํšŒ๋กœ์˜ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํƒœ์–‘๊ด‘ DC ์ „์›์„ ์šฐ์„  ์‚ฌ์šฉ ํƒœ์–‘๊ด‘ ์ „์••์ด ๋‚ฎ์•„์ง€๋ฉด SMPS๋กœ ์ž๋™ ์ „ํ™˜ ํƒœ์–‘๊ด‘๊ณผ SMPS ์‚ฌ์ด์˜ ์—ญ๋ฅ˜ ๋ฐฉ์ง€ ๋ฆด๋ ˆ์ด ์ฒดํ„ฐ๋ง ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํžˆ์Šคํ…Œ๋ฆฌ์‹œ์Šค ์ ์šฉ ์ผ๋ฐ˜ ๋‹ค์ด์˜ค๋“œ๋ณด๋‹ค ๋‚ฎ์€ ์ „์•• ์†์‹ค LED, DC ํŒฌ, ์†Œํ˜• ์Šค๋งˆํŠธํŒœ ์žฅ์น˜ ๋“ฑ์— ํ™œ์šฉ ํŠนํžˆ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” Battery-Free DC Power Manager ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. 2. ์ „์ฒด ์‹œ์Šคํ…œ ๊ตฌ์กฐ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ┌───────────────┐ │ ํƒœ์–‘๊ด‘ ํŒจ๋„ │ │ DC ์ž…๋ ฅ │ └───────┬───────┘ │ [Ideal Diode A] │ ▼ ┌───────────┐ │ XH-M609 │ │ Relay │ └─────┬─────┘ ...

[DIY ์Šค๋งˆํŠธํŒœ] ESS ์—†๋Š” ํƒœ์–‘๊ด‘ ์ง๊ฒฐ ์‹๋ฌผ๋“ฑ ์‹œ์Šคํ…œ (์•„์ด๋””์–ด ๋…ธํŠธ)

์ด๋ฏธ์ง€
ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ ํƒœ์–‘๊ด‘ ํŒจ๋„๋งŒ ์ด์šฉํ•˜์—ฌ ์‹๋ฌผ๋“ฑ์„ ๊ตฌ๋™ํ•œ๋‹ค. ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋ฐฐํ„ฐ๋ฆฌ ์‚ฌ์šฉ ์•ˆ ํ•จ ESS ์‚ฌ์šฉ ์•ˆ ํ•จ ํ๋ฆฐ ๋‚ ์€ ๊บผ์ ธ๋„ ๊ดœ์ฐฎ์Œ ๊ตฌ๋ฆ„ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๊นœ๋นก์ž„ ์ตœ์†Œํ™” ์•„์นจ์—๋Š” ์ฒœ์ฒœํžˆ ์ผœ์ง€๊ณ  ์ €๋…์—๋Š” ์ฒœ์ฒœํžˆ ๊บผ์ง ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฑฐ์˜ ์—†๋Š” ์‹œ์Šคํ…œ ์ ์šฉ ๋Œ€์ƒ ์ƒˆ์‹น์ฑ„์†Œ ์ƒ์ถ” ์ผ€์ผ ํ—ˆ๋ธŒ๋ฅ˜ ์†Œํ˜• ์Šค๋งˆํŠธํŒœ ์‹คํ—˜์šฉ ์‹๋ฌผ ์ƒ์žฅ ์‹œ์Šคํ…œ ๊ธฐ๋ณธ ์•„์ด๋””์–ด ์ผ๋ฐ˜์ ์ธ ํƒœ์–‘๊ด‘ ์‹œ์Šคํ…œ ํƒœ์–‘๊ด‘ ํŒจ๋„ ↓ ๋ฐฐํ„ฐ๋ฆฌ ↓ LED ์‹๋ฌผ๋“ฑ ์ด๋ฒˆ ๋ชฉํ‘œ ํƒœ์–‘๊ด‘ ํŒจ๋„ ↓ LED ์‹๋ฌผ๋“ฑ ์ฆ‰, ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ์™„์ „ํžˆ ์ œ๊ฑฐํ•œ๋‹ค. ๋‹จ์ˆœ ์ง๊ฒฐ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์  ๋ฌธ์ œ 1 ๊ตฌ๋ฆ„์ด ์ง€๋‚˜๊ฐˆ ๋•Œ ๊นœ๋นก์ž„ ํ•ด๊ฐ€ ์จ์จ ↓ LED ON ๊ตฌ๋ฆ„ ↓ LED OFF ๊ตฌ๋ฆ„ ์‚ฌ๋ผ์ง ↓ LED ON ๋ฐ˜๋ณต ๋ฐœ์ƒ ๋ฌธ์ œ 2 ์ผ์ถœ / ์ผ๋ชฐ ๊ตฌ๊ฐ„ 12V 13V 14V 15V 16V LED๊ฐ€ ์• ๋งคํ•˜๊ฒŒ ์ผœ์ง€๊ฑฐ๋‚˜ ๊นœ๋นก์ž„ ๋ฌธ์ œ 3 LED ์ˆ˜๋ช… ์ €ํ•˜ ์งง์€ ์‹œ๊ฐ„ ON/OFF ๋ฐ˜๋ณต ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 1. ์ „์•• ์ž„๊ณ„๊ฐ’ ์ ์šฉ ํƒœ์–‘๊ด‘ ์ „์••์ด ์ถฉ๋ถ„ํ•  ๋•Œ๋งŒ LED ์ ๋“ฑ ์˜ˆ์‹œ 16V ์ด์ƒ → ON 15V ์ดํ•˜ → OFF 2. ํžˆ์Šคํ…Œ๋ฆฌ์‹œ์Šค ์ ์šฉ LM393 ๋น„๊ต๊ธฐ ์‚ฌ์šฉ 16V ์ด์ƒ → ์ผœ์ง 15V ์ดํ•˜ → ๊บผ์ง ๊ทธ๋Ÿฌ๋ฉด 15.8V 15.9V 16.0V 15.9V 16.1V ๊ฐ™์€ ๊ฒฝ๊ณ„ ๊ตฌ๊ฐ„์—์„œ๋„ ๊นœ๋นก์ด์ง€ ์•Š๋Š”๋‹ค. 3. RC ์†Œํ”„ํŠธ ์Šคํƒ€ํŠธ MOSFET ๊ฒŒ์ดํŠธ์— RC ํšŒ๋กœ ์ถ”๊ฐ€ LM393 ↓ R ↓ MOSFET Gate ↑ C | GND ์‹œ์ •์ˆ˜ ๊ณ„์‚ฐ tau = R × C ์˜ˆ์‹œ R = 100kฮฉ C = 100uF tau = 10์ดˆ ๊ฒฐ๊ณผ LED 0% 10% 20% 40% 60% 80% 100% ์ฒœ์ฒœํžˆ ์ผœ์ง 4. RC ์†Œํ”„ํŠธ ์Šคํ†ฑ ์ „์••์ด ๋–จ์–ด์ง€๋ฉด ์ปคํŒจ์‹œํ„ฐ ๋ฐฉ์ „ ↓ ๊ฒŒ์ดํŠธ ์ „์•• ๊ฐ์†Œ ↓ LED ๋ฐ๊ธฐ ๊ฐ์†Œ ↓ OFF ๊ฒฐ๊ณผ 100% 80% 60% 40% 20% 0% ์ฒœ์ฒœํžˆ ๊บผ์ง ์Šˆํผ์ปคํŒจ์‹œํ„ฐ๋Š” ํ•„์š”ํ•œ๊ฐ€? ํ•„์ˆ˜๋Š” ์•„๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” RC ํšŒ๋กœ + LM393 ๋งŒ์œผ๋กœ๋„ ์ƒ๋‹นํžˆ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. ๊ถŒ์žฅ ์‚ฌ์šฉ๋ฒ• ์Šˆํผ์ปคํŒจ์‹œํ„ฐ๋ฅผ LED ์ „์›์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค...

[DIY ์Šค๋งˆํŠธํŒœ] ESS ์—†์ด ๋งŒ๋“œ๋Š” ํƒœ์–‘๊ด‘ ํ™˜๊ธฐ ์‹œ์Šคํ…œ

์ด๋ฏธ์ง€
์™œ ESS๋ฅผ ์“ฐ์ง€ ์•Š์•˜๋Š”๊ฐ€? ์†Œํ˜• ์Šค๋งˆํŠธํŒœ์ด๋‚˜ ํ…ƒ๋ฐญ์šฉ ํ™˜๊ธฐ ์‹œ์Šคํ…œ์„ ๊ฒ€์ƒ‰ํ•ด ๋ณด๋ฉด ๋Œ€๋ถ€๋ถ„ ๋ฐฐํ„ฐ๋ฆฌ(ESS)๋ฅผ ํฌํ•จํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ์•ˆํ•œ๋‹ค. ๋ฌผ๋ก  ESS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐค์—๋„ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ณ  ์ „์•• ๋ณ€๋™์—๋„ ๊ฐ•ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ DIY ๊ด€์ ์—์„œ ๋ณด๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ถ€๋‹ด์ด ์ƒ๊ธด๋‹ค. ๋ฐฐํ„ฐ๋ฆฌ ๊ฐ€๊ฒฉ์ด ๋น„์‹ธ๋‹ค. ์ถฉ์ „ ํšŒ๋กœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ณผ์ถฉ์ „/๊ณผ๋ฐฉ์ „ ๋ณดํ˜ธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ˆ˜๋ช…์ด ์กด์žฌํ•œ๋‹ค. ์˜ฅ์™ธ ์„ค์น˜ ์‹œ ๊ด€๋ฆฌ ํฌ์ธํŠธ๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๊ฒฐ๊ตญ ๊ณ ์žฅ ์š”์†Œ๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค. ๋ฐ˜๋ฉด ์—ฌ๋ฆ„์ฒ  ์†Œํ˜• ์˜จ์‹ค์ด๋‚˜ ์œก๋ฌ˜ ์ƒ์ž์˜ ํ™˜๊ธฐ ๋ชฉ์ ์ด๋ผ๋ฉด ๋Œ€๋ถ€๋ถ„ ํ–‡๋น›์ด ๊ฐ•ํ•œ ์‹œ๊ฐ„๋Œ€์—๋งŒ ํŒฌ์ด ๋™์ž‘ํ•ด๋„ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ตณ์ด ESS๋ฅผ ๋„ฃ์–ด ์‹œ์Šคํ…œ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ? ์ด ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๊ธฐ์„œ ์ถœ๋ฐœํ–ˆ๋‹ค. "๋ฐฐํ„ฐ๋ฆฌ ์—†์ด, ํƒœ์–‘๊ด‘ ํŒจ๋„๊ณผ ํŒฌ๋งŒ์œผ๋กœ ์ตœ๋Œ€ํ•œ ๋‹จ์ˆœํ•˜๊ณ  ์˜ค๋ž˜๊ฐ€๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์—†์„๊นŒ?" ๋‹จ์ˆœํ•จ์ด ๊ณง ์‹ ๋ขฐ์„ฑ์ด๋‹ค ํƒœ์–‘๊ด‘ ํŒจ๋„์— ํŒฌ์„ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ตฌ๋ฆ„์ด ์ง€๋‚˜๊ฐ€๊ฑฐ๋‚˜ ์ผ์กฐ๋Ÿ‰์ด ์• ๋งคํ•œ ์ƒํ™ฉ์—์„œ ํŒฌ์ด ๋Œ๋‹ค๊ฐ€ ๋ฉˆ์ถ”๊ณ  ๋‹ค์‹œ ๋Œ๋‹ค๊ฐ€ ๋ฉˆ์ถ”๊ณ  ๋œ๋œ ๋–จ๋ฆฌ๋ฉฐ ๋ชจํ„ฐ๊ฐ€ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ๋ฐ›๋Š”๋‹ค. ์‹ค์ œ๋กœ ์ด๋Ÿฐ ์ƒํƒœ๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด ๋ชจํ„ฐ ์ˆ˜๋ช…๋„ ์งง์•„์ง€๊ณ  ์ฒด๊ฐ์ƒ ์ƒ๋‹นํžˆ ๊ฑฐ์Šฌ๋ฆฐ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ์„ค๊ณ„์˜ ๋ชฉํ‘œ๋Š” ๋‹จ์ˆœํ–ˆ๋‹ค. ์ผœ์งˆ ๋•Œ๋Š” ํ™•์‹คํ•˜๊ฒŒ ์ผœ์ง„๋‹ค. ๊บผ์งˆ ๋•Œ๋Š” ํ™•์‹คํ•˜๊ฒŒ ๊บผ์ง„๋‹ค. ์ค‘๊ฐ„์—์„œ๋Š” ์šฐ์™•์ขŒ์™•ํ•˜์ง€ ์•Š๋Š”๋‹ค. ESS ์—†์ด ๊ตฌํ˜„ํ•œ๋‹ค. ์‹œ์ค‘ ๋ถ€ํ’ˆ๋งŒ์œผ๋กœ ์ œ์ž‘ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งŒ๋Šฅ๊ธฐํŒ ์ˆ˜์ค€์—์„œ ๋ˆ„๊ตฌ๋‚˜ ์ œ์ž‘ ๊ฐ€๋Šฅํ•˜๋‹ค. ์„ค๊ณ„ ์ฒ ํ•™ ์ด ํšŒ๋กœ๋Š” ๋ณต์žกํ•œ MCU๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•„๋‘์ด๋…ธ ์—†์Œ ESP32 ์—†์Œ ๋ฐฐํ„ฐ๋ฆฌ ์—†์Œ ์ถฉ์ „๊ธฐ ์—†์Œ ์†Œํ”„ํŠธ์›จ์–ด ์—†์Œ ๋Œ€์‹  ์ˆ˜์‹ญ ๋…„ ๋™์•ˆ ๊ฒ€์ฆ๋œ ์•„๋‚ ๋กœ๊ทธ ๋ถ€ํ’ˆ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค. LM358 P์ฑ„๋„ MOSFET ์ œ๋„ˆ ๋‹ค์ด์˜ค๋“œ ์ €ํ•ญ ์ปคํŒจ์‹œํ„ฐ ๊ทธ๋ฆฌ๊ณ  ์ œ์–ด ๋กœ์ง์€ ๋‹จ ํ•˜๋‚˜๋‹ค. "์ „์••์ด ์ถฉ๋ถ„ํ•˜๋ฉด ์ผœ๊ณ , ๋ถ€์กฑํ•˜๋ฉด ๋ˆ๋‹ค." ํ•˜์ง€๋งŒ ๋‹จ์ˆœํ•œ ON/OFF๊ฐ€ ์•„๋‹ˆ๋ผ ์Šˆ๋ฏธํŠธ ํŠธ๋ฆฌ๊ฑฐ(Hysteresis)๋ฅผ ์ ์šฉํ•˜์—ฌ ์ผœ์ง€๋Š” ์ „์••๊ณผ ๊บผ์ง€๋Š” ์ „์••์„ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“ ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 11V ์ด์ƒ → ON 8.5V ์ดํ•˜ → OFF ๋กœ ์„ค์ •ํ•˜๋ฉด ๊ตฌ๋ฆ„์ด...

[DIY ์Šค๋งˆํŠธํŒœ] ํŒŒ์ด์ฌ Flask + MJPEG + Cloudflare Tunnel์„ ์ด์šฉํ•œ ๊ฐ„์ด ์‹ค์‹œ๊ฐ„ CCTV ๊ตฌ์ถ•

๊ฐœ์š” USB ์›น์บ ์ด ์—ฐ๊ฒฐ๋œ PC์—์„œ ์˜์ƒ์„ ์บก์ฒ˜ํ•˜์—ฌ Flask ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด MJPEG ์ŠคํŠธ๋ฆฌ๋ฐ์œผ๋กœ ์ œ๊ณตํ•˜๊ณ , Cloudflare Tunnel์„ ์ด์šฉํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ํœด๋Œ€ํฐ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„์ด CCTV ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•œ๋‹ค. ํŠน์ง•: ๋ฌด๋ฃŒ ํฌํŠธํฌ์›Œ๋”ฉ ๋ถˆํ•„์š” ๊ณต์ธ IP ๋ถˆํ•„์š” ๊ณต์œ ๊ธฐ ์„ค์ • ๋ถˆํ•„์š” ๋ณ„๋„ ์•ฑ ์„ค์น˜ ๋ถˆํ•„์š” ์›น ๋ธŒ๋ผ์šฐ์ €๋งŒ ์žˆ์œผ๋ฉด ์ ‘์† ๊ฐ€๋Šฅ ๊ฑฐ์˜ ์‹ค์‹œ๊ฐ„ ์˜์ƒ ํ™•์ธ ๊ฐ€๋Šฅ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ USB Webcam ↓ OpenCV ↓ Flask MJPEG Server ↓ localhost:8000 ↓ Cloudflare Tunnel ↓ https://xxxxx.trycloudflare.com ↓ ํœด๋Œ€ํฐ ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ camera_server/ └── camera_server.py ํ•„์š” ํŒจํ‚ค์ง€ ์„ค์น˜ pip install flask pip install opencv-python ํ™•์ธ: python -c "import cv2; print(cv2.__version__)" CCTV ์„œ๋ฒ„ ์ฝ”๋“œ from flask import Flask, Response import cv2 from datetime import datetime app = Flask(__name__) cap = cv2.VideoCapture(0) if not cap.isOpened(): raise RuntimeError("์นด๋ฉ”๋ผ ์—ด๊ธฐ ์‹คํŒจ") # Logitech C525 ๊ถŒ์žฅ ์„ค์ • cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) def generate_frames(): while True: success, frame = cap.read() if not success: continue timestamp = datetime.now().str...

[DIY ์Šค๋งˆํŠธํŒœ] ํŒŒ์ด์ฌ + ์›น์บ  + Cloudflare Tunnel์„ ์ด์šฉํ•œ ๊ฐ„์ด CCTV ๊ตฌ์ถ•

๊ฐœ์š” USB ์›น์บ ์ด ์—ฐ๊ฒฐ๋œ PC์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์‚ฌ์ง„์„ ์ดฌ์˜ํ•˜๊ณ , Cloudflare Tunnel์„ ์ด์šฉํ•˜์—ฌ ์™ธ๋ถ€์—์„œ ํœด๋Œ€ํฐ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„์ด CCTV ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•œ๋‹ค. ํŠน์ง•: ๋ฌด๋ฃŒ ํฌํŠธํฌ์›Œ๋”ฉ ๋ถˆํ•„์š” ๊ณต์ธ IP ๋ถˆํ•„์š” ๊ณต์œ ๊ธฐ ์„ค์ • ๋ถˆํ•„์š” ํœด๋Œ€ํฐ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ ‘์† ๊ฐ€๋Šฅ Python๋งŒ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ USB ์›น์บ  ↓ Python(OpenCV) ↓ latest.jpg ์ƒ์„ฑ Python HTTP Server ↓ localhost:8000 Cloudflare Tunnel ↓ https://xxxxx.trycloudflare.com ํœด๋Œ€ํฐ ๋ธŒ๋ผ์šฐ์ € ํ”„๋กœ์ ํŠธ ํด๋” ๊ตฌ์กฐ camera_server/ ├── camera.py ├── index.html └── latest.jpg 1. OpenCV ์„ค์น˜ pip install opencv-python ์„ค์น˜ ํ™•์ธ: python -c "import cv2; print(cv2.__version__)" 2. ์›น์บ  ์ดฌ์˜ ํ”„๋กœ๊ทธ๋žจ camera.py import cv2 import time from datetime import datetime # ์›น์บ  ์—ด๊ธฐ cap = cv2.VideoCapture(0) if not cap.isOpened(): print("์นด๋ฉ”๋ผ ์—ด๊ธฐ ์‹คํŒจ") exit() print("์นด๋ฉ”๋ผ ์‹œ์ž‘") try: while True: ret, frame = cap.read() if not ret: print("ํ”„๋ ˆ์ž„ ์ฝ๊ธฐ ์‹คํŒจ") time.sleep(1) continue timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") cv2.putText( frame, ...

[DIY ์Šค๋งˆํŠธํŒœ] ์•„๋‘์ด๋…ธ + NTC ์จ๋ฏธ์Šคํ„ฐ๋ฅผ ์ด์šฉํ•œ ๊ฐ„์ด ํ’์†๊ณ„(์—ด์„ ์‹ ํ’์†๊ณ„) ๊ตฌํ˜„ ์•„์ด๋””์–ด

๊ฐœ์š” ์ผ๋ฐ˜์ ์œผ๋กœ ์จ๋ฏธ์Šคํ„ฐ๋Š” ์˜จ๋„๋ฅผ ์ธก์ •ํ•˜๋Š” ์„ผ์„œ๋กœ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ผ๋ถ€๋Ÿฌ ์„ผ์„œ๋ฅผ ๊ฐ€์—ดํ•œ ๋’ค ๋ฐ”๋žŒ์— ์˜ํ•ด ๋ƒ‰๊ฐ๋˜๋Š” ์ •๋„๋ฅผ ์ธก์ •ํ•˜๋ฉด ํ’์† ์„ผ์„œ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฐฉ์‹์€ ์‚ฐ์—…๊ณ„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์—ด์„ ์‹ ํ’์†๊ณ„(Thermal Anemometer) ์˜ ๊ธฐ๋ณธ ์›๋ฆฌ์™€ ๋™์ผํ•˜๋‹ค. ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ํšŒ์ „ ๋ถ€ํ’ˆ ์—†์Œ ๋งˆ๋ชจ ๋ถ€ํ’ˆ ์—†์Œ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•จ ์ €๋ ดํ•จ ๊ธฐ๋ฅ˜ ๋ณ€ํ™” ๊ฐ์ง€์— ๋งค์šฐ ๋ฏผ๊ฐํ•จ ์•„๋‘์ด๋…ธ๋กœ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ ๋™์ž‘ ์›๋ฆฌ 1. ๋Œ€๊ธฐ์˜จ๋„ ์ธก์ •์šฉ ์จ๋ฏธ์Šคํ„ฐ ์ฒซ ๋ฒˆ์งธ ์จ๋ฏธ์Šคํ„ฐ๋Š” ์ผ๋ฐ˜์ ์ธ ์˜จ๋„ ์„ผ์„œ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•œ๋‹ค. ์ž๊ธฐ ๋ฐœ์—ด(Self Heating)์ด ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ž‘์€ ์ „๋ฅ˜๋งŒ ํ˜๋ฆผ ํ˜„์žฌ ๊ณต๊ธฐ ์˜จ๋„๋ฅผ ์ธก์ • T_ambient 2. ๊ฐ€์—ด์šฉ ์จ๋ฏธ์Šคํ„ฐ ๋‘ ๋ฒˆ์งธ ์จ๋ฏธ์Šคํ„ฐ๋Š” ์ผ๋ถ€๋Ÿฌ ๊ฐ€์—ดํ•œ๋‹ค. ์ „๋ฅ˜๋ฅผ ์ถฉ๋ถ„ํžˆ ํ˜๋ ค ์„ผ์„œ ์ž์ฒด ์˜จ๋„๋ฅผ ์ฃผ๋ณ€ ์˜จ๋„๋ณด๋‹ค ๋†’๊ฒŒ ๋งŒ๋“ ๋‹ค. ์˜ˆ) ์‹ค๋‚ด์˜จ๋„ : 25℃ ๊ฐ€์—ด์„ผ์„œ : 50℃ 3. ๋ฐ”๋žŒ์ด ๋ฐœ์ƒ ๊ณต๊ธฐ๊ฐ€ ํ๋ฅด๋ฉด ๊ฐ€์—ด๋œ ์„ผ์„œ์˜ ์—ด์ด ์™ธ๋ถ€๋กœ ๋น ์ ธ๋‚˜๊ฐ„๋‹ค. ํ’์† ์ฆ๊ฐ€ → ์—ด์†์‹ค ์ฆ๊ฐ€ → ์„ผ์„œ ์˜จ๋„ ๊ฐ์†Œ ์˜ˆ) ๋ฌดํ’ ์ƒํƒœ T_heated = 50℃ ์•ฝํ•œ ๋ฐ”๋žŒ T_heated = 40℃ ๊ฐ•ํ•œ ๋ฐ”๋žŒ T_heated = 30℃ 4. ์˜จ๋„ ์ฐจ์ด ๊ณ„์‚ฐ ๋‘ ์„ผ์„œ์˜ ์˜จ๋„ ์ฐจ์ด๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ฮ”T = T_heated - T_ambient ๋˜๋Š” ฮ”V = V_ambient - V_heated NTC ํŠน์„ฑ์ƒ ์˜จ๋„๊ฐ€ ๋ณ€ํ•˜๋ฉด ์ €ํ•ญ๊ณผ ์ „์••์ด ๋ณ€ํ•˜๋ฏ€๋กœ ์‹ค์ œ ๊ตฌํ˜„์€ ์ „์•• ์ฐจ์ด๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์™œ ํ’์†์ด ์ปค์งˆ์ˆ˜๋ก ๊ฐ’์ด ๋ณ€ํ•˜๋Š”๊ฐ€? ๊ฐ€์—ด๋œ ์„ผ์„œ๊ฐ€ ์žƒ๋Š” ์—ด๋Ÿ‰์€ ํ’์†๊ณผ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค. ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•˜๋ฉด ํ’์† ↑ → ๋ƒ‰๊ฐ ↑ → ์„ผ์„œ ์˜จ๋„ ↓ → NTC ์ €ํ•ญ ↑ → ADC ๊ฐ’ ๋ณ€ํ™” ↑ ๋”ฐ๋ผ์„œ ํ’์†์„ ์ง์ ‘ ์ธก์ •ํ•˜์ง€ ์•Š์•„๋„ ๊ธฐ๋ฅ˜ ์„ธ๊ธฐ๋ฅผ ์ถ”์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. NTC ์„ ์ • ๊ฐ€์ด๋“œ ๊ฐ€์žฅ ์ถ”์ฒœํ•˜๋Š” NTC DIY ๋ฐ ์Šค๋งˆํŠธํŒœ ํ™˜๊ธฐ ๊ฐ์‹œ์šฉ์œผ๋กœ๋Š” ๋‹ค์Œ ๊ทœ๊ฒฉ์ด ๊ฐ€์žฅ ๋ฌด๋‚œํ•˜๋‹ค. 10kฮฉ NTC B๊ฐ’ 3950 ๋น„๋“œํ˜•(Bead Type) ๋Œ€ํ‘œ ์ œํ’ˆ MF52-103 MF58-103 10K B3950 Glass Bead NTC ๋น„๋“œํ˜•์„...

[์•„๋‘์ด๋…ธ] ์Šˆํผ์ปคํŒจ์‹œํ„ฐ UPS + Raspberry Pi + Arduino ์ž๋™ ๋ณต๊ตฌ ์‹œ์Šคํ…œ ์•„์ด๋””์–ด

์ด๋ฏธ์ง€
์‹œ์Šคํ…œ ๊ฐœ์š” ์ด ์‹œ์Šคํ…œ์˜ ๋ชฉ์ ์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ •์ „ ์‹œ Raspberry Pi๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์†์ƒ์„ ๋ฐฉ์ง€ ์ „์› ๋ณต๊ตฌ ํ›„ Raspberry Pi๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ค์‹œ ๋ถ€ํŒ…๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ Arduino๊ฐ€ ๊ฐ•์ œ๋กœ ๊นจ์›Œ์„œ ์ž๋™ ๋ณต๊ตฌ ์ฆ‰, ๋‹จ์ˆœ UPS๊ฐ€ ์•„๋‹ˆ๋ผ ์•ˆ์ „ ์ข…๋ฃŒ(Safe Shutdown) + ์ž๋™ ๋ณต๊ตฌ(Self-Healing) ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ๊ฐ ์žฅ์น˜ ์—ญํ•  Raspberry Pi (๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋‹ด๋‹น) UPS ์ „์› ์ƒํƒœ ๊ฐ์‹œ ์ •์ „ ๋ฐœ์ƒ ๊ฐ์ง€ ๋””์Šคํฌ ์บ์‹œ ์ €์žฅ(sync) ์•ˆ์ „ ์ข…๋ฃŒ ์ˆ˜ํ–‰ ์ข…๋ฃŒ ์ง์ „ Arduino์—๊ฒŒ ์ข…๋ฃŒ ์‚ฌ์‹ค ์ „๋‹ฌ Arduino (์ „์› ๊ด€๋ฆฌ์ž ๋‹ด๋‹น) ์ „์› ๋ณต๊ตฌ ์‹œ ๊ฐ€์žฅ ๋จผ์ € ๋™์ž‘ Raspberry Pi์˜ ์ƒ์กด ์—ฌ๋ถ€ ํ™•์ธ Raspberry Pi๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š์œผ๋ฉด RUN ํ•€ ๋ฆฌ์…‹ ๋ฌด์ธ ์ž๋™ ๋ณต๊ตฌ ์ˆ˜ํ–‰ ํ•˜๋“œ์›จ์–ด ์—ฐ๊ฒฐ Raspberry Pi GPIO ์šฉ๋„ GPIO18 UPS ์ „์› ๊ฐ์ง€ ์ž…๋ ฅ GPIO20 Heartbeat ์ถœ๋ ฅ Arduino ํ•€ ์šฉ๋„ D2 Raspberry Pi Heartbeat ์ž…๋ ฅ D3 Raspberry Pi RUN ๋ฆฌ์…‹ ์ œ์–ด ๋™์ž‘ ์‹œ๋‚˜๋ฆฌ์˜ค ์ •์ƒ ์ƒํƒœ ์™ธ๋ถ€ ์ „์›์ด ์ •์ƒ ๊ณต๊ธ‰ ์ค‘ ์™ธ๋ถ€ ์ „์› ON ↓ UPS ์ •์ƒ ↓ Raspberry Pi ์‹คํ–‰ ↓ GPIO20 = HIGH ↓ Arduino ๋Œ€๊ธฐ ์ •์ „ ๋ฐœ์ƒ UPS ๊ฐ์ง€ ํ•€์ด LOW๋กœ ๋–จ์–ด์ง ์ •์ „ ๋ฐœ์ƒ ↓ GPIO18 FALLING ๊ฐ์ง€ ↓ sync ์‹คํ–‰ ↓ 3์ดˆ ๋Œ€๊ธฐ ↓ sync ์žฌ์‹คํ–‰ ↓ Heartbeat LOW ↓ Shutdown ์ˆ˜ํ–‰ ์ „์› ๋ณต๊ตฌ ์ „์› ๋ณต๊ตฌ ↓ Arduino ๋ถ€ํŒ… ↓ 5์ดˆ ๋Œ€๊ธฐ ↓ Heartbeat ํ™•์ธ Raspberry Pi ์ •์ƒ ๋ถ€ํŒ… Heartbeat = HIGH ↓ ์ •์ƒ ์ƒํƒœ ↓ ์•„๋ฌด ์ž‘์—… ์•ˆ ํ•จ Raspberry Pi ์‹๋ฌผ์ธ๊ฐ„ ์ƒํƒœ Heartbeat = LOW ↓ RU...