吃饱喝足,回学校了。今天到了arduino开发板和一整套学习工具,马上就回宿舍开始学习,直播更新
回到宿舍吃点补品就开始啦。
首先是开箱,整个箱子的图片就不拍了,是一个塑料盒子。里面包含一本教材和各种硬件材料。
上面图中就是一部分硬件材料,包含电池/纽扣电池、诸多杜邦线、一块面包板和一块应该是用来定位的板子。
然后就是这里面的一块核心开发板,这块板是arduino的升级版,能兼容arduino,相当于是个多了几个功能的arduino plus,它的名字叫ZYDUINO。
还有附带的两条连接线,一条是usb数据线,用来供电/下载;另一条是带电池扣的DC电源供电线。
上面是第一包零件包
根据其中的编号分别是
1、液晶模块
2、超声波模块
3、AD/DA转换模块
4、显示屏
5、湿度传感器模块
6、角度舵机
7、时钟传感模块
8、气压传感器模块
9、温度传感器模块
10、射频读卡模块
11、不知道是什么
12、风扇
现在是20:17,从发帖到现在居然已经过去一小时了,深感时间流逝之快,突然有点事情,等会再更。
,事情办完了,现在是20:44,继续学习。
接下来一边吃石榴,一边打开了第二包零件,里面有27个电子元件,我们分两张图来说明
图中按编号来分别是:
1、红外遥控器
2、烟雾传感器
3、电位器传感器
4、继电器
5、火焰传感器
6、电位器传感器
7、倾斜开关传感器
8、声音传感器
9、雨滴传感器
10、U型光电传感器
11、有源蜂鸣器
12、360旋转传感器
1、振动传感器
2、激光传感器
3、轻触开关
4、光敏电阻传感器
5、红外避障
6、无源蜂鸣器
7、双色LED灯
8、IR接受模块
9、RGB LED传感器
10、干簧管传感器
11、红外循迹模块
12、触摸传感器
13、模拟温度传感器
14、七彩LED灯
15、霍尔开关传感器
上面三组电子模块,大多都是传感器,也符合单片机的基本工作流程:接受信息——处理信息——发出信息,拆这些电子模块还真花了不少时间,因为每一个都是单独装的,现在已经来到了九点一刻。
接下来就是开发软件的下载了,arduino有专门的开发软件叫做arduino IDE,可以在官方网站https://www.arduino.cc/en/Main/Software免费下载。下面就讲一讲如何安装arduino IDE
第一步在这个地方选择你需要的文件下载,我下载的是windows版本的软件压缩包,点进去后会问你想不想要捐款,不要把界面误认为购买了哦。
下载地有点慢,趁这个时候,去洗个澡。不过下载确实很慢,要一个多小时,洗完澡还没下载完
这个是解压后的文件,双击图中这个arduino.exe文件就可以用了,当然这个仅限于电脑上已经有JAVA驱动的同学,如果没有呢,那可以下载安装程序,会自动安装对应的驱动。
对于ZYduino开发板,还需要下载另外的驱动CH341SER.exe,在商家提供的资料里面有,当然在网上也能直接找到
进去点安装就可以了
这个时候就用USB数据线连接你的电脑和板子
然后打开设备管理器
如果在端口中能看到这个东西,就说明已经成功了,你的电脑能识别出你的板子。
现在我已经成功了,那我们就开始第一个实验吧!
先看一下双色灯的原理图和代码吧
int redpin=11;
int greenpin=10;
int val=0;
//设定两个引脚,初始化val值
void setup() {
pinMode(redpin,OUTPUT);
pinMode(greenpin,OUTPUT);
//设定引脚模式,表示10,11串口都是输出电的
Serial.begin(9600);
//设定波特率
}
//以下两个for循环表示val从0累加到255,再从255回到0
//println表示在助手中打印val的值
//analogWrite表示在这个口输出某电压,电压值0到5v,对应val0到255
//delay函数表示延迟多少毫秒,在延迟固定的时间后进入下一次循环
void loop() {
for(val=255;val>0;val--)
{
analogWrite(redpin,val);
analogWrite(greenpin,255-val);
Serial.println(val,DEC);
delay(30);
}
for(val=0;val<255;val++)
{
analogWrite(redpin,val);
analogWrite(greenpin,255-val);
Serial.println(val,DEC);
delay(30);
}
}
看了注释之后大家应该明白了,这个程序的意思就是让10,11引脚输出高电压,只不过一个升高另一个就降低,两个以同样的速度升高降低。
我们再来看一下双色二极管的电路原理图
这个电路图非常简单,就不多做解释了。也就是说当R端连接11引脚,G端连接10引脚时,两个二极管各自两端的电压会从高到低再从低到高变化,当高于导通电压时,二极管发光,这时另一个二极管电压可能不足导通电压,此时表现出红或绿色。当val值在255/2左右时,可能两个二极管都导通,出现混色的情况。
这个实验正是这样连接,同时让K端接地(GND端),达到红绿轮流亮的效果。
注:在编译器界面右上角可以打开助手
这个放大镜就是了
原理跟上一个差不多,没什么好讲的
元件的电路原理图展示一下
也就是说要给rgb三个脚不同的电压来控制这个器件中红绿蓝三原色的配比,以表现出不同的电压。
一种思路是设置一个color函数,传三个数据进去,三个数据分别表示r、g、b的电压,
color(int r,int g,int b)
{
analogWrite(rpin,r);
analogWrite(gpin,g);
analogWrite(bpin,b);
}
七彩更简单,只需要将元件连接正负极就可以了,然后就会自动闪烁
舍友已经睡觉了,不能打扰人家,我到客厅继续学习了。
虽然非常简单,写给新手看应该也能帮助到人吧。
继电器我们在中学里面就学过,原理是利用磁力控制开关的开闭,这套里面的继电器模块能用led灯展示各种运行状态。
上面是这个继电器模块的原理图
可以看到就算不加信号端SIG,D0灯也会亮,表示元件正常通电。当SIG输入高电平时,三极管导通并且给线圈通电,触发继电器,同时D1灯发光;输入低电平时,不会触发,继电器复位。
int delaypin=7;
void setup() {
pinMode(delaypin,OUTPUT);
}
void loop() {
digitalWrite(delaypin,HIGH);
delay(2000);
digitalWrite(delaypin,LOW);
delay(500);
}
通过这样的代码可以听出两种不同的状态(一个时间长,一个时间短)。设置的7号端口就是信号端,连接SIG(或者in),另外两个vcc,gnd(dc+,dc-)则按惯例连接电池正负极。
这样继电器控制就做好了。
已经一点了,就先睡觉啦。
早起的鸟儿有虫吃,可惜起床时不知怎么已经十点,计划已经用不了了。那就干脆吃个华夫饼,来学一学arduino吧!
书接上文,上次的看完相当于学过并实践用过arduino!(一) ——复现arduino开发板的众多小实验在此处可以直接点击观看。
先回顾一下上次的内容。我买了一个arduino的实验箱,里面有各种电子元件,用来完成arduino的各种小实验。上次带大家看了一下箱子里面到底有哪些东西,下载了一下arduino的开发软件,并且完成了四个小实验。那么今天就是接下去推进其他的实验。
首先开始之前,是传统补品环节。
吃完就开始学习!
这个实验其实难住了我,因为电路原理图看不懂,整个电子元件的结构也完全不知道。这个资料也实在是太简略了!!!
不过如图所示,要使用这个电子元件只需要接两根线就行,VCC和SIG,那么其实很容易想到的是,这个元件使用SIG的高低电平来控制。所以马上我就来验证一下。
int laserpin=7;
void setup() {
pinMode(laserpin,OUTPUT);
}
void loop() {
digitalWrite(laserpin,LOW);
delay(2000);
digitalWrite(laserpin,HIGH);
delay(500);
}
把7号引脚设置为输出,并且循环输出**(loop的意思为循环,arduino自带的loop函数会一次又一次输出其中的内容)**,同时设置低电平的持续时间为2秒,高电平为0.5秒,用来判断这个元件如何使用。
把VCC接上元件上的“s”端,7号口接上元件的“-”端,就能正常发出激光了,经过检验,是低电平发出激光高电平不发出激光,这也与常理一致。
接下来用这个元件表达一下摩斯电码。摩斯电码可将信息用点、线表示,我们就用元件的开关来表示1,0。
整个程序的结构是:
1
.在头文件中将字母和数字各归为不同的数组,将26个字母用数组的1到26个值表示,这26个值就是各字母的莫斯电码。
#ifndef __RETRIEVAL_H__
#define __RETRIEVAL_H__
char* letters[] = {
".-", //A
"-...", //B
"-.-.", //C
"-..", //D
".", //E
"..-.", //F
"--.", //G
"....", //H
"..", //I
".---", //J
"-.-", //K
".-..", //L
"--", //M
"-.", //N
"---", //O
".--.", //P
"--.-", //Q
".-.", //R
"...", //S
"-", //T
"..-", //U
"...-", //V
".--", //W
"-..-", //X
"-.--", //Y
"--.." //Z
};
char* numbers[] = {
"-----", //0
".----", //1
"..---", //2
"...--", //3
"....-", //4
".....", //5
"-....", //6
"--...", //7
"---..", //8
"----." //9
};
#endif
2
用函数3把输入的字母和字母与头文件中的对应,比如输入B赋给ch,头文件中对应的应该是letters数组的第二个值,也就是letters[1],然后利用ascii码,用ch-'A’来得到1,同理也可以通过ch-‘A’,或ch-‘a’,或ch-'0’调用出头文件的每一个摩斯电码。
void morse_signal(char ch)//定义函数3,把输入字母转为头文件中的内容
{
if(ch>='a'&&ch<='z'){
flash_sequence(letters[ch-'a']);//letters,numbers是定义在头文件中的数组
}
else if(ch>='A'&&ch<='Z'){
flash_sequence(letters[ch-'A']);
}
else if(ch>='0'&&ch<='9'){
flash_sequence(numbers[ch-'0']);
}
else if(ch==' '){
delay(800);
}
}
3
用函数二将某个值表示的一串点线码读取出来,传给函数一。读取的方式是:这个点线码原本是一串char数据,函数二将这串数据中每一个点/线的值分开,保存在一个数组中,如’. . - - -’,就保存为 [ ‘.’ , ‘.’ , ‘-’ , ‘-’ , ‘-’ ]
void flash_sequence(char*sequence)//定义函数2,把函数3发来的信息发给函数1
{
int i=0;
while(sequence[i]!=NULL)//逐个读取数组中的各个值并且执行函数1
{
flash_dot(sequence[i]);
i++;
}
delay(600);
}
4
用函数一将点/线用激光表示出来
void flash_dot(char cha)
{
digitalWrite(laser_pin,LOW);//定义信号发送的函数1
if(cha=='.')
{
delay(200);//如果是点发光时间短一些
}
else
{
delay(600);//如果是线发光时间长一些
}
digitalWrite(laser_pin,HIGH);
delay(200);//每个点线信号之间的停顿
}
5
最后就是常规的setup和loop函数体
#include"retrieval.h"//这个头文件定义了各个字母的点线表示,存在数组中
int laser_pin=7;
void setup() {
pinMode(laser_pin,OUTPUT);
Serial.begin(9600);
}
void loop() {
char ch = 0;
//下面是available和read函数的常用用法,这个判断式的意思是如果串口给单片机发消息了,就读出来并且保存到ch上
if(Serial.available()>0)
{
ch = Serial.read();
}
morse_signal(ch);//把ch传进函数3
}
现在已经下午三点半了,去上一下习题课,回来继续更。
,上完了两节极度无聊的习题课,回到宿舍来更新了。
三个引脚分别接VCC,SIG, GND。原理是开关会连接VCC与GND中间的一条电路,这条电路与SIG相连,这条电路接通时给SIG输出高电平(boolean类值的“1”),反之输出低电平。本实验通过开发板上面自带的LED灯验证。正常通电情况下LED灯亮,当13口输出高电平时LED灯会熄灭。故可以通过按下按钮熄灭此灯。
const int key_pin=7;
const int led_pin=13;
void setup() {
pinMode(key_pin,INPUT);
pinMode(led_pin,OUTPUT);
}
void loop() {
boolean value= digitalRead(key_pin);
if(value==1){
digitalWrite(led_pin,HIGH);
}
else{
digitalWrite(led_pin,LOW);
}
}
上面的代码与上述思路一致,由于简单就不作解说。
连完线之后,也确实达到了预期的效果。
这个实验的大体思路与实验六一致,只不过实验六和实验七用的开关不一样而已。代码用的是实验六中的代码。
上面是电路图(请横置设备观看),tlit是倾斜的意思。根据电路图,LED1-D0是常亮的;当开关触发的时候LED1-D2会亮,此时SIG输出高电平。本实验同样用高低电平来控制13口的LED。
如图,倾斜时有一个灯不会亮,此时arduino上的13口灯亮着(忘记拍了)。放平时输出高电平,灯13熄灭。
晚上又要去上课了,先走一步。。。
现在回到宿舍了,准备接下来学一个小时,目标是完成五个小实验。
与前两个开关很相似,开关触发的条件是震动。直接跳过。代码用的是实验六中的代码。
与前三个很相似,开关触发的条件是干簧管附近有磁铁,里面的簧片就会变化,然后联通电路。代码还是实验六中的。
实验十一 U型光电传感器
其实这个传感器也与之前几个很相似,触发的条件是U型传感器中间有东西会触发,因为挡住了发射器发出的光。代码用的是实验六中的代码。
在这里插入图片描述
今天就到这里啦