找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9433|回复: 2
收起左侧

ARDUINO的简单应用-课程设计报告

[复制链接]
ID:111475 发表于 2016-3-30 19:20 | 显示全部楼层 |阅读模式
1、开始运行你的Arduino kit:
51黑论坛或者网上找到IDE1.01或者以上版本,下载并安装。用USB转串口线插入arduino板时,会提示需要装驱动。在网上找到arduino与之相关的USB2.0驱动,就可以正常的运行你的arduino了。
因为IDE含有大量arduino例程,故可以先将例程导入编译页面。如下为4个用arduino编译的例程。
//1一个简单的程序让读取模拟端口ao的值并用串口发送
void setup() {
Serial.begin(9600);//串口波特率9.6kb//d0-tx//d1-rx
}
void loop()
{
int sensorValue = analogRead(A0);//读取a0值(0-1023)
Serial.println(sensorValue);//串口发送数据
delay(1); //延时一毫秒
}
注:arduino由初始化函数setup()与循环函数loop()组成。
1-1.jpg 图1
本例中所有程序均在IDE中完成编程,也可在keil,iar,或者第三方软件中运行。
2、串口控制输出:
下载程序后,打开IDE的串口助手,会出现图一界面,发送a-e,即可将d2-d5分别点亮,输入其他数据,则会关闭所有LED灯。
void setup() {
Serial.begin(9600); //串口波特率9.6kb//d0-tx//d1-rx
for (int thisPin = 2; thisPin < 7; thisPin++)
{
pinMode(thisPin, OUTPUT);//将d2-d7设置为输出模式
}
}
void loop()
{
if (Serial.available() > 0) { //如果串口收到信息
int inByte = Serial.read(); //将串口发送的数据送入到inbyte
switch (inByte) {
case 'a': //接受a,将d2置高
digitalWrite(2, HIGH);
break;
case 'b':
digitalWrite(3, HIGH); //接受b,将d3置高
break;
case 'c':
digitalWrite(4, HIGH); //接受c,将d4置高
break;
case 'd':
digitalWrite(5, HIGH); //接受d,将d5置高
break;
case 'e':
digitalWrite(6, HIGH); //接受e,将d6置高
break;
default:
// turn all the LEDs off: //其他情况关闭所有LED灯
for (int thisPin = 2; thisPin < 7; thisPin++)
{
digitalWrite(thisPin, LOW); //其他情况就将d2-d7均置低
}
}
}
}
1-2.jpg

3、局域网控制LED灯:
在网站下载 库,导入LEDs程序,可以得到如图2所示的画面。要实现联网连接,需要用到enc28j60网卡。
#include
#define LED1PIN 3
#define LED2PIN 5
PROGMEM prog_char led_off[]= { //灰色图标,关闭LED矩阵
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0E,
0x00, 0x00, 0x00, 0x0E, 0x08, 0x04, 0x00, 0x00, 0x00, 0xB5, 0x41, 0xE5, 0x5A, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47,
0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00, 0x00, 0x02, 0x62, 0x4B, 0x47, 0x44, 0x00, 0xFF, 0x87, 0x8F, 0xCC, 0xBF,
0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x00, 0x0B, 0x12, 0x01, 0xD2, 0xDD, 0x7E,
0xFC, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4D, 0x45, 0x07, 0xDC, 0x01, 0x1D, 0x14, 0x21, 0x10, 0xBC, 0x3C, 0xDE, 0x2D,
0x00, 0x00, 0x00, 0xD2, 0x49, 0x44, 0x41, 0x54, 0x18, 0xD3, 0x75, 0xD0, 0xB1, 0x4A, 0x03, 0x51, 0x10, 0x05, 0xD0, 0xB3,
0x21, 0x1F, 0x10, 0x04, 0x3B, 0x53, 0x89, 0x5A, 0x09, 0x9B, 0x58, 0xD9, 0x25, 0x5F, 0x60, 0x63, 0x9F, 0x87, 0x5F, 0xE0,
0x27, 0x6D, 0x7A, 0x5B, 0xC1, 0x6E, 0xF3, 0x01, 0x92, 0x2C, 0x36, 0x56, 0x62, 0x61, 0x23, 0xA4, 0xB1, 0x12, 0xF2, 0x64,
0xDF, 0x5A, 0xBC, 0x20, 0x5B, 0x98, 0x3B, 0xC5, 0xC0, 0xBD, 0x73, 0xEF, 0x30, 0x53, 0x74, 0x0E, 0x63, 0x48, 0x01, 0xC2,
0xBD, 0x1B, 0x33, 0xAC, 0x2C, 0xAB, 0x0A, 0x3A, 0x45, 0xA7, 0x10, 0x46, 0xEA, 0x69, 0x39, 0x71, 0x21, 0xD9, 0x78, 0xF5,
0xD2, 0x98, 0x57, 0x5F, 0x9D, 0x21, 0xA8, 0xEF, 0xCA, 0x53, 0xDF, 0xB6, 0xA2, 0x23, 0xD7, 0xC6, 0xE5, 0x63, 0x6D, 0xC2,
0x80, 0x10, 0xA6, 0xE5, 0xB9, 0x9D, 0xA4, 0xD5, 0x4A, 0xA2, 0x91, 0xB3, 0x32, 0x04, 0x06, 0x58, 0x5C, 0x89, 0x92, 0x56,
0xFA, 0xAB, 0x63, 0x16, 0x59, 0x9C, 0x5D, 0xF6, 0xA4, 0xDC, 0x4F, 0x98, 0xC9, 0x3B, 0x33, 0xD5, 0x77, 0x46, 0x64, 0xE7,
0xAA, 0xE9, 0xD1, 0x79, 0x68, 0xCB, 0x2A, 0x8B, 0xCB, 0x0D, 0xBD, 0xC8, 0x24, 0xF9, 0x60, 0x69, 0x7F, 0xE7, 0xE6, 0xB6,
0x1C, 0x8B, 0xA2, 0x1F, 0xD1, 0xCE, 0xBB, 0x75, 0x53, 0x4D, 0x3A, 0x03, 0x30, 0x7F, 0x68, 0x9E, 0xBC, 0x29, 0xB4, 0x3E,
0x3D, 0x5B, 0x37, 0xE6, 0xEC, 0x9D, 0x10, 0x82, 0xC5, 0x3F, 0xEF, 0x3B, 0x8C, 0x5F, 0xC2, 0x84, 0x6A, 0x7B, 0xFB, 0x42,
0x44, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82
};

PROGMEM prog_char led_on[]= { //黄色图标,点亮LED灯矩阵
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x0E,
0x00, 0x00, 0x00, 0x0E, 0x04, 0x03, 0x00, 0x00, 0x00, 0xED, 0x66, 0x30, 0xE2, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47,
0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00, 0x00, 0x27, 0x50, 0x4C, 0x54, 0x45, 0x00, 0x00, 0x00, 0xFF, 0xCC, 0x00,
0xCC, 0x66, 0x00, 0xFF, 0xFF, 0x33, 0xFF, 0x99, 0x00, 0xFF, 0xCC, 0x33, 0xCC, 0x99, 0x66, 0xFF, 0xFF, 0x99, 0xCC, 0x99,
0x33, 0xCC, 0x99, 0x00, 0xFF, 0xCC, 0x66, 0x99, 0x66, 0x00, 0xFF, 0xCC, 0x99, 0x4A, 0x4E, 0xC9, 0x79, 0x00, 0x00, 0x00,
0x01, 0x74, 0x52, 0x4E, 0x53, 0x00, 0x40, 0xE6, 0xD8, 0x66, 0x00, 0x00, 0x00, 0x01, 0x62, 0x4B, 0x47, 0x44, 0x00, 0x88, 0x05, 0x1D, 0x48, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0B, 0x12, 0x00, 0x00, 0x0B, 0x12, 0x01,
0xD2, 0xDD, 0x7E, 0xFC, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4D, 0x45, 0x07, 0xDC, 0x01, 0x1D, 0x14, 0x23, 0x1C, 0x87,
0xBC, 0xF0, 0x84, 0x00, 0x00, 0x00, 0x48, 0x49, 0x44, 0x41, 0x54, 0x08, 0xD7, 0x63, 0x60, 0x80, 0x03, 0x26, 0x25, 0x05,
0x30, 0x95, 0x55, 0x3E, 0x0D, 0xC4, 0xD0, 0x31, 0x16, 0x14, 0x6C, 0x02, 0xD2, 0xC9, 0x86, 0x82, 0x82, 0xD2, 0x40, 0xE1,
0xC5, 0x40, 0x3A, 0x44, 0x81, 0x81, 0xA9, 0x18, 0x46, 0x0B, 0x0A, 0x8A, 0xBA, 0x00, 0xE9, 0x60, 0x08, 0xCD, 0x90, 0x0C,
0xA4, 0x9D, 0x80, 0xEA, 0x35, 0x80, 0xD2, 0x20, 0x9A, 0xA9, 0x53, 0xD0, 0x49, 0x01, 0xC9, 0x5C, 0x08, 0x00, 0x00, 0x9A, 0x56, 0x0B, 0x58, 0x9D, 0x6A, 0x76, 0x99, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82
};
// ethernet interface mac address
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };//设置自己的ip地址
byte Ethernet::buffer[700]; //建立缓冲区用来存储发送和接受到的数据
boolean led1Status; //设置LED1的状态,0为关,1为开
boolean led2Status; //设置LED2的状态,0为关,1为开
static void response_callback (byte status, word off, word len) {
Serial.print((const char*) Ethernet::buffer + off );
} //接受从网页接受到的信息。
void setup () {
Serial.begin(57600); //串口波特率设置为57.6k
Serial.println("Arduino Nano");
if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0)
Serial.println( "Failed to access Ethernet controller");
if (!ether.dhcpSetup()) //自动获取ip,gw,dns地址
Serial.println("DHCP failed");
else
Serial.println("DHCP configuration done");
ether.printIp("My IP: ", ether.myip);
// ether.printIp("Netmask: ", ether.mymask);
ether.printIp("GW IP: ", ether.gwip);
ether.printIp("DNS IP: ", ether.dnsip);
pinMode(LED1PIN, OUTPUT); //将LED1,LED2,LED3设置为输出模式并置低位
pinMode(LED2PIN, OUTPUT);
digitalWrite(LED1PIN, LOW);
digitalWrite(LED2PIN, LOW);
led1Status = false; //设置LED1,LED2,LED3设置为输出,即默认模式下为关闭LED灯
led2Status = false;
}
void loop () {
word pos =ether.packetLoop(ether.packetReceive());
if(pos) //如果接受到网站发送来的信息,执行下面的程序
{
if(strstr((char *)Ethernet::buffer + pos, "GET /led_off.png") != 0)
send_png_image(led_off, sizeof(led_off));
else if(strstr((char *)Ethernet::buffer + pos, "GET /led_on.png") != 0)
send_png_image(led_on, sizeof(led_on));
else
{
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED1") != 0)
{
led1Status = !led1Status; //如果LED1被点击,LED1状态翻转,LED1也翻转。
digitalWrite(LED1PIN, led1Status);
}
if(strstr((char *)Ethernet::buffer + pos, "GET /?LED2") != 0) { //如果LED2被点击,LED2状态翻转,LED2也翻转。
led2Status = !led2Status;
digitalWrite(LED2PIN, led2Status);
}
BufferFiller bfill = ether.tcpOffset(); //清除缓冲区,开始准备将网页信息输入缓冲区
bfill.emit_p(PSTR("HTTP/1.0 200 OK"
"Content-Type: text/htmlPragma: no-cache"
"WebLeds"
"Toggle leds: "));
if(led1Status)
bfill.emit_p(PSTR(""));
else bfill.emit_p(PSTR(""));
if(led2Status)
bfill.emit_p(PSTR(""));
else bfill.emit_p(PSTR(""));
bfill.emit_p(PSTR(""));
ether.httpServerReply(bfill.position()); //发送生成网页程序
}
}
}
void send_png_image(PGM_P png_image, unsigned int image_size)
{
BufferFiller bfill = ether.tcpOffset(); // //清除缓冲区,开始准备将网页信息输入缓冲区
bfill.emit_p(PSTR("HTTP/1.0 200 OK" //将相应图片发送到网页界面
"Content-Type: image/png"));
bfill.emit_raw_p(png_image, image_size);
ether.httpServerReply(bfill.position());
}
1-3.jpg 图2
4、让你的arduino连入物联网:
图中所示为我们在物联网平台yeelink上传的数据:图3个是开关控制,图4个是传感器数据曲线:
因为我们用enc28j60网关无法调出登陆物联网界面,故我们用w5100网关和arduino联系起来,参考网上程序,将自己的arduino与物联网平台联系起来。通过点击操作控制来控制LED的点亮与关闭。
#include
#include
#include
#include
byte buff[2];
// for yeelink api
#define APIKEY "20314f31cb6934a5187f43b676be2886" // 此处替换为你自己的API KEY
#define DEVICEID 19119 // 此处替换为你的设备编号
#define SENSORID1 33314 // 此处替换为你的传感器编号
// assign a MAC address for the ethernet controller.
byte mac[] = { 0x00, 0x1D, 0x72, 0x82, 0x35, 0x9D};
// initialize the library instance:
EthernetClient client ;
char server[] = "api.yeelink.net"; // name address for yeelink API
unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds
boolean lastConnected = false; // state of the connection last time through the main loop
const unsigned long postingInterval = 3*1000; // delay between 2 datapoints, 30s
String returnValue = "";
boolean ResponseBegin = false;
void setup() {
pinMode(5, OUTPUT);
Wire.begin();
// start serial port:
Serial.begin(57600);
// start the Ethernet connection with DHCP:
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
for(;;);
}
else {
Serial.println("Ethernet configuration OK");
}
}

void loop() {
// if there's incoming data from the net connection.
// send it out the serial port. This is for debugging
// purposes only:
if (client.available()) {
char c = client.read();
// Serial.print(c);
if (c == '{')
ResponseBegin = true;
else if (c == '}')
ResponseBegin = false;

if (ResponseBegin)
returnValue += c;
}
if (returnValue.length() !=0 && (ResponseBegin == false))
{
Serial.println(returnValue);

if (returnValue.charAt(returnValue.length() - 1) == '1') {
Serial.println("turn on the LED");
digitalWrite(5, HIGH);
}
else if(returnValue.charAt(returnValue.length() - 1) == '0') {
Serial.println("turn off the LED");
digitalWrite(5, LOW);
}
returnValue = "";
}
// if there's no net connection, but there was one last time
// through the loop, then stop the client:
if (!client.connected() && lastConnected) {
Serial.println();
Serial.println("disconnecting."); client.stop();
}
// if you're not connected, and ten seconds have passed since
// your last connection, then connect again and send data:
if(!client.connected() && (millis() - lastConnectionTime > postingInterval)) {
// read sensor data, replace with your code
//int sensorReading = readLightSensor();
Serial.print("yeelink:");
//get data from server
getData(); }
// store the state of the connection for next time through
// the loop:
lastConnected = client.connected();
}
// this method makes a HTTP connection to the server and get data back
void getData(void) {
// if there's a successful connection:
if (client.connect(server, 80)) {
Serial.println("connecting...");
// send the HTTP GET request:
client.print("GET /v1.0/device/");
client.print(DEVICEID);
client.print("/sensor/");
client.print(SENSORID1);
client.print("/datapoints");
client.println(" HTTP/1.1");
client.println("Host: api.yeelink.net");
client.print("Accept: *");
client.print("/");
client.println("*");
client.print("U-ApiKey: ");
client.println(APIKEY);
client.println("Content-Length: 0");
client.println("Connection: close");
client.println();
Serial.println("print get done.");

}
else {
// if you couldn't make a connection:
Serial.println("connection failed");
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
// note the time that the connection was made or attempted:
lastConnectionTime = millis();
}

1-4.jpg 图3
1-5.jpg 图4

小节:通过一周对arduino的学习,我们意识到虽然arduino的开源软硬件都很多,在消费类电子市场占有很大比例,但 对于资深工程师来说,arduino只是AVR的入门硬件,在精密电子仪器,中高端设备中有明显的不足。对学习嵌入式,物联网方面有一定的辅助作用。



  • 参考书籍:

  • 《arduino的入门与精深》

  • 《arduino的程序设计》

  • 《动手玩转arduino》

  • 《学arduino玩转电子制作》

  • 《arduino从基础到实战》



评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:117823 发表于 2016-5-1 17:17 | 显示全部楼层
又盗我图哈。
回复

使用道具 举报

ID:117823 发表于 2016-6-4 01:41 来自手机 | 显示全部楼层
这个是我写的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表