Saturday, December 8, 2018

Upgrade Smoke Sensor

아두이노를 배우는 초기에 만들어본 담배연기센서. 담배연기 혹은 휘발성연기가 발생하면 경보를 울리게 된다.  당시, 아파트 담배연기에 대응하기 위해 만들었던 장치이다. 담배연기가 발생하면 빠르게 문을 닫거나 환풍기를 틀거나 할 생각이었다.

배우는 초기라 bulky 하게 만들었는데, 아래와 같이 box안에 넣었다. 그리고 코드를 수정하여 보다 정확하게 결과를 출력할 수 있도록 하였다.








Upgrade Home CCTV

OV2640과 ESP8266을 사용하여 우리집 거실을 감시하는 나만의 CCTV를 만들었다. 
화면은 mqtt 프로토콜을 사용하여 화면을 전송하고 몇가지 설정을 수행하도록 만들었다. 관련 post는 https://helloiot.wordpress.com/2017/09/20/ov2640-esp8266/ 에서 볼 수 있다.
당시에는 커버가 마땅히 없었기 때문에, 남는 CCTV를 분해하고 그 커버를 사용하여 나만의 CCTV를 완성하였다. 1년정도 사용하였는데, 아직 잘 작동하고 있고 지금도 유용하게 사용중이다.





3-Phase Motor Driving Test

하드디스크를 분해할 일이 생겨 모터만 빼내었다. 3상 모터인것을 확인하고, 인터넷에서 모터를 제어하는 회로를 찾아 만들어 보았다. 약 4000 rpm을 넘게 회전하는 것을 확인하였다. 



HDD모터 외에 미니카세트에서 뽑아놓은 초박형 모터가 같은 구조이길래 확인차 테스트 해보았다.  HDD의 모터에 비해 진동이 심했으며 작아서 그런지 열도 심했다. 아래 열화상화면 참고. (사실 모터의 스펙을 모르고 테스트를 위해 전류를 2A까지 끌어 올렸기 때문이다.)
확실히 HDD의 모터가 밸런스가 잘 잡혀있는지 고 rpm에서 진동을 느끼기 어려웠다.

테스트를 통해 고속 회전만을 위한 모터는 처음부터 pwm을 빠르게 해서도 안된다는 것을 알았다. 그것은 모터의 회전 위치에 따라 정확히 전류를 on/off 해줘야 하는데, 어긋나면 오히려 stall 현상으로 모터가 회전을 멈춘다.  그래서 정확한 pwm을 구사하려면 모터의 회전자 위치(혹은 속도)를 정확히 알아야 하는데, HDD 모터에서는 hall sensor를 찾을 수 없었다.
자료를 찾다 보니 고속 rpm에서는 모터에서 회전시 발생하는 back-EMF(역기전력) 특성을 사용해 회전 위치를 파악하고 모터를 제어할 수 있다는 것을 알았다.
나는 역기전력에 대해 아직 잘 모르기 때문에 저주파에서 고주파로 단계별로 전환 하였으며, 해당 모터에 대한 datasheet가 없기 때문에 (타지 않는 범위에서) 전류를 높혀 강한 자기력으로 모터의 회전이 빠르게 해당 pwm에 동기화 될 수 있도록 하였다.  하지만, 그래도 회전중의 모터를 건드려서 충격을 주면 바로 stall로 빠질 수 있다. (잡고 움직이는 정도로 stall이 발생하지는 않았다.)

필시 hdd의 motor controller는 back-emf를 사용하여 모터를 제어하는 것이리라... 라고 예상해본다. (잘 모릅니다. ^^)

모터의 ground는 멀티미터를 사용하여 한곳을 기준으로 잡고 나머지 3곳에 대해 각기 저항값을 확인해보면 가장 적은 조합을 갖는 쪽으로 ground를 찾을 수 있다. 관련자료는 인터넷에 많으니 따로 소개하지는 않겠다.







Motor driver를 테스트하기 위한 코드는 다음과 같다: 모터 자체에는 encoder가 없었기 때문에 회전속도를 photoelectric sensor를 설치하여 측정해 보았고 이를 위해 작성한 코드는 아래와 같다:

How to use String in VHDL or Verilog.

Whenever you want to use VHDL (or Verilog) code to send text to the UART or LCD, you must write the text in hexadecimal format. I thought it was very annoying. So, I was looking for an answer that could save my patience. However, everything I have found is no different in any way.

I could not bear it. So I tried to convert the text of an ASCII string into a hexadecimal array automatically, like this :
Refer to line #123