2317浏览
查看: 2317|回复: 0

江阴1组 萌萌哒小黄人

[复制链接]
        今天我们给大家介绍的作品是萌萌哒小黄人,我们团队五个人有做外观的,有做程序的,有安装器械的,大家一起通力合作分工完成,,做的这个小黄人相当于一个入门级的玩偶机器人,能跑能唱能眨眼,一起来欣赏吧!
  

           QQ图片20170705132019终板.jpg




【制作步骤】
      我们先是做了个带轮子的小车,可以前进或转弯灵活运动的小车,后来我们想到给他加一点创意装饰,我们看到有黄色卡纸,就想到做个小黄人。我先来说说小黄人的制作如下
       1、小黄人外观是黄色卡纸制作的圆柱体形状,用双面胶围城。
       2、眼睛是用彩色纸杯底,用绒丝线做了眼周的装饰。眼睛是后面连接的LED灯
       3、下面用蓝色的卡纸做成的围裙作为遮挡小车以及内部元件的部分。
       4、最后用彩色丝带以及彩色小球做了装饰,黄色卡纸跟黑色软纸做了手。
       5、头顶部分是黄色卡纸以及黑色绒线做的头发,因为要装头顶的降温风扇,所以最后头顶部分最后所有的程序导入好测试好以后,最后完工的时候再完整安装了。
      接下来说说小车底座用到的一些传感器等元器件的安装:
      主板上接的输入有:环境光传感器、声音传感器
                        输出有:两个LED小灯作为眼睛部分,蜂鸣器模块,小风扇,两个轮子马达
       主板部分输出端口,车轮电机接M1和M2,风扇马达接D11端口,D9和D10是接的灯,D8是蜂鸣器模块
           输入端口A0接光敏传感器,A7接了声音传感器。 QQ图片20170705124512.jpg   QQ图片20170705124501.jpg   QQ图片20170705123253.jpg   QQ图片20170705123246.jpg


程序代码:
int speakerPin = 8;

int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

  // play the tone corresponding to the note name
  for (int i = 0; i < 8; i++) {
    if (names == note) {
      playTone(tones, duration);
    }
  }
}

void setRomeoMotor(int motorId, int speed)
{
  int speedPin, directionPin;
  if (motorId == 1)
  {
    speedPin = 6;
    directionPin = 7;
  }
  else
  {
    if (motorId == 2)
    {
      speedPin = 5;
      directionPin = 4;
    }
    else
    {
      return;
    }
  }


  if (speed == 0)
  {
    digitalWrite(speedPin, LOW);
  }
  if (speed > 0)
  {
    digitalWrite(directionPin, HIGH);
    analogWrite(speedPin, speed);
  }
  else
  {
    digitalWrite(directionPin, LOW);
    analogWrite(speedPin, -speed);
  }
}


void setup()
{
pinMode( 11, OUTPUT);  
pinMode( 10, OUTPUT);
  pinMode( 9 , OUTPUT);
  pinMode( 8 , OUTPUT);  


  pinMode( 7 , OUTPUT);
  pinMode( 6 , OUTPUT);
  pinMode( 5 , OUTPUT);
  pinMode( 4 , OUTPUT);
  digitalWrite(4, LOW);

  digitalWrite(5, LOW);

  digitalWrite(6, LOW);

  digitalWrite(7, LOW);


}


void loop() {
  
      int c1,c2;
      c1=analogRead(0);  
      c2= analogRead(7);
     
     if (c1>800)
     {
       setRomeoMotor(1, 100);
       setRomeoMotor(2, 100);
       digitalWrite(11,HIGH);
       delay( 2000 );
       setRomeoMotor(1, -100);
       setRomeoMotor(2, -100);
       digitalWrite(11,HIGH);
       delay( 2000 );
     }
       else
     {
       setRomeoMotor(1, 0);
       setRomeoMotor(2, 0);
       digitalWrite(11,LOW);
     }
     if(c2>100)
     {
       digitalWrite(9,HIGH);
       delay(500);
       digitalWrite(9,LOW);     
       delay(500);     
       digitalWrite(10,HIGH);
       delay(500);     
       digitalWrite(10,LOW);
       delay(500);
       digitalWrite(9,HIGH);
       delay(500);
       digitalWrite(9,LOW);     
       delay(500);     
       digitalWrite(10,HIGH);
       delay(500);     
       digitalWrite(10,LOW);
       delay(500);
       digitalWrite(9,HIGH);
       delay(500);
       digitalWrite(9,LOW);     
       delay(500);     
       digitalWrite(10,HIGH);
       delay(500);     
       digitalWrite(10,LOW);
       delay(500);
       for (int i = 0; i < length; i++)
        {
           if (notes == ' ')
             {
                delay(beats * tempo); // rest
             }
           else
             {
                playNote(notes, beats * tempo);
             }   
          delay(tempo / 2);
        }
        digitalWrite(9,HIGH);     
        delay(500);
        digitalWrite(9,LOW);     
        delay(500);     
        digitalWrite(10,HIGH);
        delay(500);   
        digitalWrite(10,LOW);
        delay(500);
        digitalWrite(9,HIGH);     
        delay(500);
        digitalWrite(9,LOW);     
        delay(500);     
        digitalWrite(10,HIGH);
        delay(500);   
        digitalWrite(10,LOW);
        delay(500);
        digitalWrite(9,HIGH);     
        delay(500);
        digitalWrite(9,LOW);     
        delay(500);     
        digitalWrite(10,HIGH);
        delay(500);   
        digitalWrite(10,LOW);
        delay(500);     
     }
     else
     {
     digitalWrite(9,LOW);
     digitalWrite(10,LOW);
     noTone(8);
     }
}

流程图:

QQ图片20170705131028.png

当小黄人感应到一定亮度光线时候,就可以行走,并且风扇转动降温,如果听到声音,小黄人两个眼睛轮流闪烁,闪烁完成以后小黄人开始唱歌,唱一首《小星星》的歌,直到结束。


【总结】:现在小黄人交互性还是比较欠缺不够完善,由于没有红外接收模块,所以没有用到遥控器控制,后面可以增加遥控器控制,还可以增加机械手臂,完成更加复杂的动作。



QQ图片20170705131028.png

小黄人视频.rar

4.75 MB, 下载次数: 23

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

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
关于楼主

楼主的其它帖子

上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail