posted by 내.맘.대.로 2022. 12. 2. 16:36

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

http://158.101.115.122/clouds.jpg

http://158.101.115.122/clouds_contrast.jpg

 

오래 전에 유행했던, 윈도우 바탕화면에 실시간 지구 바탕화면입니다.

x-planet이라는 프로그램을 사용했는데

지금은 Desktop Earth 같은 보다 단순한 프로그램도 많이 나와 있습니다.

 

바탕화면에 원하는 좌표의 지구를 표시하면,
시간에 맞춰 낮과 밤이 바뀌는 것을 볼 수 있습니다.

그리고 구름사진을 얹혀 놓으면 일기예보를 볼 필요도 없지요.

x-planet이 인기를 끌어떤 시절에는 구름 데이터가 많았는데

이제 관리도 안하고, 인기도 시들해 데이터 구하기가 어렵습니다.

그래서 추억팔이 겸 구름 데이터를 만들어 봤습니다.

 

1시간에 한 번씩 매 시 50분에 구름사진이 업데이트됩니다.

실제 구름사진이기 때문에 샘플 이미지처럼 우리나라 하늘에 떠 있는 구름을 1시간 단위로 확인할 수 있어요.

http://158.101.115.122/clouds.jpg

이 이미지는 기본 데이터로 만든 구름사진입니다. 

 

http://158.101.115.122/clouds_contrast.jpg

이 이미지는 기본 데이터를 x-planet 같은 바탕화면 프로그램에 맞게 채도와 명암을 조절한 데이터예요.

반응형
posted by 내.맘.대.로 2022. 11. 29. 11:46

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

달력 만드는 방법은 아래 글을 참고하세요
https://www.epubguide.net/468

 

집에서 놀고 있는 구형 안드로이드 스마트폰 하나씩 있지 않나요?

안드로이드 스마트폰이나 태블릿에 MagicMirror를 설치해 스마트 달력을 만들어 봤습니다.

https://magicmirror.builders/

 

MagicMirror²

Voted number 1 in the MagPi Top 50! MagicMirror² is the winner in the official Raspberry Pi magazine’s 50th issue celebration feature voted by the Raspberry Pi community.

magicmirror.builders

 

MagicMirror는 단방향 투과성 거울(거울 뒤가 어두우면 거울이 되지만, 밝으면 투명하게 보이는)을 이용해 스마트 거울을 만드는 프로젝트입니다. 거울에 날짜, 날씨, 달력 등의 정보를 표시할 수 있고, 구글 캘린더와 연동해 일정도 표시할 수 있지요. 여러 모듈이 있어 영어단어 암기, 매일 달라지는 명언, 주식 정보, 스포츠 정보 등 다양한 정보를 표시할 수 있습니다.

 

이 프로젝트를 거울에 이용할 수도 있지만, 태블릿/스마트폰 화면에 정보를 표시해 탁상용 스마트폰 달력이나 스마트 달력+액자로도 활용할 수 있어요.

저는 집에서 놀고 있는 전자잉크 스마트폰에 설치해 시계+날씨+일정+달력으로 사용합니다. 종이로 된 탁상 달력을 쓰던 세대여서 그런지 스마트폰이 있어도 눈만 돌리면 볼 수 있는 달력이 좋습니다. 요즘은 일정을 스마트폰 캘린더로 관리해서, 스마트폰 캘린더와 일정을 연결해 놓으니 종이 달력에 표시하지 않아 편해요.

MagicMirror는 리눅스에 설치합니다. 누군가 라즈베리파이로 스마트 거울을 만들었고, 이 아이템이 인기를 끌자 프로젝트로 발전을 했습니다. 그래서 라즈베리파이의 데비안 리눅스에 설치할 수 있도록 프로젝트가 진화를 했습니다. 

하지만 꼭 라즈베리 파이일 필요는 없습니다. 리눅스가 돌아가는 기기라면 저사양(라즈베리 파이 Zero W2 정도)기기에서도 잘 돌아갑니다.

 

안드로이드에서 돌아가는 MagicMirror 앱이 없나 찾아봤는데, 여러가지 문제가 있었습니다.

앱스토어에서 받을 수 있는 앱은 기능이 마음에 들지 않았어요.

MagicMirror를 앱으로 만드는 방법이 설명되어 있는데, 안드로이드 앱 개발을 해 보지 않은, HTML과 CSS 편집 정도만 할 줄 아는 저한테는 그리 쉬운 작업이 아니었습니다.

일단, 리눅스용 MagicMirror를 설치하기고 하고 방법을 찾아보니 서버 모드가 있네요. 서버모드는 외부 서버에서 MagicMirror를 돌리고 스마트폰 브라우저로 불러오는 방식. 이건... 일단 제외.

안드로이드에 리눅스를 설치할 수 없을까 고민하며 이곳 저곳 찾아봤더니, Tarmux 라는, 안드로이드에서 리눅스를 구동시키는 앱이 있더라구요. 그래서 Tarmux를 설치해 MagicMirror가 돌아가는지 테스트를 해 봤습니다. 안드로이드 7.0 이상이면 아주 잘 돌아가네요.

 

반응형
posted by 내.맘.대.로 2022. 11. 28. 09:50

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

달력 만드는 방법은 아래 글을 참고하세요
https://www.epubguide.net/468

 

집에서 노는 전자책 단말기가 2개 있는데

어떻게 활용할까 고민하다 달력으로 만들었습니다. 기기는 A5C.

A5C는 컬러(ㅜ.ㅜ)라 날짜나 주요 항목에 색을 넣을 수 있어 좋네요.

매직 미러 프로젝트를 이용해 시계+일기예보+일정+달력을 한 눈에 볼 수 있게 해봤어요.

각각의 정보는 모듈화 되어 있기 때문에 원하는 대로 배치 할 수 있고,

뉴스피드(RSS), 주식 정보, 외국어/단어 공부 등 다양한 모듈을 추가할 수 있어요.

 

회사에서 사용하는 모듈은 이렇게 배치했어요.

스마트폰 화면이 작아 많은 정보를 넣지는 못하지만 업무에 필요한 모듈만 뽑았어요.

캘린더 일정 정보로 최근 일정을 확인하고, 날씨와 달력, 시계를 배치했지요.

 

여러 모듈이 있어 주식시세, 외국어 공부 등 다양한 정보를 표시할 수 있어요.

https://magicmirror.builders/

안드로이드에 매직미러 설치할 방법을 찾다가,

앱을 몇개 설치해 봤는데 모두 마음에 들지 않고,

별도 서버에 설치 후 브라우저로 불러오는 방법은 불편하고,

그러다 Tarmux를 찾아냈습니다.

(https://play.google.com/store/apps/details?id=com.termux&hl=en_US&gl=US)

단말기에 Tarmux로 루팅 없이 리눅스를 설치하고,

여기에 MagicMirror를 설치, 서버로 실행시킨 후

단말기 내부 IP로 MagicMirror를 실행하니 되네요.

화면잠금 풀고 한시간 정도 켜놨는데 배터리 5% 소모.

날씨, 구글 캘린더 연동하려면 WiFi를 켜야해서 배터리 소모가 크네요.

그래도 퇴근 할 때 충전기 꽂아 놓으면 하루 정도는 버티겠네요.

만들때는 생각 못한건데,

세로 보다는 가로 모드가 좋을 것 같네요 ㅡ.ㅡ;

저 배치 찾느라 한참 걸렸는데... 최적의 가로 배치 디자인을 찾아봐야겠어요.

휴대폰이 있어도 책상 위에 달력이 꼭 필요한 세대(음...)라면

노는 기기로 전자 달력 하나 만들고 종이달력 치우는거 권해드립니다.

전자책 단말기 아니라 일반 휴대폰이나 태블릿으로도 가능해요.

휴대폰이나 태블릿은 배터리 빼면 훨씬 성능이 좋을거예요.

반응형
posted by 내.맘.대.로 2017. 9. 8. 12:42

내맘대로의 EPUBGUIDE.NET에서 편집자의 의도를 그대로 살려 전자책을 제작해 드립니다.

종이책의 편집 스타일을 최대한 유지하며, 팝업 주석 처리, 이미지 확대 축소 등 전자책의 장점을 반영하여 전자책을 제작합니다. 탬플릿을 사용하지 않고, 책 한권 한권 고유 스타일을 살리기 때문에 전자책에서도 종이책 디자인을 느낄 수 있습니다.

한국출판문화진흥원의 [텍스트형 전자책 제작 지원 사업] 선정 도서는 ‘제작 난이도별 제작비 산정 기준에 근거하여’ 제작 단가를 산정하고, 일정에 맞춰 제작을 해 드리니 많은 문의 바랍니다.

자세한 내용은 여기로: https://www.epubguide.net/notice/309

오래 전 작성된 글은 현재의 Sigil 버전과 차이가 날 수 있습니다. 등록 일자를 확인 하고 1년 이상 지난 글은 변경된 내용이 있는지 확인하시기 바랍니다.

아두이노를 사놓고 뭘 어찌 해야 할지 모르는 분들이 계실 것 같아요.

저도 장난감 삼아 아두이노 스마트카 킷을 구입했는데, 조립을 다 해놓고 한참 멍하니 있었습니다.

무엇부터 시작을 해야 할 지 모르겠더라구요.


아두이노 스마트카는 전혀 스마트하지 않았습니다.

조립을 끝낸 스마트카는 두뇌는 있지만 백지상태로 텅 비어있어요.

두뇌에 무언가를 채워 넣어야 하는데 저처럼 프로그래밍을 전문으로 하지 않던 사람들한테는 막막하기만 할 뿐입니다.


그래도 하나씩 연구해 가며 코딩을 하다 보니 모터가 돌아가고, 바퀴가 돌고 방향을 전환하는 것 까지 성공을 했네요.


저같은 생초보가 아두이노를 갖고 놀기 위해 해야할 일들을 하나씩 정리해 볼까 해요.


그 첫번째로 스마트카 소스를 정리해 봤습니다.

아두이노 스마트카 킷을 사놓고 뭘 해야하나 생각하신 분들은 이 코드를 활용해 보세요.

코드를 이해 못해도 괜찮아요. 아두이노 스마트카가 움직이는걸 보면 코드를 이해하고 싶은 욕구가 마구 생길테니까요^^



집에 있는 TV 리모컨으로 스마트카를 조종하는 코드입니다.

리모컨은 어떤거든 상관 없지만, 리모컨의 IR 신호는 직접 찾아야되요.

IR 신호를 찾는 방법은 나중에...ㅜ.ㅜ


깡통 스마트카를 조립해 놓고 멍하게 계셨던 분이라면 아래 코드를 참고해서 깡통을 스마트하게 만들어보세요^^


/* TV 리모컨의 IR 신호를 먼저 확인하세요. 이 신호는 제 리모컨이니 갖고 계신 리모컨의 신호를 확인해 그에 맞는 값을 넣어야 합니다. 


0xFF629D; // 전진

0xFF6897; // 후진

0xFFE21D; // 좌회전

0xFFA857; // 우회전

0xFFAA55; // 정지

 */

 

 

#include <IRremote.h>

 

 

int IRControl = 11;

IRrecv irrecv(IRControl);

decode_results results;


/*스마트카 조종을 위해 변수를 만듧니다. 제 리모컨은 입력받는 숫자가 아두이노의 int범위를 넘어가더라구요. 그래서 리모컨 값에서 0xFF0000을 빼는 걸로 조정을 했습니다.*/


const int irForward = 0xFF629D - 0xFF0000; // 전진  25245

const int irBack = 0xFF6897 - 0xFF0000; // 후진  26775

const int irLeft = 0xFFE21D - 0xFF0000; // 좌회전 57885

const int irRight = 0xFFA857 - 0xFF0000; // 우회전 43095

const int irStop = 0xFFAA55 - 0xFF0000; // 정지 43605

 

/*아두이노와 모터를 연결한 핀 번호입니다. 이 값도 모두 다를거예요. 숫자를 바꾸거나, 모터를 동일한 핀에 연결하세요.*/


int rightForward = 6;  //오른쪽 전진

int rightBack = 9; //오른쪽 후진

 

int leftForward = 5; //왼쪽 전진

int leftBack = 10; //왼쪽 후진



void setup() {

 

  Serial.begin(9600);

 

/*리모컨의 값을 입력받습니다.*/


  irrecv.enableIRIn();

 

/*모더를 구동시키는 함수?*/

/*자동차 조종은 왼쪽 바퀴 하나, 오른쪽 바퀴 하나 이렇게 2개로 합니다. 앞으로 가려면 왼쪽 바퀴와 오른쪽 바퀴를 앞쪽으로, 왼쪽으로 돌려면 왼쪽 바퀴를 멈추고 오른쪽 바퀴를 앞쪽으로 돌리면 되요. 그래서 컨트롤은 총 4개가 필요합니다. 왼쪽 바퀴 앞, 뒤 오른쪽 바퀴 앞, 뒤 이렇게 4개 조합이면 앞, 뒤, 왼쪽, 오른쪽 조종이 가능합니다. */


  pinMode(rightForward,OUTPUT);

  pinMode(rightBack,OUTPUT);

 

  pinMode(leftForward,OUTPUT);

  pinMode(leftBack,OUTPUT);

}

 

/*명령을 실행시키는 영역*/

void loop() {

 

/*리모컨 값(irrecev)에 따라 명령을 수행합니다. 

리모컨의 전진버튼(0xFF629D)을 눌렀다면 먼저 이 값에서 0xFF0000을 빼 value에 저장합니다.

리모컨에서 입력받은 값이 너무 커서 이 과정을 추가한거예요. 리모컨에서 받는 값이 크지 않다면 이렇게 하지 않아도 됩니다.


그럼 value에 0x629D가 저장됩니다. 0x629D는 위에서 선언한 irForward와 같은 값이에요.


switch(value) = switch(0x629D) = switch(irForward)가 됩니다. 


그럼 case irForward가 실행이 되는거에요.


그럼 스마트카는 모든 바퀴를 멈춥니다.

바퀴를 멈추는 이유는, 명령을 명확하게 전달하기 위해서예요. 앞으로 전진하려면 왼쪽 바퀴와 오른쪽 바퀴가 앞으로 돌아야하는데, 아두이노가 뒤로 가는 상황에서 양쪽 바퀴를 앞으로 돌게 하면 명령에 충돌이 생기네요. 아두이노가 양쪽 바퀴를 앞으로, 양쪽 바퀴를 뒤로 라는 서로 충돌하는 명령을 내려 오류가 나더라구요.


딜레이가 0.05초기 때문에 멈추는게 거의 느껴지지 않아요.


바퀴를 멈춘 후에 startForward();라는 명령을 실행합니다.

startForward();는 아래쪽을 봐주세요.


*/


  if (irrecv.decode(&results)) {

   unsigned int value = results.value - 0xFF0000 ;

   Serial.println(value);

   switch(value) {

   

      case irForward:

          stopAll();

          delay(50);

          startForward();

         break;

        

      case irBack:

          stopAll();

          delay(50);

          startBack();

         break;

        

      case irLeft:

         stopAll();

         delay(50);

         startLeft();

         break;

        

      case irRight:

          stopAll();

          delay(50);

           startRight();

          break;

               

      case irStop:

           stopAll();

      break;  

   }

   irrecv.resume(); // Receive the next value

 }

}



/*아두이노 컨트롤 명령을 하나씩 객체로 만들어놨습니다.

앞으로 가는 명령인 startForward()는 오른쪽, 왼쪽 바퀴를 앞으로 95 속도로 구르게 만들었어요.

아두이노는 모터가 돌아가는 속도를 조절할 수 있습니다. 0부터 255까지 가능한데, 싸구려라 그런지 제 아두이노는 95 밑으로는 바퀴가 구르지 않더라구요. 255는 속도가 너무 빨라 가장 느린 속도로 설정했습니다. 속도를 조절하고 싶다면 255보다 작은 범위에서 조절하면 되요.

*/

 

/*앞으로 가는 명령*/

void startForward()  {

  analogWrite(rightForward, 95);

  analogWrite(leftForward, 95);

  analogWrite(rightBack, 0);

  analogWrite(leftBack, 0);

}

 

/*뒤로 가는 명령*/

void startBack()  {

  analogWrite(rightForward, 0);

  analogWrite(leftForward, 0);

  analogWrite(rightBack, 95);

  analogWrite(leftBack, 95);

}

 


/*회전 명령은 2종류입니다. 

왼쪽으로 회전을 한다면

-작게 도는 명령은 왼쪽 바퀴가 뒤로, 오른쪽 바퀴가 앞으로 돌아요. 그럼 스마트카가 제자리에서 360도 회전을 합니다.


- 크게 도는 명령은 왼쪽 바퀴가 멈추고 오른쪽 바퀴만 앞으로 돌아요. 그럼 왼쪽 바퀴를 축으로 해서 오른쪽 바퀴가 원을 그리며 회전을 합니다. 


회전 방법을 바꾸고 싶으면 위쪽 case 코드의 startLeft()를 startLeftsmall()로 수정하면 되요. 아니면 리모컨 신호를 2개 더 받아서 큰 회전, 작은 회전을 추가할 수도 있습니다.

*/



/*왼쪽으로 작게 도는 명령*/

void startLeftsmall()  {

  analogWrite(rightForward, 95);

  analogWrite(leftForward, 0);

  analogWrite(rightBack, 0);

  analogWrite(leftBack, 95);

}

 

/*오른쪽으로 작게 도는 명령*/

void startRightsmall()  {

  analogWrite(rightForward, 0);

  analogWrite(leftForward, 95);

  analogWrite(rightBack, 95);

  analogWrite(leftBack, 0);

}

 

/*왼쪽으로 크게 도는 명령*/

void startLeft()  {

  analogWrite(rightForward, 95);

  analogWrite(leftForward, 0);

  analogWrite(rightBack, 0);

  analogWrite(leftBack, 0);

}

 

/*오른쪽으로 크게 도는 명령*/

void startRight()  {

  analogWrite(rightForward, 0);

  analogWrite(leftForward, 95);

  analogWrite(rightBack, 0);

  analogWrite(leftBack, 0);

}

 

/*정지 명령*/

void stopAll()  {

  analogWrite(rightForward, 0);

  analogWrite(leftForward, 0);

 

  analogWrite(rightBack, 0);

  analogWrite(leftBack, 0);

}


반응형