体験的マイコン学習(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) ようこそシステムリンクへ


ページトップ