西工大电子实习&arduino学习手札1 | 初识arduino

注:内容产出来自我的电子实习,一小部分内容来自我的队友,老师的PPT,在此致谢。这个内容大体上已经结束了,等我闲下来整理一下慢慢更新。后面保不准自己也会学着做单片机hh

DAY1

1. 新的开始:

了解前置知识和注意事项,组建草台班子(不是),准备进行小组作业。

使用的单片机 Arduino MEGA/UNO

2. Hello Arduino:

下载专用IDE,学习基本语法——包含初始化设置 setup() 和主循环 loop() 两个核心函数,并掌握了串口通信和数字引脚控制的基本用法:

  1. setup()函数:
  • 这是初始化设置部分,只运行一次。
  • 使用 Serial.begin(9600); 设置串口波特率为 9600,这样设备可以以此速率与其他设备通信。
  1. loop()函数:
  • 这是主程序控制部分,反复执行的代码在这里写入,程序会在 loop 中从头到尾执行并循环。
  1. 串口通信
  • 使用 Serial.print() 输出信息到串口。比如,输出学号和姓名 "2023303822 丁中惠"
  • 如果需要自动换行,可以使用 Serial.println(),类似于 Java 中的 System.out.println()
  • Serial.read():读取串口数据。
  • Serial.available():判断串口是否接收到数据,返回接收的数据量(以整数表示)。
  • pinMode(pin, mode);:设置指定引脚的模式,pin 为引脚号,mode 为输入或输出模式。
  • digitalWrite(pin, value);:设置指定引脚的电平状态,value 可以为 HIGH(高电平)或 LOW(低电平)。
  • delay(ms); 和 delayMicroseconds(us);:延时函数,分别以毫秒和微秒为单位暂停程序。
  1. 与 C/C++ 的 main 函数对比
  • loop() 类似于 C 语言中的 main 函数,但 loop() 中无法直接使用 printf() 输出,而是使用 Serial.print() 进行串口输出。

预习作业:

了解analogWrite()函数的使用。

DAY 2

作业代码:

输入:无

输出:实现用两个变量输出队伍和队员名称。

const char* members[4][3] = {
    {"A", "B", "C"},      // TA
    {"D", "E", "F"},         // TB
    {"G", "H", "I"},       // TC
    {"J", "K", "L"}      // TD
};

const char* team_id[4] = {"TA" , "TB" , "TC" , "TD"};

int teamId = 0;
int memberId = 0;

void setup() {
  Serial.begin(9600);
}

void loop() {
    if (teamId >= 0 && teamId < 4 && memberId >= 0 && memberId < 3) {
        Serial.print(team_id[teamId]);
        Serial.print(" 成员 ");
        Serial.print(memberId + 1);
        Serial.print(": ");
        Serial.println(members[teamId][memberId]);
    }

    delay(1000);

    memberId++;
    if (memberId >= 3) {
        memberId = 0;
        teamId++;
        if (teamId >= 4) {
            return 0; 
        }
    }
}

应该可以加入一个手动输入,来实现输入队名来选择对应的输出。

lab1:了解analogWrite()函数及占空比:

  PWM是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%。

  D = \frac{T_{\text{high}}}{T}

  PWM 信号的平均电压 V_{\text{avg}}与占空比 D和输入电压V_{\text{in}}的关系为:

V_{\text{avg}} = D \times V_{\text{in}} = \frac{T_{\text{high}}}{T} \times V_{\text{in}}

lab2:认识元器件:

  •   发光二极管,长正短负,小正大负。一定要注意发光二极管的极性。
    • 最上边最下边是电源区,中间是器件区。电源区横向导通,器件区纵向导通。中间的槽隔开了上下区域,是不导通的。
  • 公线母线的区别。
  • 注意发光二极管极性:
  • 了解面包板的结构。
  • 了解杜邦线:

仿真时遇到的问题:

仿真软件太难用了接线混乱,会莫名其妙不行。

不能碰到其他洞洞,不然就会把那个支路短路掉。

lab3:一束光:

  学习在Wiki上进行仿真。正极接输入,负极接地。

  点亮了一个小灯:

代码实现如下:


int ledPin = 10;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  digitalWrite(ledPin,HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

 

lab4.流水灯制作:

  接下来是流水灯:

已经很努力接线了但是这个我真的用不明白,他就会莫名其妙短路。

上单片机成功点亮(我不会传视频):

代码如下:

const int ledPins[] = {8, 9, 10, 11};
const int numLeds = 4;
const int delayTime = 200; // 延迟时间,单位为毫秒

void setup() {
  for (int i = 0; i < numLeds; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  // 从左到右依次点亮
  for (int i = 0; i < numLeds; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(delayTime);
    digitalWrite(ledPins[i], LOW);
  }

  // 从右到左依次点亮
  for (int i = numLeds - 1; i >= 0; i--) {
    digitalWrite(ledPins[i], HIGH);
    delay(delayTime);
    digitalWrite(ledPins[i], LOW);
  }
  digitalWrite(ledPins, HIGH);

}

预习作业:

1)蜂鸣器

  1. 本质和原理

蜂鸣器是一种能发出声音的电声器件,有两种主要类型:

  • 有源蜂鸣器:只需要通电即可发出固定频率的声音。

  • 无源蜂鸣器:必须通过外部信号驱动才能发出声音,控制器需要产生特定频率的方波。

蜂鸣器的发声原理是基于电磁或压电效应。通电后,电磁振动或晶体变形,产生振动,发出声音。控制电流的频率可以调节声音的高低。

  1. 相关函数

有源蜂鸣器只需通过 digitalWrite() 控制电平即可。高电平时发出蜂鸣声,低电平时蜂鸣声停止。

int buzzerPin = 9;  // 定义蜂鸣器连接的引脚

void setup() {
  pinMode(buzzerPin, OUTPUT);  // 设置蜂鸣器引脚为输出模式
}

void loop() {
  digitalWrite(buzzerPin, HIGH);  // 打开蜂鸣器
  delay(1000);  // 持续1秒
  digitalWrite(buzzerPin, LOW);   // 关闭蜂鸣器
  delay(1000);  // 等待1秒
}

在 Arduino 中,可以通过 tone() 函数驱动无源蜂鸣器,控制其发出不同频率的声音。

这是中央C音阶(C4)上的音符频率值,可以作为控制音调的参考。

  • tone(pin, frequency):在指定引脚 pin 上产生指定 frequency 的方波,用于控制无源蜂鸣器的频率。例如:

tone(8, 1000); // 在引脚 8 上输出 1000 Hz 的声音
  • tone(pin, frequency, duration):在指定 pin 上产生特定频率,持续 duration 毫秒。例如:

tone(8, 1000, 500); // 发出 1000 Hz 的声音,持续 500 毫秒
  • noTone(pin):停止在指定 pin 上的声音。例如:

noTone(8); // 停止引脚 8 上的声音

2)电子数码管

  1. 本质和原理

数码管是一种由多个 LED 段(7 段或更多)组成的显示器件,通过控制各个段的点亮与熄灭,可以显示数字或字母。

  • 阴极数码管:所有 LED 的阴极连接在一起,需要给每个段施加高电平才能点亮。

  • 阳极数码管:所有 LED 的阳极连接在一起,需要给每个段施加低电平才能点亮。

数码管的每个段对应一个特定的引脚,通过控制这些引脚电平,可以控制不同的段点亮,显示不同的字符或数字。

控制方法:

        为了显示数字,需要使用编码方式控制不同段的亮灭组合。例如,显示数字 8 时需要点亮所有段,显示数字 1 时只需要点亮两个垂直的段。每个数字的显示通常使用二进制编码来简化控制。

相关函数(以 Arduino 为例):

        在 Arduino 中,数码管通常需要与多个数字引脚连接,或使用移位寄存器等芯片减少引脚消耗。可以手动编写每个数字的编码函数,也可以使用 display() 函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值