目次
マグボットの続編です!
今回は、第4回で使用した赤外線センサーをマグボットに取り付けて、マグボットをしゃべらせるようにしてみました
マグボットに赤外線センサーを取り付ける
(1) マグボットに赤外線センサーを取付けます
以前にスピーカーを設置していた部分が空いていたので、きれいに取付けができました
(2) 赤外線センサーをRaspberry Piに接続します
PySerialのインストール
(1) PythonライブラリのPySerialをインストールします
pip install pyserial
今回はPythonのシリアル通信を使って、Arduinoに送信します
Raspberry Piのプログラムの作成
(1) Cyberduckを使用して、/home/pi にsensor.pyファイルを作成する
/home/pi/sensor.py
#!/usr/bin/env python #-*- coding: utf-8 -*- import serial import time import RPi.GPIO as GPIO import subprocess import random SLEEPTIME = 1 RUNTIME_SLEEP = 5 SENSOR_PIN = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(SENSOR_PIN, GPIO.IN) while True: if(GPIO.input(SENSOR_PIN) == GPIO.HIGH): # シリアル通信の設定 ser = serial.Serial(‘/dev/ttyACM0’, 9600) rand = random.randint(1, 3) if(rand == 1): # マグボットの音声データの設定 cmd = “sudo sh /home/pi/mugbot-talk-1.1.sh こんにちは” # シリアル通信で送信する ser.write(b’r’) elif(rand == 2): # マグボットの音声データの設定 cmd = “sudo sh /home/pi/mugbot-talk-1.1.sh 私はマグボットです” # シリアル通信で送信する ser.write(b’d’) elif(rand == 3): # マグボットの音声データの設定 cmd = “sudo sh /home/pi/mugbot-talk-1.1.sh ようこそシステムリンクへ” # シリアル通信で送信する ser.write(b’p’) # シリアル通信を閉じる ser.close() # 音声データの実行 subprocess.call( cmd, shell=True ) time.sleep(RUNTIME_SLEEP) else: print(“反応なし”) time.sleep(SLEEPTIME)
(2) Tera Termを使用して、/etc/rc.local に起動時の設定を追加します
pi@raspberry:~ $ sudo nano /etc/rc.local
/etc/rc.local
# 感知センサープログラムの起動 python /home/pi/sensor.py &
追加イメージ
Arduinoのプログラムの作成
(1) Arduino IDEを起動して、mugbot_arduino_1.1.inoに処理を追加します
case文の最後に追加してください
mugbot_arduino_1.1.ino
case ‘r’: //Rasberry Piからrを受け取ると「こんにちは」のアクションを行う。 analogWrite(l_eye, 255); analogWrite(r_eye, 255); eye_servo.write( 105 ); delay( 100 ); eye_servo.write( 75 ); delay( 100 ); eye_servo.write( 105 ); delay( 100 ); eye_servo.write( 90 ); digitalWrite(mouse, HIGH); delay( 3000 ); digitalWrite(mouse, LOW); analogWrite(l_eye, eye_light_default); analogWrite(r_eye, eye_light_default); break; case ‘d’: //Rasberry Piからdを受け取ると「私はマグボットです」のアクションを行う。 analogWrite(l_eye, 255); analogWrite(r_eye, 255); delay( 100 ); analogWrite(l_eye, 255); analogWrite(r_eye, 0); delay( 500 ); analogWrite(l_eye, 0); analogWrite(r_eye, 255); delay( 500 ); analogWrite(l_eye, 255); analogWrite(r_eye, 0); delay( 100 ); analogWrite(l_eye, 255); analogWrite(r_eye, 255); eye_servo.write( 105 ); delay( 100 ); eye_servo.write( 75 ); delay( 100 ); eye_servo.write( 105 ); delay( 100 ); eye_servo.write( 90 ); digitalWrite(mouse, HIGH); delay( 3000 ); digitalWrite(mouse, LOW); analogWrite(l_eye, eye_light_default); analogWrite(r_eye, eye_light_default); break; case ‘p’: //Rasberry Piからpを受け取ると「ようこそシステムリンクへ」のアクションを行う。 analogWrite(l_eye, 255); analogWrite(r_eye, 255); head_servo.write( 60 ); delay( 200 ); head_servo.write( 90 ); delay( 200 ); head_servo.write( 120 ); delay( 200 ); head_servo.write( 90 ); digitalWrite(mouse, HIGH); delay( 3000 ); digitalWrite(mouse, LOW); analogWrite(l_eye, eye_light_default); analogWrite(r_eye, eye_light_default); break;
(2) Arduinoと接続して、プログラムを書き込みます
マグボットを実際に動かしてみる
センサーで感知した時に、ランダムで動作します
(1) こんにちは
(2) 私はマグボットです
(3) ようこそシステムリンクへ