Arduino編 第6回 マグボットにセンサーをつけてしゃべらせてみる

マグボットの続編です!

今回は、第4回で使用した赤外線センサーをマグボットに取り付けて、マグボットをしゃべらせるようにしてみました

赤外線センサー

マグボットに赤外線センサーを取り付ける

(1) マグボットに赤外線センサーを取付けます

以前にスピーカーを設置していた部分が空いていたので、きれいに取付けができました

赤外線センサーの取付け

(2) 赤外線センサーをRaspberry Piに接続します

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) ようこそシステムリンクへ

ページトップ