動くプランター「プラタン(植物タンク)」の作り方
2018-12-05
こんにちは。らずらいと姫です。
CEATEC2018に向けて開催していたロームオープンハック2018(ROHC2018)では、たくさんのクリエータさんに、クオリティの高いガジェットを開発していただきました。
これから数回、クリエータさんがLazuriteを使って開発したガジェットを紹介をしていきたいと思います!
まず最初はプラタンのご紹介です。
プラタンは動くプランターです。
技術的にはとっても面白くレベルも高いものなのですが、ROHC2018ではなんとこのガジェットが一次予選で落ちてしまうというクオリティの高さでした。
でも「このまま闇に埋もれてしまうのはもったいない〜!」と思い、製作者の「ななぱぱ」さんに作り方を教えて頂きました!!
まずは出来上がりのお写真がこちら。
↓
プラタンの紹介動画がこちらです!
動きが可愛いですね(^-^)!
ライントレーサって?☄
そもそもライントレーサとはなんなのか…!
私も今回の記事をご紹介するまで知りませんでした。。。
http://www.cct.ac.jp/mech/yume2/yume2.htm
上記URLに詳しく載っているので、ご覧ください!
それでは製作者のななぱぱさんに色々なお話を伺いましたので、
紹介したいと思います!
なぜ開発しようと思ったんですか?☄
植物のパワードスーツを作りたいと思いました。ガンタンクの様な
植物たちは自分の意志を持ち、水が飲みたければ、水場へ集い、お
水を飲んだり、日向に出れば、ご主人様へお知らせし、カラーセン
植物が自由に動き回れる世界を私も、植物も夢見ています。
どんな機能があるのですか?☄
時間になったら、水やりロボから指令を出して、日当たりの良い場
水分が不足したら、水やりロボのところへ水を飲みに行きます。
水やりが完了したら、水やりロボはご主人に水を挙げたことをお知
どうやって作ったのですか?☄
それではプラタンの作り方をご説明していきます!
まず、ライントレースロボットを作ります。
今回使用したのは、タミヤのカムロボ。
✶カムロボの特徴(電子工作用流用デバイスとして)
1.かわいい外観
一から作ると、センスの差が大きくなります。
この点、改造であれば、素材の良さが出来栄えに左右します。
このため、市販キットの改造はおすすめです。
2.左右独立系モーター駆動
左右独立したモーターだと、制御が容易です。モーターもマブチ130モーターなので、
既存Arduinoユーザーのノウハウが流用可能です。
3.無限軌道
歩行ロボットより、コントロールが容易です。
そして、この素材を制御するために以下の部品を用意しました!
1.単三乾電池2本
2.単三乾電池2本用、電池ボックス。
3.ダイソーモバイルバッテリー
4.ローム製ホトリフレクタ RPR-220 3個
( http://akizukidenshi.com/catalog/g/gI-11401/ )
5.抵抗 330kΩ 4.7kΩ 各 3個
6.モータードライバー基板:TB6612使用 Dual DCモータードライブキット
( http://akizukidenshi.com/catalog/g/gK-11219/ )
7.リード線、半田、ハンダこてなど・・・
最初の作業は買い物ですが、次の作業はカムロボの組み立てです。
組み立てると、下のようになります。
↓
普通に動作するか、確認してください。
カムを組込み、まっすぐに進んだり、曲がったり、左右のカタぴらの動きがスムーズに動くなどがポイントです!
カムロボとしての人生は終わります。
カムを抜くとまさにロボットです。
カムを読み取る部分を抜き取ります。
シャフトの固定部品を抜き取り、
短いシャフトと交換します。
先ほど抜き取った固定部品を使いもとに戻します。
カムで方向転換するための部品も抜き取ります。
これでロボの準備ができました!
次に回路の準備を行います。
●センサ回路部分
↓
●モーター制御回路
↓
実際に接続します。
モバイルバッテリーを装着します。
✶動作の確認
センサの状態を確認します。
以下のページを参考にセンサ入力状態を確認します!
↓
https://www.appliot.co.jp/lazurite-jp/lazurite/8375.html
ソフトを転送し、シリアルモニタの内容を確認し、
黒テープと白い画用紙上で値が変わることを確認します。
最後にこのソフトを書き込み、動作確認します。
[c]
#include "linetrace4_ide.h" // Additional Header
// フォトトランジスタ
const int sensorA = 0;
const int sensorB = 1;
const int sensorC = 2;
// センサから読み取った値(analog)
int valA = 0;
int valB = 0;
int valC = 0;
// 閾値
int alpha = 100;
#define AIN1 13
#define AIN2 12
#define PWMA 11
#define BIN1 8
#define BIN2 9
#define PWMB 10
void setup(){
pinMode(AIN1,OUTPUT);
pinMode(AIN2,OUTPUT);
pinMode(PWMA,OUTPUT);
pinMode(BIN1,OUTPUT);
pinMode(BIN2,OUTPUT);
pinMode(PWMB,OUTPUT);
Serial.begin(9600);
}
void loop(){
valA = analogRead(sensorA);
valB = analogRead(sensorB);
valC = analogRead(sensorC);
//シリアルポートに読み取った値を表示させる
Serial.print(valA);
Serial.print(" ");
Serial.print(valB);
Serial.print(" ");
Serial.println(valC);
if (valA > alpha && valB > alpha){
//左、右ともに白なら直進
//モーター正回転
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
analogWrite(PWMA,100);
analogWrite(PWMB,100);
}else if(valA <= alpha && valB > alpha){
//左が黒、右が白ならに左へ旋回
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,HIGH);
digitalWrite(BIN2,LOW);
analogWrite(PWMA,100);
analogWrite(PWMB,250);
delay(50);
}else if(valA > alpha && valB <= alpha){
//左が白、右が黒ならに右へ旋回
digitalWrite(AIN1,HIGH);
digitalWrite(AIN2,LOW);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
analogWrite(PWMA,250);
analogWrite(PWMB,100);
delay(50);
}else{
digitalWrite(AIN1,LOW);
digitalWrite(AIN2,HIGH);
digitalWrite(BIN1,LOW);
digitalWrite(BIN2,HIGH);
analogWrite(PWMA,0);
analogWrite(PWMB,0);
}
//モーターの動作を0.05秒つづける
delay(50);
}
[/c]
これで完成です!
ななぱぱさんより、とても詳しく教えていただきました。
ぜひお試しください!