“Microduino 生成二维码/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
设备
程序
 
(未显示2个用户的41个中间版本)
第4行: 第4行:
 
|
 
|
 
==目的==
 
==目的==
本教程的目的是简单了解二维码的生成原理,并在microduino TFT来显示二维码。
+
本教程的目的是简单了解二维码的基本原理,并在microduino TFT来显示二维码。
  
 
==设备==
 
==设备==
第30行: 第30行:
 
|}
 
|}
  
==线圈式电磁枪的原理解释==
+
==什么是QR code==
  
线圈式电磁枪:这种电磁枪是利用瞬时脉冲电流,是枪管上的驱动线圈产生强磁场,吸引铁磁性物质向磁阻最低的方向运动,当子弹运动到线圈中点(磁阻最低)时断电,子弹依靠惯性飞出。
+
QR code属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化。
  
这是目前DIY线圈式电磁枪最简单的原理。
+
==QR code的特点==
  
通俗的说:
+
* 快速读取;(QR就是取自“Quick Response”的首字母),通过摄像头从拍摄到解码到显示内容也就三秒左右,对摄像的角度也没有什么要求;
  
电磁炮,也叫线圈枪,高斯枪,基本原理咱们初中的物理课上已经讲了,当时我可是好奇兴奋地听了,快乐的思考着。
+
* 高容量、高密度;理论上内容经过压缩处理后可以存7089个数字,4296 个字母和数字混合字符,2953个8位字节数据,1817个汉字;
  
通过 安培 的 安培定则的贡献,我们还记得右手定则,左手定则之类的东西吧。
+
* 支持纠错处理;纠错处理相对复杂,目前我还没有深入了解,按照QR code的标准文档说明,QR code的纠错分为4个级别,分别是:
 +
** level L: 最大7%的错误能够被纠正;
 +
** level M: 最大15%的错误能够被纠正;
 +
** level Q: 最大25%的错误能够被纠正;
 +
** level H: 最大30%的错误能够被纠正;
  
[[File:anpei.png|600px|center|thumb]]
+
* 结构化;看似无规则的图形,其实对区域有严格的定义,下图就是一个模式2、版本1的QR图结构(关于QR code的“模式”、“版本”将在后面进行介绍):
 +
[[File:QRcode-1.jpg|600px|center|thumb]]
 +
在上图21*21的矩阵中,黑白的区域在QR码规范中被指定为固定的位置,称为寻像图形(finder pattern) 和 定位图形(timing pattern)。寻像图形和定位图形用来帮助解码程序确定图形中具体符号的坐标。
 +
黄色的区域用来保存被编码的数据内容以及纠错信息码。
 +
蓝色的区域,用来标识纠错的级别(也就是Level L到Level H)和所谓的“Mask pattern”,这个区域被称为“格式化信息”(format information)。
  
电磁炮主要跟右手定则有关,电流经过螺旋缠绕在铁芯的时候会产生磁力线,使这个铁芯棒变成一个电磁铁。
+
* 扩展能力;QR code的Structure Append特点,使一个QR code可以分解成多个QR code,反之,也可以将多个QR code的数据组合到一个QR code中来。
 +
[[File:QRcode-2.jpg|600px|center|thumb]]
  
[[File:rightHandLaw.png|600px|center|thumb]]
+
==QR code的模式和版本==
 +
也就是前面提到过QR code的模式(Model)和版本(Version)。
  
但是光是做出来个电磁铁是不够的,子弹还是射不出去。我们还需要做一个类似冲水马桶一样的装置,你在厕所里给马桶冲水的时候是不是上边的满满一大缸水瞬间冲下来把便便冲走了是吧。
+
* QR code分为Model1和Model2两种模式,Model1是对QR的初始定义,Model2是对Model1的扩展,目前使用较为普遍的是Model2。
  
我们就用一些电容来充当马桶上的水箱,水箱里的水就是电荷了,电池先把电荷放到大容量的电容里,然后瞬间使大量电荷通过螺旋形导线,此时瞬间会产生强磁场,有磁感应的铁子弹会瞬间被吸引到电磁铁上,速度很快,当子弹到达电磁铁中点的时候电流为零,磁力消失,子弹由于惯性就被发射出去了。
+
* QR图的大小(size)被定义为版本(Version),版本号从1到40。版本1就是一个21*21的矩阵,每增加一个版本号,矩阵的大小就增加4个模块(Module),因此,版本40就是一个177*177的矩阵。(版本越高,意味着存储的内容越多,纠错能力也越强)。
  
[[File:coilGunTheory.png|600px|center|thumb]]
+
==QR code的编码内容==
[[File:coilGunTheory1.gif|600px|center|thumb]]
+
QR码支持编码的内容包括纯数字、数字和字符混合编码、8位字节码和包含汉字在内的多字节字符。其中:
  
==原理图==
+
* 数字(Numeric mode):每三个为一组压缩成10bit。
 +
 
 +
* 字母数字混合(Alphanumeric mode):每两个为一组,压缩成11bit。
 +
 
 +
* 8bit字节数据(Byte mode):无压缩直接保存。
  
使用multisim来模拟电路运行的过程:
+
* 日本汉字(KANJI mode):每一个字符被压缩成13bit
[[File:coilGunShematic.png|600px|center|thumb]]
 
图中的xsc1示波器的a通道测量所有电容两端的电压(红线),b通道使用电流探针测得电感线圈的电流大小(绿线)
 
  
 +
* 中国汉字(GB2312):每一个字符被压缩成13bit
  
[[File:coilGunMultisimfireGraph1.png|600px|center|thumb]]
 
此图为电容充电是示波器电压的波形图
 
  
 +
如下表是字母数字混合:
 +
[[File:QRcode-3.png|600px|center|thumb]]
  
[[File:coilGunMultisimfireGraph2.png|600px|center|thumb]]
+
==原理图==
此图为开火时候电压和电流的模型图(红色为电压,绿色为电流),注意通道b的单位是通道a的2000倍数,实际的电流值应该是非常大的
 
  
 
==程序==
 
==程序==
 +
 +
* 源代码 [https://github.com/Microduino/QR_Code_Gen3V38_Public QR_Code_Gen3V38_Public]
  
 
==调试==
 
==调试==
 
步骤一:
 
步骤一:
  
先用multisim来模拟一下原理图电路
+
把core+、模块和底板堆叠在一起,并用8Pin线将底板与TFT模块连接一起。
  
 
步骤二:
 
步骤二:
  
准备材料来搭建电路,先搭建一个简单的,我先使用4个电容,和2个9v干电池来做个试验,为了验证一下电路运行情况,和保证安全(也是因为我手头目前只有2个9v干电池),先不做枪管和子弹,用一个马达来代替线圈体现以下瞬间的大电流。
+
将程序下载到core+。之后就可以看到屏幕上出现一个二维码。
[[File:coilGunStep1.png|600px|center|thumb]]
 
  
当我打开第一个开关的时候,led灯会点亮,表示9v干电池正在给电容充电,3,4秒钟后,led灯逐渐熄灭,这表示充电的9v干电池的电压和电容两端电压逐渐保持一致,电流慢慢减弱,所以led灯逐渐熄灭,此时也表示电容已经充满电了,然后关闭第一个开关,再打开第二个开关,此时你会看到马达突然转动,马上又停止了,这就表示电容正在毫无阻力的把所有电量瞬间流向马达。
+
好了,到这里基本完成了。
 
 
好了,如果你看到马达突然转动说明你搭建的电路基本正确了。
 
  
 
步骤三:
 
步骤三:
  
我们来制作枪管和子弹来替换马达。目前我手头只有不到一米的漆包线,一个碳素笔的笔芯,一些乐高玩具的零件,先用它们吧,我也不指望子弹有多么大的杀伤力。
+
之后用手机打开二维码扫描软件(用QQ或微信也行)扫描一下屏幕上的二维码,就可以扫描出来字母。如果扫描出来是个网站地址,则自动跳转打开网站。
 
+
[[File:QRcode-4.jpg|200px|center|thumb]]
把漆包线在笔芯上绕,绕的越紧越整齐越好,尽量不要有交叉,绕好后用热胶枪给漆包线定个型,乐高玩具零件再固定一下,看着象摸象样的。
+
[[File:QRcode-5.jpg|200px|center|thumb]]
 
 
[[File:coilGunStep2.png|600px|center|thumb]]
 
 
 
[[File:coilGunStep3.png|600px|center|thumb]]
 
 
 
 
 
好了代替马达把线路接好,就差子弹了,子弹只要能被吸铁石吸引,能放到枪管里去就可以,我就随便找了个铁丝剪短了放里边。
 
 
 
重复上次的步骤,发射!!!,没动,再试一次,还没动,调整一下子弹的位置,可是还是没动。难道是我太注重安全了?我陷入了思考中...
 
  
 
步骤四:
 
步骤四:
  
让我们来看看一下如何才能那个使线圈枪的威力增大。
+
如果想扫描自己定义的文字,在源代码里的QR_Code_Gen3V38_Public.ino文件内修改char charsToEncode的内容:
 
+
[[File:QRcode-6.png|600px|center|thumb]]
线圈式电磁枪的威力大小有三个要点:
 
 
 
*1.瞬时电流产生磁场强度
 
 
 
*2.加速时间
 
 
 
*3.线圈是否对子弹施阻力(也就是子弹到线圈中点时电是否放完)
 
漆包线越粗,电阻越小,就可以产生更强的磁场。
 
 
 
绕的圈数越多每级线圈加速时间越长,但是线圈加速时间过长会导致电感过高,电流达到最大值时间过长,会使线圈对子弹施阻力。
 
线圈周长与子弹有关,线圈内径于弹径差距越小,对子弹推力越大。
 
 
 
 
 
至于层数也是减小电感的,
 
每层圈数一般一致
 
电压越高,产生的瞬时电流越大,磁场越强
 
电容容量是根据线圈来定的,要保证子弹到线圈中点时电基本放完
 
子弹长度一般等于线圈长度的一半,保证所受磁力最大
 
毕奥-萨伐尔定律应为B=u0*n*I,B为磁感应强度,u0为常数,n为螺线管匝数,I为导线中的电流,所以磁场大小是由电流大小与螺线管匝数决定的!
 
 
 
关于铁芯的材料:
 
 
 
有铁芯的线圈会大大增加磁感应强度,但是加了铁芯子弹还怎么通过呀?所以我决定加一个铁管,关于铁管的材料我研究了下,熟铁,硅钢 为首选。
 
 
 
所以,接下来我们来增加一下线圈枪的威力吧,在现有的基础上我用了7个电容(为什么要用7个,因为面包板上插入8个电容不容易呀),从家里翻腾出来一个以前老式缝纫机上的用来绕线的铁
 
轮,用来做铁芯,子弹我用的是剪断的铁钉。如下图:
 
[[File:coilGunStep4.png|600px|center|thumb]]
 
 
 
[[File:coilGunStep5.png|600px|center|thumb]]
 
 
 
这回再试试,开火!!铁钉再笔芯里微弱的动了一下,不错总算看到动静了,虽然这只线圈枪威力弱的可怜!但总算看到曙光了,因为手头上的漆包线才不到一米,只用了两个电池,和7个小型号的电容。
 
 
 
步骤五:
 
 
 
接下来可以尝试一下用microduino来控制电磁枪,或者用来microduino OLED模块来显示电容充电的进度也可以绕多层线圈,增大电量和把枪做的更结实美观一点。
 
  
 
==结果==
 
==结果==
  
铁钉在笔芯管里可以移动了。
+
[[File:QRcode-7.jpg|600px|center|thumb]]
  
 
==视频==
 
==视频==

2016年2月24日 (三) 10:23的最新版本

目的

本教程的目的是简单了解二维码的基本原理,并在microduino TFT来显示二维码。

设备

模块 数量 功能
Microduino-Core+/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-Module TFT/zh 1 显示模块
Microduino-Shield Cube-S2/zh 1 基于Microduino的扩展板
  • 其他硬件设备
元器件 数量 功能
1.27间距的8Pin导线 1 连接TFT模块

什么是QR code

QR code属于矩阵式二维码中的一个种类,由DENSO(日本电装)公司开发,由JIS和ISO将其标准化。

QR code的特点

  • 快速读取;(QR就是取自“Quick Response”的首字母),通过摄像头从拍摄到解码到显示内容也就三秒左右,对摄像的角度也没有什么要求;
  • 高容量、高密度;理论上内容经过压缩处理后可以存7089个数字,4296 个字母和数字混合字符,2953个8位字节数据,1817个汉字;
  • 支持纠错处理;纠错处理相对复杂,目前我还没有深入了解,按照QR code的标准文档说明,QR code的纠错分为4个级别,分别是:
    • level L: 最大7%的错误能够被纠正;
    • level M: 最大15%的错误能够被纠正;
    • level Q: 最大25%的错误能够被纠正;
    • level H: 最大30%的错误能够被纠正;
  • 结构化;看似无规则的图形,其实对区域有严格的定义,下图就是一个模式2、版本1的QR图结构(关于QR code的“模式”、“版本”将在后面进行介绍):

在上图21*21的矩阵中,黑白的区域在QR码规范中被指定为固定的位置,称为寻像图形(finder pattern) 和 定位图形(timing pattern)。寻像图形和定位图形用来帮助解码程序确定图形中具体符号的坐标。 黄色的区域用来保存被编码的数据内容以及纠错信息码。 蓝色的区域,用来标识纠错的级别(也就是Level L到Level H)和所谓的“Mask pattern”,这个区域被称为“格式化信息”(format information)。

  • 扩展能力;QR code的Structure Append特点,使一个QR code可以分解成多个QR code,反之,也可以将多个QR code的数据组合到一个QR code中来。

QR code的模式和版本

也就是前面提到过QR code的模式(Model)和版本(Version)。

  • QR code分为Model1和Model2两种模式,Model1是对QR的初始定义,Model2是对Model1的扩展,目前使用较为普遍的是Model2。
  • QR图的大小(size)被定义为版本(Version),版本号从1到40。版本1就是一个21*21的矩阵,每增加一个版本号,矩阵的大小就增加4个模块(Module),因此,版本40就是一个177*177的矩阵。(版本越高,意味着存储的内容越多,纠错能力也越强)。

QR code的编码内容

QR码支持编码的内容包括纯数字、数字和字符混合编码、8位字节码和包含汉字在内的多字节字符。其中:

  • 数字(Numeric mode):每三个为一组压缩成10bit。
  • 字母数字混合(Alphanumeric mode):每两个为一组,压缩成11bit。
  • 8bit字节数据(Byte mode):无压缩直接保存。
  • 日本汉字(KANJI mode):每一个字符被压缩成13bit
  • 中国汉字(GB2312):每一个字符被压缩成13bit


如下表是字母数字混合:

原理图

程序

调试

步骤一:

把core+、模块和底板堆叠在一起,并用8Pin线将底板与TFT模块连接一起。

步骤二:

将程序下载到core+。之后就可以看到屏幕上出现一个二维码。

好了,到这里基本完成了。

步骤三:

之后用手机打开二维码扫描软件(用QQ或微信也行)扫描一下屏幕上的二维码,就可以扫描出来字母。如果扫描出来是个网站地址,则自动跳转打开网站。

步骤四:

如果想扫描自己定义的文字,在源代码里的QR_Code_Gen3V38_Public.ino文件内修改char charsToEncode的内容:

结果

视频