輕鬆實現PC與Arduino/樹莓派的無線溝通 – 以會議簡報器為例

Description

Description
作者:chtseng

前言

之前曾介紹過如何在不使用開發板的情況下,僅透過SunplusIT的一對一 RF Uart模組就能製作的簡報器(請參考使用MUART0-S-1-1打造一支多功能會議簡報器),雖然超easy,但可惜有個讓人覺得不太方便的限制,就是它必須使用「連續按兩下」的動作來實現「回上一頁」的功能,這是由於PC與簡報器之間傳遞的只有 MUART0-S-1-1 IO port的ON/OFF訊息,PC端依據是否連續click來區分上一頁或下一頁。此時這個問題便出現了:每個人對於「連續按兩下」的定義不同…有的人慢條斯理的輕按,有的人急驚風般的狂按,於是,上次製作的簡報器很快的便棄置一旁,我又回到人肉簡報器的日子。

這次捲土重來,在簡報器端多了一片Arduino Mini Pro開發板,PC接收端則維持不變,仍為一片RF Uart模組加上USB 2 TTL,整個架構修改如下:

如此一來,雖然多了一片Arduino,但由於Arduino與PC之間可定義各種傳輸內容,因此功能與使用方便性上可是增進不少,除了基本的雷射光點及上下頁功能,我們還可以在簡報筆上定義各種無限的想像,例如:

  • 語音功能:可提醒開會中打瞌睡的人員注意一下。
  • 計時功能:自動統計講者所報告的時間。
  • 焦點功能:將螢幕放大或加亮轉暗等等。

開始製作:

A)準備材料

下方的材料總共不超過$500哦。

  1. 雷射光頭  $65 x1 https://www.icshop.com.tw/product_info.php/products_id/13180
  2. SunplusIT MUART0-S-1-1 $125 x1 https://www.icshop.com.tw/product_info.php/products_id/25724
  3. Arduino Mino Pro $70 x1  https://www.icshop.com.tw/product_info.php/products_id/25139
  4. SunplusIT MUART0-S-1-1 x1 http://www.sunplusit.com/TW/Shop/IoT 
  5. USB轉TTL $115 x1   https://www.icshop.com.tw/product_info.php/products_id/25086
  6. 按壓開關 $15 x3   https://www.icshop.com.tw/product_info.php/products_id/22372

B)配線及組裝

PC端:

只要將USB2TTL模組與MUART0-S-1-1相互對接,我們就完成了USB轉RF的功能了,只要在程式中定義好Serial埠號,就可以透過無線方式實現PC與Arduino開發板之間的資訊傳遞,多方便啊!

簡報器端:

按鈕加上10K電阻避免pin腳的輸入噪音(您也可以直接使用Arduino內建的20K上拉Pull-up電阻,感謝楊樹人網友指正)。

簡報器case模型。

下載:https://github.com/ch-tseng/Powerpoint-Pointer/blob/master/3D/pointer.stl

簡報器組裝:

下圖,將所有的模組裝置固定於下盒中即完成。

C)程式

PC端:

PC端的Python程式透過USB2TTL接收來自簡報筆裝置所發出的訊息,若為D或N ,則透過PyAutoGUI模組,對mouse或keyboard進行相對應的控制。

  1.  D → 表示下一頁
  2.  U→ 表示上一頁
  3.  N → 表示執行自訂的功能(如本範例程式中為撥放一個wav語音檔)
# -*- coding: utf-8 -*-

comPort = “com29″   #PC的TTL2USB port

baudRate = 9600

import serial

import pyautogui

import sys

import time

import playsound

import random

serial = serial.Serial(comPort, baudRate)

i = 0

nowtime = 0

lastClicktime = 0

while True:

nowtime = int(round(time.time() * 1000))

out = “

 

while(serial.inWaiting()):

out += str(serial.read(1).decode(‘UTF-8’))

 

if out != “:

print(out)

if(out==”D”):

pyautogui.typewrite([“right”, “ctrlright”])

if(out==”U”):

pyautogui.typewrite([“left”, “ctrlleft”])

if(out==”N”):

file = “notice” + str(random.randrange(1, 6)) + “.wav”

playsound.playsound(file, True)

serial.flushInput()

程式中所定義的COM port,代表USB2TTL所使用的COM埠號,當您把USB2TTL接到PC之後,可由裝置管理員中找到該裝置所對應的port number。例如下圖中,可由裝置管理員中找到USB2TTL的COM埠號為com29,把此值填入comPort變數即可。

簡報筆端:

請參考下方程式。delayTime為連續按鍵之間的delay時間,您可以調整該值以取得切換上下頁時的最佳手感。

#include <SoftwareSerial.h>

SoftwareSerial Serial1(2, 3); // RX, TX

byte pinNotify = 5;

byte pinUp = 8;

byte pinDown = 9;

unsigned int delayTime = 500;

boolean notifyState = 0;

boolean upState = 0;

boolean downState = 0;

void setup() {

Serial.begin(9600);

Serial1.begin(9600);

pinMode(pinUp, INPUT);

pinMode(pinDown, INPUT);

}

void loop() {

notifyState = digitalRead(pinNotify);

upState = digitalRead(pinUp);

downState = digitalRead(pinDown);

if ( notifyState == 1) {

Serial.println(“Notice”);

Serial1.write(‘N’);

delay(delayTime);

Serial1.flush();

}

if (upState == 1) {

Serial.println(“Up”);

Serial1.write(‘U’);

delay(delayTime);

Serial1.flush();

}

if (downState == 1) {

Serial.println(“Down”);

Serial1.write(‘D’);

delay(delayTime);

Serial1.flush();

}

}

測試使用

搭配了凌陽創新的長距離傳輸且穩定的RF模組,使得PC與Arduino之間的資訊傳輸變得再簡單不過了,再調整相關程式參數到最佳狀態,讓這個簡報器使用起來的滑順度可不輸市面上其它款的簡報器哦,此外我們還可依照需求,增加按鍵或修改程式來實現各種自訂的附加功能,比如,目前簡報器最流行的、只有重點區域維持亮度其它變暗的「焦點」功能,您要不要馬上來試看看?

 

Latest posts by ChengChung Tseng (see all)

    Contact

    Contact
    • Category
      Arduino, Raspberry Pi, 開發板

    Project簡述

    Project簡述
    • 簡述
      之前曾介紹過如何在不使用開發板的情況下,僅透過SunplusIT的一對一 RF Uart模組就能製作的簡報器,雖然超easy,但是它必須使用「連續按兩下」的動作來實現「回上一頁」的功能,此時這個問題便出現了:每個人對於「連續按兩下」的定義不同…有的人慢條斯理的輕按,有的人急驚風般的狂按,於是,上次製作的簡報器很快的便棄置一旁,我又回到人肉簡報器的日子。這次捲土重來...
    • 作者
      chtseng

    您的姓名 〈需填寫〉

    您的電子郵件信箱 〈需填寫〉

    主旨

    您的信件內容