×

基于传感器让我的植物在需要浇水时尖叫

消耗积分:0 | 格式:zip | 大小:0.18 MB | 2023-02-09

小组店小二

分享资料个

描述

使用一些传感器,我从植物中获取实时读数,通过 SonicPi 触发声音文件。

接收来自传感器的实时读数并进行比较,以检查它们是否低于临界水平,如果是,Arduino 会发出一个 MIDI 音符:一个 F# 音符用于亚临界水平(当植物需要浇水时)和一个Bb 注意水分含量突然上升时(给植物浇水时)。

然后 MIDI 音符通过虚拟端口和串行桥接。

SonicPi 在虚拟端口上监听传入的音符,并比较传入的音符是 F# 还是 Bb。

如果是前者,它会触发一个声音文件,如果是后者,它会触发另一个声音文件。

总而言之,该植物正在演奏只有两个音符的音乐表演。

pYYBAGPjUYKAVAPfAAGG0iSaabo079.png
项目的控制流程。
 

-Arduino代码

int sensor_pin = A0;
int output_value_new ;
int output_value_old = 0;
int satisfied_note = 0x6A;
int scream_note = 0x66;
int threshold_moisture = 80;
void setup() {
 Serial.begin(9600);
 Serial.println("Reading From the Sensor ...");
 delay(2000);
 }
void loop() {
 output_value_new= analogRead(sensor_pin);
 output_value_new = map(output_value_new,550,0,0,100);
 if (output_value_old ==0){
 output_value_old = output_value_new;
 }
 if (output_value_new <= threshold_moisture) {
  //Note on channel 1 (0x90), some note value (note), silent velocity (0x00):
  noteOn(0x90, scream_note, 0x7F);
  delay(100);
 }
 int output_difference = output_value_new - output_value_old;
 if (output_difference >=30){
 //Note on channel 1 (0x90), some note value (note), middle velocity (0x45):
 noteOn(0x90, satisfied_note, 0x7F);
 delay(100);
 }
 Serial.print("Mositure : ");
 Serial.print(output_value_new);
 Serial.println("%");
 delay(1000);
 output_value_old = output_value_new;
}
void noteOn(int cmd, int pitch, int velocity) {
Serial.write(cmd);
Serial.write(pitch);
Serial.write(velocity);
}

-SonicPi代码

screams = "YOUR_SMAPLE_FOLDER_HERE"
satisfied = "YOUR_SMAPLE_FOLDER_HERE"
live_loop :midi_piano do
use_real_time
note, velocity = sync "/midi:loopmidi_port_0:1/note_on"  
if note == 102 #Fsharp7
 sample screams, rrand_i(1,7)
 sleep(rrand_i(1,5))
end
if note == 106 #Bb7
 sample satisfied, rrand_i(1,3)
 sleep(rrand_i(1,4))
end
end
in_thread do
use_real_time
use_real_time
note, velocity = sync "/midi:loopmidi_port_0:1/note_on"
if note == 106 #Fsharp7
 sample screams, rrand_i(1,7)
 sleep(rrand_i(2,6))
end
if note == 102 #Bb7
 sample satisfied, rrand_i(1,3)
 sleep(rrand_i(1,4))
end
end

NOTE: I have made the demonstration video along the lines of those sleazy TV infomercial ads we used to see on cable.

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !