tag 标签: 创客传感器

相关博文
  • 热度 3
    2023-6-20 08:52
    4182 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(117)---P10V706LED屏模组
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十七:P10单红V706模组32*16单元板LED显示屏 知识点:P10(1R)V706模组32X16 LED显示屏 查看P10(1R)V706模组的芯片(手头上是厦门强力巨彩的产品) 大致看了相关芯片,板上主要是SM74HC595D,其他还有SD74HC245D等 技术资料链接 https://www.doc88.com/p-0022544129712.html?r=1 https://www.renrendoc.com/paper/176283428.html P10单红V706模组32*16单元板LED显示屏技术参数 1.物理点间距:10mm 2.物理密度:10000dots / m ^ 2 3.发光强度:2200cd / m ^ 2 4.单元板尺寸:320 * 160mm 5.电池板编号:512 6.小提琴组成:1R1G1B 7.单位板重:362g = 10 m 9.最佳视角:水平+ -80度,垂直+ -75度 10.驱动方式:恒流驱动,动态 11.扫描方式:1/2 sca 12.单元板接口:HUB 73 14.工作电压:DC 5V + -5% 15.平均功耗:16W 16.最大功耗:<= 27w 17.发光灯寿命:100000小时 P10(1R)V706模组32X16单红LED显示屏实验所需硬件清单 25CM电源线X1 5V2A实验电源X1 5V4A实验电源X1 DS1307时钟模块X1 ArduinoUno开发板X1 LED显示屏P16双头排线X2 HUB12接口UNO扩展板(自制的)X1 P10(1R)V706模组32X16 LED显示屏X2 自制HUB12接口UNO扩展板 以Proto Shield原型扩展板为主,加装二只P16插座,便于做实验 做好的是这样(P5排插座是DS1307时钟模块的接口) Arduino实验接线示意图 Arduino参考开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十七:P10单红V706模组 32*16单元板LED显示屏 项目1:具有动态内容的静态显示(随机变化的三位数字) */ #include #include "SPI.h" #include LedP10 myled; void setup(){ // A- 3, B- 4, STORE- 8, OE-9, 1x Panel myled.init(3,4,8,9,1); } void loop(){ int sensorValue = analogRead(A0); myled.showmsg_single_static(sensorValue,1); delay(500); } Arduino实验场景图 Arduino参考开源代码之二 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十七:P10单红V706模组 32*16单元板LED显示屏 项目2:显示一个整数计数器值 */ #include "TimerOne.h" #include "SPI.h" #include "ledP10.h" int num1=0; LedP10 myled; void setup(){ myled.init(3,4,8,9,1); } void loop() { if(num1==50){ myled.setbrightness(50); } myled.showmsg_single_static(num1,0); num1+=1; delay(500); } Arduino实验场景图 Arduino参考开源代码之三 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十七:P10单红V706模组 32*16单元板LED显示屏 项目3:显示两个高度为8像素的计数器 */ #include #include"SPI.h" #include int num1=0,num2=1; LedP10 myled; void setup(){ myled.init(3,4,8,9 ,1); } void loop(){ myled.showmsg_double_static(num1,num2,0); num1+=1; num2+=2; delay(500); } Arduino实验场景图 Arduino参考开源代码之四 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十七:P10单红V706模组 32*16单元板LED显示屏 项目4:亮度控制 备注:functon&lt; setbrightness(uint8_t Brightness)&gt;的使用,此函数 采用uint8_t类型的一个参数,其值可以是0到255,亮度最高是255,最低是0。可 以在调用LedP10库的任何其他函数之后或之前的任何时间调用此函数。 在此示例中,当计数器" num1"达到值50时,亮度降低。 */ #include "TimerOne.h" #include "SPI.h" #include "ledP10.h" int num1=0; LedP10 myled; void setup(){ myled.init(3,4,8,9 ,1); } void loop(){ if(num1==50) { myled.setbrightness(50); } myled.showmsg_single_static(num1,0); num1+=1; delay(500); } Arduino实验场景图 实验开源仿真编程(Linkboy V4.62)
  • 热度 11
    2023-6-18 14:52
    2046 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(116)---五向导航按键模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百一十六: 五向导航按键模块 5D摇杆 单片机 独立键盘开关 按钮 Your Cee 五向轻触开关 也称多功能开关或多线路开关,五个方向操作的开关,六脚带定位柱,贴片式,这个系列有多个规格: 10*10*5 ,俗称正五向开关, 7*7,俗称斜五向,多种高度可选。 相关参数 外形尺寸:10.0mm*10.0mm*5mm 参数配置 :动作力:160gf/250gf 1.Rating : DC 12V 50mA 2. Contact Resistance:100mΩMAX 3. Insulation Resistance:100MΩMIN 4. Soldering Temper: 260±5°5s 5. Mechanical Life: 200,000 cycles Min 6. Electrical Life: 200,000 cycles Min 7. Ambient Temper.Used: -25 ℃ to 85 ℃ 8. Ambient Humidety Used: 85% RH 9. Operating Force: 4-direction 160 ± 35 gf Center push 250 ± 35 gf 五向开关其最大的不同就是由五个触点。也就是说,在内底部,有着中央固定触点以及公用触点外壳,还有就是在其周围有很多周边的固定触点的外壳。这些外壳都放置在活动触点簧片上。当机器想要形成一个通路的时候,就可以直接让触点簧片和公用触点连接在一起。所述活动触点簧片能够连接在一起,加上操作杆的控制,就能够使得它一个活动触点簧片可以直接与其相对应的触点连接起来。 五向导航按键模块相当于7个独立按键开关,7个开关的一端接在了公共端COM 引脚说明 COM——公共端 UP—— “ 上”方向键 DWN—— “下”方向键“ LFT ——左”方向键“ RHT——右”方向键“ MID——中间”方向键 SET ——“设置”按键 RST——“复位”按键 输出——数字电平(按下低电平,释放高电平) Arduino实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十六:五向导航按键模块 5D摇杆 单片机 独立键盘开关 按钮 Your Cee 项目:串口打印各端口输入值 说明:2\3\4\5\6\7\8输入为开关量(digitalRead) */ int value = 0; void setup() { Serial.begin(9600); pinMode(2,INPUT); pinMode(3,INPUT); pinMode(4,INPUT); pinMode(5,INPUT); pinMode(6,INPUT); pinMode(7,INPUT); pinMode(8,INPUT); pinMode(13,OUTPUT); } void loop() { if (digitalRead(8)) { digitalWrite(13,HIGH); } else { digitalWrite(13,LOW); } value = digitalRead(2); Serial.print("UP"); Serial.println(value, DEC); value = digitalRead(3); Serial.print("DWN"); Serial.println(value, DEC); value = digitalRead(4); Serial.print("LFT"); Serial.println(value, DEC); value = digitalRead(5); Serial.print("RHT"); Serial.println(value, DEC); value = digitalRead(6); Serial.print("MID"); Serial.println(value, DEC); value = digitalRead(7); Serial.print("SET"); Serial.println(value, DEC); value = digitalRead(8); Serial.print("RST"); Serial.println(value, DEC); delay(3000); } 实验串口返回情况 Arduino实验场景图
  • 热度 9
    2023-6-18 13:23
    1907 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(115)---HB100多普勒雷达模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百一十五: HB100微波雷达感应模块 10.525GHz多普勒探测器探头传感器 多普勒 (人物) 奥地利物理学家,数学家和天文学家多普勒,克里斯蒂安·安德烈亚斯(Doppler · Christian Andreas)1803年11月29日出生于奥地利的萨尔茨堡 (Salzburg)。1842年,他因文章 "On the Colored Light of Double Stars" 、“多普勒效应”(Doppler Effect),而闻名于世。1853年3月17日,多普勒与世长辞。 一天,多普勒带着他的孩子沿着铁路旁边散步,一列火车从远处开来。多普勒注意到:火车在靠近他们时笛声越来越刺耳,然而就在火车通过他们身旁的一刹那,笛声声调突然变低了。随着火车的远去,笛声响度逐渐变弱,直到消失。这个平常的现象吸引了多普勒的注意,他思考:为什么笛声声调会变化呢?他抓住问题,潜心研究多年。通过研究他发现,当观察者与声源相对静止时,声源的频率不变;然而观察者与声源之间相对运动时,则听到的声源频率发生变化。最后他总结:观察者与声源的相对运动决定了观察者所收到的声源频率。多普勒不仅注重科学理论,而且善于运用实验去反复证明实验结论。多普勒的这一个重大发现,被人们称为“多普勒效应”,当时是将“多普勒效应”光学与声学联系起来的。在《论双星的色光》中,他从理论上论证了“多普勒效应”。多普勒还用此理论研究了光行差。 著名的多普勒效应首次出现在1842年发表的一篇论文上。多普勒推导出当波源和观察者有相对运动时,观察者接收到的波频会改变。他试图用这个原理来解释双星的颜色变化。虽然多普勒误将光波当作纵波,但多普勒效应这个结论却是正确的。多普勒效应对双星的颜色只有些微的影响,在那个时代,根本没有仪器能够量度出那些变化。不过,从1845年开始,便有人利用声波来进行实验。他们让一些乐手在火车上奏出乐音,请另一些乐手在月台上写下火车逐渐接近和离开时听到的音高。实验结果支持多普勒效应的存在。多普勒效应有很多应用,例如天文学家观察到遥远星体光谱的红移现象,可以计算出星体与地球的相对速度;警方可用雷达侦测车速等。 多普勒效应 生活中有这样一个有趣的现象:当一辆救护车迎面驶来的时候,听到声音比原来高;而车离去的时候声音的音高比原来低。你可能没有意识到,这个现象和医院使用的彩超同属于一个原理,那就是“多普勒效应”。多普勒效应Doppler effect是为纪念奥地利物理学家及数学家克里斯琴·约翰·多普勒(Christian Johann Doppler)而命名的,他于1842年首先提出了这一理论。主要内容为物体辐射的波长因为波源和观测者的相对运动而产生变化。在运动的波源前面,波被压缩,波长变得较短,频率变得较高(蓝移blue shift);在运动的波源后面时,会产生相反的效应。波长变得较长,频率变得较低(红移red shift);波源的速度越高,所产生的效应越大。根据波红(蓝)移的程度,可以计算出波源循着观测方向运动的速度。 恒星光谱线的位移显示恒星循着观测方向运动的速度,除非波源的速度非常接近光速,否则多普勒位移的程度一般都很小。所有波动现象都存在多普勒效应。 多普勒效应也是一个偶然的发现,1842年奥地利一位名叫多普勒的数学家、物理学家。一天,他正路过铁路交叉处,恰逢一列火车从他身旁驰过,他发现火车从远而近时汽笛声变响,音调变尖,而火车从近而远时汽笛声变弱,音调变低。他对这个物理现象感到极大兴趣,并进行了研究。发现这是由于振源与观察者之间存在着相对运动,使观察者听到的声音频率不同于振源频率的现象。这就是频移现象。因为,声源相对于观测者在运动时,观测者所听到的声音会发生变化。当声源离观测者而去时,声波的波长增加,音调变得低沉,当声源接近观测者时,声波的波长减小,音调就变高。音调的变化同声源与观测者间的相对速度和声速的比值有关。这一比值越大,改变就越显著,后人把它称为“多普勒效应”。 多普勒效应原理 多普勒效应指出,波在波源移向观察者接近时接收频率变高,而在波源远离观察者时接收频率变低。当观察者移动时也能得到同样的结论。但是由于缺少实验设备,多普勒当时没有用实验验证,几年后有人请一队小号手在平板车上演奏,再请训练有素的音乐家用耳朵来辨别音调的变化,以验证该效应。假设原有波源的波长为λ,波速为u,观察者移动速度为v(以下分析方法不适用于光波):当观察者走近波源时观察到的波源频率为(u+v)/λ,反之则观察到的波源频率为(u-v)/λ。 一个常被使用的例子是火车的汽笛声,当火车接近观察者时,其汽鸣声会比平常更刺耳。你可以在火车经过时听出刺耳声的变化。同样的情况还有:警车的警报声和赛车的发动机声。如果把声波视为有规律间隔发射的脉冲,可以想象若你每走一步,便发射了一个脉冲,那么在你之前的每一个脉冲都比你站立不动时更接近你自己。而在你后面的声源则比原来不动时远了一步。或者说,在你之前的脉冲频率比平常变高,而在你之后的脉冲频率比平常变低了。产生原因:声源完成一次全振动,向外发出一个波长的波,频率表示单位时间内完成的全振动的次数,因此波源的频率等于单位时间内波源发出的完全波的个数,而观察者听到的声音的音调,是由观察者接受到的频率,即单位时间接收到的完全波的个数决定的。当波源和观察者有相对运动时,观察者接收到的频率会改变.在单位时间内,观察者接收到的完全波的个数增多,即接收到的频率增大.同样的道理,当观察者远离波源,观察者在单位时间内接收到的完全波的个数减少,即接收到的频率减小。 多普勒效应不仅仅适用于声波,它也适用于所有类型的波,包括电磁波。科学家爱德文·哈勃(Edwin Hubble)使用多普勒效应得出宇宙正在膨胀的结论。他发现远离银河系的天体发射的光线频率变低,即移向光谱的红端,称为红移,天体离开银河系的速度越快红移越大,这说明这些天体在远离银河系。反之,如果天体正移向银河系,则光线会发生蓝移。 在移动通信中,当移动台移向基站时,频率变高,远离基站时,频率变低,所以我们在移动通信中要充分考虑多普勒效应。当然,由于日常生活中,我们移动速度的局限,不可能会带来十分大的频率偏移,但是这不可否认地会给移动通信带来影响,为了避免这种影响造成我们通信中的问题,我们不得不在技术上加以各种考虑。也加大了移动通信的复杂性。 在单色的情况下,我们的眼睛感知的颜色可以解释为光波振动的频率,或者解释为,在1秒钟内电磁场所交替为变化的次数。在可见区域,这种频率越低,就越趋向于红色,而频率越高的,就趋向于蓝,紫色。比如,由氦——氖激光所产生的鲜红色对应的频率为4.74×10^14赫兹,而汞灯的紫色对应的频率则在7×10^14赫兹以上。这个原则同样适用于声波:声音的高低的感觉对应于声音对耳朵的鼓膜施加压力的振动频率(高频声音尖厉,低频声音低沉)。 如果波源是固定不动的,不动的接收者所接收的波的振动与波源发射的波的节奏相同:发射频率等于接收频率。如果波源相对于接收者来说是移动的,比如相互远离,那么情况就不一样了。相对于接收者来说,波源产生的两个波峰之间的距离拉长了,因此两上波峰到达接收者所用的时间也变长了。那么到达接收者时频率降低,所感知的颜色向红色移动(如果波源向接收者靠近,情况则相反)。为了让读者对这个效应的影响大小有个概念,在显示了多普勒频移,近似给出了一个正在远离的光源在相对速度变化时所接收到的频率。例如,在上面提到的氦——氖激光的红色谱线,当波源的速度相当于光速的一半时,接收到的频率由4.74×10^14赫兹下降到2.37×10^14赫兹,这个数值大幅度地降移到红外线的频段。 HB100多普勒模块 是利用多普勒雷达原理设计的10.525GHz微波移动物体探测器,这种探测方式与其他探测相比具有不受温度、湿度、噪声、气流、尘埃、光线等影响的优点,适合恶劣环境; 本产品主要应用于自动感应灯、自动门控制开关、安防系统、ATM自动提款机的自动录像控制系统等场所,另外也可以扩展其应用领域,如配合图像监控,识别驱动告警系统,广泛应用于监狱监控、机场监控、重要仓储场地、医院 IC U等重要场所。具有广泛的应用领域和市场前景。 HB100多普勒雷达模块由FET介质DRO微波震荡源(10.525GHz)、功率分配器、发射天线、接收天线、混频器、检波器等电路组成(图2)。发射天线向外定向发射微波,遇到物体时被反射,反射波被接收天线接收,然后到混合器与振荡波混合,混合、检波后的低频信号反应了物体移动的速度可以广泛应用于类似自动门控制开关、安全防范系统、ATM自动提款机的自动录像控制系统、火车自动信号机等,需要自动感应控制的场所。这是一种标准的10.525GHz微波多普勒雷达探测器,这种探测方式与其它探测方式相比具有如下的优点:1、非接触探测;2、不受温度、湿度、噪声、气流、尘埃、光线等影响,适合恶劣环境;3、抗射频干扰能力强;4、输出功率仅有5mW,对人体构不成危害;5、远距离:探测范围超过20米。 采用10.525GHz的微波与采用较低频段波相比有以下优点:1、微波天线发射时具有良好的定向性,因此很容易控制微波探头的作用范围。2、微波在传输过程中较易被衰减、吸收和反射,遇到墙壁等遮挡物时会被遮挡,因此墙壁等遮挡物外的物体对其干扰很小。 供电:给HB100供电有连续直流供电(CW)模式和脉动供电(PW)模式两种:HB100适应电压范围为5V±5%。在连续直流供电(CW)模式下工作时典型电流为35mA(典型值)。在低占空比脉冲供电(PW)模式下工作时,推荐给HB100提供5V、脉冲的宽度在5μs~30μs之间(典型值为20μs)、频率为2~4kHz(典型值为2.0kHz)的脉冲供电。3~10%的占空比脉冲供电时平均电流为1.2mA~4mA。脉冲供电电压必须在4.75V~5.25V之间,脉冲顶端的平坦度会影响HB100的探测能力。 电源 电压超过5.25V时,它的可靠性会降低,并可能导致标称频率外的射频输出和该电路永久性损坏。 射频输出:在所有推荐工作模式下,HB100的射频功率输出是非常低的,均在对人体构不成任何危害的安全范围内工作。在连续直流供电(CW)模式下工作时,总输出功率小于15mW。输出功率密度在5mm处为1mW/cm 2 ,1m处为0.72μW/cm 2 。当在5%占空比的脉冲供电模式工作时,功率密度分别减少到50μW/cm 2 和0.036μW/cm 2 。 IF输出:当物体在HB100的有效探测范围内以1m/s的速度相对于HB100的天线面(非铝质屏蔽罩的那一面为天线面)做径向移动时,HB100的IF输出为72Hz/ s,IF的脉动输出频率与物体相对径向移动速度成近似线性关系。IF的输出幅度与物体的大小、距离有关,当一个体重70kg、身高170cm的测试者在距离HB100 1m处以1m/s的速度相对于HB100做径向移动时,IF的输出为5mV、72Hz/s脉动信号,IF的输出幅度与距离的平方成近似反比关系。 注意: 1.探测范围取决于目标的反射度和大小以及信噪比。 2.10.525GHz下的多普勒速度为31Hz/m.p.h 3.安装模块必须使其天线面(非铝质屏蔽罩的那一面为天线面)向着被检测区域,用户也可以自行调整方向,以达到最佳的覆盖区域。 模块参考电原理图 发射: 1发射频率 :10.525 GHz 2频率设置精度 :3MHz 3输出功率(最小):13dBm EIRP 4工作电压 :5V±0.25V 5工作电流(CW):60mA max., 37mA typical 6谐波发射:<-10dBm 7脉冲工作模式: 8平均电流 (5%DC) :2mA typ. 9脉冲宽度(Min.):5uSec 10负载循环(Min.):1% 接收: 1灵敏度(10dB S/N ratio)3Hz至80Hz 带宽:-86dBm 3Hz至80Hz带宽杂波10uV 2天线增益:8dBi 3垂直面3dB波束宽度:36度 4水平面 3dB 波束宽度:72度 5重量:8 克 6规格:37×45×8mm Arduino实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十五:HB100微波雷达感应模块 10.525GHz多普勒探测器探头传感器 项目:测试HB100模块 */ int analogPin = 3; float sensorValue; int val; void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(analogPin); Serial.println(); Serial.println(sensorValue); val= map(sensorValue,0,1023,0,99); Serial.println(val); sensorValue=0; delay(100); } 实验串口返回情况 Arduino实验开源代码之二 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十五:HB100微波雷达感应模块 10.525GHz多普勒探测器探头传感器 项目:测试HB100模块,输入改为模拟口A0 */ int analogPin = A0; float sensorValue; int val; void setup() { Serial.begin(9600); } void loop() { sensorValue = analogRead(analogPin); Serial.println(); Serial.println(sensorValue); val= map(sensorValue,0,1023,0,99); Serial.println(val); sensorValue=0; delay(100); } 测试情况,把输入改为模拟口A0,接收的信号非常弱(还有一种可能就是这模块坏的) Arduino实验开源代码之三 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十五:HB100微波雷达感应模块 10.525GHz多普勒探测器探头传感器 项目:测试HB100模块,输入改为模拟口A0,三组数据输出 */ #define RADAR A0 // RADAR inut is attached to A0 #define MICRODELAY 100 // 100microseconds ~10000hz #define MAXINDEX 1024 // 10 bits #define TOPINDEX 1023 // 10 bits byte collect ; int mean; int minimum; int maximum; int hysteresis; // 1/16 of max-min bool currentphase; // are value above mean + hysteresis; int lastnull; // index for last null passing value int prevnull; // index for previous null passing value int deltaindex; int deltadeltaindex; int index; bool phasechange = false; void setup() { // put your setup code here, to run once: Serial.begin(115200); while (!Serial) {} index = 0; mean = 0; maximum = 255; minimum = 0; hysteresis = 0; currentphase = false; lastnull = 0; prevnull = 0; Serial.print("deltadeltaindex"); Serial.print("\t"); Serial.print("deltaindex"); Serial.print("\t"); Serial.println("delta"); } void loop() { int newVal = analogRead(RADAR); // Raw reading from amplified radar 2); 2); collect = newVal; minimum = newVal < minimum ? newVal : minimum + 1; maximum ? newVal : maximum - 1; 5; (mean + hysteresis)) { if(false == currentphase) { currentphase = true; phasechange = true; } } else if(newVal < (mean - hysteresis)) { if(currentphase) { currentphase = false; phasechange = true; } } if(phasechange) { prevnull = lastnull; lastnull = index; lastnull) ? (lastnull - prevnull + MAXINDEX) : (lastnull - prevnull); deltadeltaindex = abs(deltaindex - delta); deltaindex = delta; Serial.print(deltadeltaindex); Serial.print("\t"); Serial.print(deltaindex); Serial.print("\t"); Serial.println(delta); } index = index == TOPINDEX ? 0 : index + 1; phasechange = false; //delayMicroseconds(10); } 实验串口返回情况
  • 热度 9
    2023-6-18 11:10
    1746 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(114)---US-015高分辨超声波模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百一十四:US-015 高分辨超声波测距模块 超声波传感器 US-020升级版 超声波 是一种频率高于20000赫兹的声波,它的方向性好,穿透能力强,易于获得较集中的声能,在水中传播距离远,可用于测距、测速、清洗、焊接、碎石、杀菌消毒等。在医学、军事、工业、农业上有很多的应用。超声波因其频率下限大于人的听觉上限而得名。科学家们将每秒钟振动的次数称为声音的频率,它的单位是赫兹(Hz)。我们人类耳朵能听到的声波频率为20Hz-20000Hz。因此,我们把频率高于20000赫兹的声波称为“超声波”。通常用于医学诊断的超声波频率为1兆赫兹-30兆赫兹。 拉扎罗·斯帕拉捷(Lazzaro Spallanzani,1729—1799) 在人类对自然的认识还没有达到一定高度之前,人们理所当然地认为所有的动物都是靠眼睛来识别物体的方向和位置的。后来事实证明,这种想法是错误的。首先揭开这个秘密的是拉扎罗·斯帕拉捷(Lazzaro Spallanzani,1729—1799),他是意大利著名的博物学家、生理学家和实验生理学家。他曾经做过四个关于蝙蝠的实验,揭示了蝙蝠靠耳朵而不是眼睛识别物体和捕捉猎物的事实,为超声波的研究提供了理论基础。 斯帕拉捷习惯晚饭后在附近的街道上散步,他常常看到,很多蝙蝠灵活地在空中飞来飞去,能在非常黑暗的条件下灵巧地躲过各种障碍物去捕捉飞虫,这个现象引起了他的好奇,蝙蝠凭什么特殊本领在夜空中自由自在地飞行呢,难道是因为它有一双可以在黑夜中洞悉一切的敏锐眼睛吗? 为了验证自己的猜想,他做了第一个蝙蝠实验。1793年夏季的一个夜晚,斯帕拉捷走出家门,放飞了关在笼子里做实验用的几只蝙蝠。只见蝙蝠们抖动着带有薄膜的肢翼,轻盈地飞向夜空,并发出自由自在的“吱吱”叫声。斯帕拉捷见状,不禁大叫出声,因为在放飞蝙蝠之前,他已经蒙上了蝙蝠的双眼,“蒙上眼的蝙蝠怎么能如此敏捷地飞翔呢?”他感到百思不得其解,下决心一定要解开这个谜。 斯帕拉捷想到: “既然不是靠眼睛来辨别障碍物,那么会不会是鼻子在发挥作用呢?”于是他又做了第二个实验。这一次他把蝙蝠的鼻子堵住,在夜晚放了出去,结果,蝙蝠还是照样飞得轻松自如。“既然眼睛和鼻子都完全没有对蝙蝠的飞翔产生影响,那么蝙蝠又是依靠什么来躲避障碍物和捕捉食物呢?奥秘会不会在翅膀上呢?”于是斯帕拉捷又做了第三次实验。他这次在蝙蝠的翅膀上涂了一层油漆。然而,和前两次一样,这也丝毫没有影响到它们的飞行。“眼睛、鼻子、翅膀都不是蝙蝠辨别物体的因素,那到底会是什么呢?”斯帕拉捷感到非常困惑。最后,斯帕拉捷又把蝙蝠的耳朵塞住,进行了第四次实验。这一次,飞上天的蝙蝠再也没有了之前矫健的身手,而是和一个喝醉酒的人一样,东碰西撞的,很快就跌了下来。斯帕拉捷这才恍然大悟,原来,蝙蝠是靠听觉来确定方向,捕捉目标的。 斯帕拉捷的新发现引起了人们的震动,这完全打破了人们的常规认识。从此,许多科学家进一步研究了这个课题。最后,人们终于弄清楚: 蝙蝠是利用超声波(频率高于20000Hz的声波)在夜间导航的(图3.21)。它的喉头发出一种超过人耳听阈的高频声波,这种声波沿着直线传播,一旦碰到物体就迅速返回来,它们用耳朵接收了这种返回来的超声波,使它们能够做出准确的判断,引导它们飞行。超声波的科学原理现已广泛地运用到航海探测、导航和医学中。 超声波测距原理 超声波测距原理是在超声波发射装置发出超声波,它的根据是接收器接到超声波时的时间差,与雷达测距原理相似。 超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。(超声波在空气中的传播速度为340m/s,根据计时器记录的时间t(秒),就可以计算出发射点距障碍物的距离(s),即:s=340t/2) US-015超声波测距模块 US-015是目前市场上分辨率最高,重复测量一致性最好的超声波测距模块;US-015的分辨率高于1mm,可达0.5mm,测距精度高;重复测量一致性好,测距稳定可靠。US-015超声波测距模块可实现2cm~4m的非接触测距功能,供电电压为5V,工作电流为2.2mA,支持GPIO通信模式,工作稳定可靠。 Arduino实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十四:US-015 高分辨超声波测距模块 超声波传感器 US-020升级版 项目:测试距离(单位mm) 原理:声波在空气中传播速度为340m/s,根据计时器记录时间t,即可算出发射点距离障碍物的距离S,即S=340m/s*t/2,这就是所谓的时间差测距法。 */ unsigned int EchoPin = 2; // connect Pin 2(Arduino digital io) to Echo at US-015 unsigned int TrigPin = 3; // connect Pin 3(Arduino digital io) to Trig at US-015 unsigned long Time_Echo_us = 0; unsigned long Len_mm = 0; void setup(){ //Initialize Serial.begin(9600); //Serial: output result to Serial monitor pinMode(EchoPin, INPUT); //Set EchoPin as input, to receive measure result from US-015 10us) } void loop(){ digitalWrite(TrigPin, HIGH); //begin to send a high pulse, then US-015 begin to measure the distance 10us) digitalWrite(TrigPin, LOW); //end this high pulse Time_Echo_us = pulseIn(EchoPin, HIGH); //calculate the pulse width at EchoPin, if((Time_Echo_us 1)) //a valid pulse width should be between (1, 60000). { Len_mm = (Time_Echo_us*34/100)/2; //calculate the distance by pulse width, Len_mm = (Time_Echo_us * 0.34mm/us) / 2 (mm) Serial.print("Present Distance is: "); //output result to Serial monitor Serial.print(Len_mm, DEC); //output result to Serial monitor Serial.println("mm"); //output result to Serial monitor } delay(1000); //take a measurement every second (1000ms) } 实验串口返回情况 Arduino实验开源代码之二 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十四:US-015 高分辨超声波测距模块 超声波传感器 US-020升级版 项目:超声波测距(单位cm) */ const int TrigPin = 3; //发出超声波 const int EchoPin = 2; //收到反射回来的超声波 float cm; //因为测得的距离是浮点型的 void setup(){ Serial.begin(9600); //设置波特率 pinMode(TrigPin, OUTPUT); pinMode(EchoPin, INPUT); } void loop(){ digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin delayMicroseconds(2); // delayMicroseconds在更小的时间内延时准确 digitalWrite(TrigPin, HIGH); delayMicroseconds(10); digitalWrite(TrigPin, LOW); //通过这里控制超声波的发射 cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm cm = (int(cm * 100.0)) / 100.0; //保留两位小数 Serial.print("Distance:"); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(1000); } 实验串口返回情况 Arduino实验场景图 实验开源图形编程(Mind+、编玩边学) 实验串口返回情况 实验开源图形编程(Mind+、编玩边学) 实验开源仿真编程(Linkboy V4.62)
  • 热度 8
    2023-6-17 09:10
    2356 次阅读|
    0 个评论
    【雕爷学编程】Arduino动手做(113)---5110液晶屏模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百一十三: 蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD PCD8544 是一块低功耗的CMOS LCD 控制驱动器,设计为驱动48 行84 列的图形显示。所有必须的显示功能集成在一块芯片上,包括LCD 电压及偏置电压发生器,只须很少外部元件且功耗小。 PCD8544 特征 单芯片 LCD 控制/驱动 48 行,84 列输出 显示数据 RAM 48*84 位 芯片集成: ——LCD 电压发生器(也可以使用外部电压供应) ——LCD偏置电压发生器 ——振荡器不需要外接元件(也可以使用外部时钟) 外部 RES(复位)输入引脚 串行界面最高 4.0Mbits/S CMOS 兼容输入 混合速率:48 逻辑电压范围 VDD 到 VSS:2.7V~3.3V 显示电压范围 VLCD 到 VSS: ——6.0~8.5V LCD内部电压发生器(充许电压发生器) ——6.0~9.0V LCD 外部电压供应(电压发生器关闭) 低功耗,适用于电池供电系统 关于 VLCD的温度补偿 使用温度范围:-25~70℃ 这块屏原来是20多年前发布的诺基亚5110手机的屏幕 5110液晶屏模块特点 ●84x48 的点阵LCD,可以显示4 行汉字, ●采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有8条。支持多种串行通信协议(如AVR 单片机的SPI、MCS51 的串口模式0等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。 ●可通过导电胶连接模块与印制版,而不用连接电缆,用模块上的金属钩可将模块固定到印制板上,因而非常便于安装和更换。 ●LCD 控制器/驱动器芯片已绑定到LCD 晶片上,模块的体积很小。 ●采用低电压供电,正常显示时的工作电流在200μA 以下,且具有掉电模式。 5110液晶屏模块底板为本站设计,四角有定位孔,同时提供上下两排接线端口,排列如下: RST ——复位 CE —— 片选 DC —— 数据/指令选择 DIN —— 串行数据线 CLK —— 串行时钟线 VCC —— 电源输入(3.3v和5v均可,经过实验验证,没有问题) BL —— 背光控制端 GND —— 地线 接口为串行SPI接口 工作原理 利用PC上的16×16点阵汉字库,提取后将点阵文件存入ROM,直接利用PC中汉字内码作为单片机系统的编码(不再形成新的汉字编码)。在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果。对于显示英文操作,由于英文字母种类很少,只需要8位(一字节)即可。而对于中文,常用却有6000以上,将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。而剩下的低128位则留给英文字符使用,即英文的内码。那么,得到了汉字的内码后,还仅是一组数字,那又如何在屏幕上去显示呢?这就涉及到文字的字模,字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,它是用数字的各位信息来记载英文或汉字的形状,如英文的“A”在字模的记载方式如图 Arduino接线示意图 Arduino实验开源代码 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD 1、安装“LCD5110_Basic”库(下载链接 http://www.rinkydinkelectronics. ... e=LCD5110_Basic.zip) 2、项目测试 :点亮模块 3、模块接线 Nokia 5110 Arduino RST 6 CE 7 DC 5 DIN 4 CLK 3 VCC 5V BL 3V3 GND GND */ #include LCD5110 myGLCD(3,4,5,6,7); extern uint8_t SmallFont ; extern uint8_t BigNumbers 常用函数 LCD5110(SCK,MOSI,DC,RST,CS);//设置引脚 Usage: LCD5110 myGLCD(8,9,10,11,12); InitLCD( );//初始化 Usage:myGLCD.initLCD(); setContrast(contrast);//设置对比度(0-127) Usage:myGLCD.setContrast(70); enableSleep();//设置睡眠状态 Usage:myGLCD.enableSleep(); disableSleep();//关闭睡眠状态 Usage:myGLCD.disableSleep(); clrScr();//清屏 Usage:myGLCD.clrScr(); clrRow(row ]);//清除行的一部分或者整行 Usage:myGLCD.clrRow(5,42); invert(mode);//倒置 Usage:myGLCD.invert(true); print(st,x,y);//显示字符串 Usage:myGLCD.print("Hello Wrold", CENTER, 0); printNumI(num,x,y ]);//显示整数 Usage:myGLCD.printNumI(num, CENTER, 0); printNumF(num,dec,x,y ]]);//显示小数 Usage:myGLCD.printNumF(num, 3,CENTER, 0); setFont(fontname);//设置字体大小 Usage:myGLCD.setFont(SmallFont); drawBitmap(x,y,data,sx,sy);//用于显示自定义字符 Usage:myGLCD.drawBitmap(0,0,bitmap,32,32); Arduino实验场景图 Arduino实验开源代码之二 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD 1、安装 "U8glib.h"库-工具-管理库-搜索-安装 2、项目测试 :简易数字示波器(显示X\Y坐标体系) 3、模块接线 Nokia 5110 Arduino RST 6 CE 7 DC 5 DIN 4 CLK 3 VCC 5V BL 3V3 GND GND */ #include "U8glib.h" int x,y; int Buffer ; U8GLIB_PCD8544 u8g(3, 4, 99, 5, 6); // SPI Com: SCK = 3, MOSI = 4, CS = 接地, dc = 5, Reset = 6 void setup() { analogReference(INTERNAL); //ADC使用单片机内部1.1V基准 u8g.setContrast(100);//设置对比度0-255 } void loop() { for(x = 0;x < 84;x++) //信号采样 4); u8g.firstPage(); //清屏 do //显示 { for(x = 0;x < 83;x++) u8g.drawLine(x,Buffer ,x,Buffer ); //画相邻两点连线 u8g.drawLine(42,0,42,47); // 画x坐标轴 u8g.drawLine(0,24,84,24); // 画y坐标轴 for(x=2;x<84;x+=8) //画x坐标轴刻度 u8g.drawLine(x,23,x,25); for(x=0;x<48;x+=8) //画y坐标轴刻度 u8g.drawLine(41,x,43,x); u8g.drawFrame(0,0,84,48); //画边框 } while(u8g.nextPage( )); delay(1000); } Arduino实验场景图 Arduino实验开源代码之三 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD 1、安装“LCD5110_Basic”库(下载链接 http://www.rinkydinkelectronics. ... e=LCD5110_Basic.zip) 2、项目测试 :尝试输出汉字“国庆快乐” 3、模块接线 Nokia 5110 Arduino RST 6 CE 7 DC 5 DIN 4 CLK 3 VCC 5V BL 3V3 GND GND */ int LCD_CE=7; int LCD_RST=6; int SCLK=3; int SDIN=4; int LCD_DC=5; //****************************定义ASCII字符**********************// /********************************** 6 x 8 font 1 pixel space at left and bottom index = ASCII - 32 ***********************************/ const unsigned char font6x8 = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // % { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines }; static const byte hanzi12x16 ={ {0x00,0x00,0xFC,0x02,0x8A,0xF2,0x8A,0x8A,0x0A,0x02,0xFC,0x00, 0x00,0x00,0x3F,0x28,0x28,0x2F,0x28,0x2B,0x2C,0x20,0x1F,0x00}/*"国"0*/ ,{0x00,0x00,0xF8,0x88,0x88,0x88,0xFC,0x88,0x88,0x88,0x88,0x00, 0xC0,0x38,0x87,0x40,0x20,0x18,0x07,0x06,0x18,0x20,0x40,0x00}/*"庆"1*/ ,{0x00,0xE0,0xFE,0x20,0x40,0x10,0xFE,0x12,0x10,0xF0,0x00,0x00, 0x00,0x00,0x7F,0x80,0x40,0x31,0x0F,0x06,0x19,0x21,0x41,0x00}/*"快"2*/ ,{0x00,0x00,0xF8,0x88,0x84,0x84,0xF4,0x84,0x84,0x80,0x80,0x00, 0x00,0x20,0x11,0x0C,0x00,0x40,0x7F,0x00,0x04,0x18,0x30,0x00}/*"乐"3*/ }; /************************LCD初始化函数********************************/ void LCD_init(void) { //先设置为输出 pinMode(SCLK,OUTPUT); pinMode(SDIN,OUTPUT); pinMode(LCD_DC,OUTPUT); pinMode(LCD_CE,OUTPUT); pinMode(LCD_RST,OUTPUT); // 产生一个让LCD复位的低电平脉冲 digitalWrite( LCD_RST, LOW); delayMicroseconds(1); digitalWrite( LCD_RST, HIGH); // 关闭LCD digitalWrite( LCD_CE, LOW); delayMicroseconds(1); // 使能LCD digitalWrite( LCD_CE, HIGH); //LCD_CE = 1; delayMicroseconds(1); LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式 LCD_write_byte(0xc8, 0); // 设置偏置电压 LCD_write_byte(0x06, 0); // 温度校正 LCD_write_byte(0x13, 0); // 1:48 LCD_write_byte(0x20, 0); // 使用基本命令 LCD_clear(); // 清屏 LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示 // 关闭LCD digitalWrite( LCD_CE, LOW); //LCD_CE = 0; } /************************LCD清屏函数*******************************/ void LCD_clear(void) { unsigned int i; LCD_write_byte(0x0c, 0); LCD_write_byte(0x80, 0); for (i=0; i<504; i++) { LCD_write_byte(0, 1); } } /*************************设置字符位置函数**************************/ void LCD_set_XY(unsigned char X, unsigned char Y) { LCD_write_byte(0x40 | Y, 0);// column LCD_write_byte(0x80 | X, 0);// row } /*************************ASCII字符显示函数*************************/ void LCD_write_char(unsigned char c) { unsigned char line; c -= 32; for (line=0; line<6; line++) { LCD_write_byte(font6x8 , 1); } } /*******************************************************************/ /*------------------------------------------------- LCD_write_english_String : 英文字符串显示函数 输入参数:*s :英文字符串指针; X、Y : 显示字符串的位置,x 0-83 ,y 0-5 --------------------------------------------------*/ void LCD_write_english_string(unsigned char X,unsigned char Y,char *s) { LCD_set_XY(X,Y); while (*s) { LCD_write_char(*s); s++; } } /******************************************************************/ /*--------------------------------------------- LCD_write_byte : 写数据到LCD 输入参数:data :写入的数据; command :写数据/命令选择; ---------------------------------------------*/ void LCD_write_byte(unsigned char dat, unsigned char command) { unsigned char i; digitalWrite( LCD_CE, LOW); // 使能LCD_CE = 0 if (command == 0) { digitalWrite( LCD_DC, LOW);// 传送命令 LCD_DC = 0; } else { digitalWrite( LCD_DC, HIGH);// 传送数据LCD_DC = 1; } for(i=0;i<8;i++) { if(dat&0x80) { digitalWrite( SDIN, HIGH);//SDIN = 1; } else { digitalWrite( SDIN, LOW);//SDIN = 0; } digitalWrite( SCLK, LOW);//SCLK = 0; dat = dat << 1; digitalWrite( SCLK, HIGH);//SCLK = 1; } digitalWrite( LCD_CE, HIGH);//LCD_CE = 1; } /******************************************************************/ /*--------------------------------------------- void LCD_write_hanzi : 汉字显示子函数 输入参数:row :写入汉字列 page :写入汉字行 row :写入汉字 ; ---------------------------------------------*/ void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char dd) //row:列 page:页 dd:字符 { unsigned char i; LCD_set_XY(row*8, page);// 列,页 for(i=0; i<12;i++) { LCD_write_byte(hanzi12x16 ,1); } LCD_set_XY(row*8, page+1);// 列,页 for(i=12; i<24;i++) { LCD_write_byte(hanzi12x16 ,1); } } void setup() { LCD_init();//初始化液晶 LCD_clear(); delay(10) ; } void loop() { LCD_write_hanzi(2,0,0) ; LCD_write_hanzi(4,0,1) ; LCD_write_hanzi(6,0,2) ; LCD_write_hanzi(8,0,3) ; delay(1000) ; } Arduino实验场景图 实验开源图形编程 Arduino实验开源代码之四 /* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百一十三:蓝色诺基亚5110屏 LCD液晶屏模块 兼容3310 LCD 1、安装 "U8glib.h"库-工具-管理库-搜索-安装 2、项目测试 :简易数字示波器之二 3、模块接线 Nokia 5110 Arduino RST 6 CE 7 DC 5 DIN 4 CLK 3 VCC 5V BL 3V3 GND GND */ #include "U8glib.h" //U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8 U8GLIB_PCD8544 u8g(3, 4, 7, 5, 6); // SPI Com: clk = 3, din = 4, ce = 7, dc = 5, rst = 6 int x, y; int v0, v1; int Buffer ;//48*84的屏 void setup() { analogReference(INTERNAL); //ADC使用单片机内部1.1V基准 u8g.setContrast(100);//设置对比度0-255 u8g.firstPage(); do { u8g.setFont(u8g_font_helvB14); u8g.drawStr(0, 14, "V="); u8g.drawStr(26, 14, "12.34"); u8g.drawStr(0, 30, "A="); u8g.drawStr(26, 30, "56.789"); u8g.setFont(u8g_font_helvR08); u8g.drawStr( 0, 39, "T="); u8g.drawStr(10, 39, "12.34"); u8g.drawStr(37, 39, "\260C"); u8g.drawStr(52, 39, "fan on"); } while ( u8g.nextPage() ); delay(2000); } void loop( ) { do { v0 = analogRead(A0); } 10); for (x = 0; x < 84; x++) //信号采样 5); u8g.firstPage(); //清屏 do//显示 { for (x = 0; x < 83; x++) u8g.drawLine(x, Buffer , x, Buffer ); //画相邻两点连线 u8g.drawLine(42, 0, 42, 47); // 画坐标轴 u8g.drawLine(0, 24, 84, 24); for (x = 0; x < 84; x += 21) //画坐标轴刻度 u8g.drawLine(x, 23, x, 25); for (x = 0; x < 48; x += 8) u8g.drawLine(41, x, 43, x); u8g.drawFrame(0, 0, 84, 48); //画边框 } while (u8g.nextPage( )); } Arduino实验场景图