アルカリ電池とマンガン電池との価格差が少なくなって、長寿命でパワーのあるアルカリ電池を使う機会が多くなってきましたが、アルカリ電池を機器にセットしたまま長時間放置しておくと液漏れを起こし、機器本体が使え無くなってしまうことがよくあります。そこで、どんな機器にマンガン電池もしくはアルカリ電池が向いているのか、再確認しました。
マンガン電池 | アルカリ電池 | |
特 徴 | ○アルカリ電池に比べて液漏れがしにくい ○休み休み使うと電力が回復する ●大電力を必要とする機器には使えない |
○マンガン電池よりパワーがある ○使用期限が長い(10年) ●腐食性が高い電解液で液漏れし易い |
推奨用途 | リモコン、キッチンタイマー、時計、 懐中電灯、ペンライト、・・・ (小電力で、使わない時間が多い) |
ヘッドホン、ラジカセ、デジタルカメラ、 電動歯ブラシ、ラジコン、・・・ (パワーが必要、長時間連続使用) |
液漏れ対策 | 液漏れしにくいので、電池消耗チェックが 忘れやすい長期間放置しておく機器に向く |
電池の消耗が直ぐ判るように、確認間隔が 短いよく使う機器に向く |
内包表現(comprehension expression、逆は外延extension)とは、リストや辞書などのオブジェクトのループ処理を簡単・シンプルに記述できる記法で、内包表記の種類として次の4つがある。
|
<奇数を取り出すfilter使用例> def is_mod(x): return x % 2 == 1 list(filter(is_mod, range(1 ,10))) |
|
<mapによる要素毎の演算例> def square(x): return x * x list(map(square , range(1 ,5))) |
|
<zip使用例1> list1 = [1, 2, 3] list2 = [4, 5, 6] list3 = [x * y for x, y in zip(list1, list2)] print(list3) <zip使用例2> list={[1,2,3],[4,5,6],[7,8,9]} for (a,b,c)in zip(*list): print a,b,c |
abc752で作成したPWMパルスはソフトウェアで作成したため精度が悪く、モーターがふらつくことがある。そこで、ハードウェアで高精度のパルス幅を得るため(ALT5モード)WiringPiを利用し、安価なサーボモーター(SG-90、\400)をラズパイで制御した。
サーボモータ制御を行う前に、LED点灯でWiringPiの使い方や動作をテストする。
【WiringPiのインストールとテスト】
<SG-90の主な仕様> パルス幅: 0.5〜2.4mS 周波数: 50Hz(20mS) 静止トルク: 1.8kgf 動作電圧: 4.8〜5V レンジ: 1920 |
<wp_LED.py>
# use for python2 import wiringpi as wp from time import sleep LED = 23 wp.wiringPiSetupGpio() wp.pinMode(LED, wp.GPIO.OUTPUT) while True: wp.digitalWrite(LED, 1) sleep(5) wp.digitalWrite(LED, 0) sleep(5) | |
LED_PWM波形 (Balanceモード、50%、5mS/Div) |
<wp_LEDb.py>
# use for python2 import wiringpi as wp LED = 18 wp.wiringPiSetupGpio() wp.pinMode(LED,wp.GPIO.PWM_OUTPUT) wp.pwmSetRange(1920) wp.pwmSetClock(200) try: while True: duty = input("duty? : ") if duty< 1 or duty > 100: break wp.pwmWrite(LED,duty) finally: print "End" |
【Wiringpiを使ってサーボモーター制御】
WiringPiのPWM波形のデフォルトはBalanceモード(周波数が変わる)でパルスが下図のように平均化され、期待するパルス幅が得られないので、Mark-Spaceモード(周波数一定)を指定する必要がある。
<ハードモードservo-h.py> | <ソフトモードservo-s.py> | |
# use for python2 from wiringpi import * PWM0 = 18 #PWM1 = 19 def setupMotor(id): wiringPiSetupGpio() pinMode(id, GPIO.PWM_OUTPUT) pwmSetMode(GPIO.PWM_MODE_MS) pwmSetRange(1920) pwmSetClock(200) if __name__ == '__main__' : try: setupMotor(PWM0) print "setup GPIO:" ,PWM0 while True: angle = input("count? : ") if angle == 0: pwmWrite(PWM0, 139) print "Move -> 0" break elif angle < 48 or angle > 230: print "ERROR: range(48-230)" else: pwmWrite(PWM0, angle) print "Move -> ",angle finally: print "End" |
# use for python2 import wiringpi as wp PWM_PIN = 23 def setupMotor(id): wp.wiringPiSetupGpio() wp.pinMode(id,wp.PWM_OUTPUT) wp.softPwmCreate(id,0,100) if __name__ == '__main__' : try: setupMotor(PWM_PIN) print "setup GPIO:" ,PWM_PIN while True: duty = input("duty(%)? : ") if duty == 0: wp.softPwmWrite(PWM_PIN, 0) print "duty -> 0" break elif duty < 0 or duty > 99: print "ERROR: range (0-99)" else: wp.softPwmWrite(PWM_PIN,duty) print "duty -> ",duty finally: print "End" |
サーボモーター配線図 | サーボモーター制御中 |
ハードモード波形例(Mark-Spaceモード、1mS) (ソフトを止めても出力は継続、5mS/Div) |
ソフトモード波形例(10%) (サイクル間隔は10mS、5mS/Div) |
ハードモード (GPIO18がALT5になっている) |
ソフトモード (GPIO23がOUTになっている) |