「ゴミの自動分別機」開発ブログ#2

~卒研の開発ブログを学生の記録からお届けします!~
ごみの分別の悩みを解決「自動ごみ分別機」を製作する!

ゴミの自動分別機のハードウエア部分がかなり完成に近づいてきました!ゴミをひとつづつコンベアに乗せる仕組みが出来上がりました。

今回はこれらの機器を制御するプログラムについてレポートします!
プログラムで制御しなければいけないのがゴミを受け流すベルトコンベアに加えて要になるAIの制御となります。このAIがなければ、ごみが何かを判断できないので、分別ができません。いわば、ゴミ分別機の脳のようなものです。カメラを使って画像認識をし、その画像をAIに学習させて、燃えるゴミかプラゴミかを判断する計画です。

手始めにベルトコンベアと弁の制御するプログラムから紹介します!なお、今回のシステムで使うプログラミング言語はAIの構築に長けたPythonです。

長いので一つずつ分けて簡単に説明します!

#サーボモーターのマッピング
def map(value,fromLo,fromHi,toLo,toHi):
    return (toHi-toLo)*(value-fromLo)/(fromHi-fromLo)+toLo

#角度に対しての定数設定1
def seWrite(angle):
    if(angle<0): angle=0 elif(angle>180):
        angle=180
    q.ChangeDutyCycle(map(angle,0,180,MinDuty,MaxDuty))
#角度に対しての定数設定
def seWrite2(angle):
    if(angle<0): angle=0 elif(angle>180):
        angle=180
    r.ChangeDutyCycle(map(angle,0,180,MinDuty,MaxDuty))

上記のプログラムでは分別弁を動かすためのサーボモーターを制御するプログラムです。種別に合わせてゴミが流れ落ちる角度を変えられ様にしています。

ゴミ処理部分
def opener():
    print("Door is Open.")
    motor1 = l293d.DC(mPin1,mPin2,enPin)
    time.sleep(0.5)
    print("Sonar1 is :",distance1,", Sonar2 is :",distance2)
    while True:
        for dc in range(180,0,-1):
            seWrite2(dc)
            time.sleep(0.001)
        time.sleep(0.5)
        motor1.clockwise(speed=100,duration=1.5)
        for dc in range(25,110,1):
            seWrite(dc)
            time.sleep(0.001)
        time.sleep(5)
        motor1.clockwise(speed=100,duration=3)
        for dc in range(110,25,-1):
            seWrite(dc)
            time.sleep(0.001)
        time.sleep(0.5)
        
        time.sleep(3)
        
        motor1.clockwise(speed=100,duration=1.5)
        for dc in range(25,0,-1):
            seWrite(dc)
            time.sleep(0.001)
        time.sleep(5)
        motor1.clockwise(speed=100,duration=3)  
        for dc in range(0,25,1):
            seWrite(dc)
            time.sleep(0.001)
        time.sleep(0.5)

このプログラムでベルトコンベアを動かし、カメラ位置までゴミを動かし、AIの画像判定を行います。

さぁ!次はいよいよAI部分に突入です!!乞うご期待!!