查看: 2328|回复: 2

肺活量大比赛

[复制链接]
  • TA的每日心情
    开心
    2019-5-19 21:33
  • 签到天数: 72 天

    [LV.6]常住居民II

    发表于 2018-4-2 22:50 | 显示全部楼层 |阅读模式
    本帖最后由 topdog 于 2018-4-3 21:50 编辑

    左手定则和右手定则是在高中物理教材中电磁学部分出现的,是电磁学部分的重点之一。口诀“左通力右生电。” 还可以记忆为:因电而动用左手,因动而电用右手,方法简要:右手手指沿电流方向拳起,大拇指伸出,观察大拇指方向。
    472309f790529822cdd4708ed4ca7bcb0b46d49c.jpg
    基于右手定律开发一个肺活量大比赛的竞技项目,用两个usb风扇按下图改装,用arduino测量电阻分压电压值。小伙伴吹动usb风扇的叶片带动电机里的线圈,移动于磁场的导体,因为动生电动势而产生的感应电流。电流通过二极管整流,电流穿过电阻产生电压,并联的电容消除高频波使测量稳定。arduino的模拟端口A0可以对微量的电压进行测量。
    原理图.JPG
    基于以上的原理改装两组usb风扇,看谁的累加值先到预设值,oled屏幕显示累加量判断胜负,比赛过程中启动炫彩led用亮度来激发气氛,比赛胜利者撞线后,泡泡机继电器接通,泡泡机开始喷射漂亮的肥皂泡泡,蜂鸣器奏乐,为比赛胜利者祝贺。
    接线图.jpg
    这是一个无厘头的,带有一定物理原理的游戏,让初中的学生们能够在玩中学习,激发思考,实现这个项目也需要了解arduino,外围洞洞板电路的焊接,风扇、泡泡机和hub板的连接,模拟I/O的使用,蜂鸣器的编曲,oled屏幕u8g库的使用,继电器的控制,炫彩led的操控渐变的实现,按键和系统时间的控制等,最后再用乐高积木做个控制台防止短路,并且把各个部件展现给参赛者。
    IMG_8947.JPG
    参加比赛的学生们玩得多高兴呀。
    IMG_8966.JPG

    IMG_8997.JPG

    IMG_9001.JPG

    材料如下:
    coreUSB一个、HUB一个、继电器一个、蜂鸣器一个、炫彩led两个、开关一个、usb小风扇两个、泡泡机一个、乐高积木若干、导线、二极管、电阻、电容等

    代码如下:

    #include <Microduino_ColorLED.h> //引用美科科技彩灯库 语法手册 https://wiki.microduino.cn/index.php/Sensor-Color_LED_Reference
    #include <U8glib.h>

    #define setFont_M u8g.setFont(u8g_font_timB18) //OLED设置字体
    #define RedPin A0      //设置红队风速检测引脚
    #define BluePin A1     //设置蓝队风速检测引脚
    #define PaoPin 12      //设置泡泡机控制引脚
    #define KeyPin 10      //设置按键检测引脚
    #define LedPin 8       //设置LED引脚
    #define MidiPin 6      //设置蜂鸣器引脚
    #define NUMPIXELS 2    //级联彩灯数量

    ColorLED strip = ColorLED(NUMPIXELS, LedPin); //将ColorLED类命名为strip,并定义彩灯数量和彩灯引脚号

    U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

    int SumRed = 0;    //红队总分初始化
    int SumBlue = 0;   //蓝队总分初始化
    int MaxSum = 1000; //游戏结束总分数设置
    int MaxTime = 30;  //游戏最大超时时间,单位:秒

    //两只老虎跑得快曲谱
    float tonelist[7]={1046.5,1174.7,1318.5,1396.9,1568,1760,1975.5};
    long musiclist[32]={1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,4,3,1,5,6,5,4,3,1,2,5,1,2,5,1};
    long highlist[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,0};
    long rhythmlist[32]={4,4,4,4,4,4,4,4,4,4,2,4,4,2,8,8,8,8,4,4,8,8,8,8,4,4,4,4,2,4,4,2};

    void playmusic() {
      for (int i = 1; i <= 32; i = i + (1)) {
        tone(MidiPin,tonelist[(int)(musiclist[(int)(i - 1)] - 1)] * pow(2, highlist[(int)(i - 1)]));
        delay((2000 / rhythmlist[(int)(i - 1)]));
        noTone(MidiPin);
        delay(10);
      }
    }


    void GameStart(void)
    {
      SumRed = 0;    //红队总分初始化
      SumBlue = 0;   //蓝队总分初始化

      int LED1 = 0;
      int LED2 = 0;

      long TimeCache = 0;  //定义超时时间缓存
      TimeCache = millis();  //获取系统运行时间

      digitalWrite(PaoPin, LOW);  //初始化关掉泡泡机

      while((SumRed < MaxSum) && (SumBlue < MaxSum) && ((millis() - TimeCache) < MaxTime * 1000))
      {
        SumRed += analogRead(RedPin);
        SumBlue += analogRead(BluePin);

         u8g.firstPage();
      do {
        setFont_M;
        u8g.setPrintPos(0, 20);
        u8g.print("red");
        setFont_M;
        u8g.setPrintPos(60, 20);
        u8g.print(SumRed);
        setFont_M;
        u8g.setPrintPos(0, 60);
        u8g.print("blue");
        setFont_M;
        u8g.setPrintPos(60, 60);
        u8g.print(SumBlue);
      } while( u8g.nextPage() );


        LED1 = map(SumRed, 0, MaxSum, 0, 255);
        LED2 = map(SumBlue, 0, MaxSum, 0, 255);

        if(SumRed >= MaxSum)LED1 = 255 ,LED2 = 0;
        if(SumBlue >= MaxSum)LED2 = 255, LED1 =0;

        strip.setPixelColor(0, strip.Color(LED1,0, 0)); //红队显示红色渐变灯效
        strip.setPixelColor(1, strip.Color(0,0,LED2));  //蓝队显示蓝色渐变灯效
        strip.show();

        delay(50);         
      }
    }

    void setup()
    {
      Serial.begin(9600);
      strip.begin();  //LED灯初始化
      strip.setAllLED(COLOR_RED);  //准备好了,两个红灯亮起。
      strip.show();


      pinMode(PaoPin, OUTPUT);  //引脚初始化配置
      pinMode(KeyPin, INPUT);
      pinMode(MidiPin, OUTPUT);

      digitalWrite(PaoPin, LOW);  //初始化关掉泡泡机
      digitalWrite(MidiPin, LOW);  //初始化关掉蜂鸣器
    }

    void loop()
    {
      if(digitalRead(KeyPin) == LOW) //判断按键是否被按下
      {
        GameStart();  //开始游戏
        if(SumRed >= MaxSum)  //判断是否红队赢
        {
          digitalWrite(PaoPin, HIGH);  //开泡泡机

        u8g.firstPage();    //OLED显示红队胜利
        do {
           setFont_M;
           u8g.setPrintPos(0, 20);
           u8g.print("Red Win !!!");   
           } while( u8g.nextPage() );

          playmusic();   //奏乐

        }
        else if(SumBlue >= MaxSum)  //判断是否蓝队赢
        {
          digitalWrite(PaoPin, HIGH);  //开泡泡机

          u8g.firstPage();      //OLED显示蓝队胜利
          do {
              setFont_M;
              u8g.setPrintPos(0, 20);
              u8g.print("Blue Win !!!");   
              } while( u8g.nextPage() );  

             playmusic();   //奏乐
        }
        else
        {

           u8g.firstPage();    //红队蓝队都未则进行比赛则OLED显示游戏超时
           do {
              setFont_M;
              u8g.setPrintPos(0, 20);
              u8g.print("Time Out !!!");   
              } while( u8g.nextPage() );        
        }

        delay(1000);

        digitalWrite(PaoPin, LOW);      //关掉泡泡机
        digitalWrite(MidiPin, LOW);     //关掉蜂鸣器
        strip.setAllLED(COLOR_GREEN);   //两个绿灯亮起,可以按下按键再来一次。   
        strip.show();
      }

    }

    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2018-5-12 17:02
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2018-4-3 13:18 | 显示全部楼层
    不错有意思
  • TA的每日心情
    开心
    2019-5-19 21:33
  • 签到天数: 72 天

    [LV.6]常住居民II

     楼主| 发表于 2018-4-3 22:01 | 显示全部楼层

    谢谢关注,一起学习,一起进步。
    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    博哥零基础教你玩转ESP8266(四) 认识一下ESP8266WiFi库
    博哥零基础教你玩转ESP826
    帖子导航: 博哥零基础教你玩转ESP8266(一) 重识ESP8266 博哥零基础教你玩转ESP8266
    博哥零基础教你玩转ESP8266(一) 重识ESP8266
    博哥零基础教你玩转ESP826
    https://blog.csdn.net/wubo_fly 帖子导航: 博哥零基础教你玩转ESP8266(一) 重识
    无线遥控四个灯泡
    无线遥控四个灯泡
    我有一个遥控器,一个接收板,还有四个灯泡,不知道如何连接在一起,然后控制灯亮
    AS608指纹模块在MEGA2560上的发出滋滋滋的声音
    AS608指纹模块在MEGA2560
    各位大佬求助!近日萌新在做一个门禁系统的毕设,老师要求买个指纹模块,我就去淘宝买
    求助~~!完全不懂的小白只想做一个简单的东西,大神请进。
    求助~~!完全不懂的小白只
    事情是这样,我想做一个通过人体红外感应模块控制电机的装置,这个电机只有一个,
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表