遠方オーライ!(過去ログ待避所)

YAHOO!ブログに掲載されていた過去ログの退避所です。
メインのブログはコチラ(新・遠方オーライ!)

カテゴリ: マイコン

イメージ 1

さて、最近急にやたらマイコンを積極的にいじり始めたかというと・・・・

・・・実はこんなの作ってみたかった欲望が、約1年前に起き・・・・
イメージ 2


アイデア→設計→挫折→放置→再設計→設計完了→基礎実験→試作品作成(←イマココ)
という流れで、モータードライバの「TA8428K」(http://akizukidenshi.com/catalog/g/gI-02808/)という部品を手にいれたことで、ようやくモノになりました。

ちなみに、こんな感じで、ポポンデッタのポイントと同様にボタン一つで切り替わります。

ちなみにポイント切り替えと同時にフィーダー線路への走行用電源の各切り替えも同時に行う設計の為、切り替え用だけでなく、余計な部品もついてますが(汗)

詳しい回路図やプログラム等は、完成時に掲載する予定です。

p.s. 調子に乗って連続で何度も切換えてると、ポイント駆動部がオーバーヒートして動かなくなります(マジ)

昨日の発展形。
イメージ 1


今度はリレーを動かす側のATMEGA328P-AUを『マイコンAとして独立して動く環境を作り、
それぞれのリレーに接続されているLEDの光が切り替わるプログラムをあらかじめ『マイコンA』側に記憶させておく。

そしてArduino上の同じATMEGA328P-AU(マイコンB)とシリアル通信でつなぎ、『マイコンBには
「o1」という文字列を5秒ごとに送信させるプログラムを書いておく。

すると2つのマイコン間で5秒ごとに自動的に通信が発生し、受信した文字列をトリガーに、左側の
マイコンAが「o」と「1」に定義された動作を繰り返す。

ちなみにマイコンAの動作としては、「o」を受信すると右側のLEDを3秒間緑色に変化させ、「1」を受信すると、左側のLEDを1秒ごとに緑→赤→緑と変化させる。

各マイコン内のプログラムは下記のとおり。

■マイコンA(シリアル通信受信側)
ここから=====================================================
int lelay1 = 12;
int lelay2 = 10;
int inputchar;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(lelay1, OUTPUT);
  pinMode(lelay2, OUTPUT);
// シリアルポートを9600 bps[ビット/秒]で初期化 
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  
  digitalWrite(lelay1, LOW); //n the Lelay off by making the voltage LOW
  digitalWrite(lelay2, LOW); //n the Lelay off by making the voltage LOW
  
  // シリアルポートより1文字読み込む
  inputchar = Serial.read();
//  delay(3000);

  if(inputchar != -1 ){
    // 読み込んだデータが -1 以外の場合 以下の処理を行う
 
    switch(inputchar){
      case 'o':
      
        // 読み込みデータが o の場合
        Serial.print("Serial in:o\n");
        Serial.print("LED1 GREEN\n");
        digitalWrite(lelay1, HIGH); //n the LED off by making the voltage HIGH
        delay(3000);
        Serial.print("LED1 RED\n");
        break;
      case '1':  
        // 読み込みデータが 1 の場合
        Serial.print("Serial in:1\n"); 
        Serial.print("LED2 GREEN\n");
        digitalWrite(lelay2, HIGH); //n the Lelay off by making the voltage HIGH
        delay(1000);
        Serial.print("LED2 RED\n");
        digitalWrite(lelay2, LOW); //n the Lelay off by making the voltage HIGH
        delay(1000);
        Serial.print("LED2 GREEN\n");
        digitalWrite(lelay2, HIGH); //n the Lelay off by making the voltage HIGH
        delay(1000); 
        Serial.print("LED2 RED\n");
        break;
    }
   } else {
   // 読み込むデータが無い場合は何もしない
   }
}
ここまで=====================================================

■マイコンB(シリアル通信送信側)
ここから=====================================================
int led3 = 13;

void setup() {
  // put your setup code here, to run once:
// シリアルポートを9600 bps[ビット/秒]で初期化 
  Serial.begin(9600);
  pinMode(led3, OUTPUT);
}
void loop() {
        digitalWrite(led3, HIGH); //n the LED off by making the voltage HIGH
        Serial.print("o1\n");
        delay(5000);
        digitalWrite(led3, LOW); //n the LED off by making the voltage HIGH
        delay(5000);
}
ここまで=======================================================

しばらくArduinoを放置してて、制御系のプログラムを忘れかけてました・・・
Nゲージ関連の、とあるものを組むためのリレーを購入したので、リハビリを兼ねて動作検証をば・・・
2色LED。
イメージ 1
赤い色が3秒後に・・・
イメージ 2
緑に切り替わり、また3秒後に赤に戻る。

せっかくなんで、動画で

以下、プログラム(備忘録代わり)

ここから===========================================
 
int led3 = 13;
int lelay1 = 12;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led3, OUTPUT);
  pinMode(lelay1, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  
  digitalWrite(led3, HIGH); //n the LED off by making the voltage HIGH
  digitalWrite(lelay1, LOW); //n the Lelay off by making the voltage LOW
  delay(3000); 
  
  int cnt=0;
  int i; 
      for(i=0; i<3; i++){
      digitalWrite(led3, LOW); //n the LED off by making the voltage LOW
      digitalWrite(lelay1, HIGH); //n the LED off by making the voltage HIGH
      delay(1000); 
  }
}

ここまで===========================================

※某大学の電子工学科出身なので電子デバイスの基礎は身につけてるつもりですが、なんせ本職がNWインフラSEなので、困ったことにやってないと忘れてしまうんですね、これが。

↑このページのトップヘ