ラズタンクのpythonコード

Pythonコードを実行前に、「キーボード入力を読み取るライブラリreadchar」をインストールします

$ sudo pip install readchar

以下がラズタンクのpythonコードです。
例えば[$ sudo nano tank.py]などで新しいファイルを作ってコードを書きます。
正しく入力できたら[$python tank.py]でプログラムを実行します。
操作は[w]キーで前進、[a]キーで左反転、[s]キーで右反転、[z]キーが後進です。
終了は[q]キー。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import sys
import time
import readchar

constLeftPWM = 17
constLeftIN1 = 27
constLeftIN2 = 22
constRightPWM = 16
constRightIN1 = 20
constRightIN2 = 21

GPIO.setwarnings( False )
GPIO.setmode( GPIO.BCM )
GPIO.setup( constLeftPWM,  GPIO.OUT )
GPIO.setup( constLeftIN1,  GPIO.OUT )
GPIO.setup( constLeftIN2,  GPIO.OUT )
GPIO.setup( constRightPWM, GPIO.OUT )
GPIO.setup( constRightIN1, GPIO.OUT )
GPIO.setup( constRightIN2, GPIO.OUT )

pwmLeft = GPIO.PWM( constLeftPWM, 50 )  #50Hz
pwmLeft.start( 0.0 )
pwmRight = GPIO.PWM( constRightPWM, 50 )  #50Hz
pwmRight.start( 0.0 )

def moveForward():
	GPIO.output( constLeftIN1, 1 )
	GPIO.output( constLeftIN2, 0 )
	GPIO.output( constRightIN1, 1 )
	GPIO.output( constRightIN2, 0 )

def speedSlow():
	pwmLeft.ChangeDutyCycle( 80 )
	pwmRight.ChangeDutyCycle( 80 )

def speedHigh():
	pwmLeft.ChangeDutyCycle( 100 )
	pwmRight.ChangeDutyCycle( 100 )

def moveBack():
	GPIO.output( constLeftIN1, 0 )
	GPIO.output( constLeftIN2, 1 )
	GPIO.output( constRightIN1, 0 )
	GPIO.output( constRightIN2, 1 )

def moveLeft():
	GPIO.output( constLeftIN1, 0 )
	GPIO.output( constLeftIN2, 1 )
	GPIO.output( constRightIN1, 1 )
	GPIO.output( constRightIN2, 0 )

def moveRight():
	GPIO.output( constLeftIN1, 1 )
	GPIO.output( constLeftIN2, 0 )
	GPIO.output( constRightIN1, 0 )
	GPIO.output( constRightIN2, 1 )

def moveStop():
	GPIO.output( constLeftIN1, 0 )
	GPIO.output( constLeftIN2, 0 )
	GPIO.output( constRightIN1, 0 )
	GPIO.output( constRightIN2, 0 )

def end():
	pwmLeft.stop()
	pwmRight.stop()
	GPIO.cleanup()
	sys.exit(0)

######################################
# メインルーチン
######################################
if __name__ == '__main__':

	try:
		while True:
			kb = readchar.readchar()
			sys.stdout.write(kb)

			if kb == 'w':
				speedHigh()
				moveForward()
			if kb == 'z':
				speedSlow()
				moveBack()
			if kb == 'a':
				speedSlow()
				moveLeft()
			if kb == 's':
				speedSlow()
				moveRight()
			if kb == 'x':
				moveStop()
			if kb == 'q':
				end()
			time.sleep(0.1)

	except KeyboardInterrupt:
		moveStop()
		end()

コードサンプル

音楽ファイルの再生(mp3)
omxplayer ../Music/music00.mp3 -o local --vol 100
音楽ファイルの再生(wav)
aplay -D hw:1,0 ../Music/s-ok.wav
音量設定
alsamixer
音声合成(jtalk)

男性の声

./jtalk.sh "こんにちは"

女性の声

./jtalk_mei.sh "めいちゃんの声です", "happy"

コメントを残す