光・温度センサー試験プログラム ― 2008/02/02 16:58
光センサーの組み立ては、ブレッドボード上で行うのだが、マイロボット66-67号での工程となっている。
何か面倒くさそうだったので、ほったらかしていたが、やっと余裕が出来たので試してみた。
部品は発光ダイオードと抵抗等の簡単なもの。
左のコネクターから電源が供給され、このコネクターの一番下から2番目と3番目がアナログインプット端子。
アナログ信号は、インターフェースで、デジタル信号に変換され、プログラムで制御する事が出来る。
温度センサーと光センサーの実験用プログラムで、気温が20℃以下の場合は、「寒い」と言う。また、光が強い方向を告げて、その方向に身体を向けるという簡単なプログラム。
ロボちゃんの「寒い」という声には何か寂しさが感じられる。
ビデオでは、右側から光が上がっているが、反対側に反射光が強い場合には、その方向を認識してしまうようだ。「寒い、寒い」と言っている。
http://www.asahi-net.or.jp/~ZZ2T-FRY/robot1217
プログラムソースを載せているが、この中で、センサーの数値は、それぞれの実験環境によって異なるので、変えてみると良いだろう。
if (local(analog_in).pin_1 > 10)
の10の部分を最高128迄変える事で、感度を設定する事が出来る。
それにしても、わざわざ組み立てなくても良かったようなどうでも良いような機能の様な気がする。
自分で回路を設計して、アナログ、デジタルアウトプットで別のセンサーや出力回路を製作する事も可能らしいが、デジタル回路の知識が必要になってくると思う。
----------
/**
*
* @author
* @version 1.0
*/
#include "c-like.h"
#include "robot.h"
counter Counter1 = new(counter);
declare( behavior(Behavior1) );
define( behavior(Main))
{
set(Counter1,1);
set_tracking_color(240,180,160,30);
lcd_clear();
lcd_write_string(1,1,"watasi wa id-01");
sound_follower(true);
vision_follower(true);
say_phrase(21);
start(Behavior1);
end();
}
define( behavior(Behavior1) )
{
while (get(Counter1) < 100)
{
inc(Counter1,1);
lcd_write_string(2,1,"where are you?");
head_tilt_r(1);
head_tilt_r(-1);
head_pan_r(-1);
head_pan_r(1);
led_blink(LED_RED);
led_off(LED_ALL);
lcd_write_string(2,1,"hikari hikari");
head_tilt_r(1);
head_tilt_r(-1);
head_pan_r(-1);
head_pan_r(1);
led_blink(LED_RED);
led_off(LED_ALL);
local(analog_in) = wait_for (analog_in, update);
if (local(analog_in).pin_1 > 10)
{
led_on(LED_RED_RIGHT);
say_phrase(24);
head_pan_r(4);
right_arm_r(1);
say_phrase(24);
head_pan_r(4);
right_arm_r(-1);
turn(90,100);
led_off(LED_ALL);
}
else
{
}
if (local(analog_in).pin_2 > 10)
{
led_on(LED_GREEN_LEFT);
say_phrase(23);
head_pan_r(-4);
left_arm_r(1);
left_arm_r(-1);
turn(90,-100);
led_off(LED_ALL);
}
else
{
}
local(temperature) = get(temperature);
if (local(temperature) < 20)
{
say_phrase(72);
led_blink(LED_GREEN);
led_off(LED_ALL);
}
else
{
if (local(temperature) < 25)
{
lcd_write_string(1,1,"(^^)enjoy");
}
else
{
say_phrase(47);
led_blink(LED_ALL);
head_tilt_r(-1);
led_blink(LED_RED);
head_tilt_r(1);
}
}
}
led_off(LED_ALL);
}
何か面倒くさそうだったので、ほったらかしていたが、やっと余裕が出来たので試してみた。
部品は発光ダイオードと抵抗等の簡単なもの。
左のコネクターから電源が供給され、このコネクターの一番下から2番目と3番目がアナログインプット端子。
アナログ信号は、インターフェースで、デジタル信号に変換され、プログラムで制御する事が出来る。
温度センサーと光センサーの実験用プログラムで、気温が20℃以下の場合は、「寒い」と言う。また、光が強い方向を告げて、その方向に身体を向けるという簡単なプログラム。
ロボちゃんの「寒い」という声には何か寂しさが感じられる。
ビデオでは、右側から光が上がっているが、反対側に反射光が強い場合には、その方向を認識してしまうようだ。「寒い、寒い」と言っている。
http://www.asahi-net.or.jp/~ZZ2T-FRY/robot1217
プログラムソースを載せているが、この中で、センサーの数値は、それぞれの実験環境によって異なるので、変えてみると良いだろう。
if (local(analog_in).pin_1 > 10)
の10の部分を最高128迄変える事で、感度を設定する事が出来る。
それにしても、わざわざ組み立てなくても良かったようなどうでも良いような機能の様な気がする。
自分で回路を設計して、アナログ、デジタルアウトプットで別のセンサーや出力回路を製作する事も可能らしいが、デジタル回路の知識が必要になってくると思う。
----------
/**
*
* @author
* @version 1.0
*/
#include "c-like.h"
#include "robot.h"
counter Counter1 = new(counter);
declare( behavior(Behavior1) );
define( behavior(Main))
{
set(Counter1,1);
set_tracking_color(240,180,160,30);
lcd_clear();
lcd_write_string(1,1,"watasi wa id-01");
sound_follower(true);
vision_follower(true);
say_phrase(21);
start(Behavior1);
end();
}
define( behavior(Behavior1) )
{
while (get(Counter1) < 100)
{
inc(Counter1,1);
lcd_write_string(2,1,"where are you?");
head_tilt_r(1);
head_tilt_r(-1);
head_pan_r(-1);
head_pan_r(1);
led_blink(LED_RED);
led_off(LED_ALL);
lcd_write_string(2,1,"hikari hikari");
head_tilt_r(1);
head_tilt_r(-1);
head_pan_r(-1);
head_pan_r(1);
led_blink(LED_RED);
led_off(LED_ALL);
local(analog_in) = wait_for (analog_in, update);
if (local(analog_in).pin_1 > 10)
{
led_on(LED_RED_RIGHT);
say_phrase(24);
head_pan_r(4);
right_arm_r(1);
say_phrase(24);
head_pan_r(4);
right_arm_r(-1);
turn(90,100);
led_off(LED_ALL);
}
else
{
}
if (local(analog_in).pin_2 > 10)
{
led_on(LED_GREEN_LEFT);
say_phrase(23);
head_pan_r(-4);
left_arm_r(1);
left_arm_r(-1);
turn(90,-100);
led_off(LED_ALL);
}
else
{
}
local(temperature) = get(temperature);
if (local(temperature) < 20)
{
say_phrase(72);
led_blink(LED_GREEN);
led_off(LED_ALL);
}
else
{
if (local(temperature) < 25)
{
lcd_write_string(1,1,"(^^)enjoy");
}
else
{
say_phrase(47);
led_blink(LED_ALL);
head_tilt_r(-1);
led_blink(LED_RED);
head_tilt_r(1);
}
}
}
led_off(LED_ALL);
}

最近のコメント