', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); '[완료]Arduino Projects/이케아 SKARSTA 높이조절책상 전동화' 카테고리의 글 목록 :: MakerLee's Workspace
728x90

원래 예전에 달았어야 했는데 귀찮음에 미루다가 며칠간 뚝닥 작업했습니다. 

스탠드업 책상에서 책상을 쭉 올리다 보면 데스크탑과 연결된 여러 케이블의 길이가 모자라지며 문제를 일으킵니다. 

(USB케이블이나 HDMI케이블이나 전원케이블 등)

앉은 채로 작업을 하면서 작업에 따라 약간씩 위치를 바꾸다 보니 크게 필요하진 않았습니다만

아무래도 약간은 불편함이 있어서 기성품을 알아보니 가격이 무식하게 비싸 보이더군요. (5~6만원선)

그래서 2020프로파일을 부속과 택배비까지 포함해서 2만원정도에 주문했습니다. 

 

 

 

 

 

 

 

 

엔드캡과 보조부품은 3D 프린팅으로 해결. 

 

 

 

 

 

 

 

 

출력품으로 무게를 견뎌야 하기 때문에 3mm 전산볼트를 일일이 잘라 박아넣는 수고를 했습니다. 

적어도 부러지진 않을 듯 합니다. 

 

 

 

 

 

 

사이즈를 타이트하게 잡았기 때문에 위치가 간당간당 합니다. 벨크로 테잎을 이용해 살짝 묶어 주었습니다. 

사진을 찍고보니 먼지가 상당하네요. 조만간 청소 한번 해줘야 겠습니다. 

 

 

 

 

 

이렇게 하고나니 40인치 모니터에 각종 공구류에 스탠드에 스피커에 기타등등

무게가 상당해서 그런지 동작이 꽤 느립니다. 

슬슬 SKARSTA 프레임의 한계가 아닌가 싶습니다. 

요즘은 스탠딩 데스크 가격도 조금씩 내려오기도 했고 프레임만 따로 팔기도 하던데 어느정도 쓰다가 한계가 오면 교체할 생각입니다. 

 

 

 

 

 

 

728x90
728x90

한동안 쓰다가 보니 투쾅 하는 소리와 함께 멈췄습니다. 

뜯어보니 저꼴이 났네요

 

 

 

 

 

불안했지만 그래도 그냥 있는거 쓰자고 썼더니 높은 하중을 못견디고 피로파괴가 일어났군요

 

 

 

 

 

 

새로 올드햄 커플링을 주문했는데 한달이 넘게 걸려 도착했습니다. 

그런데 주문한 사이즈가 안오고 엉뚱한 사이즈가 왔더군요. 

6*6 과 7*7을 주문해서 6*7로 조합하려고 했던건데 7*7이 아니라 6*10이 도착했습니다. 

 

 

 

 

 

어쩔 수 없이 6mm 홀을 7mm로 넓혀야 겠더군요. 

마땅한 클램프가 없어 프린터로 출력해서 고정한 후 드릴로 뚫었습니다. 

 

 

 

 

 

 

이후 재조립해서 해결.

복잡한 건 없는데 부품수급 문제로 엄청나게 오래 걸린 프로젝트가 되었네요.

728x90
728x90

아두이노와 프로그래밍 관련한 부분은 마지막 디버깅이 끝난 다음 올릴 예정이고요. 

 

 

마지막에 교체한 모터 드라이버가 작동 스위치가 달려 있어서 모터를 수동으로 제어할 수 있습니다. 

아두이노 없이 모터 드라이버+모터 결합만으로 상승/하강 제어가 가능하단거죠. 

그래서 꼭 저같이 만들 필요 없이 단순하게 제작할 분들은

모터와 드라이버, 기타 몇몇 부품등으로 제작이 가능할 것 같습니다. 

해당 부품 리스트를 포스팅합니다. 

 

 

 

일단 모터

www.aliexpress.com/item/32968002582.html?spm=a2g0s.9042311.0.0.27424c4dpU4F1E

 

US $7.89 7% OFF|Bringsmart 37GB555 DC Gearmotor/ 12V 24V micro gear motor slow brush positive and negative motor speed motor lar

Smarter Shopping, Better Living! Aliexpress.com

www.aliexpress.com

저는 12V 136RPM을 사용했습니다.

다른 모터도 사용해 봤지만 이 전압에 이 RPM이 한계인듯 합니다.

136RPM의 속도는 빠르단 느낌도 느리단 느낌도 없이 딱 적당한 것 같고요. 

책상에 30kg에 가까운 모니터와 모니터 암, 스피커와 파워 서플라이, 스탠드 및 기타 등등등이 올라간 상태입니다. 

이런 무게를 올리고도 상승할 수 있습니다만 버거운 느낌이 있고 모터의 과열이 심합니다. 

RPM을 낮추시던가 24V를 사용하시던가 하면 더 안정적일 것 같긴 합니다. 

72RPM 모터로 변경했습니다. 136RPM 모터는 장기적으로 문제가 될 것 같습니다.

 

 

 

육각렌치 6mm 가 핸들 대신 들어갑니다. 

사진은 손잡이가 짧은 형태인데, 저런걸 구매하시면 안되고 길이가 긴 형태로 나온 걸 사셔야 합니다. 

제가 사용한 제품은 긴 부분이 120mm 정도 되었습니다. 

너무 좋은 걸 구매하면 자르기 힘들 수 있습니다. 

 

 

 

 

 

 

 

 

 

육각렌치와 모터를 연결해줄 커플링coupling이 필요합니다.

가격이 조금 더 비싸지만 토크에 강한 올드햄 방식 커플링으로 구매해야 합니다. 

모터측 구멍은 6mm, 렌치측 구멍은 7mm로 구매해야 하는데

6mm 다음에 8mm 가 오는게 표준이라 6*7mm 를 찾을수가 없네요

 

 

 

www.aliexpress.com/item/1005001602250533.html?spm=a2g0s.9042311.0.0.7e404c4dp1AptC

 

US $1.98 23% OFF|D20L25 Spider Motor Coupler Aluminium Fexible Jaw Coupling 5x8mm 3mm 4mm 5mm 6mm 6.35mm 7mm 10mm|Shaft Coupling

Smarter Shopping, Better Living! Aliexpress.com

www.aliexpress.com

이 제품에서 6*6 과 7*7을 하나씩 구매했습니다. 조합해서 6*7을 만들려 합니다. 

 

 

 

 

 

 

이런 리지드 커플링은 절대 사용하시면 안됩니다. 

 

 

 

 

 

모터 드라이버는 Cytron 사의 제품입니다. 

www.devicemart.co.kr/goods/view?no=1289653

 

10Amp 5V-30V DC Motor Driver

MD10B의 향상된 버전으로 대전류 brushed DC motor를 13A까지 제어가능합니다. locked-antiphase 와 sign-magnitude PWM 시그널을 지원합니다.

www.devicemart.co.kr

 

 

 

 

수동제어 목적으로는 cytron사의 이 제품이 더 나을 것 같은데,

아쉽게도 수입되지 않은 것 같아서 배송료 저렴하게 구하기는 힘들 것 같습니다. 

www.cytron.io/p-10-amp-7v-30v-potentiometer-and-switch-control-dc-motor-driver

 

10 Amp 7V-30V Potentiometer & Switch Control DC Motor Driver

MD10-POT is a motor driver or speed controller that enables you to easily control a motor's run/brake, direction and speed. No microcontroller is needed in a complete setup, hence programming is not required too. A DC brushed motor can be controlled direc

www.cytron.io

 

 

 

위의 부품들만 있으면 구동계는 완성할 수 있습니다. 

전원은 모터 구동시 대략 12V4A 정도 소모하는데 제가 갖고있는 12V3A로 어댑터로 돌아가긴 했습니다. 

다만 이 부분은 보장할 수 없으니 5A 이상 되는 여유있는 전원을 사용하시길 추천드립니다. 

 

 

 

 

도면의 핵심 수치입니다. 모터를 저렇게 배치하도록 브라켓을 제작해 주면 됩니다. 

절대 지켜야 할 수치는 구동축과 바닥면과의 거리(15.07) 이고

벽에서의 거리(25.64)는 +- 1mm 여유가 있습니다. 

모터의 지름은 38.64mm 이고 모터축 중심으로는 바닥에서 22.04 입니다. 

물론 오차가 다소 있습니다만 커플링으로 보정 가능합니다. 

 

728x90
728x90

검색해보니 비교적 싼 가격(11000원)에 13A 모터 드라이버가 있어서 구매했습니다. 

이 드라이버는 스위치가 달려 있어 그냥 수동으로 작동시킬 수도 있습니다.

아두이노 연결 없이 반자동 방식으로 만들어도 되긴 하겠네요. 

 

 

 

 

 

 

기존 회로는 L297의 제어신호(INA, INB, EN) 이 들어가야 했는데 

새 드라이버는 PWM, DIR로 제어해야 해서 다시 납땜하고 스케치 수정. 

 

 

 

 

 

 

 

본체는 나사못으로 고정했습니다. 

 

 

 

 

 

 

컨트롤러는 나중에 위치를 잡으려고 일단 양면테이프로 임시고정했고요.

 

 

 

 

 

 

파워 서플라이로 전력을 공급할 때 거의 12V 4A를 소비하길래 어댑터를 교체할 생각을 했습니다만

그냥 돌려보니 잘 작동하네요

 

 

 

 

 

 

저장, 로드, 이동 모두 잘 작동합니다. 

OLED 번인을 막기 위해 일정시간 입력 없으면 화면이 꺼집니다. 

작동하지 않는 시간이 더 긴 관계로 아두이노에 슬립모드를 적용시켜 볼까 생각도 합니다만

모터 드라이버도 있고 해서 전반적으로 회로를 다 뒤엎어야 하므로 그건 관두는게 나을 것 같습니다. 

 

 

 

 

버그가 약간 있는 것 같은데 20cm을 올라갔다가 20cm을 내려보면

내려오는 쪽이 더 길게 내려오네요.

센서에서 인터럽트로 계산하는 건데 왜 이런 오차가 발생하는지 모르겠습니다. 

조립할때 구동부에 기름칠을 잘못해서

이동할때마다 상당한 소음이 발생하는 관계로 그것도 손을 봐야 합니다. 

 

이번 프로젝트는 제작보다 부품 고르고 수급하는 게 어려웠습니다. 

책상을 움직일만한 모터 중 제일 작고 저렴한 모터를 고르고

다른 부품들 수급하는 시간이 전체 과정에서 99%를 차지한 것 같군요. 

 

DIY프로젝트가 그렇듯 완벽하게 하려면 한이 없으므로

여기서 일단 마무리하고 차차 수정할 계획입니다

728x90
728x90

 

 

 

 

 

오랫만의 SKARSTA 업데이트네요. 

 

지난 포스팅에 eeprom의 float 저장 문제를 끝내고 완성을 지었습니다. 

 

이렇게 작동 확인도 했고요.

 

 

 

 

 

 

 

 

이제 달기만 하면 끝. 

 

 

 

 

 

 

 

그런데 작동을 시켜보니 안올라갑니다... 

 

 

 

 

 

 

파워 서플라이 직결로 모터 토크가 충분한건 확인을 했습니다. 

그런데 L298 드라이버가 채널당 2A 가 피크라서 전류가 모자라더군요. 

 

 

 

 

 

 

일단 신호선을 같이 연결해줬습니다. 

 

 

 

 

 

 

 

극성을 체크해서 극성이 맞도록 모터의 출력도 연결해줬습니다. 

 

 

 

 

 

 

 

 

이제 같은 신호가 드라이버의 2채널로 같이 들어갑니다. 

2채널로 나오는 모터의 출력은 모터 하나로 연결되어 병렬 연결한 효과를 냅니다. 

사실 이렇게 쓰는게 맞는지는 100% 확신이 들지는 않지만 일단 동작은 하더군요.

 

 

 

 

 

 

아까보다 조금 나은듯 하지만 여전히 약간 힘이 모자랍니다. 

그리고 모터 드라이버에서 열이 심하군요. 

 

 

 

 

 

아무래도 더 고출력의 드라이버를 찾아보거나

FET를 이용해서 고출력 DC모터 드라이버를 만들어야 할 것 같습니다. 

완성을 코앞에 두고 이렇게 멈추네요

728x90
728x90

if 문으로 도배를 하다가 너무 복잡해져서 싹 지워버렸습니다. 

그리고 각 일반 모드, 저장 모드, 로드 모드로 동작 모드를 분류하고 switch-case 문으로 정리했습니다. 

이렇게 하니 훨씬 깔끔하네요

 

 

 

 

 

 

 

높이값을 저장하는 부분에서 좀 문제가 있었습니다. 

EEPROM.write 는 byte 값만을 저장합니다.

제가 쓰는 높이값 float는 EEPROM.put 을 이용해 저장하고 EEPROM.get으로 로드합니다. 

그런데 위치를 여러개 저장하면 자꾸 오버플로가 일어나더군요. 

사용에 문제가 있었나 하고 구글링을 해봐도 다들 EEPROM.write 대신 EEPROM.put을 쓰면 된다는 식으로만 소개하고 있었습니다. 

 

 

 

 

 

 

 

EEPROM만을 확인하는 테스트 코드를 짜봤습니다. 

연달아 값을 저장하고 로드해보니 힌트가 보였습니다. 

어떤 값을 저장하던 마지막 값은 정상이고 그 전 어드레스의 값은 오버플로가 나네요

어드레스를 1,2,3 순으로 1씩 증가시키던 것을 2씩 증가, 3씩 증가로 바꿔봤습니다. 

5씩 증가할때부터 정상으로 입출력이 됩니다. 

즉 값을 어드레스 0 = 72.54, 어드레스 5=83.26, 어드레스 10=90.92 이런 식으로 띄워 저장하면 됩니다.

생각해보면 EEPROM의 메모리는 정해져 있는데 byte 자리에 float값을 똑같이 집어넣을 수 있으면 말이 안되겠지요. 

헤더파일에서 알아서 처리해주는가 싶었는데 그렇지 않고 사용자가 직접 처리해야 하는 거였습니다. 

 

 

 

 

 

이제 잘 저장되고 로드됩니다. 

 

 

 

 

 

 

 

728x90
728x90

커버를 출력해서 끼워봤습니다. 

 

 

 

 

 

다 잘 맞는편인데 실수로 컨트롤러 전선 빼는곳을 안 만들었네요. 

칼로 잘라서 적당히 뚫었습니다. 

백년만년 simplyfy3D만 써오다가 큐라를 써봤는데 설정을 좀 잘못해서 표면이 울었네요

 

 

 

 

 

 

스위치를 아주 짧게 반복해서 누르면 센서에 인터럽트가 발생하지만 높이 연산이 안되는 문제가 있었습니다. 

그런데 오랫만에 다시 확인해보니 그 문제가 저절로 사라졌네요????

뭐가 어찌된건지 모르겠지만 뭐 잘 되니 다행입니다. 

 

번인을 방지하기 위해 millis함수로 3분이 지나면 OLED화면이 꺼지도록 했습니다. 

 

 

 

 

 

 

그러다가 스위치를 누르면 이렇게 화면이 들어오죠. 

높이를 EEPROM 에 저장하고 로드할 수 있도록 하고 있습니다. 

현재는 높이를 저장할때의 화면입니다. 

전반적인 동작은 스위치를 눌렀을 때 각 상황에 맞는 동작을 해야 하는 지라 조건이 좀 복잡합니다. 

일반 상황에서는 업&다운 스위치로 업&다운 

중앙 스위치를 길게 누르면 세이브 모드로 들어가고 거기서 업&다운 스위치로 어드레스 변경.

다시 길게 누르면 높이를 저장. 

짧게 누르면 로드 모드에서 어드레스 변경 및 로드... 

 

 

 

 

 

 

이런 식이다 보니 if문이 가득한 코드가 되어가고 있네요. 

 

 

 

728x90
728x90

조립하고 U8GLIB 라이브러리 테스트해봅니다. 

 

 

 

 

 

 

 

일단 스위치 누르면 동작하는건 간단하고요.

무게로 축이 쳐지면서 센서핀이 바닥에 닿는 소음이 납니다. 조립하면 안 날듯. 

 

 

 

 

128*32 화면에 이쁘게 담는건 좀 어렵군요. 

폰트 바꾸고 1픽셀씩 이동하며 테스트중입니다. 

 

 

 

센서가 회전을 감지할때마다 interrupt 를 발생시켜 높이를 계산하도록 했습니다.

그런데 스위치를 아주 짧게 누르면 인터럽트는 발생하지만 높이계산은 안되는듯하여 원인을 파악중입니다. 

 

4개 정도의 높이를 자체적으로 저장해서 정해진 위치로 쉽게 이동하도록 할 생각입니다. 

여태 아두이노 프로젝트는 많이 해봤지만 EEPROM은 처음 써보게 되겠네요.

 

추가로 OLED를 계속 켜게 되므로 번인 현상이 우려가 됩니다. 

일정시간 입력이 없으면 ON/OFF가 되게 만들어야 할 것 같네요. 

 

728x90
728x90

커버까지 달아서 노출되지 않게 하려고 하니 손볼게 많네요

이번엔 Fusion360으로 작업해 봤는데 아직 좀 어색합니다. 

솔리드웍스는 개인작업할땐 버전관리와 클라우드 업로드가 힘들어 퓨전이 그런 면에선 좀 더 편하지요. 

단축키와 몇가지 인터페이스도 퓨전이 더 낫습니다. 

하지만 여전히 솔리드웍스의 메이트가 더 편한 것 같고

어셈블리 내에서 파트 편집이나 스케치의 스냅 기능은 솔웍이 더 좋은 것 같습니다. 

 

 

 

 

 

 

구조는 매우 단순합니다.

DC모터로 오르락 내리락 하는데 센서를 하나 달아서 회전수를 감지하는거죠. 

 

 

 

 

구조가 간단한 만큼 이번에는 PCB를 만들지 않고 그냥 기판에 직접 납땜하려고 합니다. 

 

 

 

 

 

이번에도 아두이노입니다. 

 

 

 

 

 

컨트롤러는 단순하게 0.91"OLED와 스위치 3개. 

 

 

 

 

오랫만에 만능기판에 직접 납땜해보는군요. 

 

 

728x90
728x90

전에도 언급했지만 이사하면서 수동 높이조절 책상을 구매했습니다. 

수동을 사서 저렴하게 전동화 할 계획을 세웠습니다.

구매했던 부품들도 도착하고 다른 일도 대충 정리가 되기 시작해서 작업에 들어갔습니다.

 

 

 

모터는 555모터를 사용하는 12V 136RPM 기어드 모터입니다. 

집에 있던 다른 기어드 모터를 사용하려고 했으나 35RPM짜리라 너무 느리더군요.

136RPM짜리는 토크가 부족할 수 있으나 반대편에서 양쪽으로 장착하여 쓰면 괜찮을 것 같아 2개 주문했습니다. 

 

 

 

 

 

6mm 육각렌치를 절단하여 6*7mm 커플링에 끼웠습니다.

 

 

 

 

 

책상의 수동핸들을 끼우는 구멍입니다. 

 

 

 

 

 

 

이렇게 6mm 육각렌치가 딱 맞습니다.

 

 

 

 

 

 

모터 위치가 애매하면 축 하나를 더 연장하고 커플링 2개로 연결할 생각이었습니다. 

다행히 그냥 저 위치에 잘 고정하면 될 것 같습니다. 

 

 

 

 

 

 

 

전동 드라이버 배터리를 연결해 봤습니다. 

모터 1개로도 업&다운이 되는군요. 괜히 2개 구매했습니다. 

 

 

 

 

컨트롤러를 어떻게 할지 생각중입니다. 

728x90

+ Recent posts