コントローラ内部写真である。機械式表示器で使っていた、PCB、歯車、ポテンションメータなどを外し、Arduino UNOとPower PCBを組み込んだ。
全体の回路図。I2Cを含め書いて有るので見通しが良いと思う。
Program
ローテータの位置情報(600Ωのポテンションメータ)をADCで読み、角度変換のみである。個体差が有る所は、AD値のRock to Rock(0~360°で1023~171)である。現物合わせ的な処理となっている。(やっつけ仕事)//////////////////////////////////////////////////////////////////////
// EMOTO 103LB control display program ver.1.0
//
// Copyright(C)2014.JA2GQP.All rights reserved.
//
// 2014/12/5
// JA2GQP
//////////////////////////////////////////////////////////////////////
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for
// a 16 chars and 2 line display
int val=0;
int ang=0;
float wk1,wk2,wk3;
void setup()
{
lcd.init(); // initialize the lcd
lcd.backlight(); // LCD backlight on
lcd.setCursor(5,1);
lcd.print("JA2GQP");
}
void loop()
{
// analog read
val=analogRead(0); // Current position read
delay(100);
// 0-360 degree convert
wk1=val;
wk1=1023.0-wk1; // AD max
wk2=360.0/(1023.0-171.0); // Per 1 degree resolution
wk3=wk1*wk2;
ang=wk3;
// angle display
lcd.setCursor(3,0);
lcd.print(" ");
lcd.setCursor(3,0);
lcd.print(ang);
// Orientation check
switch(val){
case 169:
case 170:
case 171:
case 172:
case 173:
lcd.setCursor(0,0);
lcd.print("N");
break;
case 276:
case 277:
case 278:
case 279:
case 280:
lcd.setCursor(0,0);
lcd.print("NW");
break;
case 382:
case 383:
case 384:
case 385:
case 386:
lcd.setCursor(0,0);
lcd.print("W");
break;
case 489:
case 490:
case 491:
case 492:
case 493:
lcd.setCursor(0,0);
lcd.print("SW");
break;
case 595:
case 596:
case 597:
case 598:
case 599:
lcd.setCursor(0,0);
lcd.print("S");
break;
case 702:
case 703:
case 704:
case 705:
case 706:
lcd.setCursor(0,0);
lcd.print("SE");
break;
case 808:
case 809:
case 810:
case 811:
case 812:
lcd.setCursor(0,0);
lcd.print("E");
break;
case 915:
case 916:
case 917:
case 918:
case 919:
lcd.setCursor(0,0);
lcd.print("NE");
break;
case 1023:
lcd.setCursor(0,0);
lcd.print("N");
break;
default:
lcd.setCursor(0,0);
lcd.print(" ");
}
// Limit check
switch(val){
case 169:
case 170:
case 171:
lcd.setCursor(11,0);
lcd.print("R-OVR"); // Right over
break;
case 1023:
lcd.setCursor(11,0);
lcd.print("L-OVR"); // Left over
break;
default:
lcd.setCursor(11,0);
lcd.print(" ");
}
}
0 件のコメント:
コメントを投稿