一.蜂鸣器输出实验

1.源代码

int buzzer=2;//设置控制蜂鸣器的数字口对应板子上2口
void setup() 
{ 
  pinMode(buzzer,OUTPUT);//设置对应的输出模式
} 
void loop() 
{ 
  unsigned char i,j;//定义变量
  while(1) 
 { 
    for(i=0;i<50;i++)//输出一个频率的声音
    { 
      digitalWrite(buzzer,HIGH);//高电平打开蜂鸣器发声
      delay(1);//延时1ms 通过这个延时可以改变声音的频率不同
      digitalWrite(buzzer,LOW);//低电平关闭蜂鸣器不发声音
      delay(1);//延时ms 通过这个延时可以改变声音的频率不同
    } 
    for(i=0;i<50;i++)//输出另一个频率癿声音 
    { 
      digitalWrite(buzzer,HIGH);//高电平打开蜂鸣器发声
      delay(5);//延时2ms 通过这个延时可以改变声音的频率不同
      digitalWrite(buzzer,LOW);//低电平关闭蜂鸣器不发声音
      delay(5);//延时2ms 通过这个延时可以改变声音的频率不同
    } 
  } 
}

2.定义数字引脚

int buzzer=2;//设置控制蜂鸣器的数字口对应板子上2口
int redLed=2;//定义板子上数字口2
int yellowLed=3;//定义板子上数字口3
int greenLed=4;//定义板子上数字口4

在 Arduino 中,数字引脚可以使用 intuint8_t 来定义。int 是有符号整数类型,通常用于表示更大的数字范围,而 uint8_t 是无符号的 8 位整数类型(相当于C语言中的long),可以表示 0-255 的数字范围,这对于表示数字引脚非常方便。在实际应用中,两种类型都可以使用,具体取决于你的需求和个人喜好。

3.unsigned char

在 C/C++ 中,char 类型数据可以被看作是整数类型。unsigned char 表示无符号的 8 位整数类型,其表示范围为 0-255。当你使用 unsigned char i,j; 定义变量 ij 后,它们就被分配了 1 个字节(8 位)的内存空间,可以用来存储整数值。

由于 ij 都是整数类型,因此你可以对它们进行加、减、乘、除等基本数学运算,以及自增和自减运算。在这种情况下,执行 i++ 操作时,编译器会将 i 的值加 1,并将结果存回到变量 i 中。如果 i 已经达到了 255,再执行 i++ 运算时,i 的值会被重置为 0,因为 unsigned char 类型的取值范围为 0-255。

需要注意的是,在 unsigned char 类型中执行数学运算或自增/自减操作时,可能会出现溢出现象。例如,当 i 的值为 255 时再进行 i++ 运算,i 的值就会变成 0。因此,在使用 unsigned char 类型时应该特别小心,确保不会出现意外结果。

4.蜂鸣器

蜂鸣器通常有正负极之分。在接线时,应确保将红色或标有"+“符号的线连接到电源的正极,黑色或标有”-"符号的线连接到电源的负极,否则蜂鸣器可能无法正常工作。

蜂鸣器可以分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器指的是需要外接振荡器或者驱动信号才能发声的蜂鸣器。这种蜂鸣器通常需要在电路中加上一个谐振电路,才能产生所需要的共振频率,并发出声音。相反,无源蜂鸣器是一种自带驱动电路的蜂鸣器,可以直接接到电源上即可发出声音。无缘蜂鸣器适用于需要简单操作、易于使用的场合,例如电子闹钟、计时器、温度计等。

本次实验用的无源蜂鸣器。

5.实现不同频率

本次实验的电路图与常用数字引脚控制LED灯电路图类似,即蜂鸣器的正极接数字引脚,负极接负极GND。实现不同频率,通过delay()延时函数来设置不同的频率,即每次的延时时间不同,蜂鸣器的频率也不同。

二.蜂鸣器控制实验

1.源代码

int buzzer=2;//设置控制蜂鸣器的数字口对应板子上2口
int key=4;//定义板子上数字4口
int flag=0;//定义一个变量记录按键按下后蜂鸣器是关闭还是打开

void setup() 
{ 
  pinMode(buzzer,OUTPUT);//设置对应的输出模式
  pinMode(key,INPUT_PULLUP);//定义按键为上拉输入模式
} 
void loop() 
{ 
    if(digitalRead(key)==LOW)//判断按键是否按下,按键按下时为高电平
    {
      if(flag==0){//判断蜂鸣器是否打开
        flag=1; //标志蜂鸣器打开 
        digitalWrite(buzzer,HIGH);//对应的蜂鸣器发声
    
      }else{
        flag=0;  //标志蜂鸣器关闭
        digitalWrite(buzzer,LOW);//对应的蜂鸣器不发声

      }
       while(!digitalRead(key));//按键释放时候退出while循环,防止按键按下多次触发

    }
 
}

2.电路图

j1hl.jpg

3.理解

同样是用按键控制电路,所以本次实验较按键控制LED实验思路受一样的,也无新的陌生函数,唯一不同就是这里的蜂鸣器是常规接法,而按键控制LED灯接法比较特殊,所以digitalWrite(buzzer,HIGH)表示开启蜂鸣器,digitalWrite(buzzer,LOW)表示关闭蜂鸣器。

按键控制LED实验

三.电位器调节实验

1.源代码

int dwqPin=14;   //定义电位器接口14(这个是板子的模拟口A0)
void setup()
{
    pinMode(dwqPin,INPUT);  //定义数字接口为输出接口
    Serial.begin(9600);     //设置波特率为9600
}

void loop()
{
    Serial.println("模拟量值为:");    //显示字符串"模拟量值为:"
    Serial.println(analogRead(dwqPin));    //读取模拟接口A0的值,并且通过串口进行显示出来
    delay(2000);//延时2秒
}

2.电路图

j3Xq.jpg

3.电位器

Arduino电位器指的是一种用于控制模拟信号的模拟输入设备。它通常由一个可调节的旋钮和两个输出端口组成,其中一个输出端口连接到Arduino板子上的模拟输入引脚,另一个输出端口则连接到地线。通过旋转旋钮,可以改变电位器的输出电压,从而改变连接到模拟输入引脚的电压值。Arduino电位器常用于控制LED灯的亮度、音调发生器的频率等场合。

4.数字引脚和模拟引脚

Arduino板子上的数字引脚和模拟引脚都是用于输入和输出信号的引脚,但它们之间有很大的区别。

Arduino的数字引脚只能够输出两种状态:高电平和低电平,因此它们也被称为IO(Input/Output)引脚。数字引脚用于控制数字电路中的开关、继电器等应用,以及读取数字传感器如按钮、光敏电阻等的状态。在Arduino Uno板子上,有14个数字引脚(0-13),其中6个引脚可以作为PWM输出(3, 5, 6, 9, 10, 和 11)。

相比之下,Arduino的模拟引脚可以输出连续变化的电压信号。它们通常用于传输和处理模拟信号,例如声音、图像、温度和湿度等物理量。Arduino Uno板子上有6个模拟引脚(A0-A5),它们可以根据外部设备提供的电压来产生10位数字值的模拟输入数据,或者通过PWM技术产生模拟输出信号。

需要注意的是,Arduino的数字引脚和模拟引脚可以互相转换使用。例如,可以将一个数字引脚设置为输出,并将其连接到一个LED,然后使用analogWrite()函数在该引脚上产生PWM信号,从而控制LED的亮度。此外,也可以将一个模拟引脚设置为数字输入并读取其状态。因此,在设计Arduino程序时,需要根据具体应用需求选择合适的引脚类型。

常使用下面数字定义模拟引脚:

模拟引脚数字引脚
A014
A115
A216
A317
A418
A519

5.PWM技术

PWM输出是一种电子信号,使用脉宽调制(Pulse Width Modulation, PWM)技术来控制输出信号的能量。PWM输出通常用于控制电机速度、LED亮度和音频信号的调制等应用。

PWM信号由一系列脉冲组成,在此过程中每个脉冲的宽度(即通断时间)确定了平均输出功率的大小。这些脉冲的频率通常是固定的,但占空比(开通时间与总周期时间之比)可以通过软件或硬件来改变,从而控制输出信号的平均能量。

为了使用微控制器生成PWM输出,软件需要设置一个定时器以在固定的频率下产生周期性中断。在每次中断时,软件根据所需的输出级别更新占空比。硬件随后会在输出引脚上生成相应的PWM波形。

同时,专用的PWM集成电路(PWM ICs)通常具有内置定时器和其他功能,简化了生成PWM输出的过程。这些IC还可以提供额外的功能,例如故障检测和保护电路,因此在许多应用中都很流行。

6.analogRead()函数

  • 作用:本指令用于从Arduino的模拟输入引脚读取数值。

  • Arduino控制器有多个10位数模转换通道。这意味着Arduino可以将0-5伏特的电压输入信号映射到数值0-1023。换句话说,我们可以将5伏特等分成1024份。0伏特的输入信号对应着数值0,而5伏特的输入信号对应着1023。

  • 语法:analogRead(pin)

  • 参数:被读取的模拟引脚号码

  • 返回值:0到1023之间的值

四.光控小灯实验

1.源代码

int led = 2; //定义小灯的输出引脚数字口2
int lightR = 14;//定义光敏电阻的输入引脚14,也就是对应的模拟口A0
int val;
void setup() 
{ 
  pinMode(led,OUTPUT);//设置连接小灯的引脚为输出模式
   pinMode(lightR,INPUT);
   Serial.begin(9600);     //设置波特率为9600
} 

void loop() 
{ 
  val=analogRead(lightR);  //读取模拟接口A0的值,也就是14号口,把值赋给val
  Serial.println(val);    //通过串口打印对应的val值,并且通过串口进行显示出来
  delay(1000);//延时1秒
  if(val>300)//判断是否大于设定值
   {
      digitalWrite(led,HIGH);//点亮led
   }else{
     digitalWrite(led,LOW);//关闭led
   }
}

2.电路图

3.波特率

波特率是指数据在通信中传输的速率,它是衡量串行通信速度的一个参数。9600 是比较常见的波特率之一,因为它既可用于低速通信,也可以用于高速通信。

在计算机和现代电子设备中,串行通信通常使用异步串行通信协议进行通信。在这种协议中,传输数据需要发送方和接收方都采用相同的波特率。9600 是一个合理的选择,因为它可以很好地平衡通信速度和传输距离之间的关系,并且在大多数情况下具有良好的兼容性和稳定性。

此外,9600 波特率还具有与其他常用波特率(例如 300、1200、2400、4800 和 19200)相比相对较高的数据传输速度,因此它在许多应用中被广泛使用。

4.VCC

在Arduino中,VCC通常指的是芯片上的电源引脚,也就是电路板上用于提供电源的正极。一般来说,VCC引脚连接到外部电源或者芯片内部的稳压器,用于为整个系统提供稳定的电源。

电源引脚在模拟引脚旁边。

Arduino的电源引脚数量取决于不同型号的开发板,但通常都会包括以下几个电源引脚:

  1. VCC(或VIN):用于连接外部电源或者芯片内部的稳压器,以提供系统所需的电源。
  2. GND:用于连接电路板和其他组件的地线,提供回路的闭合路径。
  3. 3.3V(或5V):一些Arduino型号可能还包括一个额外的电源引脚,一般用于连接低功耗的外围设备和传感器,例如无线模块、温度传感器等。

五.PWM调节光亮实验

1.源代码

int ledpin=3;//定义数字接口3输出PWM波
int dwqPin=14;   //定义电位器接口14(这个是板子的模拟口A0)
int val = 0;  //定义变量
void setup()
{
    pinMode(ledpin,OUTPUT);  //定义LED灯控制口为输入
    pinMode(dwqPin,INPUT);  //定义数字接口为输出接口
    Serial.begin(9600);     //设置波特率为9600
}
void loop()
{
    val=analogRead(dwqPin);//读取电位器的值传给val变量
    Serial.println("模拟量值为:");    //显示字符串"模拟量值为:"
    Serial.println(val/4);    //读取模拟接口A0的值,并且通过串口进行显示出来
    analogWrite(ledpin,val/4);// 用产生的pwm波控制小灯,其中pwm波的范围为0到255
    delay(100);//延时100ms
}

2.电路图

jNBH.jpg

3.analogWrite()函数

  • 作用:将一个模拟数值写进Arduino引脚。
  • 语法:analogWrite(pin, value)
  • 参数1:pin表示要写进模拟数值的引脚号码
  • 参数2:value是0到255之间的PWM频率值, 0对应off, 255对应on

其中,0表示PWM信号的低电平占空比为100%,也就是输出电压为0V,灯熄灭;255表示PWM信号的高电平占空比为100%,也就是输出电压为5V,灯亮。

4.占空比

占空比(Duty Cycle)是指PWM信号高电平持续时间与周期时间之比。在Arduino等系统中,PWM信号的周期时间通常是固定的,因此占空比可以用来控制信号高电平的持续时间。

占空比通常用百分数或小数表示,范围从0到1或0%到100%。例如,一个50%的占空比意味着PWM信号的高电平持续时间为周期时间的一半。

在控制LED、电机、舵机等电子设备时,占空比是非常重要的参数。它可以控制输出设备的亮度、速度、位置等属性。例如,通过改变PWM信号的占空比,可以实现LED的调光、电机的调速、舵机的转动角度控制等功能。

六.说明

接上一篇博客,arduino学习笔记2!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐