#MA2018にも応募・展示しています。
というわけで、ここで供養することにしました。
youtubeにビデオプロトタイプもありますので、こちらも見ていってください。
#動機
元々は静電容量式タッチセンサをスイッチサイエンスで買ったことから始まりました。
スマホと同じ原理で、タッチの有無を僅かな静電容量の充電時間から判別し、digitalRead()で返してくれる優れもの。静電容量式なら水や植物でも反応するので、結構遊んでて面白い。
こうして、タッチセンサでいろいろ遊んでいた時に、こちらの記事を見かけました。果汁グミでタッチセンサをつくっていくスタイル。 pic.twitter.com/a3yaRViBpF
— ぱぷりか (@p3ishunma2) 2018年8月30日
もう観葉植物を枯らさない! Arduinoで鉢植えをしゃべらせる - Qiita
####これ、タッチセンサで植物を喋らせれば面白いんじゃないか?
#今回の制作イメージ
世の中には触ると痛いもの、触ってはいけないもの、たくさんありますよね。サボテンのトゲも触ると痛いものですが、
実は、厳しい環境における彼らの生存戦略の結晶なのです。
そこで、ただ愛でるだけでなく、痛みを共有することもできるように、サボテンを触ったら「痛い」と喋ってくれるようなシステムを提案いたします。ただし、あんまり触りすぎると、負けじとトゲで反撃してくるので、果たしてどっちが痛いのか、わからなくなること間違いなしです!
また、余った部品と譲り受けた土壌センサで、土の水分量を監視して土が乾いてきたら、**「喉かわいた」**と喋ってくれて、水やりすると、感想具合によって「助かったわ」、ものすごく乾いていると「死ぬかと思った」とお礼を言ってくれる回路も同時に作ってみました。
#使用ハードウェア
触ると喋る方と、水やりすると喋る方に分けてそれぞれ用意。
##触ると喋る
Arduino UNO
今回は外でも使えるようにスタンドアローンなシステムにしようと考え、センサの値を監視するシステムをArduinoで作ることに。
最初はRaspberry Piで開発を試みるも、手持ちのA/D変換を経由した出力が半波整流した正弦波みたいになっていたため、敢えなく断念。
microSDとDFPlayer mini
音声をArduinoで再生するために、microSDに音声ファイルを入れて擬似的に植物に喋らせる。
DFPlayerはアンプも内蔵されていて、シールドを使うよりもコンパクトで安いので、ArduinoでMP3を再生するにはピッタリです。
静電容量式タッチセンサ
土の中に線を仕込んでおく
3.5mmステレオミニジャックDIP化キット: 半導体 秋月電子通商-電子部品・ネット通販
音声出力
##水やりしたら喋る
土壌センサ
半固定抵抗をanalogRead()しても問題ないと思います。
microSDとDFPlayer mini
3.5mmステレオミニジャックDIP化キット: 半導体 秋月電子通商-電子部品・ネット通販
こちらも同様にして音声出力させる。
#使用ソフトウェア
Arduino IDEに、DFPlayermini用のライブラリを導入。GitHub - DFRobot/DFPlayer-Mini-mp3
音声は出番のなくなったRaspberry Piに、AquesTalk Piを導入して、出力させてみました。AquesTalk Pi の使い方まとめ | N.Yamazaki's blog
一定時間ごとに土の水分量を喋らせたいので、タイマーには、metroを使用。
Arduinoでタイマーをつかう - みかづきブログ その3
GitHub - thomasfredericks/Metro-Arduino-Wiring: Metro library for Arduino or Wiring
#音声ファイルをmicroSDに用意
AquesTalkPiのディレクトリに移動した後、こんな感じでゆっくり音声を.wavファイルに出力
$ cd aquestalkpi/
$ ./AquesTalkPi 。"あーもうめちゃくちゃだよ。" -o 0008.wav
DFPlayerは.mp3と.wavのどちらでも再生できるようですが、今回は、iTunesで.mp3ファイルに変換することに。
#配線図
1つのArduinoにタッチセンサと土壌センサを接続すると、GNDがとれないようで、誤作動を連発してしまいました。
コンデンサを入れても、あまり改善されなかったため、分けて配線しています。
##タッチセンサ
こちらを参考に。|AT42QT101X Capacitive Touch Breakout Hookup Guide - learn.sparkfun.com
##DFPlayer
Arduinoのピンのなかから、ノイズの少ない3.3Vピンを電源にして、DFPlayer MiniのRX~ArduinoのTXの間に1.0kΩの抵抗を挟んで、電位差を吸収すると、比較的ノイズのない、スムーズな音声出力ができます。
このサイトに、詳細な配線があります。
サーバルちゃんボタンをつくる、あるいはDFPlayer Miniによる音声再生を試す - にせねこメモ
#スケッチ
##触ると喋る
//talkative2
//タッチセンサの方
//できれば、距離センサも付け足したい
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Metro.h>
SoftwareSerial mySerial(10, 11); // RX, TX
boolean touch = false;
boolean last_touch = false;
Metro metro1 = Metro(600000);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mySerial.begin (9600);
mp3_set_serial (mySerial); //set softwareSerial for DFPlayer-mini mp3 module
mp3_set_volume (18); // 音量の設定(0~30)
pinMode(8,INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//touch
if(digitalRead(8) == 1){
touch = true;
}else{
touch = false;
}
if(touch != last_touch & touch == true){
mp3_play(random(5, 9));
}
last_touch = touch;
Serial.println(touch);
delay(100);
}
##水やりすると喋る
//talkative1
//水やりのお礼を言ってくれる。
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>
#include <Metro.h>
SoftwareSerial mySerial(10, 11); // RX, TX
int val = 0;
int l_val = 0;
Metro metro1 = Metro(600000);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
mySerial.begin (9600);
mp3_set_serial (mySerial); //set softwareSerial for DFPlayer-mini mp3 module
mp3_set_volume (18); // 音量の設定(0~30)
}
void loop() {
// put your main code here, to run repeatedly:
val = analogRead(1);
//thirsty metroで一定時間ごとに喋らせる。
if(metro1.check() == 1){
if(abs(val) < 300){
mp3_play (1);
delay(6000);
}
//satisfy
else{
mp3_play (4);
delay(6000);
}
}
//wasdying
if(val - l_val >= 200){
mp3_play (3);
delay(6000);
}
//thanks
else if(val - l_val >= 100){
mp3_play (2);
delay(6000);
}
l_val = val;
Serial.println(val);
delay(500);
}
#作って実際に使ってみて
控えめに言って、図々しいです。
しかも、触っているとトゲで反撃してくることがあります。
でも、とりあえず使い始めてから枯れてない!
半月ぐらい共用スペースで運用していますが、触ると反応して、水をあげるとお礼も言ってくれるので、心にゆとりを持って世話ができ、ちょっと和むと好評です。
触ってはいけないものに触れたくなる人へ
植物(サボテン)の水やりを忘れてしまうあなたへ
「喋ボテン」いかがでしょうか?