python pigpioライブラリでLED制御
pigpioライブラリで、汎用のLED制御関数を作成した。
複数のLEDを制御する関数で、
(1)指定したLEDが同時に点滅調光するモード
(2)指定したLEDを順番に点滅調光するモード
の2つが利用できる。
パラメーター:
r:赤、g:緑、b:青(GPIO番号指定、点灯しない場合は、0(ゼロ指定))
ton:点灯時間、toff:消灯時間(秒)
duc:dutyサイクル指定(1〜100指定)
v:調光有無指定、0:調光無し、1:調光有り
c:同時点灯、順番点灯指定、0:同時点灯調光、1:順番点灯調光
ロボットの性別、喜怒哀楽をLEDで表現するための関数で、パラメーターを細かく設定することで、ロボットの表情(喜怒哀楽)を作ることができる。
例えば、
(1)普通の表情
(2)嬉しい表情
(3)寂しい表情
(4)怒った表情
をLEDの色、調光、点灯時間、消灯時間のパラメーターを設定して表現する。
この関数は、複数のロボットが会話する時に各々のロボットの表情を制御できる。
LEDの他に、pigpioライブラリでサーボモーターの制御を細かくすることでロボットの表情(喜怒哀楽)を変えることができる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import pigpio from time import sleep # LED 制御関数 """ 指定した色全部が同時に点滅調光するモード 指定した色を順番に点滅調光するモード r:赤、g:緑、b:青(GPIO番号指定、点灯しない場合は、0(ゼロ指定)) ton:点灯時間、toff:消灯時間(秒) duc:dutyサイクル指定(1〜100指定) v:調光有無指定、0:調光無し、1:調光有り c:同時点灯、順番点灯指定、0:同時点灯調光、1:順番点灯調光 """ def led(r,g,b,ton,toff,duc,v,c): list = [r,g,b] rgblist = [] for p in list: if p != 0: rgblist.append(p) if rgblist == []: return False if not ((4 <= r <= 27) or (r == 0)): return False if not ((4 <= g <= 27) or (g == 0)): return False if not ((4 <= b <= 27) or (b == 0)): return False FREQ = 200 # PWM周波数 200Hz RANGE = 100 # PWM最大値 100 pi = pigpio.pi() for p in rgblist: pi.set_mode(p, pigpio.OUTPUT) for p in rgblist: pi.set_PWM_frequency(p, FREQ) for p in rgblist: pi.set_PWM_range(p, RANGE) try: d = 0 dc = duc if v == 0: # 調光無しか? dc = RANGE # dc=RANGEの時は調光なしの点滅 if c == 0: # 同時点滅調光モード while True: for p in rgblist: pi.set_PWM_dutycycle(p, d) sleep(ton) for p in rgblist: pi.set_PWM_dutycycle(p, 0) sleep(toff) d += dc #print(str(d)) if d >= RANGE or d <= 0: dc *= -1 if d > RANGE: d = RANGE if d < 0: d = 0 pi.stop() # リソース開放 elif c == 1: # 順番点滅調光モード while True: for p in range(len(rgblist)): pi.set_PWM_dutycycle(rgblist[p], d) sleep(ton) pi.set_PWM_dutycycle(rgblist[p], 0) sleep(toff) d += dc #print(str(d)) if d >= RANGE or d <= 0: dc *= -1 if d > RANGE: d = RANGE if d < 0: d = 0 pi.stop() # リソース開放 except KeyboardInterrupt: pass for p in rgblist: pi.set_mode(p, pigpio.INPUT) pi.stop() if __name__ == '__main__': tf = led(r=25,g=21,b=19,ton=0.8,toff=0.3,duc=10,v=1,c=1) print(tf) |
群馬プログラミングカレッジでは、複数ロボットの会話システムを開発しています。
用途は、
複数のロボットで色々な案内をする
芸術作品の案内
観光地の案内
お店の案内
など様々な案内を複数のロボットが行います。
ロボットは会話に応じて喜怒哀楽の表現をします。