'진행중인 프로젝트'에 해당되는 글 4건

프로그래밍 언어 아희를 아시나요? (상당히) 독특한 프로그래밍 방법으로 나름의 명성이 있는데요, 예시 코드를 보고 가겠습니다.

방뿌반탸볃쑹희빠초텨
순처산썩속뱌뮹쏭셩토
붕툐터뱑뫃밙뎌붃벓본
사받본몽성멓샥뗘모볻
아희꿀잼빠썅펴댜셩속

네, 제가 직접 짰던 코드인데요, 이 코드가 하는 일은 무엇일 것 같나요? 무려 백준 1003번 문제의 해답 코드입니다. 수를 입력받아 피보나치 수열 함수의 호출 횟수를 출력하는 문제이죠.


혹시 여기까지만 보시고 채점 페이지에 저걸 제출한다면 "틀렸습니다" 문구를 보게 되실 겁니다. "자바스크립트로 된 아희 처리기"나 "알파희"에서는 잘 되는데, 백준 온라인 저지에서 사용하는 C언어 아희 구현체 caheui가 문제입니다. BOJ 게시판에 해당 구현체가 말썽이라는 언급문제제기가 있었지만 비주류 언어로서 안타깝게도 해결이 되지 않고 있습니다.


그래서 저는 아희 스펙을 완전히 준수하는 자바스크립트 인터프리터를 만들어보고자 이 프로젝트를 시작하게 되었습니다. 사실 위의 채점만이 문제라면 C언어로 짰을텐데요, 저는 더 큰 그림을 그리고자 했습니다. 인터넷 시대에 최첨단 세대들이 웹브라우저로 간편하게 아희를 접하고 이로움을 널리 퍼ㄸ... 아무튼 웹 환경이 아무래도 접근성이 좋고, 여차하면 node.js와도 호환되도록 작성해 쉘로도 실행할 수 있도록 구상했습니다.


앞서 말한 공식 자바스크립트 처리기는 (BOJ의 텍스트 입력과는 다르게) 입력 명령을 만날 때마다 prompt를 띄우는 식으로 입력을 받으며, 디버그 시 유용한 "한 단계만" 실행은 '실행 횟수'로 쓰이는 변수 k정수 입력에서도 사용하여 여러 단계를 건너뛰는 문제점이 있습니다. 그리고 자바스크립트 고유의 유니코드 표현법(Surrogate pair)을 잘 처리하지 못해 문자열 입력 테스트 스니펫에서 이모티콘 입력을 잘 처리하지 못하는 모습을 보였습니다. Aheui.js는 그러한 문제점을 개선하고 가능한 많은 부분을 모듈화하여 유지보수성을 높였으며, 명령어 실행에 사용하는 Aheui 객체에 run(), step(), stop(), reset() 등의 제어 메소드와 on(), once(), off()로 상태('start', 'step', 'stop', 'end'), 동작('reset'), 출력('character', 'integer')과 같은 이벤트 콜백을 두어 쉽고 풍부하게 기능을 활용할 수 있는 기반을 제공하고자 했습니다. 아직 개선할 점은 많지만 우선 깃허브에 코드를 공개해놓아 코드를 보실 수 있습니다.


한번 확인해보세요!

View on GitHub



2018.01.09 추가

caheui의 큐 문제를 수정한 풀리퀘스트를 제출했습니다! 언제쯤 적용이 되려나...

'진행중인 프로젝트' 카테고리의 다른 글

아희 인터프리터 Aheui.js  (0) 2017.09.12
블로그 이미지

예비컴공돌이

각종 프로젝트 진행중! 생각날때마다 블로그 업데이트합니다.

구상 자체는 올해 초(2016년 2월)부터 했는데, 개강, LED 큐브 프로젝트 등 다른 일들에 밀려 아직 구상과 부품 구매는 다 했지만 아직 제작을 못한 프로젝트이다.


계기는 겨울이 끝나가고 집에 있던 오래된 가습기를 버리려고 하던 때, 가습기를 뜯어봐서 어떻게 돼있나를 알아보고자 한 것이었다.

가습기를 보고 레이저가 떠올랐고, 레이저 하면 콘서트고 콘서트 하면 음악이니 음악에 반응하는 레이저 이퀄라이저를 만들자는 생각을 했다.


가습기 해부!


메인 회로 뒷면


초음파 진동자 회로



2004년도 제품이라 그런지 회로가 큼직큼직하며 SMD 부품이 없어 분석하기는 쉬웠다.


전원부의 경우,

우선 220V 전압이 회로 우측 상단으로 들어와 바로 변압기로 들어간다.


변압기는 출력이 2쌍인데, 그 중 하나는 약 16.7V의 교류 전원으로 들어오고, 이를 다이오드 브릿지를 거쳐서 한 방향으로의 펄스 파형으로 만든 뒤 캐패시터를 이용해 적당히 평활시킨다.

이렇게 평활된 전류를 7812 리니어 레귤레이터를 이용해 12V로 만들어 12V가 필요한 릴레이와, 7805 리니어 레귤레이터에 전압을 공급한다.

7805로 또다시 5V로 내려온 전압은 전면 디스플레이나 PIC 칩 등 회로 전반적으로 쓰인다.


변압기를 거친 또다른 출력은 약 교류 50V였으며, 메인 회로에 같이 들어갔다가 릴레이를 거쳐 바로 진동자 회로로 나간다.

릴레이를 통하는 구조이므로 메인 회로에서 켜고 끌 수 있게 되어있다.


사진에 보면 모터도 하나 있는데, 블로워팬의 형태이고 220V로 동작한다. 회로에서 보면 이 팬은 램프와 함께, 한쪽 극은 연결되어있고 나머지 한 극은 하나의 릴레이로 연결되어있는 것을 볼 수 있다.

히터도 220V로 동작하며, 물탱크로부터 진동판으로 가는 배수관에 감겨있다. 히터도 한 극이 릴레이에 연결돼있다.



전원부 분석을 끝내고 부품을 떼내어 만능기판에다가 재현을 해보았다.


우선 몰렉스 커넥터들이 두꺼워서 구멍을 파내느라 힘들었고,

저때 차마 다른 전선을 대서 납땜한다는 생각을 못해서 납칠이..



앙상해진 기판ㅠㅠ

'진행중인 프로젝트 > Laser EQ' 카테고리의 다른 글

프로젝트 아이디어 구상  (1) 2016.11.20
블로그 이미지

예비컴공돌이

각종 프로젝트 진행중! 생각날때마다 블로그 업데이트합니다.

드론(쿼드콥터) 완제품을 산다면 신경 쓸 필요가 없는 부분이지만, 나는 직접 조립할 것이므로 부품을 따로 알아보고 사야한다.

각 부품에 대한 자세한 설명은 따로 글을 파서 하겠지만, 우선 주요 내용에 대해서 메모해둔다.



1. 모터

당연히 드론을 날리려면 드론을 띄울 동력이 필요하다. 쿼드콥터에는 4개가 필요하다.

드론에 주로 쓰이는 모터의 종류로는 코어리스 모터BLDC 모터가 있는데,

코어리스 모터는 회로가 덜 복잡하고, 그래서 작은 완구 드론에 주로 쓰이지만 드론 체급이 커지면 힘이 부족하다.

BLDC 모터는 브러시리스 모터라고도 부르는데, ESC라는게 필요하지만 더 강하고 빠른 힘을 낼 수 있어서 대부분 이 쪽을 쓴다.

나도 BLDC 모터를 써서 만들 것이다.



2. ESC (Electronic Speed Controller, 전자 속도 제어기 / 변속기)

위에서 말한 BLDC 모터의 제어를 위해 사용하는 부품이다.

BLDC 모터는 구조상 선이 3개 있는데, 여기에 극성을 적절하게 가해서 회전시키는 원리이다. ESC는 그 극성을 가해서 모터를 회전시키며, 또 신호를 받아 적절히 모터 회전 속도를 가/감속한다.


ESC는 모터에 필요한 전류에 따라 다르게 선택하는데, 예를 들어 모터의 최대 소모 전류가 18A라면 ESC는 20A 이상의 것을 사용하면 된다.

또 제품 카탈로그를 보면 OneShot125 같은 기능도 있는데, FC(제어보드)의 역량에 따라서 쓸 수 있는지가 결정된다.

나는 아두이노로 직접 제어보드를 만드는데, 우선은 날리는 데에 의의를 두고 나머지 ESC의 기능은 나중에 천천히 생각해보도록 한다.



3. 배터리

모터를 돌리려면 역시 필요한 전력원이다.

리튬 폴리머 배터리는 "셀"로 구성돼있는데, 이를 몇개 직렬로 연결했는지에 따라 1S, 2S 등으로 분류한다. 일반적으로 멀티콥터에는 2S ~ 6S 사이의 배터리를 많이 쓰고, 3S~4S 정도가 무난하다. 나는 3S 배터리를 사용하기로 했다.

3S 배터리라면 12.6V ~ 10.2V의 전압이 출력된다. 배터리의 특성이나 전압과 관련된 얘기는 추후 배터리 글에서 하자.



4. PDB (Power Distribution Board, 전원 분배 보드)

배터리에서 나가서 4개의 모터로 들어가는 전류는 꽤 크다. 이 전류를 전선에 과부하를 걸지 않고 전달하기 위해 PDB를 사용한다.


물론 전선을 잘만 연결한다면 전류에 대해서는 생각할 필요가 없다. 나는 다만 미관상으로 좋지 않고 망가지기 쉬워서라고 생각한다.

배터리의 +극에 ESC 4개의 +선을 연결하면 한 접점에 5개의 선이 연결된다. -극에 대해서도 하면 또 선 5개가 추가된다. 어쩔 수 없이 접점은 커질것이고, 진동이나 충격에 깨지기도 쉬울테니 PDB를 사용해서 구분을 해 놓는 것이다.


아무튼 어느 정도만 넘으면 큰 차이가 없는 부품이고 가격도 크게 비싸지 않으므로, 적당한걸 사면 된다. 간혹 드론 몸체에 내장되어있기도 한데, 그렇다면 그걸 사용하면 된다.



5. 드론 본체 (프레임)

모든 부품들을 올려놓을 본체이다. 사용 목적에 따라 고르는 기준이 몇가지 있는데 적당히 맞춰서 사면 된다.


첫째로 크기, 레이싱 드론 같은 것들은 250mm 정도의 프레임을 주로 사용하고, 촬영용으로는 비행 안정성을 위해 450mm 이상의 것들을 주로 쓴다.

둘째로는 재질, 카본섬유(카본파이버) 재질이 가장 튼튼하면서도 가볍지만, 그만큼 비싸진다. 작고 추락 가능성이 큰 레이싱 드론들은 비싸진 않은 카본섬유 프레임이 많이 있다.

그 다음으로 유리섬유도 있는데, 질기고 적당히 가볍고 저렴해서 많이 쓰인다.

나는 유리섬유 재질의 450mm 프레임을 사용할 예정이다.



6. FC (Flight Controller, 비행 제어기)

시중에도 많이 있고, 뭘 고르느냐에 따라 비행 특성, 효율 등이 많이 달라질 부품이다.

평범한 RC 비행기, RC 헬리콥터에는 잘 달지 않는 부품인데, 센서로 현재 각도를 계산해 여러 모터들의 출력을 끊임없이 조절하면서 각도를 맞추어 수평을 유지하면서 안정적으로 날 수 있게 해주는, 멀티콥터에게는 반드시 필요한 부품이다.


CC3D, Naze32, APM 등등 여러 상용 보드가 있지만, 이 프로젝트의 목적이 아두이노로 FC를 만들어 쿼드콥터를 조종하는 것이므로 상용 보드는 다루지 않는다.

'진행중인 프로젝트 > Arduino Quadcopter' 카테고리의 다른 글

1. 드론 제작 부품 소개  (0) 2016.11.19
아두이노 드론 제작 시작  (0) 2016.11.19
블로그 이미지

예비컴공돌이

각종 프로젝트 진행중! 생각날때마다 블로그 업데이트합니다.

이번 학기 안으로 직접 아두이노로 드론을 제작해서 날리려고 한다.

드론의 종류는 RC 비행기, 헬기, 멀티콥터 등등 다양하게 있는데, 여기서 말하는 드론은 프로펠러가 4개 달린 쿼드콥터이다.


계획은 학기 초부터 했지만, 회로 설계, 부품 주문, 드론에 탑재될 다른 기능 제작 등으로 프로젝트 시작과 포스팅이 늦어졌다.


윗 줄에서도 말했듯이, 드론을 날려보는게 끝이 아니고 추가적으로 넣을 기능도 있다. 그건 앞으로 진행하면서 공개하기로 하고, 인트로 끝!

'진행중인 프로젝트 > Arduino Quadcopter' 카테고리의 다른 글

1. 드론 제작 부품 소개  (0) 2016.11.19
아두이노 드론 제작 시작  (0) 2016.11.19
블로그 이미지

예비컴공돌이

각종 프로젝트 진행중! 생각날때마다 블로그 업데이트합니다.