728x90

지금 아두이노 벨런서를 만들면서 있는 문제들 중에

 

베터리가 고민된다.

 

그냥 AA 건전지를 연결해서 사용해도 되지만

 

계속 그렇게 건전지 비용을 사서 쓸수도 없고

 

 

 

결국에는 리튬 베터리를 사용하긴 해야하는데

 

베터리 관련해서 사용가능한 모듈이 없나 찾아보다가

 

얼마전에 받은 WeMos 키트에 베터리 쉴드가 있더라

 

이 베터리 쉴드로 USB 연결시 리튬 배터리를 충전할수 있다고 하니

 

베터리 충전용으로 사용해도 될듯 싶다.

 

 

 

 

 

 

 

이 외에 리튬 베터리로 아두이노를 동작시키는 방법에 대해 검색해보았는데

 

생각보다 간단하더라

 

 

 

 

 

 

 

리튬 베터리 커넥터 부분을 바로 점퍼 케이블로 아두이노에 연결하면 되니 크게 걱정안해도 될거같다.

 

 

 

 

이외에도 오늘 생각보다 진도 많이 나갔다.

 

 

원래 하려던 MPU-6050와 다른 센서에 납땜도하고

 

 

기구 제작에 가장 큰 문제가 되었던 볼트 너트 부분도

 

 

볼트는 기존대로 하고

 

 

너트는 조금 확대 시켰더니 잘 조여진다.

 

사진 많이 찍어놓긴 했는데 빠트리고말았다. 나중에 올려야지.

 

 

또 하필 오늘 충전기를 두고 온 탓에 주미를 많이 하지는 못했지만

 

대신 주미에서 사용할 영상 부분들을 실습을 꽤 진행하였다.

 

 

남은 시간에는 필터 부분을 처리하면 될듯하다.

 

 

 

 

 

-------------------------------------

 

위 베터리 쉴드 다큐먼트 페이지를 찾았다.

 

ref: https://docs.wemos.cc/en/latest/d1_mini_shiled/battery.html

 

 

 

외형은 조금 다르지만 구조는 비슷하다.

 

300x250
728x90

 

타공판

 

 

 

볼트너트

 

 

 

센서 홀더

 

 

 

모터 홀더

 

 

 

 

 

 

진자(사용안함)

 

 

 

300x250
728x90

이전에 로터리 엔코더를 사용한 역 도립진자는

 

조금 더 비싼 로터리 엔코더를 사용해야하다보니 구현이 어렵게 되었다.

 

대신 아두이노를 이용한 밸런싱 로봇을 생각해보게 되었다.

 

 

 

기본 타공판, 볼트, 너트, 고정대 등은 만들어 두었으니

 

출력후 조립만 하면 비슷하게 완성될것 같다.

 

 

 

더 나아가 가능하다면

 

3층으로 늘려 파이와 카메라도 놓을수 있으면 좋겠다.

 

 

 

 

300x250
728x90

마침 역 도립진자 로봇이 센서 문제로 막혔을때

 

프로토타이핑 과정이 코로나로 인해 중지되었다.

 

그래서 오늘까지 한 내용 정도로 일단 마무리

 

 

 

300x250
728x90

 오늘 3D 프린팅을 할수 없게되서 대신 코드 정리부터 해보려고한다. 어떻게 정리해나갈지 생각하고자 우선 로터리 엔코더, PID, 모터 제어 코드들을 가져 온 후 어떻게 연동시킬지 생각해본다.

 

 

1. 로터리 엔코더

https://howtomechatronics.com/tutorials/arduino/rotary-encoder-works-use-arduino/

 #define outputA 6
 #define outputB 7
 int counter = 0; 
 int aState;
 int aLastState;  
 
 void setup() { 
   pinMode (outputA,INPUT);
   pinMode (outputB,INPUT);
   
   Serial.begin (9600);
   // Reads the initial state of the outputA
   aLastState = digitalRead(outputA);   
 } 
 void loop() { 
   aState = digitalRead(outputA); // Reads the "current" state of the outputA
   // If the previous and the current state of the outputA are different, that means a Pulse has occured
   if (aState != aLastState){     
     // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
     if (digitalRead(outputB) != aState) { 
       counter ++;
     } else {
       counter --;
     }
     Serial.print("Position: ");
     Serial.println(counter);
   } 
   aLastState = aState; // Updates the previous state of the outputA with the current state

 

2. PID 예제

https://www.teachmemicro.com/arduino-pid-control-tutorial

//PID constants
double kp = 2
double ki = 5
double kd = 1
 
unsigned long currentTime, previousTime;
double elapsedTime;
double error;
double lastError;
double input, output, setPoint;
double cumError, rateError;
 
void setup(){
        setPoint = 0;                          //set point at zero degrees
}    
 
void loop(){
        input = analogRead(A0);                //read from rotary encoder connected to A0
        output = computePID(input);
        delay(100);
        analogWrite(3, output);                //control the motor based on PID value
 
}
 
double computePID(double inp){     
        currentTime = millis();                //get current time
        elapsedTime = (double)(currentTime - previousTime);        //compute time elapsed from previous computation
        
        error = Setpoint - inp;                                // determine error
        cumError += error * elapsedTime;                // compute integral
        rateError = (error - lastError)/elapsedTime;   // compute derivative
 
        double out = kp*error + ki*cumError + kd*rateError;                //PID output               
 
        lastError = error;                                //remember current error
        previousTime = currentTime;                        //remember current time
 
        return out;                                        //have function return the PID output
}

 

3. DC 모터 제어예제

https://deneb21.tistory.com/281

void setup() {
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
}
 
void loop() 
{
        //최대속도의 50%로 정회전
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(6, 127);
        delay(3000);
 
        //최대속도의 50% 역회전
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        analogWrite(6, 127);
        delay(3000);
 
        //최대속도로 정회전
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(6, 255);
        delay(3000);
 
        //최대속도로 역회전
        digitalWrite(7, LOW);
        digitalWrite(8, HIGH);
        analogWrite(6, 255);
        delay(3000);
 
        //정지 (7번핀에 HIGH를 주어도 PWM 핀에 값을 0을 주었기 때문에 정지함)
        digitalWrite(7, HIGH);
        digitalWrite(8, LOW);
        analogWrite(6, 0);
        delay(3000);
}

 

 

 

 준비는 거의 다되서 진행하려고 하였으나 하필이면 너무 저가의 로터리 엔코더를 사용하다가 제대로 각변화를 측정할수가 없어 더이상 본 과제는 진행할 수가 없다.

 

 상세한 테스트 내용은 오늘 자 문서에 남기고 할수 없이 스테핑 모터를 이용한. 저거 볼 밸런싱 로봇으로 변견해보아야 되겠다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

진자를 제외한 대부분 파츠들 모델링을 마쳤다. 아래의 사진들은 결과물

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

외부 CAD 모델을 활용해서

 

역 도립진자 차량 모델링 만들어 가는중

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

오늘은 사용할 부품 정리와

 

라이노를 이용해서 간단하게 모델링 했다.

 

내일은 라이노 볼트, 너트 준비 및 코드 정리하면 될거같다.

 

 

 

300x250
728x90

3d 프린터 동작 방식

1. FDM 압출형, 고체형

- 고체기반 재료에 열을가해 녹인 후 노즐로 쌓아 올림

- 장점 : 장비, 재료가격이 저렴, 가장 대중화

- 단점 : 정밀도가 낮음, 후가공 힘듬, 느림

- 재료 : PLA(후가공 힘듬, 수축 적음), ABS(후가공 편리, 수축 심함)

 

2. SLA /DLP(꽝조형, 액체형)

- SLA : 광경화성 액상수지를 레이저로 응고

- DLP : 광경화성 액상수지를 빔 프로젝터로 응고

(기념품가게 크리스탈안에 물건넣은거)

- 장점: 세밀하고 정교하게 구현

- 단점 : 색상, 원료 제하, 장비 재료가 고가

-재료 : 광경화성 액상수지

 

 

 

 

모델링 데이터 변환과정

1. 모델링 파일 STL

2. 슬라이싱(G Code)

3. 결과물

 

 

 

슬라이싱 프로그램 -> 큐라

- 무료

- 직관적

- 다양한 설정

* 여기는 ultimakor 2+

 

 

 

 

 

 

 

 

 

 

 

 

 

300x250
728x90

일단 내가 원래 생각하고 있던건 밸런싱 로봇인데

 

제어 공학적 관점에서 어떻게 접근해야 될지 몰라

 

손댈수가 없더라. 일단 이거 한 코드는 있어보이긴한데

 

 

 

대충 그린 밸런싱 로봇 그림 ㅋㅋㅋ..

 

 

 

 

그래서 제어 공학 공부에 많이 사용하고, 심플한

 

역 도립진자를 우선 해보고자 한다.

 

 

 

 

 

 

 

대강 이런식으로

 

하지만 제대로 구현하려면 각 부품들 크기를 제대로 조사해야되겟다.

 

1. 아두이노 본체

2. 아두이노 전원 배터리

3. 모터 드라이버

4. 모터 전원부

5. 로터리 인코더

6. 기어 모터

 

300x250

+ Recent posts