arduino超声波测距与processing控制音频?

理由
举报 取消

我们想做一个互动装置,当人靠进装置,装置停止发声,离开装置持续发声。目前用到的有,超声波传感器,arduino,processing。想知道如何写程序代码,尤其是控制声音这一块的。

2017年5月20日 2 条回复 1189 次浏览

回复 ( 2 )

  1. miss Miss
    理由
    举报 取消

    题主没说清楚啊,这个装置的声音是靠什么发出来的?

    1.是同样用arduino能控制的speaker?蜂鸣器?那这样也就不需要其他软件了。

    2.是软件播放一段音频文件?

    3.还是软件合成的声音?并且这个声音和气温、压力有关?或者根据周围音量大小还能改变音色和振幅?

    不管怎么说,无论哪种情况都不应该用processing。如果是我的话就用MAX/Msp,如果你已经将@Ansifa 提供的arduino程序上传,那可以这样实现第二个想法——播放一段音频文件,程序是:

    逻辑和流程就是一路下来的红线走向,这个是为了说清楚怎么运作的,但不是理想的程序。

    改得理想一点应该这样,亲测有效:

    没有了叨逼叨和一切非必须的东西,简洁高效一些。这里用的是我自己的传感器的数据,而音频是循环播放的。

    如果要改成人离越近音量越小,越远音量越大,也就动一点点,东西还更少了,亲测有效:

    睡觉去了。。。万一有人看,再更新第3个声音合成的

  2. Ansifa
    理由
    举报 取消

    超声波测距,得出结果用串口回传电脑就行了。

    arduino端代码:参考我很老的文章Arduino学习笔记A2-Arduino连接超声波传感器测距

    const int TrigPin = 2;
    const int EchoPin = 3;
    int cm = 0, Oldcm = 0;
    void setup()
    {
    	Serial.begin(9600);
    	pinMode(TrigPin, OUTPUT);
    	pinMode(EchoPin, INPUT);
    }
    void loop()
    {
    	digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
    	delayMicroseconds(2);
    	digitalWrite(TrigPin, HIGH);
    	delayMicroseconds(10);
    	digitalWrite(TrigPin, LOW);
    
    	cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
    	if (cm > 0X00 && cm < 0xFF)	//限制一个字节,255cm
    	{
    		if (cm != Oldcm)	//去除重复数据,限制流量
    		{
    			Serial.write(cm);
    			Oldcm = cm;
    		}
    
    	}
    	delay(100);
    }
    

我来回答

Captcha 点击图片更换验证码