欢迎光临
我们一直在努力

九合一综合实验扩展板适用于Arduino UNO


产品购买链接:点我购买

功能介绍:

红色标功能介绍:(均提供示例程序)
1、SW1\SW2,与数字引脚D2\D3相连,可做按键控制实验。
2、3MM单色LED,与数字引脚D12\D13相连,可做LED亮灭闪烁实验。
3、RGB全彩LED,与数字引脚D9\D10\D11相连,可现实多种颜色。
4、DHT11温湿度传感器,与数字引脚D4相连,环境温湿度实验。
5、旋转10K电位器,与模拟引脚A0相连,可做调光控制实验。
6、无源蜂鸣器,与数字引脚D5相连,可做音乐类实验。
7、红外接收模块,与数字引脚D6相连,用来接收分析红外编码。
8、光敏电阻,与模拟引脚A1相连,用来做光控类实验。
9、LM35线性温度传感器,与模拟引脚A2相连,做温度实验。


蓝色标功能介绍:(空闲引脚)
1、I2C引脚,从A4、A5引出,具备IIC功能,接IIC通信类模块。
2、数字引脚,D8、D7引出,接数字功能模块。
3、串口引脚,D0、D1引出,具备串口功能,接串口通信模块。
4、模拟引脚,A3引出,接模拟功能模块。
5、复位按键,跟UNO板载复位按键功能一致。

使用扩展板之前,先去本教程最下方把库文件都下载好,整个文件夹EasyShield都拖入到你的Arduino安装目录下的libraries文件件里面。

在完成以上步骤之后,你就可以在Arduino IDE编译器里面,文件—-示例—-EasyShield里面找到所有示例程序了。

示例程序功能讲解:
1、Blink:控制D13号引脚,使得板载蓝色LED一秒一闪。

int led = 13;  //定义13号引脚为控制引脚

void setup() {
  pinMode(led, OUTPUT);      // 定义为输出模式
}

void loop() {
  digitalWrite(led, HIGH);   // 点亮LED
  delay(1000);               // 等待时间
  digitalWrite(led, LOW);    // 熄灭LED
  delay(1000);               // 等待时间
}

2、Blink2:控制数字12\13号引脚,使得板载红蓝LED每秒交替闪烁。

int led1 = 12;
int led2 = 13;

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

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

3、Blink3:控制数字12\13号引脚,使得板载红蓝出现警灯式闪烁。

int led1 = 12;
int led2 = 13;
int i,j;  //定义两个变量

void setup() {
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop() {
  for(i=0;i<10;i++){         //让下面的程序运行10次
  digitalWrite(led1, HIGH);
  delay(30);
  digitalWrite(led1, LOW);
  delay(40);
  }

  for(i=0;i<10;i++){           //让下面的程序运行10次
  digitalWrite(led2, HIGH);
  delay(30);
  digitalWrite(led2, LOW);
  delay(40);
  }
}

4、Breath_LED:用PWM功能使得RGB9号引脚有呼吸灯效果,可以试着把9改成10和11看效果。

#define LED 9      //可以把这个9换成10或11,看下效果
int i = 0;  //初始化变量

void setup()
{
  pinMode(LED,OUTPUT);
}
void loop()
{
for(i=0;i<255;i++)
  {
    analogWrite(LED,i);         //PWM渐进增加电压,使得亮度加大
    delay(15);
  }
  for(i=255;i>0;i--)            //PWM渐进减少电压,使得亮度降低
  {
    analogWrite(LED,i);
    delay(15);
  }
  analogWrite(LED,0);
  delay(1000);
}

5、Button:用SW1按键来控制LED1的开关,按住亮,松开灭。

int ledPin = 13;
int inputPin = 2;
int val = 0;
void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(inputPin, INPUT);
}
void loop()
{
  val = digitalRead(inputPin);  //读入引脚输入电平
  if(val == HIGH)
  {
     //如果读取到高电平
     digitalWrite(ledPin, LOW);  // 点亮LED
  }
  else
  {
     digitalWrite(ledPin, HIGH); //关闭LED
  }
}

6、Button_Lock:带锁定的SW2开关控制LED1亮灭,按一下亮,再按一下灭。(注意用了SW2不是上个程序的SW1)

int Button=3; //连接开关到D3。
int LED=13; //连接LED到13。
boolean onoff=LOW; //设定一个变量用于记录开关状态。
void setup()
{
  pinMode(Button,INPUT); //按钮端子作为输入
  pinMode(LED,OUTPUT); //LED端子作为输出
}
void loop(){
  if(digitalRead(Button)==HIGH)  //由于本例检测上升沿触发,所以先检测输入是否低电平,
  {
    delay(10); //然后延时一段时间,
    if(digitalRead(Button)==LOW) //然后检测是不是电平变为高了。是的话,就是刚好按钮按下了。
    {
      digitalWrite(LED,onoff);  //写入当前LED状态onoff,
      onoff=(!onoff); //然后LED状态反转,以便下一次使用。
      delay(10);  //延时一段时间,防止按钮突然断开再按下。
      while(digitalRead(Button)==LOW) //判断按钮状态,如果仍然按下的话,等待松开。防止一直按住导致LED输出端连续反转
      {
        delay(1);
      }
    }
  }
}

7、Buzzer:模拟出救护车声音(记得把白色贴纸撕掉)

int buzzer=5;
void setup() 
{ 
  pinMode(buzzer,OUTPUT);
  } 
void loop() 
{ unsigned char i,j;
while(1) 
{ for(i=0;i<200;i++)
{ digitalWrite(buzzer,HIGH);
delay(1);
digitalWrite(buzzer,LOW);
delay(1);
} 
for(i=0;i<100;i++)
{ digitalWrite(buzzer,HIGH);
delay(2);
digitalWrite(buzzer,LOW);
delay(2);} } }

8、DHT11_test:检测环境的温湿度值(上传程序后,打开串口监视器查看。)

double Fahrenheit(double celsius)
{
    return 1.8 * celsius + 32;
}

//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
    return celsius + 273.15;
}

double dewPoint(double celsius, double humidity)
{
    double A0= 373.15/(273.15 + celsius);
    double SUM = -7.90298 * (A0-1);
    SUM += 5.02808 * log10(A0);
    SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
    SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
    SUM += log10(1013.246);
    double VP = pow(10, SUM-3) * humidity;
    double T = log(VP/0.61078);   // temp var
    return (241.88 * T) / (17.558-T);
}

// delta max = 0.6544 wrt dewPoint()
// 5x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
    double a = 17.271;
    double b = 237.7;
    double temp = (a * celsius) / (b + celsius) + log(humidity/100);
    double Td = (b * temp) / (a - temp);
    return Td;
}


#include <DHT11.h>

dht11 DHT11;

#define DHT11PIN 4

void setup()
{
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
  Serial.println();
}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }

  Serial.print("Humidity (%): ");                       //输出湿度
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature (oC): ");                       //输出摄氏度
  Serial.println((float)DHT11.temperature, 2);

  Serial.print("Temperature (oF): ");                       //输出华氏度
  Serial.println(Fahrenheit(DHT11.temperature), 2);

  Serial.print("Temperature (K): ");                      //输出热力学温度
  Serial.println(Kelvin(DHT11.temperature), 2);

  Serial.print("Dew Point (oC): ");                      //输出露点,空气中水气含量达到饱和的气温,低于此温度时水气从空气中析出凝成水珠
  Serial.println(dewPoint(DHT11.temperature, DHT11.humidity));

  Serial.print("Dew PointFast (oC): ");         //这鬼东西我也不知道啥意思
  Serial.println(dewPointFast(DHT11.temperature, DHT11.humidity));

  delay(2000);
}

9、IRrecord:打开串口监视器,找个红外遥控器对着红外接收器按,能读取到按键数值。

#include <IRremote.h>

int RECV_PIN = 6;
int BUTTON_PIN = 12;
int STATUS_PIN = 13;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode(BUTTON_PIN, INPUT);
  pinMode(STATUS_PIN, OUTPUT);
}

// Storage for the recorded code
int codeType = -1; // The type of code
unsigned long codeValue; // The code value if not raw
unsigned int rawCodes[RAWBUF]; // The durations if raw
int codeLen; // The length of the code
int toggle = 0; // The RC5/6 toggle state

// Stores the code for later playback
// Most of this code is just logging
void storeCode(decode_results *results) {
  codeType = results->decode_type;
  int count = results->rawlen;
  if (codeType == UNKNOWN) {
    Serial.println("Received unknown code, saving as raw");
    codeLen = results->rawlen - 1;
    // To store raw codes:
    // Drop first value (gap)
    // Convert from ticks to microseconds
    // Tweak marks shorter, and spaces longer to cancel out IR receiver distortion
    for (int i = 1; i <= codeLen; i++) {
      if (i % 2) {
        // Mark
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK - MARK_EXCESS;
        Serial.print(" m");
      } 
      else {
        // Space
        rawCodes[i - 1] = results->rawbuf[i]*USECPERTICK + MARK_EXCESS;
        Serial.print(" s");
      }
      Serial.print(rawCodes[i - 1], DEC);
    }
    Serial.println("");
  }
  else {
    if (codeType == NEC) {
      Serial.print("Received NEC: ");
      if (results->value == REPEAT) {
        // Don't record a NEC repeat value as that's useless.
        Serial.println("repeat; ignoring.");
        return;
      }
    } 
    else if (codeType == SONY) {
      Serial.print("Received SONY: ");
    } 
    else if (codeType == RC5) {
      Serial.print("Received RC5: ");
    } 
    else if (codeType == RC6) {
      Serial.print("Received RC6: ");
    } 
    else {
      Serial.print("Unexpected codeType ");
      Serial.print(codeType, DEC);
      Serial.println("");
    }
    Serial.println(results->value, HEX);
    codeValue = results->value;
    codeLen = results->bits;
  }
}

void sendCode(int repeat) {
  if (codeType == NEC) {
    if (repeat) {
      irsend.sendNEC(REPEAT, codeLen);
      Serial.println("Sent NEC repeat");
    } 
    else {
      irsend.sendNEC(codeValue, codeLen);
      Serial.print("Sent NEC ");
      Serial.println(codeValue, HEX);
    }
  } 
  else if (codeType == SONY) {
    irsend.sendSony(codeValue, codeLen);
    Serial.print("Sent Sony ");
    Serial.println(codeValue, HEX);
  } 
  else if (codeType == RC5 || codeType == RC6) {
    if (!repeat) {
      // Flip the toggle bit for a new button press
      toggle = 1 - toggle;
    }
    // Put the toggle bit into the code to send
    codeValue = codeValue & ~(1 << (codeLen - 1));
    codeValue = codeValue | (toggle << (codeLen - 1));
    if (codeType == RC5) {
      Serial.print("Sent RC5 ");
      Serial.println(codeValue, HEX);
      irsend.sendRC5(codeValue, codeLen);
    } 
    else {
      irsend.sendRC6(codeValue, codeLen);
      Serial.print("Sent RC6 ");
      Serial.println(codeValue, HEX);
    }
  } 
  else if (codeType == UNKNOWN /* i.e. raw */) {
    // Assume 38 KHz
    irsend.sendRaw(rawCodes, codeLen, 38);
    Serial.println("Sent raw");
  }
}

int lastButtonState;

void loop() {
  // If button pressed, send the code.
  int buttonState = digitalRead(BUTTON_PIN);
  if (lastButtonState == HIGH && buttonState == LOW) {
    Serial.println("Released");
    irrecv.enableIRIn(); // Re-enable receiver
  }

  if (buttonState) {
    Serial.println("Pressed, sending");
    digitalWrite(STATUS_PIN, HIGH);
    sendCode(lastButtonState == buttonState);
    digitalWrite(STATUS_PIN, LOW);
    delay(50); // Wait a bit between retransmissions
  } 
  else if (irrecv.decode(&results)) {
    digitalWrite(STATUS_PIN, HIGH);
    storeCode(&results);
    irrecv.resume(); // resume receiver
    digitalWrite(STATUS_PIN, LOW);
  }
  lastButtonState = buttonState;
}

10、LED_RGB:板载RGB LED灯炫彩变色

#define LEDR 9
#define LEDG 10
#define LEDB 11
int i = 0;

void setup()
{
  pinMode(LEDG,OUTPUT);
  pinMode(LEDB,OUTPUT);
  pinMode(LEDR,OUTPUT);
}

void loop()
{
  analogWrite(LEDR,255);
  delay(1000);    //红
  analogWrite(LEDG,120);
  delay(1000);   //橙
  analogWrite(LEDR,255);
  analogWrite(LEDG,220);
  delay(1000);   //黄
  analogWrite(LEDR,0);
  analogWrite(LEDG,255);
  delay(1000);   //绿  
  analogWrite(LEDB,255);
  delay(1000);   //青
  analogWrite(LEDG,0);
  analogWrite(LEDB,255);
  delay(1000);   //蓝
  analogWrite(LEDR,255);
  analogWrite(LEDG,0);
  delay(1000);   //紫 
  analogWrite(LEDG,255);
  delay(1000);   //白

  analogWrite(LEDG,0);
  analogWrite(LEDB,0);
  analogWrite(LEDR,255);
  delay(1000);   //zi    
  for(i=0;i<255;i++)
  {
    analogWrite(LEDG,i);
    delay(10);
  }
  for(i=255;i>0;i--)
  {
    analogWrite(LEDR,i);
    delay(10);
  }
   for(i=0;i<255;i++)
  {
    analogWrite(LEDB,i);
    delay(10);
  }
  for(i=255;i>0;i--)
  {
    analogWrite(LEDG,i);
    delay(10);
  }
   for(i=0;i<255;i++)
  {
    analogWrite(LEDR,i);
    delay(10);
  }
   for(i=0;i<255;i++)
  {
    analogWrite(LEDG,i);
    delay(10);
  }
  analogWrite(LEDG,0);
  analogWrite(LEDB,0);
  analogWrite(LEDR,0);
}

11、Light_LED:通过板载蓝色电位器对蓝色LED进行开关控制

int sensorPin = 0;
int ledPin = 13;
int sensorValue = 0;

void setup()
{
    pinMode(ledPin, OUTPUT);   // declare the ledPin as an OUTPUT:
}

void loop()
{
    sensorValue = analogRead(sensorPin);// read the value from the sensor:
    if(sensorValue < 700)
    {
        digitalWrite(ledPin, HIGH);   
    }
    else digitalWrite(ledPin, LOW);
}

12、LightSensor:打开串口监视器,读取光敏传感器数值变化,可以用手挡住A1光敏传感器。

void setup()
{
  Serial.begin(9600); // 打开串口,设置波特率为9600 bps
}
void loop()
{
      int val;
      val=analogRead(1);   //传感器接于模拟口0
      Serial.println(val,DEC);//从串口发送数据并换行        
      delay(100);
}

13、LM35:打开串口监视器,查看读取的环境温度。

int Digital_Value=0;
float temp_Value=0;
void setup(){
  Serial.begin(9600);      //波特率设置为9600
  //由于测温范围为0~100℃,输出电压为0~1V,采用内部1.1V参考电压
analogReference(INTERNAL);
}
void loop(){
   Digital_Value=analogRead(2);   //读取电压值(数字量)
   temp_Value=(float)Digital_Value/1023*110.00;//换算成摄氏温度
   Serial.print("Temperature for LM35 is: ");
   Serial.println(temp_Value,2);  //发送温度数据
   delay(1000);   //一秒刷新一次
}

14、RC_motor:这个需要自己在D7那个地方接一个舵机,通过板载电位器控制舵机转动。

#include <Servo.h>
Servo myservo;

int analogPin = 0;

int val;
void setup()
{
  myservo.attach(7);  // 7号引脚输出电机控制信号

  Serial.begin(9600);      
}
void loop()
{
  Serial.print("servo:");
  Serial.println(val);
  delay(15);
  val = analogRead(analogPin);       // 读取来自可变电阻的模拟值(0到1023之间)
  val = map(val, 0, 1023, 0, 179);   // 利用“map”函数缩放该值,得到伺服电机需要的角度(0到180之间)

  myservo.write(val);   // 设定伺服电机的位置

  delay(15);            // 等待电机旋转到目标角度
}

15、Rotation_LED:通过电位器调节LED亮度。

void setup()
{
  pinMode(11,OUTPUT);          //数字口要选择带#号的具有pwm功能的输出口
}

void loop()
{
  int n = analogRead(A0);     //读取A0模拟口的数值(0-5V 对应 0-1204取值)
  analogWrite(11,n/4);         //PWM最大取值255  所以将模拟口的取值n除以4
}

库文件下载:点我下载 提取码:w2ho

未经允许不得转载:Arduino-Maker » 九合一综合实验扩展板适用于Arduino UNO

支付宝扫码打赏 微信打赏

原创文章,若帮到您,欢迎打赏

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

线上商城

中贝斯特创客空间蘑菇云创客教育