“(SKU:RB-01C076)CarDuino UNO R3(直插芯片)”的版本间的差异

来自ALSROBOT WiKi
跳转至: 导航搜索
产品相关推荐
第42行: 第42行:
  
 
==应用例程==
 
==应用例程==
 +
==模块测试 ==
 +
我们使用Arduino控制器来做个测试,要用到硬件设备如下:
 +
# Arduino控制器×2
 +
# Arduino 传感器扩展板×2
 +
# 红外发射模块×1和红外接收模块×1
 +
# 电位计模块×1和 LED 发光模块×1
 +
# 通用3P传感器连接线×4
 +
# USB 数据通信线×2
 +
[[文件:3232-4.jpg|500px|有框|居中]]
 +
:如图所示,使用传感器连接线将电位计模块连接到作为发射部分的Arduino传感器扩展板的模拟口0 上,红外发射头连接到 Arduino传感器扩展板的数字口2 上。然后使用传感器连接线将红外发射头连接到作为接收部分的Arduino传感器扩展板的数字口2上,将LED 发光模块连接到Arduino传感器扩展板的数字口9 上。
 +
:将发送部分代码编译后下载到作为发送部分的Arduino里,将接收部分代码编译后下载到作为接收部分的Arduino里,就可以在串口助手窗口上显示接收到的当前值(注:串口助手波特率调到115200 )。Arduino实验代码如下。
 +
:发送部分程序:
 +
<pre style='color:blue'>#define ADD 0x00
 +
int IR_S = 2;    // 定义数字口2 为发射模块接口
 +
int a;
 +
void setup()
 +
{
 +
pinMode(IR_S, OUTPUT);  //定义IR_S为输出模式
 +
Serial.begin(115200); //定义频率为115200
 +
}
 +
void loop()
 +
{
 +
    uint8_t dat,temp; 
 +
{   
 +
      a=analogRead(0); // 读取模拟口0 的值
 +
      temp =a/4;
 +
      Serial.println(temp,DEC ); // 将读取的数值打印到串口上
 +
      IR_Send38KHZ(280,1);//发送9ms 的起始码
 +
      IR_Send38KHZ(140,0);//发送4.5ms 的结果码
 +
   
 +
      IR_Sendcode(ADD);//用户识别码
 +
      dat=~ADD;
 +
      IR_Sendcode(dat);//用户识别码反吗
 +
      IR_Sendcode(temp);// 操作码
 +
      dat=~temp;
 +
      IR_Sendcode(dat);//操作码反码
 +
   
 +
      IR_Send38KHZ(21,1);// 发送结束码
 +
    }
 +
    delay(200);
 +
 +
 +
void IR_Send38KHZ(int x,int y)  //产生38KHZ红外脉冲
 +
 +
for(int i=0;i<x;i++)//15=386US
 +
  { 
 +
      if(y==1)
 +
        {
 +
      digitalWrite(IR_S,1);
 +
          delayMicroseconds(9);
 +
          digitalWrite(IR_S,0);
 +
          delayMicroseconds(9);
 +
        }
 +
      else 
 +
        {
 +
          digitalWrite(IR_S,0);
 +
          delayMicroseconds(20);
 +
        }
 +
  }                                                           
 +
}
 +
 +
void IR_Sendcode(uint8_t x) 
 +
{
 +
    for(int i=0;i<8;i++)
 +
    {
 +
      if((x&0x01)==0x01)
 +
        {
 +
            IR_Send38KHZ(23,1);
 +
            IR_Send38KHZ(64,0);             
 +
        }
 +
        else 
 +
        {
 +
            IR_Send38KHZ(23,1);
 +
            IR_Send38KHZ(21,0); 
 +
        }
 +
        x=x>>1;
 +
    } 
 +
} </pre>
 +
:此代码的功能是从模拟口0 读取电位计的值,并通过红外发射头将读取的数值发送出去。
 +
接收部分程序:
 +
<pre style='color:blue'>#define IR_LED  2  //IR 接收数字口2
 +
#define MAX  128
 +
#define MICRO_STEP  10
 +
#define IDLE_PULSE  4000
 +
unsigned long pulses[MAX];
 +
unsigned char IRCOM[7];
 +
unsigned long z;
 +
int w;
 +
byte f=B00000000; // 定义f 为位
 +
int n;
 +
int ledpin=9; // 定义数字口9 为LED 模块接口
 +
void setup()
 +
{
 +
  pinMode(IR_LED, INPUT);
 +
  Serial.begin(115200);
 +
  pinMode(ledpin,OUTPUT); //定义ledpin 为输出模式
 +
}
 +
                                                           
 +
void loop()
 +
 +
  if( digitalRead(IR_LED) == LOW)
 +
  {
 +
    // 开始接收数据
 +
        int count = 0;
 +
        int exit = 0;
 +
    while(!exit)
 +
    {
 +
      while( digitalRead(IR_LED) == LOW )
 +
        delayMic roseconds(MICRO_STEP);
 +
      unsigned long start = micros();
 +
      int max_high = 0;
 +
      while( digitalRead(IR_LED) == HIGH )
 +
      {
 +
        delayMic roseconds(MICRO_STEP);
 +
        max_high += MICRO_STEP;
 +
        if( max_high > IDLE_PULSE )
 +
        {
 +
          exit = 1;
 +
          break;
 +
        }
 +
      }
 +
      unsigned long duration = micros() - start;
 +
      pulses[count++] = duration;
 +
    }
 +
    for(int i=3; i<4; i++)
 +
    {
 +
      for(int j=0;j<8;j++)
 +
      {
 +
        if(pulses[ i*8+j+1] < IDLE_PULSE)
 +
        {
 +
            IRCOM[i]=IRCOM [i] >> 1;           
 +
            if((pulses[i*8+j+1])>1000)
 +
              {IRCOM[i] = IRCOM[i] | 0x80;}           
 +
        }
 +
      z= pulses[i*8+j+1];
 +
/***************************************************/
 +
    //将接收到的脉冲数据转换成十进制                                                                   
 +
/***************************************************/ 
 +
      if(z<800)
 +
          w=10000000;  //如果Z 小于800  w=10000000
 +
      else
 +
          w=00000000;  //如果Z 大于800  w=00000000
 +
      f=f>>1;        // 将f 右移1 位
 +
      f=f+w;     
 +
/***************************************************/
 +
    }
 +
    }
 +
  n=int(f);
 +
  Serial.print(n);// 将接收到的数据打印到串口上
 +
  analogWrite(ledpin,n); //将接收到的数据写入ledpin 接口,控制LED 亮度
 +
  }
 +
} </pre>
 +
:此部分代码功能是通过红外接收头接收发送部分发送出的电位计的值来控制LED的亮度变化并通过串口助手显示当前接收到的值。如下图所示左侧串口助手(串口号为:117 )显示的是红外发送部分当前发送出的电位计的值,右侧串口助手(串口号为:88)显示的是红外接收部分接收到的数值。
 +
[[文件:3232-5.jpg|500px|有框|居中]]
 
==产品相关推荐==
 
==产品相关推荐==
 
1.购买地址<br/>
 
1.购买地址<br/>

2015年6月12日 (五) 09:32的版本


RB01C076CarduinoUnoR3.jpg

目录

产品概述

Carduino UNO R3是Arduino USB接口系列的最新版本, Carduino Uno R3与Arduino Uno R3一样的AREF边缘增加了SDA和SCL端口,此外,RESET边上还有两个新的端口。一个端口是IOREF,它能够使扩展板适应主板的电压,另一个空的端口预留给将来扩展的可能。Carduino UNO R3能够兼容传感器扩展板v5.0并且能用它额外的端口适应新的扩展板。 Carduino可以用于做项目开发的控制核心也可以与PC进行直接的USB连接完成与电脑间的互动,运行于开源的IDE开发环境,软件可以在Arduino官网直接下载(支持Window,Linux以及Max系统),处理器核心是ATmega328,同时具有14路数字输入/输出口(其中6路可作为PWM输出),6路模拟输入,一个16MHz晶体振荡器,一个USB口,一个电源插座,一个ICSP header和一个复位按钮。

规格参数

  • 工作电压:5V
  • 输入电压:接上USB时无须外部供电或外部7V~12V DC输入
  • 输出电压:5V DC输出和3.3V DC输出 和外部电源输入
  • 微处理器:ATmega328
  • Bootloader:Carduino Uno
  • 时钟频率:16 MHz
  • 输入电压:7-12V(推荐)
  • 输入电压:6-20V(限制)
  • 支持USB接口协议及供电(不需外接电源)
  • 支持ISP下载功能。
  • 14路数字输入输出口:工作电压为5V,每一路能输出和接入最大电流为40mA。

(1)串口信号RX(0号)、TX(1号): 与内部 ATmega8U2 USB-to-TTL 芯片相连,提供TTL电压水平的串口接收信号。
(2)外部中断(2号和3号):触发中断引脚,可设成上升沿、下降沿或同时触发。
(3)脉冲宽度调制PWM(3、5、6、9、10 、11):提供6路8位PWM输出。
(4)SPI(10(SS),11(MOSI),12(MISO),13(SCK)):SPI通信接口。
(5)LED(13号):Arduino专门用于测试LED的保留接口,输出为高时点亮LED,反之输出为低时LED熄灭。

  • 6路模拟输入A0到A5:每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为0到5V
  • AREF:模拟输入信号的参考电压。
  • Reset:信号为低时复位单片机芯片。
  • 直流电流:40mA(I/O端口)
  • 直流电流:50mA(3.3V端口)
  • Flash 内存:32 KB (ATmega328其中0.5 KB用于引导程序)
  • SRAM:2 KB (ATmega328)
  • EEPROM:1 KB (ATmega328)
  • 尺寸:75x55x15mm

使用方法

1.引脚说明

Carduino UNO控制器管脚说明图

2.编译环境下载(当前最新版本IDE是Arduino1.6.4)
Arduino IDE编译环境下载
3.驱动安装
Arduino驱动安装方法
4.程序下载
程序下载方法

应用例程

模块测试

我们使用Arduino控制器来做个测试,要用到硬件设备如下:

  1. Arduino控制器×2
  2. Arduino 传感器扩展板×2
  3. 红外发射模块×1和红外接收模块×1
  4. 电位计模块×1和 LED 发光模块×1
  5. 通用3P传感器连接线×4
  6. USB 数据通信线×2
3232-4.jpg
如图所示,使用传感器连接线将电位计模块连接到作为发射部分的Arduino传感器扩展板的模拟口0 上,红外发射头连接到 Arduino传感器扩展板的数字口2 上。然后使用传感器连接线将红外发射头连接到作为接收部分的Arduino传感器扩展板的数字口2上,将LED 发光模块连接到Arduino传感器扩展板的数字口9 上。
将发送部分代码编译后下载到作为发送部分的Arduino里,将接收部分代码编译后下载到作为接收部分的Arduino里,就可以在串口助手窗口上显示接收到的当前值(注:串口助手波特率调到115200 )。Arduino实验代码如下。
发送部分程序:
#define ADD 0x00 
int IR_S = 2;    // 定义数字口2 为发射模块接口 
int a; 
void setup() 
{ 
 	 pinMode(IR_S, OUTPUT);  //定义IR_S为输出模式 
 	 Serial.begin(115200); //定义频率为115200 
}
void loop() 
{ 
    uint8_t dat,temp;   
{    
      a=analogRead(0); // 读取模拟口0 的值 
      temp =a/4; 
      Serial.println(temp,DEC ); // 将读取的数值打印到串口上 
      IR_Send38KHZ(280,1);//发送9ms 的起始码 
      IR_Send38KHZ(140,0);//发送4.5ms 的结果码 
     
      IR_Sendcode(ADD);//用户识别码 
      dat=~ADD; 
      IR_Sendcode(dat);//用户识别码反吗 
      IR_Sendcode(temp);// 操作码 
      dat=~temp; 
      IR_Sendcode(dat);//操作码反码 
     
      IR_Send38KHZ(21,1);// 发送结束码 
    } 
    delay(200); 
}  
 
void IR_Send38KHZ(int x,int y)  //产生38KHZ红外脉冲 
{  
 for(int i=0;i<x;i++)//15=386US 
   {  
       if(y==1) 
        { 
      		digitalWrite(IR_S,1); 
           delayMicroseconds(9); 
           digitalWrite(IR_S,0); 
           delayMicroseconds(9); 
        } 
       else  
        { 
           digitalWrite(IR_S,0); 
           delayMicroseconds(20); 
        } 
   }                                                            
} 

void IR_Sendcode(uint8_t x)   
{ 
    for(int i=0;i<8;i++) 
    { 
       if((x&0x01)==0x01) 
        { 
            IR_Send38KHZ(23,1); 
            IR_Send38KHZ(64,0);              
        } 
        else  
        { 
            IR_Send38KHZ(23,1); 
            IR_Send38KHZ(21,0);   
        } 
        x=x>>1; 
     }   
} 
此代码的功能是从模拟口0 读取电位计的值,并通过红外发射头将读取的数值发送出去。

接收部分程序:

#define IR_LED  2   //IR 接收数字口2 
#define MAX  128 
#define MICRO_STEP  10 
#define IDLE_PULSE  4000 
unsigned long pulses[MAX]; 
unsigned char IRCOM[7]; 
unsigned long z; 
int w; 
byte f=B00000000; // 定义f 为位 
int n; 
int ledpin=9; // 定义数字口9 为LED 模块接口 
void setup() 
{ 
  pinMode(IR_LED, INPUT); 
  Serial.begin(115200); 
  pinMode(ledpin,OUTPUT); //定义ledpin 为输出模式 
} 
                                                             
void loop() 
{   
  if( digitalRead(IR_LED) == LOW) 
  { 
    // 开始接收数据 
        int count = 0; 
        int exit = 0; 
    while(!exit) 
    { 
      while( digitalRead(IR_LED) == LOW ) 
         delayMic roseconds(MICRO_STEP); 
      unsigned long start = micros(); 
      int max_high = 0; 
      while( digitalRead(IR_LED) == HIGH ) 
      { 
        delayMic roseconds(MICRO_STEP); 
        max_high += MICRO_STEP; 
        if( max_high > IDLE_PULSE ) 
        { 
          exit = 1; 
          break; 
        }
      }
      unsigned long duration = micros() - start;
      pulses[count++] = duration;
    }
    for(int i=3; i<4; i++) 
    { 
      for(int j=0;j<8;j++) 
      { 
        if(pulses[ i*8+j+1] < IDLE_PULSE) 
         { 
            IRCOM[i]=IRCOM [i] >> 1;            
            if((pulses[i*8+j+1])>1000) 
               {IRCOM[i] = IRCOM[i] | 0x80;}             
         } 
       z= pulses[i*8+j+1]; 
 /***************************************************/ 
     //将接收到的脉冲数据转换成十进制                                                                    
 /***************************************************/   
       if(z<800) 
          w=10000000;  //如果Z 小于800  w=10000000 
       else 
          w=00000000;  //如果Z 大于800  w=00000000 
       f=f>>1;         // 将f 右移1 位 
       f=f+w;       
 /***************************************************/ 
     } 
    } 
   n=int(f); 
   Serial.print(n);// 将接收到的数据打印到串口上 
   analogWrite(ledpin,n); //将接收到的数据写入ledpin 接口,控制LED 亮度 
  } 
} 
此部分代码功能是通过红外接收头接收发送部分发送出的电位计的值来控制LED的亮度变化并通过串口助手显示当前接收到的值。如下图所示左侧串口助手(串口号为:117 )显示的是红外发送部分当前发送出的电位计的值,右侧串口助手(串口号为:88)显示的是红外接收部分接收到的数值。
3232-5.jpg

产品相关推荐

1.购买地址
CarDuino UNO R3 控制器购买地址
2.相关书籍
首本Arduino中文教材 入门必读
3.学习套件
爱上Arduino 互动入门套件