haiouflying 发表于 2017-7-5 13:37:59

江阴1组 萌萌哒小黄人

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


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


程序代码:
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);
   }
}

流程图:


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

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



页: [1]
查看完整版本: 江阴1组 萌萌哒小黄人