IOT第五弾工場見回りロボット試作品爆誕❢❢
ハンダ吸い取り線は添えるだけ。
どうもこんにちはまぶちでございますよ。
(桜木花道っぽく言うなバカッ❢❢)
こちらはド田舎なので、水道管が凍ったり、水道管が破裂したりします。
さて、今回は、休日に作ったIOT第5弾、工場見回りロボットです。
工場見回りロボットプロトタイプ
本体はマイコンで配線してあり、
Pythonのプログラムによって動いています。
基材ベース
中華製のアリエクで購入したこのクルマをベースにします。
お値段なんと284円(本体価格)
ワタシの日曜の弁当とほぼ一緒やん❢❢
安っす。(涙)
アリエキスプレス。
注文を忘れていたころに、謎のダンボールとミイラのようにテープでまかれた
ゴ●みたいな梱包でやってくるアレです。
とりあえず開封し、
モーターのクオリティに嫌な予感がしてくるくる回すと案の定
片方が壊れてました。
もしかして
検品したら負けかなとか
おもってるんですかね?
全盛期の前田智徳の打率ほどの確率で壊れてますね。
最近のAMAZONも同じようなものです。
さて、速攻こちらは以前買った同じような不動品から外して取り付けます。
不動品から不動品を生み出す。
まともに動くものだ。
という常識はもはやアリエクでは非常識なのです。
DCモーターを動かすのは、TA7291というモータードライバを使用。
TA7291が制御できるモーターは1個だけなので、2本を並列に指し、これを基板にて実装しました。
配線図を手書きして
まるでアデランスのように配線を指していく植毛スタイル。
自分の配線で自分がわからなくなるというまさに私の人生のような配線です。
ジャンパワイヤーがたりなくなり、カラーが混ざるので、余計わからなくなります。
作った本人ですら配線がわからなくなる、
現代のサグラダファミリア
現代のマジカル迷宮(ラビリンス)
現代のみ●ほ銀行システム。
(怒られるわ❢❢)
あきらかに制限重量を超えた、
制御用モバイルバッテリーに、
単三電池4本直列6Vの動力用電源
RaspberryPi、モータードライバ基板と
載せられるだけとりあえず乗っけとけ。
みたいな観光地の
海鮮丼のようなスタイル。
それによって動作が極端におそくなるというまさに
メーカー製パソコンのような仕様。
そして
ハウルの動く城のような外観。
圧倒的外観。
まるでルンバのゴミボックスから今しがたつまみだしてきたかのような華麗なビジュアルです。
まさかとは思いますが、とんでもないものを爆誕(バクタン)させてしまった可能性があります。
いや、しかしですね、あんなすごいマキタのロボット掃除機も
中身はおんなじようなものなんで、似たようなものなんです。
(怒られるわバカッ❢❢)
これが今後進化させていく予定になります。
また第一弾も機械に取り付けていきます。
ぜひご期待ください。
★おまけ★
さて、前回のIOTセンサーのソースコードです。
#はコメント文で、人間だけが読み込む注釈です。パソコンは読み込みません。
/* Your code... */
import smbus#smbusというモジュールをインポート
import RPi.GPIO as GPIO#RPi.GPIOというモジュールをインポート
#名前が長いので、asをつかってGPIOに名前短縮。別にGPでも良いですが、
#他の人がみたとき、よく使う定型文なのでわかりやすいです。
import time
#時間のモジュールをインポートし、タイマー的に使えるようにインポート
#import文は必要なモジュールを使えるようにしています。
import RPi.GPIO as GPIO #GPIO用のモジュールをインポート
import time #時間制御用のモジュールをインポート
import sys #sysモジュールをインポート
#ポート番号の定義
Servo_pin = 21 #変数"Servo_pin"に21を格納 GPIOの21ピンを指定
Servo_pin2 = 20 #変数"Servo_pin"に21を格納 GPIOの20ピンを指定
#GPIOの設定
GPIO.setmode(GPIO.BCM)
#GPIOのモードを"GPIO.BCM"BCMモードとピン番号両方どちらでも。今回はBCMを利用
GPIO.setup(Servo_pin, GPIO.OUT) #GPIO21を出力モードに設定 3.3Vを出力できます。
GPIO.setup(Servo_pin2, GPIO.OUT) #GPIO21を出力モードに設定 3.3Vを出力できます。
GPIO.setwarnings(False)
#PWMの設定
#サーボモータSG92Rの周波数は50[Hz]
Servo = GPIO.PWM(Servo_pin, 50) #GPIO.PWM(ポート番号, 周波数[Hz])
Servo2 = GPIO.PWM(Servo_pin2, 50) #GPIO.PWM(ポート番号, 周波数[Hz])
Servo.start(0) #Servo.start(デューティ比[0-100%])
Servo2.start(0) #同じくServo2も同じように設定
#角度からデューティ比を求める関数、細かいことは理解しなくてもOK
def servo_angle(angle):
duty = 2.5 + (12.0 - 2.5) * (angle + 90) / 180 #角度からデューティ比を求める
Servo.ChangeDutyCycle(duty) #デューティ比を変更
Servo2.ChangeDutyCycle(duty) #デューティ比を変更
time.sleep(0.3) #0.3秒間待つ
#while文で無限ループ
#サーボモータの角度をデューティ比で制御
#Servo.ChangeDutyCycle(デューティ比[0-100%])
bus = smbus.SMBus(1)#この辺はもとのコードから引っ張ってるのでわかりません。
addr = 0x23#ここもよくわかりません。部品の一部とわりきりましょう。
luxRead = bus.read_i2c_block_data(addr,0x10)#ここもわかりません。
print(int(luxRead[0]*256+luxRead[1]/1.2),"lux")#ここはルクスを表示させるために変換しているコード
#プリント文にて表示させています。
lled = 27#GPIOの27番ピンをレッドLEDに指定。ホントはつづりRLEDですね。
yled = 17#同じく17番ピンをイエローLEDに指定。
gled = 15#同じく15番ピンをグリーンLEDに指定。
bled = 14#同じく14番ピンをブルーLEDに指定。
GPIO.setwarnings(False)#setwarnings(False)ここはアラームがうるさいので、このコードをいれます。
#別にいれなくても良いですが、毎回のアラームをよけるためのコード
import smbus#smbusというモジュールをインポート
import RPi.GPIO as GPIO#RPi.GPIOというモジュールをインポート
#名前が長いので、asをつかってGPIOに名前短縮。別にGPでも良いですが、
#他の人がみたとき、よく使う定型文なのでわかりやすいです。
import time
#時間のモジュールをインポートし、タイマー的に使えるようにインポート
bus = smbus.SMBus(1)#この辺はもとのコードから引っ張ってるのでわかりません。
addr = 0x23#ここもよくわかりません。部品の一部とわりきりましょう。
luxRead = bus.read_i2c_block_data(addr,0x10)#ここもわかりません。
print(int(luxRead[0]*256+luxRead[1]/1.2),"lux")#ここはルクスを表示させるために変換しているコード
#プリント文にて表示させています。
lled = 27#GPIOの27番ピンをレッドLEDに指定。ホントはつづりRLEDですね。
yled = 17#同じく17番ピンをイエローLEDに指定。
gled = 15#同じく15番ピンをグリーンLEDに指定。
bled = 14#同じく14番ピンをブルーLEDに指定。
GPIO.setwarnings(False)#setwarnings(False)ここはアラームがうるさいので、このコードをいれます。
#別にいれなくても良いですが、毎回のアラームをよけるためのコード
GPIO.setmode(GPIO.BCM)#GPIOピンをピン番号で呼ぶか、BCMで呼ぶかを選択してます。
GPIO.setup(yled,GPIO.OUT)#yled(さっき指示した17番ピンをOUT※出力型荷指定。)
GPIO.setup(gled,GPIO.OUT)
GPIO.setup(bled,GPIO.OUT)
GPIO.setup(lled,GPIO.OUT)
for i in range(15):#同じ動作を150回繰り返すfor 変数 in range():関数を指定。
luxRead = bus.read_i2c_block_data(addr,0x10)#ゴチャついたI2CのデータをLUXREAD変数に入れてます。
print(int(luxRead[0]*256+luxRead[1]/1.2),"ルクス")#カッコ内がルクスの数値なので、これをプリントにて表示させます。
if (luxRead[0]*256+luxRead[1]/1.2)<100:#難しそうな文ですが、さっきのルクスが200を下回ったら。とかいてます。
print("☆★★★★")#プリント文でわかりやすい表記に☆★をつかって
GPIO.output(bled,True)#もし200を下回ったら、bledを出力してね。(点灯)
for i in range(2):
time.sleep(0.2)
servo_angle(90)
servo_angle(-10)
time.sleep(0.5)
servo_angle(0)
GPIO.output(bled,False)#終わったら消灯(False)
elif (luxRead[0]*256+luxRead[1]/1.2)<1000:#200度以上で500未満の場合
print("☆☆★★★")
GPIO.output(gled,True)
time.sleep(1)
GPIO.output(gled,False)
time.sleep(0.0001)
elif (luxRead[0]*256+luxRead[1]/1.2)<1400:
print("☆☆☆☆★")
GPIO.output(yled,True)
time.sleep(1)
GPIO.output(yled,False)
time.sleep(0.0001)
else: #いずれでもない場合はこの処理、つまり1280ルクス以上
print("☆☆☆☆☆")
GPIO.output(lled,True)
time.sleep(1)
GPIO.output(lled,False)
time.sleep(0.0001)
GPIO.cleanup()#GPIOにのこった情報をすべてクリーンナップします。
Servo.stop() #サーボモータをストップ
GPIO.cleanup() #GPIOをクリーンアップ
sys.exit() #プログラムを終了
GPIO.cleanup()#GPIOにのこった情報をすべてクリーンナップします。
①入力
BH1750にのっているGY-30の照度センサが照度を拾い、I2C通信にてラズパイに照度を入力します。
②表示
照度によってLEDが光る仕組みです。
1200ルクス以上で赤色、900ルクス以上で黄色などとカラーによって色がわかります。
③出力
そして指定ルクスを下回ったら消灯している。と認識し、サーボモーターが稼働します。
④通知
最後にLINENOTIFYによって、通知され皆に共有される仕組みになっております。
失礼致しました。Amazonで商品を販売している林遠です。
ブログを拝見しました。弊社のラズベリーパイ4レビューブログ記事を書きしてくれませんか。
こちらは無料でサンプルを提供します。
連絡メールはjp02@vertue.cnです。
御返事お待ちしております。どうぞよろしくお願いします。