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





