Information Engineering Exercise II 月曜日3~4限目 3rd-4th Period, Mon. 担当:北川 晃(技術教育コース) A. Kitagawa (Technology Education)
トランジスタを用いた回路の作成例 GPIO25(22番ピン)へ LEDには常に5Vかけておく トランジスタにより 電流の流量を制御する 電流の流量を制御する プログラムは先と同じ 22kΩ GNDへ 180Ω 5Vへ
GUIプログラムによるLEDの点灯回路の改良 二つのGPIOポートを用いてそれぞれのLEDを制御する. 「LED1」,「LED2」の二つのボタンを作成し,それぞれのボタンを 押したときにLEDが点灯,もう一方が消えるようにプログラムする.
LED制御プログラム(LED control program) import RPi.GPIO as GPIO import Tkinter GPIO.setmode(GPIO.BOARD) LED1=22 LED2=18 GPIO.setup(LED1, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(LED2, GPIO.OUT, initial=GPIO.LOW) def func1(): GPIO.output(LED1, GPIO.HIGH) GPIO.output(LED2, GPIO.LOW) def func2(): GPIO.output(LED2, GPIO.HIGH) GPIO.output(LED1, GPIO.LOW)
LED制御プログラム(LED control program) root=Tkinter.Tk() label1=Tkinter.Label(root,text='press button') label1.pack() button1=Tkinter.Button(root,text='LED1',command=func1) button1.pack() label2=Tkinter.Label(root,text='press button') label2.pack() button2=Tkinter.Button(root,text='LED2',command=func2) button2.pack() root.mainloop() GPIO.cleanup()
GUIプログラムによるLEDの点灯回路の改良2 二つのGPIOポートを用いてそれぞれのLEDを制御する. 「LED1」,「LED2」,「BOTH」,「OFF」の四つのボタンを作成し, それぞれのボタンを押したときにLEDが適切に 動作するようにプログラムする.
トランジスタを用いた回路の作成例 GPIO24(18番ピン)へ GPIO25(22番ピン)へ 同じ回路を二つ作る LEDには常に5Vかけておく トランジスタにより 電流の流量を制御する 二つのGPIOポートを用いる 22kΩ 22kΩ GNDへ 5Vへ 180Ω 180Ω
LED制御プログラム(LED control program) import RPi.GPIO as GPIO import Tkinter GPIO.setmode(GPIO.BOARD) LED1=22 LED2=18 GPIO.setup(LED1, GPIO.OUT, initial=GPIO.LOW) GPIO.setup(LED2, GPIO.OUT, initial=GPIO.LOW) def func1(): GPIO.output(LED1, GPIO.HIGH) GPIO.output(LED2, GPIO.LOW) def func2(): GPIO.output(LED2, GPIO.HIGH) GPIO.output(LED1, GPIO.LOW)
LED制御プログラム(LED control program) def func3(): GPIO.output(LED1, GPIO.HIGH) GPIO.output(LED2, GPIO.HIGH) def func4(): GPIO.output(LED1, GPIO.LOW) GPIO.output(LED2, GPIO.LOW) root=Tkinter.Tk() label1=Tkinter.Label(root,text='press button') label1.pack() button1=Tkinter.Button(root,text='LED1',command=func1) button1.pack() label2=Tkinter.Label(root,text='press button') label2.pack()
LED制御プログラム(LED control program) button2=Tkinter.Button(root,text='LED2',command=func2) button2.pack() label3=Tkinter.Label(root,text='press button') label3.pack() button3=Tkinter.Button(root,text='BOTH',command=func3) button3.pack() label4=Tkinter.Label(root,text='press button') label4.pack() button4=Tkinter.Button(root,text='OFF',command=func4) button4.pack() root.mainloop() GPIO.cleanup()
GUIスライドバープログラム(A program for GUI slide bar 1) 用いて,LEDの明るさ を変化させる. (A brightness of LED is changed with a GUI slide bar. ) import RPi.GPIO as GPIO import Tkinter GPIO.setmode(GPIO.BOARD) GPIO.setup(22, GPIO.OUT, initial=GPIO.LOW) p = GPIO.PWM(22, 100) root = Tkinter.Tk() led_val = Tkinter.DoubleVar() led_val.set(0) p.start(0) 22番ピンに,100Hzのパルスを生成する (A pulse of 100Hz is generated on the pin of No. 22. ) スライドバーの値を倍精度実数型で作成 (A measure of slide bar is generated as a double precision. ) スライドバーの値の初期値をゼロに. (A measure of slide bar is initially set to zero. ) PWM信号を出力 (Starting PWM signal. )
GUIスライドバープログラム(A program for GUI slide bar 2) スライドバーが動かされた ときに参照される関数, デューティー比を変更する. (A function that is referred to when the slide bar is moved. It changes pulse duty factor. ) def change_duty(dc): p.ChangeDutyCycle(led_val.get()) s = Tkinter.Scale(root, label = 'LED', orient = 'h', \ from_ = 0, to = 100, variable = led_val, \ command = change_duty) s.pack() root.mainloop() p.stop() GPIO.cleanup() スライドバーを定義 ラベル「LED」,水平に表示, 数値の範囲は0~100. (Definition of slide bar. Label is ‘LED’, it is displayed horizontally, the range of measure is 0 – 100. ) ウィンドウを閉じると パルスを止める. (When the window is closed, pulse is also stopped.
タクトスイッチを用いたLED回路(LED circuit with a tact switch) (While the tact switch is pushed, LED lights up. ) 2系統の回路を作成する. (Assemble two systems: ) スイッチオンの信号を受け取る. (A circuit that receives a signal of switch-on. ) 上の信号をトリガーとして,LEDを点灯させる. (A circuit that lights LED by the above signal as a trigger. ) 接続されていない, スイッチとして働く (They are not connected and work as a switch. ) 接続されている (They are connected. ) Circuit 1 Circuit 2 GPIO 24 Pin of No. 18 GPIO 25 Pin of No. 22 Switch-on! LED on!
回路1の設計(Design of circuit 1) SW 3.3V GPIO24 0V SW 3.3V GPIO24 スイッチオンまで,GPIO 24の電圧が不定 (The voltage of GPIO 24 is indeterminate till the switch is on. ) スイッチオンで,回路が短絡し,大電流が流れる (With switch-on, the circuit shorts and high-current flows. ) SW 3.3V GPIO24 0V 39kΩ スイッチオフのとき,GPIO 24は0V. (When switch is off, the voltage of GPIO 24 is 0V. ) スイッチオンのとき,GPIO 24は3.3V, プルダウン抵抗のおかげで短絡はしない. (When switch is on, the voltage of GPIO 24 is 3.3V. Due to the pull-down resistor, no short-circuit appears. ) プルダウン抵抗 (Pull-down resistor)
回路の実装(Assemble of the whole circuit) 1.2kΩ 39kΩ Circuit 1 SW 1.2kΩ 39kΩ SW
制御プログラムの作成(Making program for controlling circuit) import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BOARD) GPIO.setup(22, GPIO.OUT) GPIO.setup(18, GPIO.IN) try: while True: if GPIO.input(18)==GPIO.HIGH: GPIO.output(22, GPIO.HIGH) else: GPIO.output(22, GPIO.LOW) sleep(0.01) except KeyboardInterrupt: pass GPIO.cleanup() 18番ピンが高電圧(3.3V)なら, 22番ピンを高電圧に, そうでないなら低電圧(0V)に (If pin of No. 18 is in high voltage, pin of No. 22 is also set to high voltage. Else, pin of No. 22 is set to low voltage. 22番ピンを出力として用いる 18番ピンを入力として用いる (Pins of No. 22 and 18 are used as an input and output, respectively. ) ループを毎回0.01秒ずつ休ませる (CPUに他の仕事ができるように) (Insert of sleep time (0.01 sec) in every turn of loop, in order that CPU can work for other tasks. )
システムの停止(Shutdown of the system)) Storage access LED PWR LED ストレージへのアクセスがなくなったら,電源ケーブルを抜く. (When access to the storage is over, pull the plug out from the Raspberry Pi. )