意欲的な金融マンがゼロから銀行を作りたいと思うのと同様、エンジニアであれば自分で独自のOS、プログラミング言語(コンパイラ)、CPU、ロボットを作りたいと思うだろう。

ロボットというとガンダムのモビルスーツのイメージが先行してしまうのだが、ブログでPMCをやるなんて宣言するのは問題がありすぎる。
一つの目標値として産業用ロボットがあるが、その他にも例えば家電量販店で陳列されている商品群はロボットとは言えないかもしれないがマイコンで制御されている商品が殆どである。したがって、どの分野を取り組むかは慎重に考える必要がある。
とは言え、最初は簡単なところから始めるのが鉄則。ということで、ブレッドボードを使って簡単なロボットを作りたい。
– LEDで「目」を光らせる
– スピーカーを「口」の機能とする
– temperature sensorを「鼻」と見立てて温度を測り、それによってスピーカーを制御する
– 「足」の機能としてDCモーター機能を付ける
イメージを配置

続いて、目のLED部分の実装

そして、口となるスピーカーの実装
これでドレミと喋るようになります。
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
tone(10, 262, 200);
delay(1000);
tone(10, 294, 200);
delay(1000);
tone(10, 330, 200);
delay(1000);
}

続いて「鼻」にあたる気温センサーの実装
25℃以上なら、喋るようにします。
温度センサーはosoyoのモジュールを使います。
https://osoyoo.com/ja/2015/03/11/ds18s20-temperature-sensor-module/
#include <OneWire.h>
int inPin = 7;
OneWire ds(inPin);
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop() {
int HighByte, LowByte, TReading, SignBit, Tc_100, Whole, Fract;
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if(!ds.search(addr)){
ds.reset_search();
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1);
delay(1000);
present = ds.reset();
ds.select(addr);
ds.write(0xBE);
for(i = 0; i < 9; i++){
data[i] = ds.read();
}
Serial.print("Temperature:");
LowByte = data[0];
HighByte = data[1];
TReading = (HighByte << 8) + LowByte;
SignBit = TReading & 0x8000;
if(SignBit){
TReading = (TReading ^ 0xffff) + 1;
}
Tc_100 = (6 * TReading) + TReading / 4;
Whole = Tc_100 / 100;
Fract = Tc_100 % 100;
if(SignBit){
Serial.print("-");
}
Serial.print(Whole);
Serial.print(".");
if(Fract < 10){
Serial.print("0");
}
Serial.print(Fract);
Serial.print(" C\n");
digitalWrite(13, HIGH);
if(Whole > 26){
tone(10, 262, 200);
delay(1000);
tone(10, 294, 200);
delay(1000);
tone(10, 330, 200);
delay(1000);
}
}

そして最後に「足」として、DCモータを3.3v -> GRDで付けます。

おおお、一応、動いている^^
モーターを使った駆動系の処理は力学、電気学など勉強が必要そうだが、色々できそうなことはわかった。