Arduino/zh

From XinCheJian
Jump to navigation Jump to search

数字电路之超级基础

欧姆定律

  • I 电流,单位安培
  • V 电压,单位伏
  • R 电阻,单位欧姆


  • I = V / R
  • V = I * R
  • R = V / I

功率

P = I * V

电路会把电能转换成其他形式的能量,但是很大一部分能量会被转化成热能:

  • LED 发光二极管 => 光能,热能
  • 电机 => 机械能(动能),热能
  • 喇叭 => 机械能(声波),热能
  • 电阻 => 热能

高电平,低电平(电位)

什么是数字电路?简单地说,数字电路就是用一段段代表0或者1的电平组成的信号作为控制信号的电路,而所谓的0和1,就是由低电平和高电平分别代表的。

  • 在电路中的某一点上,如果它的电压:
  • 接近0V (地线)的电压 => 低电平
  • 接近供电电压 => 高电平

数字电路的优点主要是稳定性好,电路设计简单

动手时间:点亮LED灯

  1. 面包板:上面整行是横向相通的一或二整条,下面整行也是横向相通的一或二整条,中间是纵向相同的两组5个相通的点,两组之间不相通。一般来讲上面一条我们用来提供供电电源,下面一条做地线,中间来连接电路。
  2. LED发光二极管,顾名思义,通电就能亮,要求是需要有一定的电压,但是它的特点是通过LED的电流几乎随电压成指数增长,当电流过大时就更会导致LED永久性损毁而无法发光。
  3. 电阻,可以限制通过电路的电流 (I = V/R)
  4. 通过Arduino来供电, Arduino上面有 5V(供电), GND(地线)两个接口,5V连接上面整条,GND连接下面整条。
  5. 把电阻一端和LED长脚插在同一竖排的的5个空中,LED 另外一端插在旁边的一排,用一根导线将LED的短脚连接到地线。
  6. 用电阻另外一段连接5V (高电平),然后断开,再连接GND (低电平)

Blink 闪一闪

不用手,而用Arduino来控制LED的开关。

  1. 把活动4当中的电路中悬空的电阻插在另外一个竖排中,在用导线连接到13号插槽。
  2. 打开Arduino的范例程序 File -> Examples -> Basics -> Blink
  3. 点击 "Upload" 按钮上传程序
  4. 改变程序中 delay 里面的数字并重新上传
  5. 改变程序中的 pin 号码,尝试用其他输出接口来控制LED

Arduino 程序简介

  1. setup 是一个会在每次程序开始的时候会调用一次的函数,用来初始化程序需要的设置
  2. loop 是一个会被循环调用的函数,周而复始
  3. pinMode 是指如何使用某个接口,可以是INPUT (输入模式),OUTPUT(输出模式)
  4. digitalWrite 可以让一个是输出模式的接口输出 HIGH(高电平)或LOW(低电平)

再闪一闪

使用下面的程序(改写活动5中的程序)

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

void loop() {
  for(int i = 0; i < 255; i++){
    analogWrite(11, i);
    delay(10);
  }
  delay(1000);
  for(int i = 255; i > 0; i--){
    analogWrite(11, i);
    delay(10);
  }
  delay(1000);
}
  1. 点击 "Upload" 按钮上传程序
  2. for 是最简单的一种循环
  3. analogWrite 能够使用某些端口输出PWM(脉宽调制)信号,脉宽调制是指在输出的信号中控制方波的占空比,比如当某端口输出100的pwm, 100/255 ~ 39%的时间该输出端口为高电平,61%的时间为低电平,高低电平间高速交替。
  4. ++, --, 让一个变量增加1,和减少1

串口通信

Arduino 默认带有串口通信,能够和电脑或其他串口设备通信。

使用下面程序

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

void loop() {
  int count  = 0;
  int change = 1;
  Serial.print("I am counting ");
  Serial.println(count);
  if(count >= 20){
    change = -1;
  }
  if(count <= 0) change = 1;
  count = count + change;
  delay(200);
}
  1. 点击 "Upload" 按钮上传程序
  2. if 用来执行条件语句,只有当括号()中的条件为真时,其随后的单句或大括号中的命令才会被执行
  3. Serial 需要先在setup函数中设定传输速度,然后可以通过print/println来输出数字或文字
  4. 变量是一个能够记录数据,并且能够通过程序改变其记录的数据。

舵机

按图片连接舵机

Arduino-example-servo.png

  1. 打开例子 File -> Examples -> Servo -> Sweep
  2. 点击 "Upload" 按钮上传程序
  3. #include 能够让我们引用一些已经准备好的库程序
  4. 与Serial不同,我们可以通过建立多个Servo变量,并分配不同的接口来控制多个舵机
  5. servo.write 接受 0~180之间的数值代表需要舵机转向的角度