原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正。
之前的新浪不能用啦,这次部分图片用的sm.ms的图床,加载慢,请耐心,准备换图床。
来填坑了!这次是 Sparrow 可穿戴微控制器(以下称S板), 产品页面,wiki页面。
S板主控芯片使用的是与Arduino Leonardo相同的ATmega32u4主芯片,那么它和经典爆款Arduino UNO使用的ATmega328主芯片的有何不同呢?我们来瞅一瞅:
这只是官方提供的介绍,真正应用上的区别,可以参考这篇文章《Arduino各开发板的比较》,综合可知Leonardo的优劣势:
缺点: 编译原理和其他arrduino的avr主控不太一样,深层开发有些麻烦。
UNO 是使用额外的16u2芯片来实现USB 串口功能的,就是板子上那块小芯片,注意它也是可编程的,相信有很多玩家改造过了。
如图所示,一眼望去,供电途径很多样,板子很小,有硬件输出(四枚LED+BUILTIN LED),硬件输入(Potentiometer),感觉怪怪的,好像都不是传统的输入输出手段,可能镊子也挺好用的吧。
电位器读取
例程,发现不对,找到原理图,最后确定如下:
下载地址
需要安装Adafruit NeoPixel库,效果就是拨动电位器,四颗灯珠颜色逐渐变化。默认亮度着实瞎眼,另外大家能告诉我为啥子是菱形发散的光,摄像头(iphone6)问题?通过第1个示例可知电位器输出0-1023。
题外话:为啥胃酸是盐酸,而不是硫酸、醋酸啊什么的。
Arduino Leonardo,发布去今有好多年了,彼时物联网概念并不热门,但是随着ESP8266的出现,无线能力几乎成了标配,现在出这么一款产品,无疑限制了它的应用范围。
此外,对于S板有以下建议:
另外看到注意事项关于电源的内容有很多,这个能否傻瓜一点,我这种小白记不住boom了咋办。
那么,Sparrow究竟如何呢?我们接着往下看。
最近配了一台台式机(见前文),没有之前Thinkpad笔记本电脑的物理音量调节按钮,就想自己搞一个,于是看着手头的Sparrow,计上心头。
S板主要有两点优势:
原理是这么回事:现在常用的键盘属于HID设备的一种,而很多键盘上都有多媒体键,可以方便地调节音量、打开执行程序甚至自定义功能,我们利用S板模拟出键盘上的多媒体按键即可。看起来比较简单,下面动手看看如何实现。大致拆分了一下,流程拢共分两步:一是模拟成键盘;二是使用电位器调节音量。
哇,引脚都不用焊接!
既往没做过,先找块石头摸着过河,看看有没有人做过类似的,放狗(Google)一搜,看到这个USB Volume Control,顺蔓摸瓜找到这个Trinket USB Volume Knob,研究一下。
理论基础有了,我们说干就干,但是AdaFruit 的Trinket还是存在一些不同,我们直接在Arduino IDE里面搜索看看有木有现成的轮子可用,关键词HID,然后发现了这位大佬NicoHood,此外还看到了大佬的IR库:IRLremote, This library is way more efficient than the "standard" IR library from Ken Shirriff.
我们这里用到NicoHood/HID库,直接在IDE里面的包管理工具安装即可,话说新版的IDE好像下载东西不用挂代理了。
下面实现一个简单的Demo:按下按钮,使电脑切换静音。代码如下:
/*
Copyright (c) 2014-2015 NicoHood
See the readme for credit to other people.
Consumer example
Press a button to play/pause music player
You may also use SingleConsumer to use a single report.
See HID Project documentation for more Consumer keys.
https://github.com/NicoHood/HID/wiki/Consumer-API
*/
#include "HID-Project.h"
const int pinLed = LED_BUILTIN;
const int pinButton = 9;
void setup() {
pinMode(pinLed, OUTPUT);
pinMode(pinButton, INPUT_PULLUP);
// Sends a clean report to the host. This is important on any Arduino type.
Consumer.begin();
}
void loop() {
if (!digitalRead(pinButton)) {
digitalWrite(pinLed, HIGH);
// See HID Project documentation for more Consumer keys
Consumer.write(MEDIA_VOLUME_MUTE);
// Simple debounce
delay(300);
digitalWrite(pinLed, LOW);
}
}
这里修改自官方例程Consumer
,我这里没有按钮,就直接用镊子了,最终效果就是将Sparrow通过MicroUSB线插到电脑上,短接D9和GND(相当于按下了按钮),然后在板上D8上的Builtin灯会闪一下(发白光),电脑就静音啦,再短接一次就会取消静音,如此反复。
由此第一步就完事了。再来看看第二步,参考下Adafruit的教程,虽然不一样但是思路总能参考吧!但是!结果!发现越发看不懂了,我们的电位器没有ABC脚!大费周章,茅塞顿开,恍然大悟,Encoder编码器和Potentiometer电位器不一样!
上文的Adafruit教程原本以为可以参考一下思路,然后发现我这里是电位器(Potentiometer,模拟信号),原文是旋转编码器(Rotary Encoder,数字信号),虽然外观上相似,但本质不同:
电位器:
编码器:
两者的辨别:
电位器与编码器,有着本质的区别,最直接的分辨方法就是:旋转一下,要是旋转角度不足一圈的是电位器,要是可以360度无限旋转的是编码器。
有兴趣可以看这篇电位器和编码器的区别文章,具体还可以移步杜洋的免费公开课《工欲善其事——电子技术探索与教学》,里面有讲解有拆解。
首先摸摸情况,夯实基础。我们手头有这些线索:
下面思考的内容:
hut1_12v2.pdf
的130页,发现音量控制有两种方案,一是+/-按钮,二是Knob,也就是旋钮式控制。参考Ada的我们再瞅瞅。旋钮仅仅能转270°?不过我们看到的是df有300°,360°和3600°的。大致看了下,S板上的电位器角度传感器大概就是270度。那么用电位器就不行了吗,当然不是,只是逻辑上有区别,我们参考这个项目的代码进行修改。
#include <HID-Project.h> //include HID_Project library
#include <HID-Settings.h>
#define REVERSED false //if your controller is reversed change it to true
int val = 0;
int previousval = 0;
int val2 = 0;
void setup() {
Consumer.begin(); //initialize computer connection
delay(1000); //wait for computer to connect
for(int a = 0; a < 52; a++) {
Consumer.write(MEDIA_VOLUME_DOWN); //set the volume to 0
delay(2);
}
}
void loop() {
val = analogRead(2); //read potentiometer value
val = map(val, 0, 1023, 0, 101); //map it to 102 steps
if(REVERSED) {
val = 101 - val;
}
if(abs(val - previousval) > 1) { //check if potentiometer value has changed
previousval = val;
val /= 2; //divide it by 2 to get 51 steps
while(val2 < val) {
Consumer.write(MEDIA_VOLUME_UP); //turn volume up to appropiate level
val2++;
delay(2);
}
while(val2 > val) {
Consumer.write(MEDIA_VOLUME_DOWN); //turn volume down to appropiate level
val2--;
delay(2);
}
}
delay(301); //wait at least 300ms between changing volume levels
} //if it will change faster Windows can sometimes
//increase or decrease volume by 10 steps at once
简单的代码要点介绍:
效果演示及注意:
这里使用以下软件
这里实现了一个小功能,后续再把其他做的东西整理分享出来,此外micro:bit的东西也拖了好久了。
原文:https://www.cnblogs.com/sjqlwy/p/sparrow_knob.html