经济文库 - 千万精品文档,你想要的都能搜到,下载即用。

arduino:王一飞-张国康-arduino第四周.pdf

深碍√TFBOYSˉ_9 页 2.575 MB 访问 2842.97下载文档
arduino:王一飞-张国康-arduino第四周.pdfarduino:王一飞-张国康-arduino第四周.pdfarduino:王一飞-张国康-arduino第四周.pdfarduino:王一飞-张国康-arduino第四周.pdfarduino:王一飞-张国康-arduino第四周.pdfarduino:王一飞-张国康-arduino第四周.pdf
当前文档共9页 2.97
下载后继续阅读

arduino:王一飞-张国康-arduino第四周.pdf

第一周:学习Arduino实战篇 王一飞、张国康 预习实验 Arduino Arduino是一个开源硬件平台,其核心是Arduino开发板(单片机)。它具有丰富的输入输出功能,并可 以方便地进行跨平台编程。Arduino基于AVR平台,可以之间使用AVR C进行编程,Arduino也提供了封 装好的编程语言和IDE,因此大大降低了编程的难度,便于学习。 Arduino Uno Arduino Uno是Arduino开发板的一种型号。采用ATMega 328p处理器,14个数字I/O口,6个模拟输入 口,通过USB-B接口或5-12V外部电源供电,可输出电压3.3V或5V。通过USB接口与计算机连接进行程 序下载与调试。 Arduino 编程 Arduino提供了IDE用于编程,主要使用C/C++编写程序,并可以使用AVR C语言。Arduino程序基本结构 如下 void setup(){ // commands to run once } void loop(){ // commands to run repeatedly } 程序分为两部分,第一部分为 setup 函数,其中的命令只执行一次,一般用于引脚和串口的定义。另一 部分为 loop 函数,其中的命令不断循环执行,一般作为程序的主要部分。 任务 1 Blink 内容:让连接在D12引脚的LED灯闪烁 方法:在 setup 中设置D12引脚为输出引脚,在 loop 中反复在12号引脚输出高电平与低电平 void setup(){ pinMode(12, OUTPUT); } void loop(){ digitalWrite(12, HIGH); delay(1000); digitalWrite(12, LOW); delay(1000); } 其中 delay(1000) 表示程序在此处等待1000毫秒。 结果:LED正常闪烁,完成。 2 LED警灯 内容:让连接在12和13号的LED交替闪烁 方法:在 loop 中使用 for 循环语句,交替在两个引脚上输出. 源代码文件 alarm.ino 。 int i; // define loop parameter void setup(){ pinMode(13,OUTPUT); // setup LED pin pinMode(12,OUTPUT); } void loop(){ for (i=0; i<10; i++){ digitalWrite(13, HIGH); // light up LED 13 close LED 12 digitalWrite(12,LOW); delay(1000); digitalWrite(13,LOW); digitalWrite(12,HIGH); delay(1000); } } // light up LED 12 close LED 13 3 无源蜂鸣器 内容:让无源蜂鸣器与LED灯配合发出警报声 方法:快速交替给蜂鸣器高低电平,驱动其发生,声音频率等于脉冲频率。下面是实现程序( setup 和 变量定义略去)源代码文件 buzzer.ino 。 void loop(){ digitalWrite(led1, HIGH); digitalWrite(led2, LOW); for (i=0; i<200; i++){ digitalWrite(buz, HIGH); // 500Hz delay(1); digitalWrite(buz, LOW); delay(1); } digitalWrite(led1, LOW); digitalWrite(led2, HIGH); for (i=0; i<130; i++){ digitalWrite(buz, HIGH); // 250Hz delay(2); digitalWrite(buz, LOW); delay(2); } } 结果:蜂鸣器正常工作,发出警报声。 4 三色LED 内容:通过控制LED上RGB三种颜色的亮度,实现7色跳变和渐变 七色跳变原理:实现七色跳变,只需要遍历三种颜色高低的所有组合。实现如下。源代码文件 `rgbled.ino 。 int r = 9; int b = 10; int g = 11; int vr,vg,vb; void setup() { pinMode(r, OUTPUT); pinMode(g, OUTPUT); pinMode(b, OUTPUT); } void loop() { for (vr=0;vr<2;vr++){ digitalWrite(r, vr); for (vb=0;vb<2;vb++){ digitalWrite(b, vb); for (vg=0;vg<2;vg++){ if (vr + vg + vb == 0){ vg = 1; } analogWrite(g, vg*100); delay(1000); } } } } 七色渐变原理:实现渐变需要控制LED亮度连续变化Arduino不能输出真的模拟信号,即连续变化的电 压,但可以通过不同的脉冲长度来模拟变化的电压,即脉冲宽度调制(PWM)。对应的函数为 analogWrite(pin, value) 。 pin 为输出引脚,在Uno板上可以使用此功能的引脚已用波浪线标出, 为D3,5,6,9,10,11。 value 范围为0-255。要遍历所有可能的颜色,实现过程比较复杂,不列出源代码, 请看源文件 rgb-led-fade.ino . 5 LM35温湿度传感器 内容:利用LM35传感器在串口显示温度。 原理:LM35传感器在模拟输入口,每1 对应10mV,引脚电压5V对应信号数值1024。在引脚读取信 号数值,转换为温度,再在串口通讯中输出即可。使用串口通讯需要先在 setup 中进行初始化,选择通 信波特率。源代码文件 LM35.ino . int sensorPin = A2; double temp; void setup() { Serial.begin(9600); } void loop() { temp = double(analogRead(sensorPin))*0.488; Serial.print("Temp:"); Serial.println(temp); delay(500); } 效果:串口中正常输出温度。 6 电位器控制LED亮度/颜色 内容:旋转电位器来连续改变LED亮度 控制亮度原理:在电位器对应的模拟输入引脚读取其分压信号,转换为LED亮度信号,用PWM输出。下 面展示 loop 部分源代码。源文件 rotLED-bright.ino void loop() { dat = analogRead(rotPin); Serial.println(dat); analogWrite(r, dat>>2); delay(10); } 其中 dat>>2 表示在2进制中将变量 dat 的值向右移两位,效果为将 0-1023 范围内的值映射到 0-255 范 围内。 效果:旋转电位器,LED亮度连续变化。 控制颜色原理:与控制亮度类似,但电位器的位置要同时控制三种颜色的亮度,因此将各LED的PWM信 号数值(y)与电位器信号与电位器信号(x)做如下映射。源文件 rotLED-color.ino void loop() { dat = analogRead(rotPin); if (dat<=511) { vr = 255-(dat>>1); vg = dat>>1; vb = 0; } else { vr = 0; vg = 255 - ((dat-512)>>1); vb = (dat-512)>>1; } analogWrite(r, vr); analogWrite(g, vg); analogWrite(b, vb); delay(100); } 7 舵机 内容:通过电位器控制舵机旋转角度 原理:Arduino内置的库 Servo.h 可以直接实现舵机角度的控制(0-180)。读取电位器数值后转换为角 度,用舵机库函数输出即可。使用库函数控制舵机,需要在 setup 函数前声明类对象 Servo myservo ,并在 setup 中将类绑定到舵机引脚 mayservo.attach() ,在 loop 中将角度写入 myservo.write() 。源文件为 rot-servo.ino #include Servo myservo; int rotPin = A0; int servoPin = 7; double dat; int angle; void setup() { Serial.begin(9600); myservo.attach(7); } void loop() { dat = analogRead(rotPin); angle = int((dat/1024.0)*180.0); myservo.write(angle); Serial.println(angle); delay(10); } 8 DHT11 内容:从串口读取当前温湿度和露点。 原理:利用DHT11传感器。并使用与其配套的库 DHT11.h 。 使用 DHT11.h 首先需要声明类对象 dht11 DHT11 ,并定义传感器所在引脚 #define DHT11PIN 4 ,就 可以利用库函数 DHT11.humidity , DHT11.temperature 方便地读取温湿度信息,并计算露点。这一 步直接使用了课程提供的示例代码 08dht11.ino 提高温度精度:在源文件78行 Serial.println((float)DHT11.humidity, 2); 中,2表示输出湿度的 小数位数,将它改为更大的整数值即可提高精度。提高温度显示精度的方法也类似。 9 LCD 1602A 内容:在LCD 1602A显示屏上显示字符。 原理:LCD 1602可以通过I2C协议与Arduino连接,传输信号的引脚为SCL与SDA。它也有配套的库 LiquidCrystal_I2C1602.h 。使用时也需要先什么类对象 LiquidCrystal_I2C lcd(0x27,16,2); , 其中 0x27 表示LCD的通讯地址。使用时主要操作包括 lcd.init(); 用于初始化显示屏, lcd.backlight(); 用于打开显示屏背光, lcd.print(""); 用于在显示屏上输出字符。 使用库自带示例程序 HellowWorld.ino 可以在屏幕上显示英文字符。 显示中文字符:需要自定义符号编码,保存为一个长度为8的数组,每一个元素代表一行,以”上“字为 例,其编码方法如下图所示(来源:LCD1602显示汉字 + 自制字库-Arduino中文社区) 使用 lcd.createChar(0,shang); 可以将 shang 这个数组映射到一个字符上,这里将其命名为 0 。再使 用 lcd.printByte(0); 即可将这个字符打印在屏幕上。实现源代码为 lcd-chinese.ino ,同样来自 LCD1602显示汉字 + 自制字库-Arduino中文社区 作业 在液晶上显示温度,湿度 原理:实现的困难主要在于 lcd.print(); 不能使用格式化输出,因此需要分开打印文字和浮点数。但 又需要保证它们在正确的位置显示,因此在打印前需要设置好光标位置。实现源代码为 lcd-dht11test.ino 。效果图如下: 步进电机作业因无公头杜邦线而没有进行。

相关文章