November 19, 2024

디바이스마트 미디어:

[66호] 원하는 색상으로 제어가 가능한 아두이노 IoT 스마트 무드등 키트 -

2021-06-25

★2021 ICT 융합 프로젝트 공모전 결과 발표! -

2021-05-12

디바이스마트 국내 온라인 유통사 유일 벨로다인 라이다 공급! -

2021-02-16

★총 상금 500만원 /2021 ICT 융합 프로젝트 공모전★ -

2021-01-18

디바이스마트 온라인 매거진 전자책(PDF)이 무료! -

2020-09-29

[61호]음성으로 제어하는 간접등 만들기 -

2020-08-26

디바이스마트 자체제작 코딩키트 ‘코딩 도담도담’ 출시 -

2020-08-10

GGM AC모터 대량등록! -

2020-07-10

[60호]초소형 레이더 MDR, 어떻게 제어하고 활용하나 -

2020-06-30

[60호]NANO 33 IoT보드를 활용한 블루투스 수평계 만들기 -

2020-06-30

라즈베리파이3가 드디어 출시!!! (Now Raspberry Pi 3 is Coming!!) -

2016-02-29

MoonWalker Actuator 판매개시!! -

2015-08-27

디바이스마트 레이저가공, 밀링, 선반, 라우터 등 커스텀서비스 견적요청 방법 설명동영상 입니다. -

2015-06-09

디바이스마트와 인텔®이 함께하는 IoT 경진대회! -

2015-05-19

드디어 adafruit도 디바이스마트에서 쉽고 저렴하게 !! -

2015-03-25

[29호] Intel Edison Review -

2015-03-10

Pololu 공식 Distributor 디바이스마트, Pololu 상품 판매 개시!! -

2015-03-09

[칩센]블루투스 전 제품 10%가격할인!! -

2015-02-02

[Arduino]Uno(R3) 구입시 37종 센서키트 할인이벤트!! -

2015-02-02

[M.A.I]Ahram_ISP_V1.5 60개 한정수량 할인이벤트!! -

2015-02-02

[46호]한이음 엑스포2017

46 hot 한이음 (1)

세상을 잇(ICT)다

한이음 엑스포2017

글 | 심혜린 기자 linda@ntrex.co.kr

 

2017 한이음 엑스포는 지난 11월 24일과 25일 이틀간 일산 킨텍스 제1전시장 1홀에서 성공적으로 마무리했다. 올해로 14년째 열리는 한이음 엑스포는 ‘한이음, 세상을 IcT(잇)다!’라는 슬로건과 함께 ‘ICT 멘토링’ 참가자들의 우수 성과물을 전시 및 시상하고, ICT 주역이 될 대학생 및 취업 준비생에게 미래 비전을 제시했다. 특히 이번 행사는 ‘2017 SW 교육 페스티벌’의 일환으로 초·중등 교육, SW중심대학 등 소프트웨어 교육 관련 행사와 통합 진행되어 학생들의 발길이 끊이지 않았다. 한이음 공모전과 이브와 ICT 멘토링 수행결과 발표회 등에서 선정된 133건의 우수작품이 전시됐다. 대학교뿐만 아니라 초중고 학생들의 기발한 아이디어 작품들을 둘러볼 수 있어 기자도 눈을 뗄 수 없었다.

46 hot 한이음 (2)

세종대학교 부스에서는 제29회 SW공모대전 학생부 최우수상을 수상한 ‘Handlear’을 전시하였다. 이 작품은 핸들 커버를 활용한 청각 장애인 운전 솔루션으로 청각장애인을 위해서 네비게이션에 대한 다양한 안내를 제공하며 주행 중에 위험상황을 인지하여 위급상황에 대비해 빠른 대처가 가능해 효율적이다. 또한 압력 감지센서를 이용해서 핸들의 좌, 우측 구분이 가능하다.

46 hot 한이음 (3)

제29회 글로벌 SW공모대전 은상(미래창조과학부 장관상)을 수상한 ‘Double i’ 는 영유아 간헐적 사시 조기 진단 애플리케이션으로 조기 치료를 위해 병원으로 유도하여 안과 질환(복시, 약시 등)을 예방할 수 있다. 조기 치료를 유도해 영유아의 시력 발달을 도모할 수 있고 향후 이 애플리케이션을 확장해서 당뇨망 막증과 헤르페스성 각막염을 치료할 수 있다.

46 hot 한이음 (4)

46 hot 한이음 (5)

조선대학교 부스는 ‘STAR9, 나의 별을 찾아라’ 어플리케이션을 직접 체험할 수 있도록 꾸리고 귀여운 행성 캐릭터를 내세워 많은 인기를 끌었다. 사람의 성향을 8가지 행성으로 분류해 성격유형 진단 검사를 하는 어플리케이션으로 성인 성향검사, 아동 성향검사, 유아 성향검사로 나누어져 있으며 비교적 간단해 쉽게 파악할 수 있었다.

46 hot 한이음 (6) 46 hot 한이음 (7)

포항제철지곡초에서는 아두이노를 활용한 다양한 DIY를 선보였다. 제 3회 무한상상 메이커스대회 우수상을 받기도 했으며 다양한 학습모델과 놀이를 적용해 컴퓨터 과학 교육을 실시한 우수 사례로 꼽히기도 했다. 빛의 양에 따라 주차 가능 유무를 LED로 알려주는 주차시스템 만들기, 손에 가까이오면 뚜껑을 열어주는 스마트휴지통 만들기, 손으로 톡톡톡 색상을 변경하는 무드톡톡 무드등 만들기 등 실용적인 아이디어가 돋보였다. 포항 시티 만들기는 아름다운 포항의 야경을 표현한 작품으로 컴퓨터 프로그램에서 해당 건물을 클릭하면 LED를 켰다 껐다 할 수 있다. 학생들이 직접 서로 협동해 건물을 하나씩 만들었다는 점에서 의의가 크다.

46 hot 한이음 (8)

SW 교육 우수학교로 선정된 마포고등학교에서는 레고로 만든 골드버그 장치와 ‘LOOP STATION’ 등 다양한 작품을 선보였다. LOOP STATION는 현장에서 녹음한 소리를 계속 반복해 코러스 효과를 내는 등 풍성한 음악을 제작할 수 있으며 녹음된 음에 따라 LED의 높낮이가 달라지도록 만들었다.

46 hot 한이음 (9)

기자가 특히 이번 엑스포에서 유용하다고 생각했던 작품은 ‘The Calli’ 어플리케이션이다. 작품을 만든 메이커는 현재 출시 심사를 앞두고 있다고 하며 자세하게 사용 방법을 설명해주었다. 캘리그라피를 소재로 어플리케이션을 만들었다는 점에서 요즘 트렌드인 디지털 + 아날로그가 합쳐진 타입으로 실제 출시되면 인기가 많을 것으로 예상된다. 보통의 경우 캘리그라피를 서예붓이나 붓펜으로 종이에 캘리그라피를 제작하고, 스캔을 떠 컴퓨터로 보정하는 작업을 거치지만 시간적, 공간적 제약이 많은 사람들을 위해 쉽게 즐기기 어렵다는 단점이 있어 남녀노소 누구나 어려움 없이 원하는 이미지를 제작할 수 있는 어플을 만들고자 했다. 사용해보니 글씨 색상을 바꿀 수도 있고 필터 기능도 있어 완성도 높은 이미지를 제작할 수 있었다.

46 hot 한이음 (10)

전시장 곳곳에는 여러 체험 요소들이 많아 관람에 재미를 더했다. 아주대학교에서는 구글 카드 보드를 직접 만들어 스마트폰을 제품 안에 배치해서 다양하고 재밌는 VR 콘텐츠를 즐길 수 있도록 해 체험해보려는 학생들로 붐볐다. 이 작품은 조립 설명서에 기재되어 있는 과정에 따라서 손쉽게 조립할 수 있고 VR 어플을 이용해서 영상도 시청할 수 있다.

46 hot 한이음 (11)

동의대학교 전자공학과 재학생 5명으로 이루어진 가온누리팀(김진현, 엄상현, 김창영, 양태동, 김성명)은 이번 ‘2017 한이음 공모전’에서 대상을 수상해 직접 수상작 시연을 선보여 주목을 받았다. 가온누리팀은 6자유도 센서를 이용한 다방향 이동 세그웨이를 개발했다. 세그웨이가 전후방으로만 움직이고 조종이 불편한 점을 개선하여 여덟 방향으로 이동이 가능하고 장갑형 무선 조종기로 원격 제어가 가능한 것이 특징이다. 초보자가 숙달하는데 오랜 시간이 걸리고 이동 방향에 제한적이라는 점에 착안해 누구나 쉽게 세그웨이를 이용할 수 있도록 한 점이 좋은 평가를 받았다. 이외에도 ‘2017 한이음 공모전’ 에는 인하대 Alpha Cra팀의 딥러닝 기반의 자율 주행 버스 운행 시스템, 대구가톨릭대의 SNS와 클라우드를 이용한 실시간 협업 스터디 플랫폼, 한신대의 아르바이트 데이터를 마이닝 기법으로 수집, 분석해 시각화한 모두의 통계청 등이 수상했다.

46 hot 한이음 (12)

한 켠에서는 가상현실(VR)을 체험할 수 있도록 마련해 관람객들의 참여가 활발했다. 조선대학교 산학협력단 프로젝트인 HMD VR 콘텐츠는 광주 전남 관광명소 홍보 및 전시를 위해 제작한 것으로 ‘해남 울돌목 이순신 테마’를 선보였다. 360 video VR, Photo VR이 가능하며 코스별로 립모션 컨트롤 구간이동이 가능하다. 또한 메인 메뉴에서 투어 코스를 선택할 수 있다. 실제로 체험하는 영상을 보니 실감 나게 구현되고 있었다.

46 hot 한이음 (13)

작품 전시 외에도 각종 VR, 드론, 코딩 등을 체험할 수 있도록 마련한 부스도 다양했다. 융복합 콘텐츠 스타트업인 ARTINCO(알틴코)에서는 미디어아트 VR 콘텐츠를 선보여 많은 관람객들이 호기심을 가지고 참여했다. ARTINCO는 각종 전시회에서 VR과 뮤지컬을 융복합한 콘텐츠를 시연하고, 체험존을 운영하며 활발하게 활동하고 있는 기업이다. 보통 VR(가상현실)을 생각하면 게임을 연상하곤 하는데 문화기술과 예술의 융복합을 선보여 더욱 새롭고 흥미로운 느낌을 받았다. 관계자는 VR(가상현실) 기술이 단순히 흥미 위주의 기술로 인식하지만, 이런 활동을 통해 사람들의 인식을 개선하고 싶다고 전했다.

46 hot 한이음 (14)

‘가족이 함께하는 Family coding day’ 부스에서 코딩에 적극 참여하려는 가족 단위 관람객들로 붐볐다. 몇 년 전까지만 해도 가족이 함께 코딩을 배우는 체험을 생각하지도 못했었지만, 이제는 2018년 코딩 의무화 교육에 발맞춰 코딩 교육 및 체험이 흔한 풍경이 되었다. 코딩 교육이 학생들을 위한 것이 아닌 누구에게나 참여할 수 있고 다양하게 열려있다는 느낌 또한 받을 수 있었다.

46 hot 한이음 (15)

취업을 위해 고민하는 대학생들을 위해 커리어컨설팅관을 운영해 진로상담과 취업 정보, 이미지 컨설팅, 면접 메이크업 등의 다양한 취업 프로그램으로 도움을 주기도 했다.

2017 한이음 엑스포는 전년도보다도 더 커진 규모로 학생들의 참신한 아이디어 작품이 전시되어 관람객들의 많은 호응을 이끌었다. 작품을 전시하기만 하는 것이 아닌 ‘ICT 멘토링’ 제도로 ICT 실무 전문가와 3~5명의 대학생들이 한 팀이 돼 현업 실무 기술이 반영된 프로젝트를 진행해 현장에서 필요한 실무 경험을 쌓을 수 있어 학생들의 만족도가 높았다. 관계자는 이 프로젝트로 개인 역량을 쌓을 수 있어 높은 취업률과 참여율을 기록하고 있으며 경쟁력을 갖추고 싶어하는 대학생들에게 좋은 기회가 될 것이라고 말했다. 2017 한이음 엑스포는 다채로운 체험 및 참신한 아이디어를 토대로 밝은 미래를 전망해볼 수 있었다.

 

 

[46호]Mood Light – Pi Zero W Project Kit [PIM259]

PIMORONI 

Mood Light – Pi Zero W Project Kit [PIM259] 출시

시중에서 판매되는 인테리어 소품이 넘쳐나고 있다. 그중에서도 특히 무드등은 연말은 물론 사계절 내내 소비자들이 많이 찾는 인기 아이템이다. 직접 인테리어 소품으로 활용 가능한 제품을 교육과 접목시키면 어떨까?

pimoroni의 Mood Light – Pi Zero W Project Kit [PIM259]는 라즈베리파이 제로 W에 32개의 프로그래밍 가능한 RGB Neopixel LED가 장착된 Unicorn pHAT 보드를 활용하여 다양한 빛을 내는 제품이다. 무드등으로 활용할 수 있을 뿐만 아니라 Unicorn pHAT Python 라이브러리를 설치하고 Unicorn pHAT로 할 수 있는 예제들이 다수 포함되어 있기 때문에 DIY로 조립이 가능한 라즈베리파이 제로 교육용 키트로 알맞아 인기가 좋은 제품이다.

제품의 사진과 상세한 정보는 디바이스마트(www.devicemart.co.kr) 홈페이지에서 확인할 수 있다.

제품 특징
· 8×4 matrix of programmable RGB Neopixel LEDs
· 3-layer white and yellow pendant light stand and diffuser
· Pi Zero W with single core CPU and built-in wireless LAN and Bluetooth
· Adaptor kit
· 50cm USB A to micro-B cable (power your Pi from an existing charger or computer)
· Python library
· Female and male headers require soldering

 

Mood Light – Pi Zero W Project Kit [PIM259] 제품 구매하러 가기

 

 

 

[46호]기상관측용 드론 & 라즈베리파이 기상대 서버

Cap 2017-10-18 13-15-49-260

Cap 2017-10-18 13-15-49-260

2017 ICT 융합 프로젝트 공모전 참가상

기상관측용 드론 & 라즈베리파이 기상대 서버

글 | 단국대학교 김승권

1. 심사평
칩센 기상관측이라는 시점으로 측정항목을 구성하였고, 그것을 외부 시스템과 연계하려는 부분의 시도 및 여러가지 프로그램 언어를 사용하여 구성을 한 측면은 높이 평가합니다. 이번 작품 측정 시스템의 CORE라고 할 수 있는 드론을 이용하여 어떠한 제품을 만들게 될 경우한 가장 RISK한 부분에 대해 정확히 이해를 하고 있는 것으로 보입니다. 배터리를 늘리면 늘어난 무게로 인해 더 강한 모터 출력이 필요하고, 더 강한 모터 출력을 얻기 위해서는 다시 배터리가 늘어나서 무게가 늘어나는 조건의 충돌이 늘상 반복되게 되어 있습니다. 현재의 측정 시스템의 개선을 보는 것도 중요하겠지만, 드론 자체의 효율적 운용 방안을 고민하여 위에서 말한 드론 사용의 한계를 극복할수 있는 방법에 대한 접근을 하면 또 다른 좋은 결과물이 나올 수 있지 않을까요?

뉴티씨 기상 관측용 장비는 최대한 오랫동안 공중에 떠있어야 하기 때문에 배터리의 소모가 심한 드론으로는 부적합할 것 같습니다. 장비를 유선 전원 공급으로 바꾸거나 배터리 소모 문제를 해결할 방법을 찾으면 실용성이 좋아질 것이라 생각됩니다. 실제 유선 장비의 경우 24시간 활용이 가능한 점 등의 잇점으로 활용이 되고 있음을 감안하여 사용하면 좋겠습니다.

위드로봇 드론 기체가 센서 측정에 미치는 영향을 좀 더 검토해 봤으면 합니다.

2. 작품 개요
2.1. 설계 주제
기상관측용 드론을 설계하고 라즈베리파이 기상대 서버를 설계하여 날씨 측정 데이터를 데이터베이스화 하고 웹 페이지에 날씨 정보를 제공한다.

2.2. 주제 선정 배경
우리나라는 산악형 지형국가이며 국토가 좁기 때문에 날씨의 돌발변수가 많고, 예측하기 힘든 기후이다. 최근 기상청에서는 550억을 투자하여 슈퍼컴퓨터를 구입했으나 여전히 잦은 오보로 신뢰도를 잃고 있다. 기존의 기상 관측 장비는 대부분 지상에 고정되어 관측되기 때문에 인간 활동에 영향을 미치는 대기 경계층 내의 기상현상 관측자료가 부족하다. 미세먼지 측정장비 또한 인간활동이 주로 일어나는 지역이 아닌 건물 옥상 등에 고정되에 측정을 하기 때문에 인간이 실제로 느끼는 미세먼지 농도와는 전혀 다른 수준의 데이터를 측정하고 있다. 이러한 이유로 인하여 기상현상이 실제로 일어나는 위치, 인간이 활동하는 위치에서 기상정보 및 미세먼지 농도를 측정할 수 있도록 기상관측용 드론을 설계하기로 했다.

2.3. 기상 관측방법
·  라즈베리파이를 이용하여 미세먼지 센서, 온습도 센서를 장착하여 기상정보를 측정한다.
·  기상측정 시작 버튼을 눌러 센서로부터 기상정보를 수집하고 데이터베이스에 저장한다.
·  드론을 측정하고자 하는 위치에 호버링을 시킨다. (호버링 : 헬리콥터가 제자리에서 정지비행을 할 때를 말한다.)
·  기상측정이 끝나면 안전하게 착륙시키고, 기상측정 정지버튼을 눌러 기상측정을 중단시킨다.
·  측정한 기상정보는 데이터베이스에 누적되고, Apache 웹서버를 통해 웹페이지를 구성하여 시각적으로 기상 데이터를 확인할 수 있다.

3.부품리스트

46 feature ict 01 기상관측대 (1)

4. 설계과정
4.1. 드론 기구부

46 feature ict 01 기상관측대 (1)

이번 설계에 사용된 드론은 Tarot사의 Robocat270이라는 모델이다. 라즈베리파이와 각종 센서를 장착하고 일정시간 비행을 하려면 고성능의 드론이 필요하다. 시중에서 판매하는 드론은 완충 상태로 비행 시간이5~6분에 불과하기 때문에 기상 관측용으로 사용하기에는 적합하지 않다. 또한 라즈베리파이와 센서들이 추가되면 무게가 증가하기때문에 추력이 부족한 드론일 경우 비행을 하지 못하거나 비행시간은 더욱 짧아질 것이다. Robocat270모델을 선택한 가장 중요한 이유는 커스터 마이징이 가능하다는 점이다. DJI사의 매빅프로, 팬텀4, 인스파이어, Xyma사의 X5C, X5W, X8C 등 입문용, 전문가용 드론을 판매하고 있지만 이러한 드론은 프레임을 자유자재로 바꿀 수 없다. 반면 Robocat270은 Racing Drone으로 만들어졌기 때문에 배터리도 LiPo 용량별로 바꿔서 장착할 수 있으며, 프레임에 센서, 안테나, 카메라 등 다양한 장비를 쉽게 부착할 수 있다는 장점이있다.

4.1.1. 드론 기구부 설계 (Fusion 360 CAD)

46 feature ict 01 기상관측대 (2)
설계에 있어서 정확성을 요구하는 것은 필수적이다. 드론은 특히 무게 중심이 안맞으면 추락사고로 이어질 수 있기 때문에 추가적인 기구부를 설계할 때는 3D 모델링 프로그램을 사용하여 제작하는 것이 중요하다고생각했다. 드론 하단에 프로펠러의 바람으로 인하여 와류가 발생하면 기체의 중심이 흔들릴 수 있기 때문에 정밀하게 설계를 진행했다
먼저 드론의 전체적인 설계도를 그린 뒤 드론의 비행에 영향을 안미치는 범위에서 하판을 추가하고, 송, 수신기의 위치, 드론 컨트롤러의 위치를 고려한 결과 드론 프레임 내부에는 온습도 센서와 전압 레귤레이터만장착할 수 있었다. 하판에는 미세먼지 센서와 라즈베리파이를 배치해 본 뒤 적절한 위치를 선정했다.
마지막으로 실제 색상을 입힌 뒤 문제를 발생시킬 요소를 찾고, 수정을 거쳐 최종 디자인을 결정했다. Fusion360 프로그램에는 3D모델링뿐만아니라 캐드 도면도 추출할 수 있었기 때문에 인쇄를 한 뒤 포맥스를 재단하여 하판을 추가했다.

4.1.2.최종 모델링

46 feature ict 01 기상관측대 (3)

46 feature ict 01 기상관측대 (4)

4.2. 라즈베리파이 설계

4.2.1. 프로그래밍 언어 선택

46 feature ict 01 기상관측대 (5)
라즈베리파이에서 사용할 수 있는 언어는 매우 다양하다. Java, Python, WiringPi 등 활용할 수 있는 언어는 많지만, 설계를 할 때 확장성을 중요시했기 때문에 파이썬을 선택했다. WiringPi는 아두이노와 함수가 비슷하기때문에 사용하기 편리하다는 장점이 있지만 MySQL이나 웹 서버에 연동하기 힘들다. 파이썬은 라이브러리만 몇 개 추가하면 MySQL 데이터 베이스 접근이나 PHP, HTML통신이 간단하기 때문에 파이썬을 선택했다.

4.2.2. 미세먼지 센서

46 feature ict 01 기상관측대 (2)
이번 설계에 사용된 미세먼지 센서는 PM1001 모델이다. 이 센서는 1um의 초미세먼지까지 측정할 수 있다는 장점이 있다. 보통 MCU를 사용하여 센서 데이터를 수신받으려면 ADC가 내장된 MCU를 사용하거나, ADC를 따로 사용하여 시리얼 입력을 받을 수 있다. 이 센서는 내부에 회로가 구성되어 있어 UART 통신으로 센서 데이터를 주고받을 수 있다.

BaudRate=9600bps
Startbit=1bit
Databit=8bit
Stopbit=1bit
Checkbit=null

위의 프로토콜을 지켜준 뒤 패킷을 송신하면 센서에서는 응답을 보내주는 방식이다.
데이터시트에 따르면 센서 측정을 하기 위해서는 다음과 같은 패킷을 전송해야한다.

SEND : 0×11, 0×01, 0×01, 0xED
Respone : 0×16, 0x0D, 0×01, 4Byte PMValue, 4Byte PMValue, [CS]

먼지 데이터는 4바이트로 나누어 수신하게 되며, 배열로 저장하여 index마다 2^24, 2^16, 2^8, 2^0을 곱하여 모두 더한 값이 PCS 값이다. 미세먼지 농도는 다음과 같은 공식으로 정리된다.

미세먼지농도 = ((PCS값) * 3,528)/100,000

라즈베리파이3는 모델 3B 부터 BLE, Wifi가 모듈이 추가되면서 RX, TX핀을 사용하는것이 어렵기 때문에 USB to Serial Convert모듈을 사용했다.
미세먼지센서를 사용하기 위해선 Python Serial 라이브러리를 추가해야한다.

Raspberry Pi Console
sudoapt-getinstallpython-serial, python-dev
Python Test # Source Code
importserial #Serial Class추가
importtime #Delay함수를 사용하기 위한 time class 추가
importos
fd=serial.Serial(“/dev/ttyUSB0″,9600) #/dev/ tty USB0- USB to UART Convert 모듈
Data=”\x11\x01\x01\xED” #송신 패킷
dust=0 #미세먼지 농도 저장 변수
convert=”" #수신받은 데이터(문자열)를 16진수로 변환
respone=”" #응답데이터를 수신받을 변수
integer=[0foriinxrange(16)] #정수형 변수
c=[0foriinxrange(16)] defSend_CMD(): #패킷 전송 및 수신 함수 지정

fd.write(Data) #패킷 송신
respone=fd.readline(16) #패킷 수신
convert=respone.encode(“hex”) #16진수로 변환 및 저장
foriinxrange(16): #16개로 나누어 16진수를 문자형 변수에 저장
c[i]=respone[i].encode(“hex”)
integer[i]=int(c[i],16) #정수형으로 변환한 뒤 저장
printinteger #수신 패킷 출력
whileTrue: #Loop
Send_CMD() #패킷 전송 함수 호출
pcs=(integer[3]*256*256*256) + (integer[4]*256*256) + (integer[5]*256) + integer[6] #수신받은 데이터를 PCS 값으로 변환
dust=(float(pcs)*3528)/100000 #PCS값을 미세먼지 농도로 변환
printdust #미세먼지 농도 출력
time.sleep(1) #1초간 대기

4.2.3. 미세먼지 농도 측정 결과
파이썬으로 시리얼 통신을 할 때 16진수로 패킷을 전송하고 수신하는 과정에서 자료형을 변환하는데 문제가 상당히 많았다. 패킷에서 3, 4, 5, 6번 인덱스에 해당하는 데이터는 미세먼지 농도를 계산할 때 사용되는 값이기 때문에 문자열을 16진수로 변환한 뒤, 다시 정수형으로 변환하는 방법으로 데이터를 추출했다. 실내에서 미세먼지농도를 측정했기 때문에 미세먼지 농도가 높게 측정되지 않았다.

46 feature ict 01 기상관측대 (6)

4.3. 온습도센서
온습도센서는 DHT11 모듈을 사용했다. 이 온도센서는 저전력으로 안정적으로 보정된 디지털 신호를 출력한다. 특히 보정용 8비트 마이크로 컨트롤러가 센서 내에 통합되어 온도를 측정하기 때문에 정교한 온도를 측정할 수 있다는 장점이 있다. 이 센서를 사용하기 위해서는 Adafruit DHT11 라이브러리를 추가해야 사용할 수 있다.

Raspberry Pi Console
git clone https://github.com/adafruit/Adafruit_Python_DHT
cd Adafruit_Python_DHT
sudo python setup.pyinstall

Python Test Source Code
importAdafruit_DHTasdht
importtime

whileTrue:
H,T=dht.read_retry(dht.DHT11,4)
print(“Humidity=%f,Temperature=%f%(H,T))

4.3.1. 온습도 센서 측정 결과
미세먼지 센서 측정은 라즈베리파이 GPIO.BCM 기준 4번 핀을 사용하여 측정하며 비교적 코드가 짧아 설계하는데는 큰 어려움이 없다.

4.4. MySQL 데이터베이스 구축
마이크로 컨트롤러나 라즈베리파이와 같은 싱글보드 컴퓨터를 사용할때 가장 큰 문제로 꼽을 수 있는 부분은 센서 데이터 프로그램 실행시에만 확인할 수 있다는 점이다. 이번 설계를 진행함에 있어서 기상정보를 측정하고 센서 데이터를 데이터베이스화하여 저장하는 것이 중요하다고 생각했다. 기상정보를 장기간 누적하는 것은 머신러닝을 통하여 미래의 기상을 예측할 수 있다는 장점이 있다. 데이터베이스 구축은 MySQL, Oracle DB가 대표적인데, 라즈베리파이에서 사용하는 데이터베이스는 MySQL이 편리하며, 정보가 많다. 먼저 데이터베이스를 사용하기전에 라즈베리파이에 MySQL 데이터 베이스를 설치해야 한다. 또한 파이썬 프로그래밍을 통하여 데이터베이스를 사용하기 때문에 파이썬-MySQL데이터 베이스 라이브러리를 추가적으로 설치했다.

Raspberry Pi Console
sudo apt-get install mysql-server, mysql-client, php5-mysql, python-mysqldb
root pass word setting : xxxxxxxx
………………..MySQL DB 접속방법………………..
mysql-uroot-p
Enter pass word : xxxxxxxx
………………..MySQL DB설정………………..
create data base embedded; //embedded 데이터베이스 생성
use embedded //embedded 데이터베이스를 사용하도록 설정
create table sense (date varchar(9) NOT NULL, time varchar(7) NOT NULL, humi float NOT NULL, temp float NOT NULL, dust float NOT NULL); //
테이블 이름을 sense로 설정하고 필드를 생성
describe sense; //sense 테이블 요약 정보 확인

Python Test Source Code
import time
import date time
import Adafruit_DHT as dht
import MySQL db

import RPi.GPIO as GPIO.
import serial.

db = MySQLdb.connect(host=”localhost”, user=”root”, passwd=“********”, db=“embedded”).

#데이터베이스연결

cur = db.cursor(). #커서 객체 생성
fd = serial. Serial(“/dev/ttyUSB0″,9600)
Data = “\x11\x01\x01\xED”.
dust = 0.
convert = “”.
respone = “”.
integer = [0foriinxrange(16)].
c = [0foriinxrange(16)].
defupload_db(Humi,Temp,Dust):. #데이터베이스 업로드 함수.
Date=str(time.strftime(“%Y%m%d”)). #현재 날짜 저장
Time=str(time.strftime(“%H%M%S”)). #현재 시간 저장

try:.
query = “INSERTINTO sense (date, time, temp, humi, dust)”. // #데이터베이스 업로드 쿼리
“VALUES(%s,%s,%s,%s,%s)”.
args=(Date, Time, Humi, Temp, Dust)
print (“Date : %s, Time : %s, Humidity : %f, Temperature : %f, Dust : %f” %(Date, Time, Humi, Temp, Dust)) // # 입력 데이터 출력
print “Writing to data base…..”
cur.execute(query,args). // #커서 최종 확인
db.commit() // #데이터베이스 업로드 실행
print ” Write Complete!”

except:. // #업로드 오류시
db.rollback(). // #해당 작업을 원상 복구
print “Failed to write data base”

def Send_CMD():.
fd.write(Data).
respone = fd.readline(16).
convert = respone.encode(“hex”).
for i in xrange(16):.
c[i] = respone[i].encode(“hex”).
integer[i] =i nt(c[i],16).

while True:.
Send_CMD().
pcs = (integer[3]*256*256*256) + (integer[4]*256*256) + (integer[5]*256) + integer[6].
dust=(float(pcs)*3528)/100000.
H,T=dht.read_retry(dht.DHT11,4).
upload_db(H,T,dust). // #데이터베이스 업로드 함수 호출
time.sleep(1).

4.5. Apache 웹서버 설치 & 데이터 시각화

46 feature ict 01 기상관측대 (8)
아파치 웹서버는 현재 세계에서 가장 많이 사용되는 웹서버로 ,BSD, 리눅스, 유닉스계열, 윈도우, MAC OS X 등 크로스 플랫폼으로 제작되어 사용이 어렵지 않다. 이번 설계에서는 HTML, PHP 5 둘 다 사용하기 때문에 APM (Apache2, PHP5, MySQL)을 한꺼번에 설치하여 설계를 진행했다.

Raspberry Pi Console
sudoapt-get install apache2 libapache2-mod-php5, php5
cd/var/www/html
cp/home/pi/Documents/index.html/var/www/html
sudo chmod755index.html
cd/home/pi/Documents
mkdir fusionchart
git clone https://github.com/fusioncharts/fusioncharts-dist
wget https://github.com/fusioncharts/php-wrapper/tree/master/src/fusioncharts.php
sudocp-R*/var/www/html
cd/var/www/html
sudo chmod755*

4.5.1. 웹서버 접속 결과
라즈베리파이에 아파치 웹서버를 설치한 뒤 fusionchart 툴을 활용하여 데이터베이스를 그래프로 표현하였다. 데이터베이스를 시각화하는 방법으로 fusionchart, plotly 등이 있지만 fusionchart가 그래프를 다양하게 표현할 수 있으며, 데이터베이스뿐만 아니라 데이터를 따로 php 파일에 입력하여 출력할 수 있다.

46 feature ict 01 기상관측대 (9) 46 feature ict 01 기상관측대 (10)

4.6. 라즈베리파이 GPIO 사용 (Tact Button, LED)

46 feature ict 01 기상관측대 (11)

라즈베리파이는 총40개의 GPIO핀을 사용하여 PWM, I2C, SPI등 다양한 기능을 사용할 수 있다. 라즈베리파이를 사용하기 위해서는 Micro 5Pin 단자에 충전기를 연결해야 한다. 하지만 드론에 장착하여 사용하려면 USB 충전기를 사용할 수 없기 때문에 DC to DC Converter를 사용하여5V 출력을 GPIO 단자에 연결하여 전원을 공급했다. 처음에 드론 ECS(전자변속기)에 내장된 BEC를 사용하여 전원 공급을 시도했지만 전류가 부족하여 전원이 꺼지는 문제가 있어 LM2576 DC to DC Converter를 사용하여 이 문제를 해결했다.
GPIO핀은 센서를 연결하여 사용하기도 했지만 드론에 장착하여 사용할 경우 SSH를 사용하여 터미널에 접속하거나 HDMI 포트로 모니터 출력을 확인할 수 없기 때문에 LED와 Tact Button을 사용하여 센서 측정 및 데이터베이스 업로드 시작, 중지, 전원 종료버튼을 만들어 간편하게 시작,종료, 전원 Off기능을 구현했다.

4.6.1. Pull Up Button

46 feature ict 01 기상관측대 (12)

GPIO를 사용하여 버튼 상태 입력을 받으려면 PULL UP 또는 PULL DOWN 저항을 회로 구성하여 I/O핀에 연결해야 한다. PULL UP, PULL DOWN 회로를 구성하지 않고 단순히 버튼한 쪽에 VCC 또는 GND를 연결할 경우 버튼이 눌리지 않았을때 Floating 상태가 되기 때문에 I/O 입력상태를 알 수가 없다.

4.6.2. Raspberry Pi GPIO 회로도

46 feature ict 01 기상관측대 (13)

Python Test Source Code
import time
import RPi.GPIOasGPIO
off=17
on=27
LED_R=23
LED_G=22
sd=24
GPIO.setmode(GPIO.BCM) #핀 번호를 BCM 모드로 설정
GPIO.setup(on,GPIO.IN,pull_up_down=GPIO.PUD_UP) # 풀업 입력으로 설정
GPIO.setup(off,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(sd,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(LED_R,GPIO.OUT) # LED 출력설정
GPIO.setup(LED_G,GPIO.OUT)
GPIO.output(LED_R,0) # LED Off
GPIO.output(LED_G,0)
def Switch_input(): # 스위치 입력 함수 선언
if(GPIO.input(sd)==0): # 24번 핀입력이 0일 경우
return2 #2를 반환
if(GPIO.input(on)==0):
return1
if(GPIO.input(off)==0):
return0
whileTrue:
fg=Switch_input() #fd 변수에 반환값 저장

iffg==1: #on 버튼 입력시
GPIO.output(LED_G,1) #초록색 LED를 켬
GPIO.output(LED_R,0)

whileTrue: #센서 측정 및 Database 업로드
if(GPIO.input(off)==0): #off 버튼 입력시
break #센서 측정을 멈춘다.
eliffg==2: #sd 버튼 입력시
os.system(“sudoshutdown-hnow”) #라즈베리파이를 종료한다.
break
else: #off 버튼 입력시
GPIO.output(LED_G,0)
GPIO.output(LED_R,1) #빨간색 LED를 켬

4.6.2.1. Raspberry Pi GPIO 테스트 결과

46 feature ict 01 기상관측대 (14)

4.6.3. 설계 결과
4.6.3.1. 드론 기구부 결합사진

46 feature ict 01 기상관측대 (15)

4.6.3.2. 라즈베리파이 기판 결합사진

46 feature ict 01 기상관측대 (4)

4.6.3.3. 비행 테스트

46 feature ict 01 기상관측대 (5)

5. 고찰
설계를 진행하면서 주제를 선정하는데 오랜 시간이 걸리지 않았다. 회사 프로젝트, 메이커톤 등 많은 대회를 참가하면서 그 동안 쌓아온 지식을 기반으로 코딩을 했으며, 전자전기공학부 학술동아리 연구방에서 배운 노하우를 기반으로 납땜을 깔끔하게 했다. 설계 목표로 GPIO핀을 사용할 때 인터럽트를 사용하면 추가점수를 반영한다고 했다. Wiring Pi로 테스트 했을 땐 C언어 기반으로 되어 있기 때문에 인터럽트가 정상적으로 동작하는 것을 확인할 수 있었다. 하지만 파이썬으로 프로그래밍 했을 때 인터럽트 기능이 동작하긴 하지만 계속 반복적으로 발생하는 오류로 인하여 인터럽트를 사용할 수 없었다. Wiring Pi 라이브러리를 추가하여 사용해봤지만 똑같은 오류로 동작이 제대로 이뤄지지 않았다. 인터럽트 call back 함수를 호출할 때 전역변수를 사용해도 오류가 생기고, 파라미터를 지정하여 사용해도 오류가 발생하여 더 이상 인터럽트 기능을 사용할 수가 없이 polling 방식으로 구현했다. polling 방식을 사용하면서도 동작에는 큰 이상이 없었으며 정상적으로 설계를 마무리 할 수 있었다. 설계를 진행하면서 단계적으로 설계를 했다. 먼저 주제를 선정하고, 기구부 설계, 프로그래밍, 사전 동작 테스트, 실제 테스트 순서로 진행했으며, 드론의 기구부를 제작할 때 3D 모델링 프로그램을 사용하여 렌더링을 한 뒤 이상이 없는 지 확인한 뒤 도면을 출력하여 포맥스를 재단하였다. 하판으로 포맥스를 사용한 이유는 우드락이나 스티로폼을 사용할 경우 강도가 떨어지기 때문에 라즈베리파이를 보호할 수 없으며, 아크릴이나 합판을 사용할 경우 무게로 인하여 드론이 비행을 하지 못한다는 점을 고려했다.
최종 설계 결과 몇 가지 보완할 부분을 정리하자면 다음과 같다.

1) 온습도 센서 교체
사용한 온습도 센서는 DHT11로 온도 측정 범위가 영하를 넘어갈 경우 측정을 못한다는 단점이 있었다. DHT22나 DHT44, SHT11 같은 고성능 온도센서를 사용해야 오차범위를 줄이고 더 정확한 센싱을 할 수 있을 것이다.

2) 호버링
Robocat 270은 장기간 안정화를 거친 뒤 내부 프로그래밍을 하고, 컨트롤 보드를 9축 자이로 센서와 GPS 모듈이 내장된 Naze32 10DOF정도 되는 모델을 사용해야 더 정밀한 제어가 가능하다는 것을 알 수 있었다 . 국내에서는 가격이 비싸기 때문에 알리익스프레스와 같은 해외 직구사이트에서 구매해야 하지만 설계 기간이 제한된 관계로 현재 사용하는 컨트롤 보드를 장착했다. 만약 Naze 32 10DOF로 교체한다면 더 정밀하게 정확한 위치에서 호버링을 할 수 있을 것이다. 또한 측정하는 기상상태에 따라 비행여부를 파악해야 하는데, 실제 테스트를 진행했을 때 당시 바람이 상당히 불었기 때문에 기체가 안정적으로 호버링을 할 수 없었다. 270급 드론보다는 550급 이상 드론을 사용한다면 더 오래, 안정적으로 비행할 수 있을것이다.

3) 배터리
드론에 장착된 배터리는 LiPo 3cell 11.1V 2200mAh, 방전률 25C로 상당히 고출력 배터리이다. 모터 하나당 최대 12A를 소비하기 때문에 실제 테스트 결과 15 ~ 18분정도 연속적으로 비행할 수 있었다. 이번 설계에는 급선회나 고속비행을 하지 않기 때문에 더 오래 날 수 있을 것으로 예상되나, 장시간 비행을 위해서는 배터리 용량을 늘려야 한다. 배터리 용량을 두 배로 늘릴 경우 무게도 같이 증가하기 때문에 현재 사용하는 드론의 추력으로는 부족하다. 결론적으로 550급 이상 드론을 사용하고, 추력이 드론의 배터리를 추가하 고도 남을 정도의 고성능인 모터와 변속기를 사용해야 할 것이다. 설계를 마무리하면서 프로그래밍 스킬을 더욱 익힐 수 있어 유익한 시간이었다고 생각한다. 특히 아두이노 소스코드 (C언어)를 파이썬 코드로 변환하면서 파이썬 프로그래밍에 더욱 자신감이 붙었다. 이 외에도 파이썬 – MySQL DB 연동, PHP – HTML 연동, 웹서버 구축, 데이터베이스 구축 등 라즈베리파이를 활용할 수 있는 대부분의 기능과 프로그램을 활용하여 더욱 높은 수준의 설계를 할 수 있었다.

 

 

 

 

[46호]STES Panel

46 feature ict STES PANEL (3)

Cap 2017-10-18 13-15-49-260

2017 ICT 융합 프로젝트 공모전 참가상

STES Panel

글 | 동양미래대학교 김성곤, 박준규, 신수민

1. 심사평
칩센 진지하지만 재미있는 발상에서 시작한 작품인 것으로 생각됩니다. 보고서 결론과 같이 1~3%의 효율이 개선되었다면 이 부분은 충분히 유의미한 데이터가 될수 있으리라 봅니다. 다만, 이 작품의 핵심 포인트는 태양광 패널의 표면 상태 유지를 통해 효율을 개선 가능할 것이라는 전제에서 시작한 내용으로 보이므로, 블라인드가 설치된 작품과, 그렇지 않은 작품을 동시 설치하여 일정 기간 이상 실험을 유지하는 것이 필요할 것으로 보여 현재에 보여지는 효율 개선은 신뢰도가 충분하지 않는 것은 사실입니다. 개인적으로 매우 흥미가 있고, 효율 개선의 누적 데이터가 궁금해 지는 작품입니다.
뉴티씨 태양광 추적장비는 많이 만들어왔던 장비기 때문에 예전에 있던것과의 차별성을 두어야 합니다. 모터를 돌렸을 때 동작시 사용되는 전력량 대비 충전량의 효율을 해결하면 좀 더 좋은 작품이 될 수 있을것입니다. 실용적인 측면에서 블라인드로의 태양광 패널 보호 등보다는 주기적으로 자동 세척을 시킨다던가 하는 것이 보다 나았을 것 같습니다. 비가 온다던가 했을 경우도 고려한 제작이 되었으면 좋았을 것입니다.
위드로봇 유사한 상용 제품들이 있는데 차별성을 부각시킬 수 있으면 좋겠습니다.

2. 작품 제목
‘Sun Trackable Efficient Solar Panel‘의 약자로 태양을 추적하며 효율성을 증대시킨 태양광 패널이라는 뜻을 가진다.

3. 작품 개요
현재 우리가 사용하고 있는 전기에너지는 약 95%가 1차 에너지를 통해 발전된다. 그러나 화석연료는 유한하기 때문에 신-재생에너지의 발전 및 개발과 이를 통한 효율적인 발전 솔루션이 필요하다. 본 작품은 이러한 신-재생에너지 중 ‘태양광 에너지’의 발전 효율 개선에 초점을 맞추어 보았다. 먼저 태양을 추적하여 따라 움직임으로써 발전 효율을 높이고 일몰이나 강수 등 발전을 할 수 없을 때 유지보수를 위하여 필요에 따라 작동하며 태양광패널의 청소를 할 수 있는 블라인드를 구현한다면 효율과 함께 패널의 수명 또한 증대시킬 수 있다.

4. 작품 설명
4.1. 주요 동작 및 특징
4.1.1. 주요 동작
4.1.1.1. Sun Tracking
효율적인 태양광 발전을 위해선, 태양에서부터 지구로 오는 광자가 태양광 패널에 수직으로 입사해야 한다. 따라서 CdS 센서 4개를 이용해 1축 회전이 가능한 하드웨어를 제작하고 그를 판별할 수 있는 소프트웨어를 작성하였다.

4.1.1.2. 블라인딩과 패널 청소
태양광 발전을 할 땐, 태양광 패널과 입사되는 광자가 수직을 이루는 것 뿐만 아니라 외부적인 요소로 인한 태양패널의 상태도 중요한 역할을 한다. 이를 보안하기 위해 태양광 패널의 효율이 낮아지거나, 비가 내리거나, 저녁이 되었을 때 외부 충격으로부터의 보호를 위해 패널의 표면에 블라인드가 내려오는 동작을 넣었다. 또한 패널의 파손이 아닌 외부에 쌓이는 이물질에 의한 효율 하강을 막기 위해 패널을 청소해 주는 동작도 넣었다.

4.1.2. 특징
본 작품의 1축 회전에 사용된 모터는 1회전 당 스텝이 513이며 유지 토크는 150g/cm이다. 이를 통해 회전축을 1스텝 당 약 0.7의 제어가 가능하여 기어비를 고려하면 1스텝 당 0.175도의 축 각도 제어가 가능하게 된다. 그러나 모터 출력과 축 회전의 안정성을 위하여 한 번 운동에 6스텝 씩 동작하게 하였다.
또한 센서의 데이터를 정수형 아날로그형식으로 읽어내는 것은 판별하는데 있어서 어려움을 가져옴을 확인하고 이를 맵핑하여 간단하게 판별할 수 있게 하였다.
태양광 패널의 블라인드는 패널의 4모서리에 부착한 CdS센서의 값을 받아서 4개의 센서가 모두 어두울 때의 값을 받으면 블라인드가 내려오는 동작을 하며, 아두이노를 통해 나오는 전압과 전류의 값을 받아서 태양광 패널의 발전이 저조할 때 또한 블라인드가 내려온다.

4.2. 전체 시스템 구성 (전체 알고리즘)
4.2.1. Power Generating System (발전 시스템)

46 feature ict STES PANEL (1)
위 작품은 태양광으로 파워뱅크를 충전하고, 충전된 전력으로 시스템을 구동하는 구조이다.
태양광 패널의 효율은 6.5V, 10.8mA 정도이다.

4.2.2. Efficiency Improvement System (효율 개선 시스템)
위 작품은 태양광 아래에 있어야 한다. 즉 외부에 노출되어 있으므로, 외부적 요소들이 작용을 하게 된다. 몇 가지를 예로 들자면 눈, 비, 먼지 등이 있다. 또한 물리적인 충격도 있는데, 이로 인하여 태양광 패널의 수명이 급격히 줄어들 수 있다.
이를 개선하기 위해 우린 태양광 패널을 필요할 때만 사용하고, 효율이 잘 나오지 않는 저녁이나 흐린 날엔 외부 요소들로부터 패널을 보호해주는 시스템을 만들었다.

4.3. 개발 환경
언어 : C 및 Python
Tool : C 기반의 Arduino IDE, Anaconda(Python)
System : Embedded Board로서 Arduino Uno, 데이터 통신 시 사용된 PC

5. 단계별 제작 과정

46 feature ict STES PANEL (2) 46 feature ict STES PANEL (3)

5.1. 기초 설계 및 센서 테스트
5.1.1 패널 초안 설계

46 feature ict STES PANEL (4)

5.1.2. 전체 구상도

46 feature ict STES PANEL (5)

5.1.3. 센서부 제작 및 테스트

46 feature ict STES PANEL (1)

5.1.4. 초기 1축 회전 장치 기어 설계

46 feature ict STES PANEL (6)

5.2. 1축 회전 장치 및 패널 제작
5.2.1. 1축 회전 장치 제작
초반 : 요구되는 기어의 판매처를 파악할 수 없어 직접 목재로 기어를 제작하려 함

46 feature ict STES PANEL (2)

후반 : 목재 기어 제작의 불가능을 인지하고 아크릴로 재설계 후 제작함

46 feature ict STES PANEL (7)

최종 : 모터 토크 부족으로 인하여 모터 추가

46 feature ict STES PANEL (3)

5.2.2. 패널 제작
블라인드 결합 작업

46 feature ict STES PANEL (4)

하부 프레임 장착을 위한 마운트 조립

46 feature ict STES PANEL (5)

하부 프레임과 결합

46 feature ict STES PANEL (6)

5.2.3. 완성 및 테스트-디버깅
하드웨어 제작 완료

46 feature ict STES PANEL (7)

테스트

46 feature ict STES PANEL (8)

5.2.4. 결과
그래프

46 feature ict STES PANEL (8)

46 feature ict STES PANEL (9)

5.2.5. 종합 전압량

46 feature ict STES PANEL (10)
5.2.6. 결과 분석
시간 간격 당 전압, 전류, 전력의 그래프는 Serial 통신을 통한 데이터를 PC에서 python 코드를 통해 그래프로 시각화하였고 이를 바탕으로 전체 그래프를 그려보았을 때에 블라인드 설치 전과 설치 후의 효율 차이는 대략 1~3% 정도로 나왔다. 이것이 유의미한 지표인지 파악하기에는 어려움이 많지만 블라인드가 유용하지 않다고 단정 짓기에는 이르다는 결론을 내릴 수 있다.
중국과 미국에 존재하는 대규모의 태양광 패널 발전 시설에 이러한 블라인드를 설치한다면 전체 발전 규모 대비 1~3%는 굉장히 큰 규모의 전력이라는 것이 이번 작품 제작을 하면서 느낀 가장 큰 점이다.

6. 기타
6.1. 회로도
6.1.1. 발전부

46 feature ict STES PANEL (11)
6.1.2. 제어부

46 feature ict STES PANEL (12)
6.2. 소스코드
6.2.1. 아두이노 소스코드

#include <Stepper.h>

#define cdsRU A0
#define cdsRD A1
#define cdsLU A2
#define cdsLD A3
#define VoltageSensorPin A4
#define AmpereSensorPin A5
#define endSwitch1 2
#define endSwitch2 3
#define blindmotorAnode 4
#define blindmotorCathode 5
boolean blindmotorStatus;

const int delaytime = 240000;
const int SensorMinValue = 0;
const int SensorMaxValue = 800;

float cdsRUvalue, cdsRDvalue, cdsLUvalue, cdsLDvalue = 0;
float VoltageSensorValue, AmpereSensorValue, PowerValue = 0;

const int stpr = 513;

Stepper st1(stpr, 12, 10, 11, 9);
Stepper st2(stpr, 8, 6, 7, 5);

//————————————————
int ProcessingValue() {
cdsRUvalue = analogRead(cdsRUvalue);
cdsRDvalue = analogRead(cdsRDvalue);
cdsLUvalue = analogRead(cdsLUvalue);
cdsLDvalue = analogRead(cdsLDvalue);

float cdsRUmappingvalue = map(cdsRUvalue, SensorMinValue, SensorMaxValue, 0, 10);
float cdsRDmappingvalue = map(cdsRDvalue, SensorMinValue, SensorMaxValue, 0, 10);
float cdsLUmappingvalue = map(cdsLUvalue, SensorMinValue, SensorMaxValue, 0, 10);
float cdsLDmappingvalue = map(cdsLDvalue, SensorMinValue, SensorMaxValue, 0, 10);

float RUV = constrain(cdsRUmappingvalue, 0.00, 10.00);
float RDV = constrain(cdsRDmappingvalue, 0.00, 10.00);
float LUV = constrain(cdsLUmappingvalue, 0.00, 10.00);
float LDV = constrain(cdsLDmappingvalue, 0.00, 10.00);

if ((RUV + RDV + LUV + LDV)/4 > 8) {
return 1; // blinding
}

else if ((RUV + RDV) > (LUV + LDV)) {
return 2; // turn right
}

else if ((RUV + RDV) < (LUV + LDV)) {
return 3; // turn left
}

else if ((RUV + RDV + LUV + LDV)/4 < 200) {
return 0; // unblinding
}

else {
return 4; // fixed
}
}

void motorcontrol() {
switch(ProcessingValue()) {
case 0:
unblinding();
break;

case 1:
blinding();
break;

case 2:
for(int s=0; s<6; s++) {
st1.step(1);
st2.step(1);
}
delay(500);
break;

case 3:
for(int s=0; s>(-6); s–) {
st1.step(-1);
st2.step(-1);
}
delay(500);
break;

case 4:
delay(500);
}
delay(1);
}

void unblinding() {
if (blindmotorStatus == 1 || endSwitch1 == 0) {
while (endSwitch2 == 1) {
digitalWrite(blindmotorAnode, HIGH);
digitalWrite(blindmotorCathode, LOW);
//delay(3000); // unblinding
}
blindmotorStatus != blindmotorStatus;
}
}

void blinding() {
if (blindmotorStatus == 0 || endSwitch2 == 0) {
while (endSwitch1 == 1) {

digitalWrite(blindmotorAnode, LOW);
digitalWrite(blindmotorCathode, HIGH);
//delay(3000); //blinding
}
blindmotorStatus != blindmotorStatus;
}
}

void GeneratingStatus() {
VoltageSensorValue = analogRead(VoltageSensorPin);
AmpereSensorValue = analogRead(AmpereSensorPin);
PowerValue = VoltageSensorValue * AmpereSensorValue;

Serial.print(“[");
Serial.print(millis());
Serial.print(",");
Serial.print(PowerValue);
Serial.println("]“);
delay(delaytime);
}

void setup() {
Serial.begin(9600);
st1.setSpeed(7);
st2.setSpeed(7);
pinMode(endSwitch1, INPUT_PULLUP);
pinMode(endSwitch2, INPUT_PULLUP);
pinMode(blindmotorAnode, OUTPUT);
pinMode(blindmotorCathode, OUTPUT);
}

void loop() {
motorcontrol();
GeneratingStatus();
delay(delaytime);
}

6.2.2. PC측 Python 소스코드

import serial
form numpy import *
import matplotlib.pyplot as plt

ard = serial.Serial(‘COM11’, 9600)
ard.readline()
ard.flush()

lstX = [] lstY = []

plt.ion()
fig = plt.figure()
sf = fig.add_subplot(111)
plt.xlim([0,43200])
plt.ylim([300,1000])
line1, = sf.plot(arrX, arrY, ‘r’)

while True:
bytesR = ard.readline()
lstR = eval(bytesR[:=2].decode())
timeR = lstR[0]/1000.0

lstX.append(timeR)
lstY.append(latR[1])

line1.set_xdata(lstX)
line1.set_ydata(lstY)

plt.draw(), plt.pause(0.00001)
print(‘time:%.3fs, value:%d’ % (timeR, lstR[1]) )

au.close()

6.3. 참고자료
· https://en.wikipedia.org/wiki/Solar_tracker
· https://solarcellcentral.com/index.html
· ‘밑바닥부터 시작하는 딥러닝’ 사이토 고키

 

 

 

 

[46호]Micro:bit의 무한한 가능성, Grove Inventor Kit for micro:bit

SEEED

Micro:bit의 무한한 가능성,

Grove Inventor Kit for micro:bit

BBC 마이크로비트는 코딩 지식이 없더라도 창의력을 쉽게 실현할 수 있는 포켓 크기의 컴퓨터로 로봇에서 악기까지 다양하게 만들 수 있다는 장점이 있다. 기본으로 만들 수 있는 것 이외에 더 많은 작품을 만들 수 있는 Grove Inventor Kit가 SEEED에서 출시되었다.

Grove Inventor Kit for Micro:bit는 마이크로비트의 무한한 가능성을 실현시킬 수 있는 키트로  micro:bit 용 Grove shield로 센서, 디스플레이, 액추에이터를 포함한 Grove 모듈로 구성돼 사용해 micro:bit와 다양한 프로젝트를 구현해 볼 수 있다.

Grove를 사용하면 더 이상 납땜 또는 점프 전선을 사용할 필요가 없으며, 프로토타이핑이 훨씬 쉽고 간편하다는 장점이 있다. 초보자라면 LED바 컨트롤러, 음악 플레이어, 초음파 측정기 등 여러 가지 프로젝트에 사용이 가능하며 전문가라면 기존에 구현하지 못했던 더욱 창의적인 프로젝트가 가능해 적극 추천한다.

디바이스마트 홈페이지에서 유저 매뉴얼, 관련 동영상 등 따라하기 쉬운 자료가 준비되어 있으며 구매 가능하다.

 

Grove Inventor Kit for micro:bit [NT110060762] 제품 구매하러 가기