지돌이의 블로그 입니다!

피곤해서 누웠는데 창문으로 밝은 빛이...★...ㅠㅠ

블라인드 내리기 귀찮아서 언제 전동블라인드 만들어야지... 생각만 하다가 휴일이 된 김에 만들었네요~

블라인드 제조사는 기억이 안납니다.. 뒤지면 나올텐데.. 뭐 다들 비슷할거라 생각해서 PASS하고..

사용한 부품은 아래와 같습니다.

  • 스테핑 모터 : 17HS4401 (토크 : 40N.cm 으로써 토크가 큰걸 골랐습니다. (블라인드 무거움..))

  • 모터 드라이버 : DRV8825 모듈 (vref=0.7V 으로써 current limit를 1.4A으로 정했습니다.)

  • 제어 : Arduino Pro mini

  • 릴레이모듈(필요없지만.. 혹시나 해서 보호회로 구현하려고 넣음.. FET가 없어서 그렇지 그냥 FET쓰거나

모터드라이브 Shutdown하는게 더 나아요...)

처음에는 줄이랑 모터랑 같이 쓰려고 했는데 그건 안되겠더라구요.. 줄이랑 벨트랑 엇갈릴수밖에 없는 구조라.. 일단 저 부분을 톱으로 잘랐습니다
쓱삭쓱삭...
대충 제어부는 이런데.. 뚜껑이 안덮힘...ㅠㅠ 땜질하는게 귀찮아서 가능한부분은 저..선으로 연결했습니다. 제어는 잘 찾아보면 있는 푸시스위치..
고정은 걍 고무줄...^^ 한 사람이면 패하겠거니와 두 사람이면 능히 당하나니 삼겹 줄은 쉽게 끊어지지 아니하느니라 (전도서 4:12) 처럼... 여러줄로 하니 꽤나 잘 고정되었습니다. 
설치 후... 음... 음.... 이걸 어떻게....ㅋㅋㅋㅋ 

누워서 블라인드 내리는것도 안되고.. (짦음..) 뭐 나중에 원격으로 제어할 수 있게 해야죠 뭐..

근데.. 언제할지...ㅋㅋ 걍 전선 길게 늘려서 스위치를 머리맡으로 할거같음..

소스... (원래 소스는 아니고 지금 수정중인건데 아직 적용은 못해봄.. 처음에는 낮은 속도(주파수)로써 높은 토크로 동작하고 서서히 속도를 올려갑니다.)

/*
 * BlindMotorController.c
 *
 * Created: 2019-06-05 오후 11:27:21
 * Author : jichan
 */ 

#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 8000000
#include <util/delay.h>

static volatile unsigned int pwm_step = 0;
static volatile unsigned char pwm_step_ms = 0;

static void updatePwm() {
    uint8_t icr_val = 249 - pwm_step;
    ICR1H = 0x00;
    ICR1L = icr_val;
    OCR1AH = 0x00;
    OCR1AL = icr_val / 2;
}

ISR(TIMER1_OVF_vect)
{
    if(pwm_step_ms < 16)
        pwm_step_ms++;
    else{
        pwm_step_ms = 0;
        if(pwm_step < 125)
        {
            pwm_step++;
            updatePwm();
        }
    }
}

int main()
{
    unsigned char sw_state = 0;

    // 1 PD0 : RXD
    // 0 PD1 : TXD
    // 1 PD2 : SW1
    // 1 PD3 : SW2
    // 1 PD4 : X
    // 0 PD5 : OUT
    // 0 PD6 : OUT (En, Active Low)
    // 0 PD7 : OUT (DIR)
    // PB1,PB2 : OUT
    DDRD = 0xF2;
    PORTD = 0xFF;
    DDRB = 0x02; // PB1 OUT
    PORTB = 0x00;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=0xFF
    // OC0A output: Disconnected
    // OC0B output: Disconnected
    TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
    TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (0<<CS00);
    TCNT0=0x00;
    OCR0A=0x00;
    OCR0B=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 1000.000 kHz
    // Mode: Fast PWM top=ICR1
    // OC1A output: Non-Inverted PWM
    // OC1B output: Disconnected
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer Period: 0.2 ms
    // Output Pulse(s):
    // OC1A Period: 0.2 ms Width: 0.1005 ms [199,100]
    // Timer1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
    TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0;
    ICR1L=0;
    OCR1AH=0;
    OCR1AL=0;
    OCR1BH=0x00;
    OCR1BL=0x00;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer2 Stopped
    // Mode: Normal top=0xFF
    // OC2A output: Disconnected
    // OC2B output: Disconnected
    ASSR=(0<<EXCLK) | (0<<AS2);
    TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20);
    TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (0<<CS20);
    TCNT2=0x00;
    OCR2A=0x00;
    OCR2B=0x00;

    // Timer/Counter 0 Interrupt(s) initialization
    TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0);

    // Timer/Counter 1 Interrupt(s) initialization
    TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1);

    // Timer/Counter 2 Interrupt(s) initialization
    TIMSK2=(0<<OCIE2B) | (0<<OCIE2A) | (0<<TOIE2);

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // Interrupt on any change on pins PCINT0-7: Off
    // Interrupt on any change on pins PCINT8-14: Off
    // Interrupt on any change on pins PCINT16-23: Off
    EICRA=(0<<ISC11) | (0<<ISC10) | (0<<ISC01) | (0<<ISC00);
    EIMSK=(0<<INT1) | (0<<INT0);
    PCICR=(0<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);

    // USART initialization
    // USART disabled
    UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (0<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);

    // Analog Comparator initialization
    // Analog Comparator: Off
    // The Analog Comparator's positive input is
    // connected to the AIN0 pin
    // The Analog Comparator's negative input is
    // connected to the AIN1 pin
    ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0);
    ADCSRB=(0<<ACME);
    // Digital input buffer on AIN0: On
    // Digital input buffer on AIN1: On
    DIDR1=(0<<AIN0D) | (0<<AIN1D);

    // ADC initialization
    // ADC disabled
    ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

    // SPI initialization
    // SPI disabled
    SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0);

    // TWI initialization
    // TWI disabled
    TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);

    sei();

    while(1) {
        unsigned char cur_sw_state;
        if((PIND & 0x04) == 0)
        {
            cur_sw_state = 1;
        }
        else if((PIND & 0x08) == 0)
        {
            cur_sw_state = 2;
        }else{
            cur_sw_state = 0;
        }
        if(cur_sw_state != sw_state)
        {
            pwm_step = 0;
            pwm_step_ms = 0;
            updatePwm();
            TCNT1H=0x00;
            TCNT1L=0x00;
            switch(cur_sw_state)
            {
            case 1:
                PORTD &= ~0x40;
                PORTD |= 0x80;
                break;
            case 2:
                PORTD &= ~0xC0;
                break;
            default:
                PORTD |= 0x40;
            }
            _delay_ms(125);
        }
        sw_state = cur_sw_state;
    }
}


Comment +0

몇일전에 '신은 죽지 않았다' 란 영화를 봤습니다.

기독교인 학생(조쉬)과 신을 부정하는 무신론자 (래디슨)교수의 맞대결!




영화 내내 정말 너무 멋있고 마음에 와닿는 말들과 성경구절들이 많았습니다.



"내 삶이 다 주님것이니 기도하는 겁니다.

모든 건 곧 사라지죠. 돈, 명예 성공..."


"영원한 건 없죠. 생명도 잠깐이죠.

예수님만 영원하시며 이렇게 말씀하세요."


"'누구든지 사람 앞에서 나를 시인하면 나도 하늘에 계신 내 아버지 앞에서 그를 시인할 것이요''


"'나를 부인하면 나도 하늘에 계신 내 아버지 앞에서 그를 부인하리라'"



마태복음 10장 32~33절 말씀입니다.

예수님을 시인하면 그분도 우릴 시인하시고 예수님을 부인하면 그분도 우릴 부인하실 것입니다.

우리 믿는 자들은 당당히 외쳐야 합니다.

예수님은 살아계십니다!


마태복음 10장 32~33절 말씀이 이 영화를 대표하는 말씀 구절인거 같습니다.



주인공 조쉬가 교회에 와서 목사님께 자신의 상황을 이야기 합니다.






하나님이 살아계심을 한순간 부정한다면 그의 학점과 인생과 여자친구... 모두 붙잡을 수 있었을 것입니다.

하지만 그는 그렇지 않습니다. 하나님을 절대 포기할 수 없었습니다.

결국 그는 하나님을 증거하겠단 결심을 합니다.


이후 그가 하나님을 증거하는 방법은... 영화를 보세요!ㅎㅎ

스포가 될거 같아서 이만...


아! 하나님을 믿지 않는 사람은 승승장구 하고 잘사는것 같은데

하나님을 믿는 사람이 오히려 고난을 받는 것처럼 보이나요?

맞습니다. 그럽니다. 하지만... 당연합니다.

아들)

어머니는...

늘 기도하며 믿음이 강건했고

평생 착하게 살았고

나쁜 짓 한번 안 했는데

결국 이렇게 됐잖나요

어머니는 착한사람 난 나쁜사람인데

어머니는 치매환자가 되었고

난 승승장구 잘 나가거든요


어머니)

사탄은 가끔 사람들을 편히 살게 해주지

하나님께 못 가게 하려는 거야

근데 그 곳이 죄의 감옥이다

달콤한 유혹에 속아 떠나기 싫겠지

그래도 문은 열려있단다

하지만 어느 날...

그 때가 되면

감옥문은 닫힐거고

그걸로 끝이야

영원히 갇히는 거야


이 부분은... 정말 모두에게 말해주고 싶은 부분입니다.



아, 정말 이 영화를 보고 큰 감동과 결심을 하게 되었습니다.

나도 하나님을 증거하는 삶을 살아야겠다!


주인공은 그저 다짐만 하는것이 아니라, 열정만 갖는것이 아니라

그 다짐과 열정으로 최선을 다합니다.

수많은 책을 보며 하나님을 증거하기 위해 노력합니다.

여기서 깨달았습니다.

열정도 중요하지만 그 이후 노력이 따라오는것도 매우 중요하다고...


예수님은 하나님을 우리들끼리만 알고 믿으라고 말씀하시지 않으셨습니다.

가서 전하라고 말씀하십니다.

우리는 하나님의 말씀을, 예수님의 보혈을 전하고 말해야할 사명을 가졌습니다.

이 영화를 보고... 제 자신을 돌아보게 되었습니다.

그리고... 결심합니다! 하나님을 증거하는 삶을 살겠다고!

내 삶을 통해, 내 입을 통해, 내 행실을 통해... 내 모든것이 하나님을 증거하는 삶이 되길 소망합니다.


[신은 죽지 않았다] - 다운로드

http://movie.naver.com/movie/bi/mi/basic.nhn?code=122193

우리모두 '굿 다운로더'가 되요~ㅎ

Comment +0

2015.03.14. 15:13



리마1급 1501회를 방금 보았네요~^^ 

사실 전 2급이 없는데 잘못 신청해서 1급으로 신청해서 이렇게 시험을 보았네요...ㅋ 


우선... 과목이 1,2,3이 있는데 1,2는 리눅스기본?(파일시스템같은것도 나오고... 네트워크도 나오고... 프로세스도 나오고... 뭐 그랬습니다.) 

과목3에서는 서버구축... 이게 어려웠어요..ㅜㅜ 

제가 해본것은 쉬운데 안해본게 대부분이라... 

sendmail, apache, dns server, dhcp server, nfs, nis, inet뭐 이런것들이 나왔습니다. 

방금 보고 왔는데도 잘 기억이 안나네요...ㅜㅜ 


좋은 결과 보기를 기대합니다..ㅎ 


리마 보시려는 여러분도 모두 잘보세요~^^

Comment +0

2015.02.19. 06:41



고린도전서 10장 20절-32절을 보는데... 

아.. 모르겠네요. 


28절을 보면 이것이 제물이라 말하거든 알게 한 자와 및 양심을 위하여 먹지말라... 

29절에는 내가 말한 양심은 너희의 양심이 아니고 남의 양심이니 내 자유가 어찌 남의 양심으로 판단을 받으리오... 

30절에는 내가 감사함으로 참예하면 어찌 감사함을 비방받으리오.... 

31절에는 너희가 무엇이든지 마시고 먹든지 하나님의 영광을 위하여 하라... 


내 양심에 문제가 없다면... 

하나님께 감사하고 하나님께 영광을 올려드린다면... 

먹어도 문제가 없단 뜻인가?? 

아.. 헷갈리네요..ㅠㅠ 


혹시라도 제사 음식을 먹게 된다면 그냥 감사함으로 먹어야 되겠네요. 

어짜피 여기서 안먹을 수는 없으니.. 

Comment +0

2015.02.15. 22:28



구운귤이 맛있다는 말을 듣고 해 보았는데...


하.. 하하.. 겉으로 보기에는 구워졌는데..
맛이... 많이 먹으면 좀 느끼한거 같습니다.
아, 구운 방법은 가스불에다가 직화냄비? 그걸로 했습니다.
집에서 군고구마 해먹는.. 그걸로요.
진짜 제주도 사람 아니면 비추합니다.ㅎ
혹시라도 맛이 궁금하다면 조금만 해서 드시길 바랍니다.
한 2명이서 귤 1개정도?ㅎㅎ

밖에서 고기같은거 장작에다 석쇠로 구워먹을때 한번 해보시는건 좋을거 같네요~



'일상 > 일상' 카테고리의 다른 글

리눅스 마스터 1급 1차 봤습니다.  (0) 2015.07.31
크리스찬이 제사음식을 먹어도 될까요?...  (0) 2015.07.31
구운귤 그 후...  (0) 2015.07.31
[HW] 말도 안되는 오류가 날 때..ㅠㅠ  (0) 2015.07.31
헌혈해요~  (0) 2015.07.31
크리스마스의 진짜 의미!  (0) 2015.07.31

Comment +0

2015.01.21. 21:21



 CC2500 송신은 잘 되는데 수신이 안되던 일이 지난 몇일간 있었습니다...

정말... 멘붕이었죠..ㅠㅠ

분명히 맞는데... 문제가 없는데...

데이터 수신이 안되는 겁니다...

레지스터 설정/확인 다 되는데요...

혹시나 해서 라즈베리파이랑 다른 CC2500모듈이랑 연결한 뒤

같은 소스로 테스트를 해 보았는데...

헐.. 됩니다..ㅠㅠ!!!!!!!!!ㅎㅎ

기쁨 80%, 어이없음 20%이네요..ㅋㅋ

쨋든...


자꾸 말도 안되게 안될때에는!

칩을 바꿔보세요...


오늘 아침에 이것때문에 기도했는데 기도가 먹혔나 봐요..ㅋㅋ

아, 감사합니다. 정말.. 이것때문에 꽉 막혀서 진도를 못내고 있었는데..ㅠㅠㅎㅎ


'일상 > 일상' 카테고리의 다른 글

리눅스 마스터 1급 1차 봤습니다.  (0) 2015.07.31
크리스찬이 제사음식을 먹어도 될까요?...  (0) 2015.07.31
구운귤 그 후...  (0) 2015.07.31
[HW] 말도 안되는 오류가 날 때..ㅠㅠ  (0) 2015.07.31
헌혈해요~  (0) 2015.07.31
크리스마스의 진짜 의미!  (0) 2015.07.31

Comment +0

헌혈해요~

일상/일상2015.07.31 03:41

2014.12.31. 21:11



2014년의 마지막 날을 헌혈과 함께했습니다!

2번째 헌혈인데 오늘 처음 알게 된 사실이 하나 있네요~

기념품을 선택하는데 기부권이란게 있더라구요.

기부권이란 기념품을 받는 대신 몇천원 정도가 기부된다고 합니다~

저번엔 팔찌를 받았었는데 이제 헌혈하면 기부권을 사용해야 되겠습니다!ㅎㅎ


참고로 피가 심각할 수준으로 부족하데요 혈액형이 다... 헌혈합시다!^^

새해를 시작하면서 이참에 피 한번씩들 뽑으시는건 어떨련지요??ㅎㅎ 


'일상 > 일상' 카테고리의 다른 글

리눅스 마스터 1급 1차 봤습니다.  (0) 2015.07.31
크리스찬이 제사음식을 먹어도 될까요?...  (0) 2015.07.31
구운귤 그 후...  (0) 2015.07.31
[HW] 말도 안되는 오류가 날 때..ㅠㅠ  (0) 2015.07.31
헌혈해요~  (0) 2015.07.31
크리스마스의 진짜 의미!  (0) 2015.07.31

Comment +0

2014.12.25. 10:01



 크리스마스. 성탄절의 진짜 의미를 많은 사람들이 모르고 있는거 같단 생각이 들어... 이글을 씁니다!

많은 사람들이 크리스마스에 가족들과, 연인들과 함께하며 즐기고, 선물을 받는 날이라고 생각을 하지만

성탄절은 바로 예수님이 태어나신 일을 기념하는 날입니다.

약 2000년 전 우리의 죄악들을 대신하기 위해 오신 그 예수님을 기념하는 날입니다.


기원 전과 기원 후가 무었인지 아시나요??

기원전과 후를 나누는 것은 바로 예수님이 탄생하신 일을 기점으로 나눈 것입니다.

그럼 0년 1월 1일이 예수님 생신이어야 하는데 왜 아니냐...

뭐 사실 저두 정확히는 모르지만..ㅎ 예수님이 태어나신 직후에 1일부터 날짜를 센 것이 아니라 좀 이후부터

날짜를 세기 시작했다고 알고있습니다.

그래서 학자들이 추측을 해서 12월 25일이 예수님이 탄생하신 날이라고 정하게 된것이구요.


어제 교회에 가서 성탄전야행사를 보고 왔는데 이상하게 자꾸만 울컥울컥 눈물이 나더라구요.

예수님이 우릴 위해 태어나시고 죽으신 것에 저도 모르게 감동의 눈물이 났던 것 같습니다.


몇일 전 QT(골로세서 3:12-17)가 생각나네요.

긍휼과 겸손과 온유와 오래참음으로 옷을 입으라.

저도 예수님과 같은 성품을 갖길 원합니다. 긍휼과 겸손과 온유와 오래참음..

그리스도의 평강이 우리의 마음을 지배할 때 이런 삶을 살 수 있다고 합니다.

저두 사실 저런것이 쉽지 않습니다..ㅠㅠ

그리스도의 평강이 내 마음을 지배하도록.. 더 믿음 생활을 열심히 해야 되겠죠?ㅎㅎ



모두 Merry Christmas~~!!

'일상 > 일상' 카테고리의 다른 글

리눅스 마스터 1급 1차 봤습니다.  (0) 2015.07.31
크리스찬이 제사음식을 먹어도 될까요?...  (0) 2015.07.31
구운귤 그 후...  (0) 2015.07.31
[HW] 말도 안되는 오류가 날 때..ㅠㅠ  (0) 2015.07.31
헌혈해요~  (0) 2015.07.31
크리스마스의 진짜 의미!  (0) 2015.07.31

Comment +0