织梦CMS - 轻松建站从此开始!

haoDIY_音响电子电脑科技DIY小制作发明

当前位置: 主页 > DIY视频 > 科技制作 >

与会唱歌的Arduino机器猫互动

时间:2017-05-15 08:01来源:本站 作者:haodiy 点击:
机器猫傻傻的眼睛看着您,准备为您唱首歌,只不过这次的歌声不是从她的嘴巴里唱出的,而是从她肚子上的喇叭中传出的。那么我是如何与她互动,请她唱出我们爱听的

 

与会唱歌的Arduino机器猫互动

 

机器猫傻傻的眼睛看着您,准备为您唱首歌,只不过这次的歌声不是从她的嘴巴里唱出的,而是从她肚子上的喇叭中传出的。那么我是如何与她互动,请她唱出我们爱听的儿歌。互动设备是她前面放着的PS2蓝牙遥控器,摇动PS2摇杆,向她点歌。

视频:

这个作品应该属于互动媒体范畴。我们这一代人为了符合高考的要求,青少年时就很少接触乐理知识和美术实践,这为电子与艺术的结合带来了不少难以逾越的障碍,但是不管谁,总是能从自身角度出发去欣赏艺术和体验艺术,而Arduino的两个主要应用就是机器人和互动媒体,于是也想做这方面的尝试。比如我的博客文章《 Processing互动之光敏电阻与莫奈油画 》就介绍了如何通过光敏电阻的反馈使PC机屏幕里的莫奈油画光影效果发生变化,文章网址: 。

 

与会唱歌的Arduino机器猫互动


 
国外创客爱好者制作了一个木琴,它使用Arduino Mega检测琴键下的压电元件敲击信号,并用蜂鸣器发出MIDI音乐。

 

 

与会唱歌的Arduino机器猫互动

 

我也做一个与音乐有关的作品,通过DFRobot公司出品的Arduino控制器、PS2游戏杆扩展板、蓝牙模块和mp3模块,来控制音乐,让机器猫为我们唱歌。在游戏杆扩展板上,左右摇动PS2摇杆可以确定播放mp3播放顺序,按下红色按钮B暂停播放音乐,而按下蓝色按钮C又继续播放音乐,还有一个按钮,就在PS2摇杆上,直接点压PS2摇杆端部,PS2按钮就会按下,这个按钮A可以点播您指定文件名的mp3音频文件,看看上文我的视频里,mp3模块的SD卡里我存放了6首歌,这个按钮选取的歌是哪首,这首歌很不专业,但是我认为它最可能是机器猫唱出的歌。

 

与会唱歌的Arduino机器猫互动


 
Arduino微控制器是一种简易计算机,可以轻松地完成各种稀奇古怪的事情,比如植物需要浇水时会发送微博,用激光做成的竖琴,画板电子闹钟,兼具酒精测试器功能的话筒,以及可以显示你骑车速度的背心等等。Arduino控制器已经在国外发达国家流行起来,2011年销售量达20万套,现在Arduino原厂出品UNO板子的价格已经降至了148元(人民币),中国代理商网址:。这样的品牌知名度和几乎与国内厂家价格靠近的价格,必然使Arduino原厂板子在2012年大卖。未来有一天会不会,人们像买iphone一样选购Arduino设备。下图是在2012美国旧金山湾区Maker Faire展会中Arduino公司的卖场照片。

 

 

与会唱歌的Arduino机器猫互动


 
Arduino为什么这么红,我认为它与iphone的特质是一样的,它到底满足了科技男内心怎样的需求,我想无非是三点:1、这个产品能不能让我们更懒;2、这个产品能不能让我们更爽;3、这个产品能不能让我们更“拽”,更强大。这三方面的需求Arduino都能满足我们,它的软件易学、硬件积木化,还有大量的网络共享资源,让我们能够轻松快速地创意自己的作品。其实我们是懒人,只不过利用Arduino软硬件资源放大了自己的能力,制作出的作品也相当炫目,让人感觉自己是科技宅男,很爽,很“拽”,而这一切过程,对于别人是一个“谜”。

 

会唱歌的机器猫作品用到的Arduino电控设备组成如下图:

 

与会唱歌的Arduino机器猫互动

 

上图Arduino设备中,主角是DFRobot公司出品的mp3播放模块,这个模块设计初衷是为了让您的机器人会说话。如果机器人能与人进行简单交流的话,那么机器人就会显得更加智能,同时也增加了不少可玩性。模块具有立体声输出,可与有源音箱连接;2路功放输出,每路最大3W,可直接接喇叭;支持两种通讯模式,I2C模式和TTL串口模式,方便与各种Arduino、单片机以及电脑连接。这次mp3模块应用,我采用的是I2C模式。DFRduino mp3通过一个ATMEGA168芯片进行处理,尽量不占用Arduino或其他控制器上的资源,只需要将语音文件放置在SD卡中,Arduino或其他控制器通过通讯发送文件名信息即可播放相应的语音文件。

DFRduino mp3模块各端口分布与功能图:

 

与会唱歌的Arduino机器猫互动

 

上图中,模块的MODE跳针用于选择串口(UART)或者I2C模式(蓝色框标注),使用前请先设置模式。

模块的MONO跳针短路就切换为单声道(如果你只使用一个喇叭时,可以将两个声道音频用一个喇叭放音,短路该跳针即可作为单声道输出),当MONO跳针断开时,2根针分别可作为左右声道立体声输出,可直接接有源音箱。(绿色框标注)

在使用模块时,要保证电源电压为5V,电流最好大于1000毫安,如果电流不够需需要将音量调小或者使用单个喇叭播放。这次我用了一块“骐源”9V锂电池供电,在淘宝买的。

您将SD卡插到USB适配器里,再插到PC电脑的USB插槽里,格式化为FAT格式,然后新建一个sound文件夹,从酷狗音乐下载的音频文件放在sound文件夹内。然后,再把SD卡插到mp3模块电路板下方的Micro SD卡插槽里。注意:SD卡需要Micro SD卡,容量不能超过2G,我用的就是从电脑城买的2G容量SD卡。   

如果您采用I2C主从机模式通信,先把语音播放器模块的MODE跳线帽插在I2C位置,如图:

 

与会唱歌的Arduino机器猫互动

 

再将mp3模块的数据线接到XBEE V5传感器扩展板的I2C插针上,模块的DI接扩展板SCL上,模块DO接扩展板SDA上,模块+5V接和扩展板的5V,模块GND接扩展板的GND。最后将喇叭接到mp3模块的功放输出端,如图:

 

与会唱歌的Arduino机器猫互动


 
Arduno硬件设备设置和联机完成后,剩下的事就是编写Arduino遥控器和接收器的程序了。
  
     Arduino遥控器程序任务:采集遥控器的游戏杆扩展板上的PS摇杆和A、B、C按键信息,处理后,通过蓝牙串口,向Arduino接收器发送字符控制命令,这些命令分别控制mp3文件的播放顺序和暂停播放、继续播放以及指定文件名的mp3播放。
Arduino遥控器程序:
//向ps2摇杆X轴,左右摇动来确定播放mp3播放顺序
int JoyStick_X = 1; //游戏杆扩展板的PS摇杆X轴连在Arduino模拟端口1
//A按键控制播放文件名为star的mp3文件
//B按键控制播放下一个mp3文件
//C按键控制播放上一个mp3文件
int button_A = 5; //游戏杆扩展板的摇杆A按键连在Arduino数字端口5
int button_B =3;   //红色B按键连在数字端口3
int button_C =4;  //蓝色C按键连在数字端口4
int A, B,C;//存储游戏杆扩展板的开关量按键的当前读取值
int x;  //存储游戏杆扩展板的模拟量PS摇杆X轴的当前读取值
char flag;//存储Arduino遥控器向Arduino接收器发送的单“字符”命令
//初始化
void setup()
{
  //把游戏杆扩展板上三个按键设置为开关量输入模式
  pinMode(button_A, INPUT);
  pinMode(button_B, INPUT);
  pinMode(button_C, INPUT);
  //启动串行通信
  Serial.begin(115200);//设置串行通信的波特率为115200b/s
}
//主程序
void loop()
{
     x=analogRead(JoyStick_X);//读取PS摇杆X轴的模拟量信息
     //读取游戏杆扩展板上三个按键“是否按下”的状态
     B= digitalRead(button_B);
     C= digitalRead(button_C);
     A=digitalRead(button_A);     
     //如果B按键为按下状态,同时C按键为松开状态
    if((B ==LOW)&&(C==HIGH))
    {
      //向Arduino接收器发送“暂停播放”命令
      flag='p';
      Serial.print(flag);
    }
    //如果C按键为按下状态,同时B按键为松开状态
   else if((C==LOW)&&(B==HIGH))
    {
      //向Arduino接收器发送“继续播放”命令
      flag='s';
      Serial.print(flag);
    }
    //如果A按键为按下状态
    else if(A==LOW)
    {        
      //向Arduino接收器发送“播放指定文件名mp3文件”命令
      flag='m';
      Serial.print(flag);
    }
     //如果PS摇杆向X轴右方摇动
     else if(x<212)
    {
       //向Arduino接收器发送“播放下一个mp3文件”命令
       flag='n';
       Serial.print(flag);
    }
    //如果PS摇杆向X轴左向摇动
    else if(x>812)
    {
       //向Arduino接收器发送“播放上一个mp3文件”命令
       flag='u';
       Serial.print(flag);
    }
     //否则,不执行任何操作    
    else
    {flag='http://www.cndzz.com/diagram/4234_4235/h';
       Serial.print(flag);
    }
    delay(200);//延时,等待数据发送成功     
}

 

Arduino遥控器与Arduino接收器通信方式是“平等”的RS232串行通信。而Arduino接收器与mp3模块通信方式是主从机模式的I2C通信。Arduino接收器是I2C总线中的主机,mp3模块是I2C总线中的从机,从机地址为0x35。I2C通讯指令使用字符串形式。mp3模块操作指令列表:(例如暂停播放,指令字符串为“\\:p\r\n”)

根据以上mp3模块的I2C通信协议,编写I2C总线主机程序,即,Arduino接收器程序。  
    Arduino接收器程序任务:接受Arduino遥控器发来的字符命令,根据命令字符,执行各种mp3文件的操作,如:播放上一个mp3文件;播放下一件mp3文件;播放指定文件名的mp3;以及暂停播放、继续播放。
Arduino接收器程序:
//I2C接线方式所占用的Arduino UNO硬件资源
  //Arduino    MP3
  //模拟口4    DO
  //模拟口5    DI
  //5V         +5V
  //GND        GND


#include //申明I2C库文件
#include 
#define ArduinoPlayer_address 0x35  //定义mp3模块I2C从机地址 
void TwiSend(const char  *cmd)  //定义“发送mp3操作命令”的函数
{  
  char len = 0;  
  len = strlen(cmd); //计算字符串长度  
  //发送I2C数据到地址为0x35的mp3从机
   Wire.beginTransmission(ArduinoPlayer_address);   
   while(len--)
  {    
     Wire.send(*(cmd++));//发送mp3操作字符串命令
  }  
  Wire.endTransmission();  //停止I2C数据发送
}
//初始化 
  void setup()
  {  
    Wire.begin(); // 把Arduino接受器作为主机,加入到I2C总线中  
    Serial.begin(115200); // 启动Arduino接受器的RS232串行通信
    delay(2000);//等待2秒钟播放器初始化完成  
    // 把mp3模块的音量设置最大,数字 0-255 数字越大音量越大
    TwiSend("\\:v 255\r\n");    
  } 
//主程序 
void loop()
{  
    //接收Arduino遥控器的串口命令字符,执行相应mp3操作
    int val;  
    //如果Arduino接收器串口缓冲区接收到遥控器发来的数据
    if(Serial.available() > 0)
    {  
     val=Serial.read();//读取Arduino接收器串口缓冲区的字符
     switch(val)    
     {    
       case 'p':      // 暂停播放
        TwiSend("\\:p\r\n");     
       break;
       case 's':     // 继续播放
        TwiSend("\\:s\r\n");     
       break;
       case  'n':
       TwiSend("\\:n\r\n");  // 播放下一个mp3文件
       break;
       case 'u':
       TwiSend("\\:u\r\n"); // 播放上一个mp3文件       
       break;
       case  'm':      //播放文件名为star的mp3文件   
       TwiSend("\\star\r\n");
       break;
       default:
       break;
        }
     }
}

美国宇航局耗资25亿美元打造的“好奇”号火星探测器2012年8月6日成功登陆火星(这篇机器猫的文章发表于8月9日)。它将展开为期两年的任务,“好奇”号火星车体积类似于一辆小型SUV汽车,有已经在火星工作了八年多的“机遇”号的五倍大。它搭载了包括相机、样本分析仪、探测器在内的一系列尖端仪器,将尽一切努力考察火星有没有水和有机分子存在的可能性,以及火星的环境是否适宜人类前往。

 

与会唱歌的Arduino机器猫互动

 

“好奇号”火星探测器 发射、着陆、探测过程3D模拟动画视频:

本文转自:


[ 197 KB ] [ 文章插图 ] [ 下载次数:6 ]
[ 20.6 KB ] [ 文章插图 ] [ 下载次数:3 ]
[ 32.1 KB ] [ 文章插图 ] [ 下载次数:1 ]
[ 197 KB ] [ 文章插图 ] [ 下载次数:1 ]

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
相关文章
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片