시작페이지로 시작페이지로
즐겨찾기추가 즐겨찾기추가
로그인 회원가입 | 아이디찾기 | 비밀번호찾기 | 장바구니 모바일모드
홈으로 와싸다닷컴 HIFI게시판 상세보기

트위터로 보내기 미투데이로 보내기 요즘으로 보내기 싸이월드 공감
턴테이블 모터 제어박스를 만들어 봅니다.(동영상추가-기판 사진 추가1208)
HIFI게시판 > 상세보기 | 2016-12-03 06:25:15
추천수 25
조회수   3,519

제목

턴테이블 모터 제어박스를 만들어 봅니다.(동영상추가-기판 사진 추가1208)

글쓴이

방두영 [가입일자 : 2000-08-17]
내용

안녕하세요? 턴테이블 플래터 속도 측정만 해보려던 일이 조금 커져서

다음과 같은 기능을 만들어 보게 되어 소개드립니다.

1. 모터(플래터) START/STOP(기동/정지)

2. 회전수 표시

3. 회전수 선택(33 1/3, 45)

속도 제어는 직류 브러쉬리스 모터(BLDC) 콘트롤러 부위에 있는 엔코더를 좌우로 돌려서 수동으로 조정하는 방식입니다.

동작화면입니다.사진을 누르면 재생됩니다.




참고로 상용화된 AC 싱크로(Synchronized AC) 모터 제어용 Falcon 의 전원부와 RoadRunner 라고하는 Tachometer 의 동작 동영상입니다. 사진을 누르면 재생됩니다.





동작 사용 사례입니다.

작동 순서는 아래와 같습니다.

1. 전원 on -> 환영 banner, 제 이름
2. start ( 왼쪽 버튼) -> start banner
3. LCD display off ( 가운데 버튼)
4. LCD display on ( 가운데 버튼)
5. 33.3 -> 45 회전 변경 ( 오른쪽 버튼)
6. display off ( 가운데 버튼)
7. 33.3, 45 회전 변경 ( 오른쪽 버튼)
8. display on ( 가운데 버튼)
9. stop( 왼쪽 버튼) -> Good Bye^^ banner

사진을 누르면 재생됩니다.




사용된 MCU는 요즘 아주 구하기 쉬워진 아두이노 우노 또는 나노( 두가지 모두 아주 잘 동작됩니다.)를

이용하였습니다.

사용된 모듈과 연결선, 그리고 아두이노에서 스케치라고 부르는 소스코드를 아래와 같이 구현하였습니다.

구현하시고 싶으신 분은 이대로 만드시면 똑 같이 동작합니다.

먼저 연결선 다이어그램입니다.









제가 하드웨어 디자이너는 아니어서, 엑셀 파일로 그린 내용입니다.

사용된 릴레이 모듈입니다. (사진은 1개의 모듈이고 사용된 모듈은 릴레이 2개짜리입니다.

릴레이 모듈은 찍어놓은 사진이 없어서 인테넷에서 빌려왔습니다.

사진 출처는 http://www.3egadgets.com/66-ttl-to-relay-control-250vac-10a-no-nc-1-channels-with-indicator-
led.html
 입니다. 저작권 문제시 삭제 하겠습니다.)




Hall Effect Sensor 입니다. 플래터 하부의 적당한 위치에 직경 2mm 의 네오디움 자석을 붙이고

센서가 자석이 1회 지날때를 측정하는 방식으로 RPM을 구하게 됩니다.




박스에 보여질 LCD 창입니다. 2행의 16자를 표현할 수 있습니다.




MCU와 4개의 선만으로 연결가능한 I2C 모듈이 있어서 연결이 아주 쉽습니다.




제가 만든 스케치입니다. 저작권에 관계없이 필요하신 분은 드래그해서 가져다 사용하시면 됩니다.

커멘트 부분에 간단한 결선 내용이 있어서 위의 와이어링 도면이 없어도 구성은 가능하십니다.


#include <Timer.h>
//#include <Event.h>
//#include <PWM.h>
#include <LiquidCrystal_I2C.h>
//#include <PinChangeInt.h>
#include <Button.h>


// Don"t change these.
#define FIRST_ANALOG_PIN 14
#define TOTAL_PINS 19

// Modify these at your leisure.
//#define sensorPin A3 // Hall Effect Sensor Pin
//#define startstop A0 // Mortor start/stop, monitor start/stop,lcd on/off, timer(Elapsed reset)
//#define rpm33     A1 // set target RPM to 33 1/3
//#define rpm45     A2 // set target RPM to 45

//#define   pwmPin  A3 // analogue Pin for PWM

LiquidCrystal_I2C lcd(0x3f,16,2);


#define TRUE  1
#define FALSE 0

#define ON  LOW
#define OFF HIGH

// Sensor & control part
// Hall sensor Effect wiring
// pin 3 --------------- Digital Out, Arduino input from Hall effect sensor
// Vcc   --------------- Vcc input, Hall sensor effect sensor
// GND   --------------- GND Hall sensor effect sensor
const byte  sensorPin = 3; // Arduino input, Hall Effect Sensor Pin, use interrupt Timer

// 2 Relay Module wiring
// Power Vcc       --------------- Vcc, Relay Module
// pin 9           --------------  In1, Relay module
// pin 8           --------------  In2, Relay module
// GND             --------------  Power GND to Relay module
// external 5V VCC --------------  JD VCC to Relay module

const byte  RelayPin1 = 9; // Arduino output, Relay In1. startstop, relay to power part of motor module
const byte  RelayPin2 = 8; // Arduino output, Relay in2, Speed select , 33.3 / 45, connect to motor mudule selector

// Switch part
// switch wiring information-internal pullup, without pullup register from GND to inernal register, initial value needed.
// pin 10 ______/ ------ pin 10 Speed 33 1/3 , 45 selector switch
// pin 11 ------/ ______ pin 11 LCD on/off switch, 
// pin 12 ______/ ------ pin 12 Motor start / stop switch
// GND    -------------- bridge all 3 switch" other pins

const byte  speedPin     = 10;  // Arduino input, 33, 45 select toggle switch
const byte  LCDonoffPin  = 11;  // Arduino input, LCD on off toggle swicth
const byte  startstopPin = 12;  // Arduino input, start stop toggle switch

const byte  ledpin = 13;       // Arduino output, LED Pin
const byte  PowerLED = 4;      // Arduino output,  Power-on LED

Button LcdButton = Button ( LCDonoffPin, BUTTON_PULLUP_INTERNAL ); // add Switch Lcd on/ff button
Button SpeedButton = Button ( speedPin, BUTTON_PULLUP_INTERNAL );  // add Speed selection button
Button StartButton = Button ( startstopPin, BUTTON_PULLUP_INTERNAL ); // add Motor start/stop button

bool LastLCD, LastSPEED, LastSTARTSTOP; // button status

bool  LCDON = TRUE; // lcd button event value
bool  SPEED = FALSE; // SPEED selection event value
bool  STARTSTOP = FALSE; // Motor stop/start event button
bool  outputStatus = FALSE;
char  rpmstr[8];
char  microsecstr[8];

float StartPoint, Finished;
float Elapsed;

float RPM;

volatile uint8_t latest_interrupted_pin;
volatile uint8_t interrupt_count[TOTAL_PINS]={0}; // possible arduino pins
volatile uint8_t pin3Count=0;


/*
* LCD RS pin to digital pin 8
* LCD Enable pin to digital pin 9
* LCD D0 pin to digital pin 1
* LCD D1 pin to digital pin 10
* LCD D2 pin to digital pin 11
* LCD D3 pin to digital pin 12
* LCD D4 pin to digital pin 4
* LCD D5 pin to digital pin 5
* LCD D6 pin to digital pin 6
* LCD D7 pin to digital pin 7
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
*/
/* 
 *  Turntable motor TM-R501
 *  Platter 33.3 RPM
 *  Motor   1034 RPM
 *  motor tacho 6204
 *  Platter 45 RPM
 *  Motor   1386 RPM
 *  motor tacho 8316
 */

void tick()
{
  Elapsed=micros()-StartPoint;
  StartPoint=micros();
  digitalWrite(PowerLED,LOW);
  outputStatus = TRUE;
}

void setup()
{
  int iPos=0; 
  //setup lcd
 
  //digitalWrite(pannelLED, LOW);

  pinMode(PowerLED, OUTPUT);
  digitalWrite(PowerLED, HIGH);
   
  lcd.init();
 
  lcd.noCursor();
  //lcd.noBacklight();
  lcd.clear();
  //delay(400);
  lcd.backlight();
  lcd.noAutoscroll();

  // start banner
  lcd.setCursor (1,0);
  lcd.print("Hello, Dooyoung");
  lcd.setCursor (1,1);
  lcd.print("Enjoy Music");
  for (iPos=1;iPos<=16;iPos++)
  {
    lcd.scrollDisplayRight();
    delay(400);
  }
  // Display Default speed with 33.3 
 
  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print ("33.3 ");
  lcd.setCursor(3, 1);
  lcd.print("RPM ");

  Serial.begin(115200);
 
  // setup pins
  //setup relay pins yo be "HIGH" as default. do not remove initial digitalwrite before pinMode.
 
  digitalWrite(RelayPin1, OFF);
  digitalWrite(RelayPin2, OFF);

  //initialize variables
  LastLCD=FALSE;          // OFF
  LastSPEED = FALSE;      // 33.3
  LastSTARTSTOP = FALSE;  // STOP
  Elapsed = StartPoint = micros();
 
  delay(100);
  //setup Pin Mode

  pinMode(ledpin, OUTPUT);
  digitalWrite(ledpin, LOW);
 
  pinMode(RelayPin1, OUTPUT);
  pinMode(RelayPin2, OUTPUT);


  // input mode with VCC with pullup register
  pinMode(sensorPin, INPUT);
 
  // setup interript
  //attachInterrupt(digitalPinToInterrupt(sensorPin), tick, FALLING);

 
  // original psuedo interrupt
  //attachPinChangeInterrupt(sensorPin, RPM, FALLING);
  //pinMode(sensorPin, INPUT_PULLUP);
   
  attachInterrupt(digitalPinToInterrupt(sensorPin), tick, FALLING);
  //attachPinChangeInterrupt(sensorPin, tick, FALLING);
 
  //StartingPoint=millis();
  //ending = millis();
  delay(1000);
  lcd.clear();
  lcd.noBacklight();
}

void loop()
{
  //int sensorValue = digitalRead(sensorPin);
  float oldRPM=0.0;
  int icnt;

  if (LcdButton.isPressed())
  {
     if ( LastLCD )
     {
      lcd.noBacklight();
      lcd.clear();
      LastLCD = FALSE;
     }
     else
     {
      lcd.clear();
      lcd.backlight();
     
      LastLCD = TRUE;

      lcd.setCursor(1,0);
      if (LastSPEED)
      {
        lcd.print(" 45  ");
      }
      else
      {
        lcd.print("33.3 ");
      }
      lcd.setCursor(3,1);
      lcd.print("RPM ");
     
      if (LastSTARTSTOP)
      {
        RPM = 60000000.0/Elapsed;
        dtostrf(RPM, 8,4, rpmstr);
        lcd.setCursor(6,0);
        //dtostrf(Elapsed/1000.0, 8,4, microsecstr);
        lcd.print (Elapsed/1000.0);
        lcd.print("mS");
     
        lcd.setCursor(7,1);
        lcd.print(rpmstr);
        oldRPM = RPM;     
      }
     }
     delay(300);
  }

  if (SpeedButton.isPressed())
  {
    if (!LastLCD)
    {
      lcd.clear();
      lcd.backlight();
    }
   
    if ( !LastSPEED )
    {
      LastSPEED = TRUE; //45
      digitalWrite ( RelayPin2, ON);
      lcd.setCursor(1,0);
      lcd.print (" 45  ");
    }
    else
    {
      LastSPEED = FALSE; // 33.3
      digitalWrite ( RelayPin2, OFF);
      lcd.setCursor(1,0);
      lcd.print ("33.3 ");
    }
    lcd.setCursor(3,1);
    lcd.print("RPM ");
    delay(1000);
    if (!LastLCD)
    {
      lcd.clear();
      lcd.noBacklight();
    }
  }
 
  if (StartButton.isPressed())
  {
    if (LastSTARTSTOP) // start -> stop
    {
      Elapsed = StartPoint = micros();
      digitalWrite (RelayPin1, OFF);
      lcd.clear();
      if (!LastLCD)
      {
        lcd.backlight();
      }
      lcd.setCursor(5,1);
      lcd.print("Good Bye^^");
      for(icnt=0;icnt<16;icnt++)
      {
        lcd.scrollDisplayLeft();
        delay(400); 
      }
     
      lcd.noBacklight ();
      lcd.clear();
      LastSTARTSTOP=FALSE;
      LastLCD = FALSE;
    }
    else // stop -> start
    {
      digitalWrite (RelayPin1, ON);
     
      lcd.clear();
      lcd.backlight();
      lcd.setCursor(6,0);
      lcd.print("Music Start!!");
      lcd.setCursor(3,1);
      lcd.print("Enjoy Music...");
               //1234567890123456
      for(icnt=0;icnt<16;icnt++)
      {
        lcd.scrollDisplayLeft();
        delay(400);
      }
      lcd.clear();
      lcd.setCursor(1,0);
      if (LastSPEED)
      {
        lcd.print(" 45  ");
      }
      else
      {
        lcd.print("33.3 ");
      }
      lcd.setCursor(3,1);
      lcd.print("RPM ");
      LastSTARTSTOP=TRUE;
      LastLCD = TRUE;
    }
  }

  if ((outputStatus) && (LastSTARTSTOP) && (LastLCD))
  {   
    RPM = 60000000.0/Elapsed;
      
    dtostrf(RPM, 8,4, rpmstr);
    lcd.setCursor(6,0);
    //dtostrf(Elapsed/1000.0, 8, 4, microsecstr);
    //lcd.print (microsecstr);
    lcd.print (Elapsed/1000.0);
    lcd.print("mS");
   
    lcd.setCursor(7,1);
    lcd.print(rpmstr);
   
   
    Serial.print(Elapsed);
    Serial.print(" micro sec, ");
   
    //Serial.print(revolution);
    //Serial.print(" SEC,");
    Serial.print(rpmstr);
    Serial.println(" RPM");
    /*
    printDouble (revs, 10000);
    Serial.print(" RPM\n");
    */
    //Serial.print(millis() );
   
    //Serial.print(" ");
    //Serial.println(StartingPoint);
    //Serial.print("Hall Effect Sensor value:");
    //Serial.println(sensorValue);
  }
    if (outputStatus)
  {
    delay(50);
    digitalWrite(PowerLED, HIGH);
    outputStatus = FALSE;
  }
}


오랜만에 깡통이랑 코딩 비슷하게 해서,기록차 남겨 봅니다.

없는 부품구하고 케이스 구하고, 이래 저래 소소한 공이 들어간 작업이었습니다.

혹시 궁금하신 내용 있으시면, 아는 한도에서 같이 말씀드릴 수 있도록 하겠습니다.

재미없는 글 읽어 주셔서 다시 한번 감사드립니다.


- 2016. .12. 2 추가 내용입니다.


아래 전영진님을 위한 내용입니다.

지금 부품이 수급되고 있습니다. 저는 만능 기판에 점퍼를 연결하여 만들었는데요. 뜨개질이라 부르시더군요.ㅎㅎ

속도 기능만 넣는다면 차후에 올려드리는 하드웨어 만으로 간단하게 결선하고 케이스에 넣을 수 있도록 사진

으로 추가 안내 드리겠습니다.

연결 선은 아주 단순해 졌습니다.






속도 측정 기능만 넣은 소스입니다.


#include <Timer.h>
//#include <Event.h>
#include <PWM.h>
#include <LiquidCrystal_I2C.h>
#include <PinChangeInt.h>


// Don"t change these.
#define FIRST_ANALOG_PIN 14
#define TOTAL_PINS 19

// Modify these at your leisure.
//#define sensorPin A3 // Hall Effect Sensor Pin
#define startstop A0 // Mortor start/stop, monitor start/stop,lcd on/off, timer(elapsed reset)
#define rpm33     A1 // set target RPM to 33 1/3
#define rpm45     A2 // set target RPM to 45

//#define   pwmPin  A3 // analogue Pin for PWM


LiquidCrystal_I2C lcd(0x3f,16,2);// Or LCD display address can be 0x27, it should be found while scanning


//int tachPin = 3; //monitor Motor RPM

const byte  sensorPin = 3; // Hall Effect Sensor Pin
const byte  PowerLED = 4;  // Power on Indicator LED
const byte  ledpin = 13;

float StartPoint, finished;
float elapsed, time;
float revs;
float revolution;
float RPM;
volatile uint8_t latest_interrupted_pin;
volatile uint8_t interrupt_count[TOTAL_PINS]={0}; // possible arduino pins
volatile uint8_t pin3Count=0;

/*
* LCD RS pin to digital pin 8
* LCD Enable pin to digital pin 9
* LCD D0 pin to digital pin 1
* LCD D1 pin to digital pin 10
* LCD D2 pin to digital pin 11
* LCD D3 pin to digital pin 12
* LCD D4 pin to digital pin 4
* LCD D5 pin to digital pin 5
* LCD D6 pin to digital pin 6
* LCD D7 pin to digital pin 7
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
*/
/* 
 *  Turntable motor TM-R501
 *  Platter 33.3 RPM
 *  Motor   1034 RPM
 *  motor tacho 6204
 *  Platter 45 RPM
 *  Motor   1386 RPM
 *  motor tacho 8316
 */
char  strrpm[8];
int   outputStatus=0;

#define TRUE  1
#define FALSE 0

void tick()
{
  elapsed=(micros()-StartPoint);
  StartPoint=micros();
  outputStatus = 1;
  digitalWrite(PowerLED,LOW);
}

void setup()
{
   
  //setup lcd
 
  lcd.init();
 
  lcd.noCursor();
  lcd.noBacklight();
  delay(500);
 
  lcd.backlight();
  lcd.noAutoscroll();
  lcd.setCursor(1,0);
  lcd.print ("33.3 ");
  lcd.setCursor(3, 1);
  lcd.print("RPM ");
 
  Serial.begin(115200);
 
  // setup pins
 
  pinMode(ledpin,OUTPUT); //debug to led 13
  pinMode(sensorPin, INPUT);
  //pinMode(tachPin, INPUT);

  //Power on indictor
  pinMode(PowerLED, OUTPUT);
  digitalWrite(PowerLED,HIGH);

 
  pinMode(ledpin, OUTPUT);
 
    // setup interript
  //attachInterrupt(digitalPinToInterrupt(sensorPin), tick, FALLING);

 
  // original psuedo interrupt
  //attachPinChangeInterrupt(sensorPin, RPM, FALLING);
  //pinMode(sensorPin, INPUT_PULLUP);
  pinMode(sensorPin, INPUT);
  attachInterrupt(digitalPinToInterrupt(sensorPin), tick, FALLING);
  //attachPinChangeInterrupt(sensorPin, tick, FALLING);
 
  //StartingPoint=millis();
  //ending = millis();
  elapsed = StartPoint = micros();
}

void loop()
{
  float oldRPM=0.0;
 
  if (outputStatus == 1)
  {
   
    //detachInterrupt(digitalPinToInterrupt(sensorPin));
    //digitalWrite(RelayPin1, HIGH); 
    //digitalWrite(RelayPin2, HIGH); 

    RPM = 60000000.0/elapsed;

    if (elapsed >= 2000000.0)
    {
       lcd.setCursor(6,0);
       lcd.print("          ");
       elapsed = 0.0;
       oldRPM = RPM = 0.0;
    }
   
   
    lcd.setCursor(6,0);
    lcd.print (elapsed/1000.0);
    lcd.print("ms");
   
   
    if ( elapsed >= 2000000.0)
    {
      lcd.setCursor(7,1);
      lcd.print("       ");
    }
   
    dtostrf(RPM, 8,4, strrpm);
   
    lcd.setCursor(7,1);
    lcd.print(strrpm);

    //lcd.print(strrpm);
   
    outputStatus = 0;
   
    //dtostrf(revs, 8,4, strrpm);
    Serial.print(elapsed);
    Serial.print(" micro seconds, ");
   
    //Serial.print(revolution);
    //Serial.print(" SEC ");
    Serial.print(strrpm);
    Serial.print(" RPM, ");
    delay(20);
    digitalWrite(PowerLED,HIGH);
    /*
    printDouble (revs, 10000);
    Serial.print(" RPM\n");
    */
    //Serial.print(millis() );
   
    //Serial.print(" ");
    //Serial.println(StartingPoint);
    //Serial.print("Hall Effect Sensor value:");
    //Serial.println(sensorValue);
    //attachInterrupt(digitalPinToInterrupt(sensorPin), tick, FALLING);
  }
  delay(300);
}

2016.12.8 추가 내용입니다.

말씀드렸던 프로토 타입 형태의 기판과 결합된  6~9v 대응의 Nano 입니다.







같은 Nano 보드를 만능기판으로 구성한 내용입니다.

먼저 전면입니다.




뒷면 배선내용입니다.




동작 시험입니다.








감사합니다.

추천스크랩소스보기 목록
전영진 2016-12-05 11:25:59
답글

대단하시네요. 좀 더 자세한 내용(케이스와 내부 배치) 등을 보여 주시면 자작해도 되겠네요. 저는 진선 아이리스 4를 사용하고 있는데 응용할 수 있다면 만들고 싶네요.

방두영 2016-12-05 18:25:24

    안녕하세요? 전영진님, 저는 자작으로 AS 걱정없는 모터와 전원부를 사용해서 제작한 후에 제어 박스와 연동하였습니다.

아이리스4 같은 경우 5V 전원부와 BLDC 모터 자체의 hall effect sensor를 이용하여 플래터의 회전수 대신 모터의 회전수를 구하는 방식으로 정속을 구현하는 것으로 알고 있습니다.

저와 같은 박스와 연동을 하려면, 모타부의 33/45 회전 선택 스위치와 전원부의 stop/start 버튼 부분을 개조를 해야 합니다.

그보다는 아이리스에 속도 조정 기능과 기동 정지 기능이 모두 훌륭하게 구현되어 있으니까 디지털 타코미터 정도만 구현

하셔도 아주 쓸모가 클것으로 생각됩니다. 물론 AS 적정없이 모두 개조하신다면 그도 해 볼만한 일이라고는 생각합니다.

일단, Tachometer 기능의 다이어그램과 검증된 소스를 전영진님 참고하시라고 추가하였습니다.

만능 기판 대신 proto type 형태의 확장 기판이 배송중에 있습니다. 이 기판이 오면 케이스 없이 간단하게

연결하여 구성하실 수 있는 참고 사진으로 업데이트 하겠습니다.

다시 한번 말씀 감사드립니다. 항상 즐거운 음악 생활되시기를 기원드립니다.

방두영 2016-12-05 18:29:50
답글

적당한 케이스와 배치는 결선을 하고 난 이후에 각자의 자유도와 케이스의 종류에 따라 다른사항이어서 이 부분은 마음대로

구성하시면 될 것 같습니다.

전영진 2016-12-06 10:51:09
답글

답변 감사드립니다. tachometer 만이라도 설치해서 속도를 항상 볼 수 있다면 좋겠네요. 업데이트 되면 저도 한 번 해보겠습니다. 다시 한 번 감사드립니다.

전영진 2016-12-06 11:12:10
답글

릴레이 2개 짜리는 알리익스프레스에 있더군요. 이것을 구입하면 될까요?
https://www.aliexpress.com/item/2-Channel-Relay-Module-relay-expansion-board-5V-Low-level-triggered-2-way-relay-module-for/32650877400.html?spm=2114.10010108.1000023.2.CU8GJD

hall effect sensor는 다음의 것을 찾았습니다. 이것을 쓰면 될까요?
https://www.aliexpress.com/item/1pcs-magnetic-sensor-magnetic-switch-reed-switch-Electronic-Component/32696895403.html?spm=2114.30010308.3.19.95zj4T&s=p&ws_ab_test=searchweb0_0,searchweb201602_1_116_10065_117_10068_114_115_113_10084_10083_10080_10082_10081_10060_10061_10062_10056_10055_10054_10059_10099_10078_10079_426_10073_10102_10096_10052_425_10050_10051,searchweb201603_6&btsid=d1f004a8-2c2c-454e-9aec-5357dff02994

LCD+I2C module은 이 것을 사면 되겠네요.
https://www.aliexpress.com/item/Free-Shipping-10set-IIC-I2C-LCD-1602-Blue-Backlight-LCD-Display-Adapter-Plate/32382337688.html?spm=2114.30010308.3.85.6D0Bxf&ws_ab_test=searchweb0_0,searchweb201602_1_116_10065_117_10068_114_115_113_10084_10083_10080_10082_10081_10060_10061_10062_10056_10055_10054_10059_10099_10078_10079_426_10073_10102_10096_10052_425_10050_10051,searchweb201603_6&btsid=d5dbb8ba-9514-45a0-81da-d14575e05f72

방두영 2016-12-06 13:40:49

    안녕하세요? hall effect sensor 는
https://www.aliexpress.com/item/Hall-Sensor-Magnetic-Module-Field-Detecting-Sensor-For-Arduino-Smart-Car-FreeShipping-Dropshipping/653186357.html?spm=2114.13010608.0.0.3iyR8Y 를 사용하였습니다.

릴레이 모듈은
https://www.aliexpress.com/item/15953-Free-Shipping-5V-2-Two-Channel-Relay-Module-With-Optocoupler-PIC-ARM-DSP-AVR-For/32358003055.html?spm=2114.13010608.0.0.3iyR8Y 를 사용했습니다.

말씀하신 LCD 1602+i2c 는 10개 짜리 세트입니다.

단품은 https://www.aliexpress.com/item/IIC-I2C-1602-Serial-Blue-Backlight-LCD-Display-For-Arduino-2560-UNO-AVR-A004-Free-Shipping/1738714643.html?spm=2114.13010608.cb0001.7.scLOqZ&scm=1007.13441.64707.0&amp;pvid=47bb55af-a77c-48cb-850f-f8c6704e5ee3&amp;tpp=1 입니다.


방두영 2016-12-06 13:47:40
답글

납땝 필요없이 선만 연결해서 사용하는 프로토타입 보드는

https://www.aliexpress.com/item/Multi-Function-Funduino-Nano-Shield-Expansion-Board-for-Electric-DIY-SCM-Orange-Black-NANO-SHIELD-For/1790691337.html?spm=2114.13010608.0.0.ko2Eof 입니다.

tachometer 만으로 사용되는 선은 display 용 A4(SDA), A5(SCL), GND, 5V ,

아두이노 나노, 우노의 경우 하드웨어 인터럽트는 2,3번 뿐이어서요.

Hall effect sensor는 gnd, 5V, 3번( 또는 2번) 만 연결하면 기본적으로 동작합니다.

소프트인터럽트로 다른 디지털이나 아날로그 핀을 사용하는 방법도 있지만,

핀이 부족한 상황이 아니므로 그냥 3번으로 사용합니다.

아두이노 보드에 따라 6-12V 어댑터 또는 USB 전원 만으로도 충분하게 잘 동작할 겁니다.

케이스는 그이후에 적당한 모델로 고르시면 될 것 같습니다.

방두영 2016-12-06 13:50:28
답글

그리고 Hall effect 를 위하여 네오디움 자석을 2mm 정도의 것을 플래터 아래에 붙이면 2-3mm 간격으로 센서를 지날때

센서의 동작 LED가 깜빡이면, 센서의 설치는 완료됩니다.

방두영 2016-12-06 13:57:10
답글

참, 릴레이를구매하신다면, 아이리스 모터부와 전원부도 연동하시려고 하시는지요?

전원부의 스위치는 릴레이와 연동할 수 있지만, 모터부의 33/45 회전 선택 스위치의 선을 릴레이로

연동하실려면 스위치의 어떤 접점이 33 회전이고, 45인지 먼저 파악하셔야 할 겁니다.

33/45 스위치가 PWM duty를 결정하는 trigger 로 BLDC 모터 드라이브의 입력단에 연결되는 스위치일 겁니다.

전영진 2016-12-06 15:49:50
답글

먼저 tachometer만 먼저 해보려고 합니다. 집에 놀고 있는 아두이노가 있어서 부품만 모집되면 만들어 보려 합니다. 감사합니다.

방두영 2016-12-06 19:13:34
답글

네, 저도 첫 의도도 실시간 속도 측정이었는데요, 측정된 결과로 속도 제어를 자동으로 하려닥

방향을 전환한 것이고요. 유튜브의 falcon 과 roadrunner 처럼 close loop룰 사용하려면

bldc 모터에서는 드라이버를 칩셋과 함께 구현해야 한다는 점에서,

다음 프로젝트로 넘겼습니다.

아마추어로 칩세트 선정과 개발 환경 꾸리는데 한계가 있어서요.

일단 다음 pwm제어는 ST8계열의 콘트롤러 설계와 소프트웨어 구현이 되어야

가능한 것으로 현재까지 이해하고 있습니다.

전영진 2017-01-19 14:16:54
답글

추가 내용도 적어 주시고 감사합니다. 알리익스프레스에서 아직 hall effect sensor를 받지 못해 실행을 못하고 있습니다. 조만간 도착후 즉각 실험해보겠습니다. 감사합니다.

  • 광고문의 결제관련문의