由電腦控制開關的插座

  這家公司的工作有時候滿好玩的,最近同事在測試公司的產品在反覆插拔電時會不會出現問題?本來是由軟體去控制重開機,可是重開機跟拔、插電畢竟有點不同!於是我提出由 RS-232 DTR/RTS 腳來控制繼電器的想法,同事 mark 隨手拿了顆電晶體、兩顆電阻配上一顆繼電器和一張麪包板,再配上 vincent 的程式、最後加上 jerry 的 script,做出了會斷電重開的環境,很順利地測試了幾天。

原始的版本

  可是這樣的設計有點問題:RS-232 的輸出太小,推不動繼電器,所以才會透過電晶體做控制閘,但這麼一來這個電路也要吃電,如果能再簡化點就好了,於是 genie 準備了新的材料:


新的材料

  主要改變是固態繼電器,這顆耐壓 280V 16A 的 SSR,輸入端只要有 8-50mA 就能驅動,直接接 RS-232 的接地和 DTR,負載就直接當 110V 的開關囉!

配線也很簡單

  不消多時,漂亮的外觀就出現了!只差再用標籤機印幾張標示就行了。只是保險一點的話,零件、配線還是得再固定一下才好。


漂亮的外觀


外觀另一面

  而 RS-232 控制程式也不難寫,只要設定 DTR 的旗號就行了,如此一來,就可以用電腦叫他開、關囉!


電腦控制關閉的狀態


電腦控制他開囉,小指示燈會亮

  滿簡單的設計,不過還滿好用的,可以隨意由電腦控制開和關。這邊只用到 DTR,如果願意,RTS 也可以拿來用,這樣就可以由電腦控制兩組電器囉!


最後完工的成品

Related posts

37 Thoughts to “由電腦控制開關的插座”

  1. 活蹦亂跳的小精靈

      這幾天學會:原來用8051單晶片就能輕易做到,最少可以控制數組開關,透過RS-232由電腦控制耶!而且單晶片程式又很好寫,跟單晶片還真是相見恨晚呀。

      會了單晶片再看這個…… 還真是玩具一個。

  2. 懶惰的潛水魚

    早安~

    天啊!!!

    完全有看沒有懂@@"

  3. 活蹦亂跳的小精靈

      呃…… 簡略地說,由於某種緣故,希望用電腦去控制電器的開關,所以有了這個東西,做好後,就可以用電腦去自由控制任何電器、家電了。

      但近日發現:用一顆8位元的微電腦(很多家電都有在用,像微波爐、電視、遙控器、電子定時器、冷氣機……)就可以輕易做到,還可以做更多的變化、更有大腦,一次可以控制更多的家電,有點吐血,早點學微電腦就好了(許多高職電子科都會教)。

  4. 希望黑皮者

    這東西做的真好, 不知您可以告訴我材料可以從哪買? 我也來試試好嗎 ! thanks !

  5. 活蹦亂跳的小精靈

      承蒙您不嫌棄。圖上所有的東西都可以在電子材料行買到,不論是光華商場的實體店家,或是廣華的線上商場。實作時請特別留意固態繼電器的耐壓與電流的負載能力,搭配適當的保險絲。

  6. 希望黑皮者

    我是一個外行人, 我想做一個這樣的東西來幫助我女兒的近視,您可以做一個賣給我嗎? 不情之請,請原諒 !

  7. 活蹦亂跳的小精靈

      對令嬡有幫助的話,我很樂於協助,還煩請您告知該如何交付給您?或者,請您 mail 給我,商討細節。

     

     

  8. 希望黑皮者

    請問您的 e-mail 是 ? thanks

  9. 希望黑皮者

    非常期待您的回覆, 或是你有其他信箱或電話msn skype等 我好與您直接溝通 ! 小王 !

  10. 希望黑皮者

    Dear Genie !

    因為加了一條RS-232的線, 所以總費用是 ? 多謝您的幫忙 !

  11. 希望黑皮者

    Dear Genie !

    我已經處理好了相關事宜, 請問您有收到e-mail嗎? thanks !

     

  12. 請問如何驅動 ssr

    隨便送一值給dtr 嗎 

  13. 活蹦亂跳的小精靈

    DTR 只是一個 flag,不是送資料。下段程式是在 Linux 上跑的,on 跟 off 只是設 TIOCM_DTR。又其中的 HUPCL 是當 port 被關閉時不拉掉 DTR,維持 DTR 的狀態。

    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/ioctl.h>
    #include <fcntl.h>
    #include <termios.h>
    #include <unistd.h>
    #include <string.h>

    void poweron( int ctrlfd )
    {
       int status;
       struct termios tio;

       ioctl(ctrlfd, TIOCMGET, &status);
       status |= TIOCM_DTR;
       ioctl(ctrlfd, TIOCMSET, &status);
       return;
    }

    void poweroff( int ctrlfd )
    {
       int status;
       struct termios tio;

       ioctl(ctrlfd, TIOCMGET, &status);
       status &= ~TIOCM_DTR;
       ioctl(ctrlfd, TIOCMSET, &status);
       return;
    }

    int main( int argc, char* argv[] )
    {
       int status=0;
       int ctrlfd = 0;
       struct termios tio;

       if ( argc != 3 )
       {
          printf( “Usage: %s comport on|off\n”, argv[0] );
          exit(1);
       }

       ctrlfd = open( argv[1], O_RDONLY|O_NOCTTY );
       if ( ctrlfd < 0 )
       {
          printf( “Error while opening control port ‘%s’: %m\n”, argv[1] );
          exit(2);
       }
       tcgetattr(ctrlfd, &tio);          /* get the termio information */
       tio.c_cflag &= ~HUPCL;            /* clear the HUPCL bit */
       tcsetattr(ctrlfd, TCSANOW, &tio); /* set the termio information */

       if ( !strcasecmp( argv[2], “on” ) )
          poweron( ctrlfd );
       else if ( !strcasecmp( argv[2], “off” ) )
          poweroff( ctrlfd );

       close( ctrlfd );
    }

  14. 雖然還是不太了

    不過感謝您 

  15. 活蹦亂跳的小精靈

    DTR 是 Data Terminal Ready,只是拿來告訴對方已經準備好可以連線的訊號,所以這個訊號只有開和關兩種狀態;不像 TX / RX 是真的拿來傳資料用的。RTS 是 Request To Send,是跟對方要求要送訊號,同樣也只有開和關兩種狀態。

     

    上篇提到的 HUPCL 是在正常情形下,當程式開啟 RS-232 埠,並將 DTR 設起來,此時控制開關會因 SSR 收到電而接通。但程式離開要關閉 RS-232 時,預設行為是電腦會把 DTR 回復為關,這樣跟我的程式要求不太一樣,我的程式希望每一次設開或關,不會受到程式結束的影響,所以透過摘掉 HUPCL 來完成。

  16. Gordon

    正想說哪裡找這東東,還真給我找著了。因工作關係,想遠端陪小孩做功課,可以賣我一組嗎?

  17. 活蹦亂跳的小精靈

    感謝您不嫌棄,這東西材料很容易取得,也很容易製作,自己動手的話成本會低一些;我也很樂於為了您的小孩,將手上僅存的最後一個在酌收材料與些許工本費提供給你。

  18. ZANZER

    請問~ 可以做三組賣我嗎? 因為小孩需要用到~ 可以用來控制她的電子搖籃~ 找這個東西好久了,但網路上找不到成品~ 麻煩您了~

  19. 活蹦亂跳的小精靈

    非常對不起,我並不以 DIY 為業,且以這作品來說,其實工錢會遠比材料費高,建議您自己動手做會划算許多。由於電路太簡單,原諒我並未提供電路圖,簡單地說,就是 RS-232 的 DTR、GND 接到 SSR 的 DC-IN,SSR 的 AC 端直接當成火線的開關,最後記得串一顆保險絲就完成了。

     

  20. 呆呆

    版主你好

    我把你附的程式用GCC編譯輸出檔名123

    然後./123 123 on 執行它

    可是DTR的的電位還是沒變耶

    請問是我執行時的參數下錯了嗎

  21. 活蹦亂跳的小精靈

    是的,是參數下錯了。第一個參數是 COM port 的 device node,通常會是 /dev/ttyS0, /dev/ttyS1….,若是透過 USB 轉 UART,則通常會是 /dev/ttyUSB0, /dev/ttyUSB1…..

     

  22. 呆呆

    原來如此  真是太感謝了^^

    我一直查不到argv[1] 要下什麼

    請問程式碼哪邊有定義呢?

     

  23. 活蹦亂跳的小精靈

    在程式中的

    ctrlfd = open( argv[1], O_RDONLY|O_NOCTTY );

     直接把 argv[1] 代給 open,所以是 device node 的名稱。

  24. 好個工具人

    程式碼已經沒得下載了…

    請問可以貼出來嗎? 還是可以寄給我呢? thx.

  25. l8866

    請問可以跟您要電路嗎

  26. 活蹦亂跳的小精靈

      在下方的留言其實有提到:由於電路太簡單,原諒我並未提供電路圖,簡單地說,就是 RS-232 的 DTR、GND 接到 SSR 的 DC-IN,SSR 的 AC 端直接當成火線的開關,最後記得串一顆保險絲就完成了。

  27. david

    我想跟您買兩個, 請與我聯絡!!

  28. 活蹦亂跳的小精靈

    非常對不起,我並不以 DIY 為業,且以這作品來說,其實工錢會遠比材料費高,建議您自己動手做會划算許多。

  29. 實做遭遇困難的訪客

    天啊!好厲害!
    我最近也在實做一個類似(簡單很多)的電路,但實在是卡在RS-232這端因為串接了一個帶燈開關(12V)而苦惱(我不打算只放單純的開關,想搞點花樣).
    1.外接的RS-232這邊我接了帶燈開關(12V),所以我另外串了電池(電池盒,3號電池共8顆組成).
    2.如1,因為帶燈開關,所以我接了電池來當作外部供給的電源,但RS-232又會插到電腦上(無論用母頭後中間用延長線去插電腦,或直接插電腦),就怕不小心會讓外接電池去燒壞電腦(雖然查了我用9PIN的RS-232,正電壓可耐壓12V).
    3.因為不了解,所以我還是十分恐懼.(燒壞電腦)

    所以想請教您~
    我看了您的圖片,您外接的插頭應該也是來自其他地方的電源供應吧?(EX:插座)

    其中隔離外部電源(假設是室電110V)的元件是哪顆呢? 繼電器嗎?

    我現在煩惱就是要隔離電池電源與RS-232接電腦的部分(老問題,怕燒壞).

    可否煩請您解惑~

  30. 活蹦亂跳的小精靈

    是的,電力來源是AC110V的插座,電腦端只接到 DC2AC 這顆固態繼電器上,以你的需求來說,可以考慮用顆 DC2DC 固態繼電器,像
    http://shop.cpu.com.tw/product/598/info/
    這樣的零件,電腦只接到 IN 端,OUT 端去接你的燈,這樣就不用再擔心了。

     

  31. 實做遭遇困難的訪客

    感謝您的解惑!實在是太感謝了!

    今天就去找這繼電器元件~

    然後爬文繼續實作了!

    最後,再次感謝您!

  32. 小余

    我想問 外殼及繼電器 ,我在電子材料行都找不到,是否可請你提供那裡可以買到這兩項

  33. 活蹦亂跳的小精靈

    在光華商場還滿容易找到的,線上的話,廣華也有。
    http://shop.cpu.com.tw/product/30671/info/
    http://shop.cpu.com.tw/cPath/326

     

  34. 開水的爸

    您好  可以請你教一下  電腦如何控制RS232的輸出訊號

  35. 活蹦亂跳的小精靈

    請見留言最下方,我放了段 Linux 下的 C code。

    Windows 下同樣可以控制 DTR/RTS 的訊號線。

  36. 開水的爸

    不好意思 我程式部分真的是門外漢 什麼是Linux完全不懂

    我只知道 你利用RS232的兩個點去推動SSR

    SSR再導通電源

    如果可以  可以請你講解一下 電腦對DTR、GND的控制嗎~?

     

    謝謝

  37. 學習向前衝

    看完您的教學,深深敬佩您的智慧。

    關於AC 110V的輸出,想請教您:

    AC 110V的輸出端是否有需要並聯MOV(突波吸收器)?

    在綠色粗線與白色粗線之間的圓形狀元件,是否是MOV元件?

    AC 110V的輸出,要如何選用MOV規格比較適當?

    另外,在輸出110V,負載電流為0.24A,要選用幾安培的保險絲比較適當?

    如果再考慮突波電流的因素,輸出端的保險絲要選用幾安培才比較適當?

     

     

     

Leave a Comment