在这里插入图片描述

吃饱喝足,回学校了。今天到了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数据线连接你的电脑和板子
然后打开设备管理器
在这里插入图片描述
在这里插入图片描述
如果在端口中能看到这个东西,就说明已经成功了,你的电脑能识别出你的板子。

现在我已经成功了,那我们就开始第一个实验吧!

一、双色LED实验

先看一下双色灯的原理图和代码吧

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端),达到红绿轮流亮的效果。
注:在编译器界面右上角可以打开助手
在这里插入图片描述

这个放大镜就是了

2、RGBLED实验

原理跟上一个差不多,没什么好讲的
元件的电路原理图展示一下
在这里插入图片描述
也就是说要给rgb三个脚不同的电压来控制这个器件中红绿蓝三原色的配比,以表现出不同的电压。
一种思路是设置一个color函数,传三个数据进去,三个数据分别表示r、g、b的电压,

color(int r,int g,int b)
{
analogWrite(rpin,r);
analogWrite(gpin,g);
analogWrite(bpin,b);
}

在这里插入图片描述
也是很轻松就完成了

3、七彩LED灯

七彩更简单,只需要将元件连接正负极就可以了,然后就会自动闪烁
在这里插入图片描述

舍友已经睡觉了,不能打扰人家,我到客厅继续学习了。
在这里插入图片描述
虽然非常简单,写给新手看应该也能帮助到人吧。

4、继电器实验

继电器我们在中学里面就学过,原理是利用磁力控制开关的开闭,这套里面的继电器模块能用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型传感器中间有东西会触发,因为挡住了发射器发出的光。代码用的是实验六中的代码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
今天就到这里啦

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐