基于SAMD21的USB HID控制器,用于spotify播放,暫停,跳過和調整觸摸和旋轉輸入的音量
TouchNav是一個極簡的USB HID觸摸控制器,使用定制的SAMD21板。它可以讓你控制Spotify播放-播放/暫停,下一個/上一個軌道,和音量使用電容觸摸板和旋轉編碼器。
目標是建立一個時尚的、基于觸摸的界面,感覺未來感又實用,允許直接從你的桌子上直觀地控制Spotify,而不需要觸摸鍵盤或鼠標。
特性
?電容觸摸板播放/暫停,下一步,上一步
?旋轉編碼器音量控制
?基于hid的媒體鍵仿真(PC上不需要軟件)
?通過鍵盤快捷鍵自動打開/關閉Spotify
?作為一個即插即用的USB設備
?建立在一個定制的SAMD21板
硬件概述
TouchNav的核心是圍繞為Fab學院設計的定制SAMD21板構建的。SAMD21E17A芯片提供全速USB功能,使其能夠充當類似鍵盤或鼠標的HID(人機界面設備)。
愛特梅爾公司SAMD21E17A
Atmel SAMD21E17A是一款功能強大但緊湊的基于ARM Cortex-M0+的微控制器,運行頻率高達48 MHz。它是Arduino Zero和許多現(xiàn)代開發(fā)板中使用的同一系列芯片,使其成為usb連接,低功耗和交互式項目(如TouchNav)的理想選擇。
?處理器:32位ARM Cortex-M0+核心,最高可達48mhz
?內存:128 KB閃存和16 KB SRAM(用于程序和數(shù)據(jù)存儲)
?USB支持:全速USB 2.0接口,允許本地USB HID,鍵盤和串行功能
外圍設備:
?多達6個可配置串行接口(SERCOM) -可作為UART, SPI或i2c
?用于讀取傳感器和觸摸輸入的12位ADC(模數(shù)轉換器)
?10位DAC用于模擬輸出
?定時器/計數(shù)器(TC/TCC)用于PWM,事件定時或信號生成
?外圍觸摸控制器(PTC)的電容觸摸感應
?電源管理:低功耗模式,夢游外設,和停電檢測。
?調試:用于編程和調試的雙針SWD(串行線調試)
?工作電壓:3.3 V邏輯
?I/O引腳:多達32個可用的GPIO引腳(取決于封裝)
為什么它對TouchNav很好
SAMD21E17A的原生USB功能使其非常適合模擬鍵盤,鼠標或多媒體控制器的項目-無需額外的硬件。它的觸摸感應支持和多個串行接口也使其非常適合集成傳感器,led和旋轉編碼器。
主要輸入組件包括:
?電容式觸控板:三個金屬或銅觸控板作為觸控傳感器。每個墊被分配一個功能-播放/暫停,下一個軌道,和上一個軌道。
?旋轉編碼器:用來增加或減少系統(tǒng)音量的小旋鈕。它還包括一個可選的按鈕。
?Micro USB接口:用于電源和數(shù)據(jù),允許電路板作為USB HID設備。
?電容觸摸板連接到SAMD21上的模擬能力引腳。旋轉編碼器連接到兩個數(shù)字引腳,該引腳配置為檢測順時針和逆時針旋轉的狀態(tài)轉換。
PCB設計- KiCAD
整個電路板是在開源PCB設計工具KiCad中定制設計的。原理圖、布局和引腳映射經(jīng)過定制,以適應SAMD21E17A的功能,該功能將觸摸板、旋轉編碼器、WS2812B led和USB連接集成在緊湊的最小設計中。
這允許完全控制硬件設計,從組件放置到路由USB差分對,使TouchNav成為專用的專業(yè)級HID控制器,而不是通用的開發(fā)板hack。
引腳如下:
?Led - 7
?Ws2812b - 11
?旋轉編碼器- A - 9, B - 8,開關- 10
?電容式觸摸滑塊- GPIO 2、3、4、5、6
單板編程
TouchNav板的核心是SAMD21 E17,因此要對SAMD21進行編程,我們需要將引導加載程序添加到板中。為了初始化引導加載程序,我們需要串行調試引腳。只有在那之后,我們才能使用USB編程板。
串行調試接口用于將引導加載程序刻錄到板上。我正在使用由我的Fab學院講師Saheen開發(fā)的SAMD DAP程序員板
將FAB SAMD板添加到Arduino
為了使用Arduino IDE編程SAMD21板,我們需要將FAB SAMD板添加到板管理器中
通過單板管理器安裝單板
在燃燒引導加載程序后,我可以使用C型USB接口對我的板進行編程。
Blink
在燃燒引導加載程序后,第一步是測試內置示例“Blink”。最初,我通過使用一些示例代碼測試了所有輸入和輸出功能。
SAMD21串行演示
下一個測試是串行通信。經(jīng)過研究,我實現(xiàn)了arduino常用的串口命令。print不適用于SAMD21,因此我們必須使用SerialUSB.print。下面的代碼取自我的Fab學院嵌入式編程課。SAMD21回聲碼
電容式觸摸
囚禁式觸摸可以通過使用Neil教授在Fab學院輸入設備課上提供的測試代碼進行測試。為此所需的庫是Adafruit FreeTouch庫。
HID
我使用了默認情況下在Arduino的庫管理器中可用的HID項目和HID設置庫。我們只需要安裝它來使用庫管理器提供的庫。我使用的主要功能是消費者功能,它允許控制媒體播放和一些功能。主要有兩件事:在Windows設備上控制媒體播放和打開和關閉Spotify。
為了控制媒體播放,消費者函數(shù)提供如下功能:
面臨的問題
在編程SAMD21時,我遇到了USB C連接的問題。電腦沒有檢測到板子。經(jīng)過一些調試,我意識到USB C線是一個問題,我不得不使用另一個USB線和一個額外的USB集線器。我想可能是動力問題。以及PCB設計缺陷
旋轉編碼器不是很準確,因為當我轉動旋鈕更快時,它沒有讀取值。我想我需要在旋轉編碼器引腳上添加電容器。
本文編譯自hackster.io