블로그 이미지
훅크선장

카테고리

분류 전체보기 (362)
사진이야기 (23)
펭귄컴퓨팅 (121)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

태그목록

최근에 올라온 글

이전에 리모콘만으로 설정 가능한 LED 벽시계의 리모콘 분실로 인하여, 아두이노를 가지고 IR 리모콘을 만들어보는 별 쓸모없는 작업을 해보았다. 그런데, 가지고 있는 잡동사니 보드 중에 예전 DEFCON 컨퍼런스를 갔을때, Sparkfun 워크숍을 참가해서 받아온 Roshamglo Badge Kit을 발견했다. Roshamglo 배지 키트는 IR 송신부와 수신부, 그리고 5축 스위치를 가졌기에, 간단한 IR 리모콘으로 만들기에 최적인 보드라고 생각한 것이 실수였다!!!

 

일단 Roshamglo 배지 키트는 2017년에 만들어졌고, 일종의 재미로 만든 보드이다보니, 이젠 더이상 아두이노 IDE 상에서 소프트웨어 라이브러리 지원이 안된다. (아두이노 IDE 소프트웨어를  1.6.10~1.8.x 버전대를 사용하더라도, 보드에 대한 기본적인 소프트웨어 지원 패키지가 없기 때문에, 아두이노 IDE에서 도저히 보드를 연결할 수가 없다.)

 

여기서 포기하면, 하드웨어쟁이가 될 수 없다.

그래서, Roshamglo의 기본이 되는 ATtiny84 MCU를 기준으로 아두이노 ISP를 사용하여 프로그래밍을 시도하였다.

 

Roshamglo Badge Kit 에 대한 정보는 아래의 링크들에서...

https://learn.sparkfun.com/tutorials/roshamglo-hookup-guide/all

 

Roshamglo Hookup Guide - SparkFun Learn

Introduction <!--- ###Attributes Before you begin, make sure you have filled out all required fields found under the Attributes tab. The author is responsible for for the following: * **Title** - Pick a title that makes sense for Search Engine Optimization

learn.sparkfun.com

https://learn.sparkfun.com/tutorials/hack-your-roshamglo-badge/all

 

Hack Your Roshamglo Badge - SparkFun Learn

Introduction So you've put together your Roshamglo badge, and now you want more? Well, we can help you with that. In addition to playing infrared (IR) Rock-Paper-Scissors, the Roshamglo board can be reprogrammed with user-created code. This will allow you

learn.sparkfun.com

https://learn.sparkfun.com/tutorials/roshamglo-project-tv-b-gone/introduction

 

Roshamglo Project: TV-B-Gone - SparkFun Learn

Retired KIT-14130 The SparkFun Roshamglo is the new and fun way to play Rock-Paper-Scissors with your friends! The board uses the ATtiny84, and…

learn.sparkfun.com

 

ATtiny84  프로그래밍에 대한 정보는 다음 링크들에서...

https://github.com/SpenceKonde/ATTinyCore

 

GitHub - SpenceKonde/ATTinyCore: Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8

Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8 - GitHub - SpenceKonde/ATTinyCore: Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8

github.com

https://www.instructables.com/Arduino-Uno-to-Program-ATTINY84-Arduino-V-185/

 

Arduino Uno to Program ATTINY84 (Arduino V. 1.8.5)

Arduino Uno to Program ATTINY84 (Arduino V. 1.8.5): Using the Arduino Uno to program ATTINY84-20PU (Digikey item # ATTINY84-20-PU-ND). This Instructable shows how to use the Arduino platform to work with physically smaller processors, such as the ATtiny84

www.instructables.com

https://www.instructables.com/Program-an-ATtiny44458485-with-Arduino/

 

Program an ATtiny44/45/84/85 With Arduino

Program an ATtiny44/45/84/85 With Arduino: This tutorial gives provides the steps to set up, program, and test an ATtiny44/45/84/85 with an Arduino. It is also provides some explanations as to the inner workings of AVR chips in general.

www.instructables.com

https://www.hackster.io/350166/getting-started-with-attiny84-c920ee

 

Getting started with Attiny84

learn how to program Attiny84 with this custom Breakout board with ams1117 for basic level projects like blinking LED and stuff. By Arnov Sharma and JLCPCB.

www.hackster.io

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

ATtiny84 MCU 프로그래밍 순서

 

0. ATtinyCore 보드 지원 라이브러리 설치 

Preferences... 에서 Additional boards manager URLs : 에  http://drazzy.com/package_drazzy.com_index.json를 추가해주고, Boards Manager에 가서  ATTinyCore by Spence Konde 를 설치해준다.

(이 글을 쓰는 시점에서 Arduino IDE 2.0.4에서 ATTinyCore version 1.5.2 가 설치되어 잘 동작한다.)

1. Arduino Uno를  Arduino ISP로 만든다. (File -> Examples -> 11. ArduinoISP -> ArduinoISP 선택하고, 스케치 업로드)

2. Arduino Uno와 ATtiny84(Roshamglo Badge Kit)와 연결 

    Arduino Uno의 RESET 핀과 GND 핀 사이에 10uF 커패시터를 연결 (커패시터의 짧은 다리가 GND 쪽에)

 

    Arduino Uno 핀 번호                                         Roshamglo 핀 번호 

                3.3V                <----------------->          3.3V

                GND                <----------------->          GND

                  13                  <----------------->           4 (SCK)

                  12                  <----------------->           5 (MISO)

                  11                  <----------------->            6 (MOSI)

                  10                  <----------------->            RESET

 

3. Roshamglo 에 동작시킬, ino 아두이노 프로그램 작성 

Blink 예제는 다음과 같다.

// Blinking Example

int GREEN_LED = 7; // Green LED가 연결된 핀 7번
int RED_LED = 8; // RED LED가 연결된 핀 8번

void setup(){
pinMode(GREEN_LED, OUTPUT); // Green LED를 출력으로 설정합니다.
pinMode(RED_LED, OUTPUT); // RED LED를 출력으로 설정합니다.
}
 
void loop(){
digitalWrite(GREEN_LED, HIGH); // Green LED 켜기
digitalWrite(RED_LED, LOW); // RED LED 끄기
 
delay(1000); // 1초간 유지합니다.
 
digitalWrite(GREEN_LED, LOW); // Green LED 끄기
digitalWrite(RED_LED, HIGH); // RED LED 켜기
delay(1000); // 1초간 유지합니다.
}
 
4.  Tools -> Board 설정에서  ATtinyCore -> ATtiny24/44/84(a) (No Bootloader) 선택 
                     Port는 Arduino Uno 가 연결된 포트를 지정 (/dev/cu.usbmodemXXXXXX 로 표시됨)
                     나머지 칩 설정은 기본을 그대로 둔다. 다만, Clock Source 가 8MHz (Internal) 인것을 반드시 확인한다.
      Programmer 설정에서 “Arduino as ISP”  반드시 지정 
 
5. Tools -> Burn Bootloader 선택 실행 후,
6. Sketch -> Upload using Programmer 로 프로그램을 업로드한다.
 
에러가 없이 다 정상적으로 수행되었다면, Okay~~!!  

  

Posted by 훅크선장
, |

리모콘을 잃어버린 중국제 LED 벽시계의 시간설정을 위해서, 

아두이노 우노와 만능 멤브레인 키패드 3x4, 그리고 IR 송수신 모듈을 가지고  시계용 IR 리모콘을 한번 만들어 보았다.

 

제일 어려운 것이 리모콘의 송신 신호를 알아내는 것이었다. 리모콘이 있다면, 신호를 송신해보고 그 신호를 복제하는 방법으로 하면 쉽게 갈 수 있지만, 리모콘이 없으므로 모든 코드 신호를 다 보내보면서 시계쪽의 변화를 봐야했기에 완전 쌩노가다였다.

 

무아스 퓨어 39cm 슬림형 LED 벽시계
리모콘 키
1) 전원버튼  
0x1C :  LED 전원 On/Off
2) 화면전환, 디스플레이모드 설정(시간, 날짜, 온도)
0x40 :  시간 -> 날짜  -> 온도 
 x1 x1  -> 22 oC
3) 자동밝기 모드 on/off  
0x08 : 자동밝기모드  
L-01 (자동밝기모드 Off)  -> L-AU (자동밝기모드 On)
0x08, sRepeates 20 : 시간구분점 페이드인 아웃 설정정
 Fd --  -> Fd 0n
4) 알람 ON/OFF
0x44 : AL -- (알람 Off)  ->  AL On  (알람 On)
5) 길게 눌러 시간설정  
0x5E, sRepeates 20 : 
6) 알람시간 확인, 길게 눌러 알람시간 설정
0x4A   6:30
7) 수동밝기모드에서 밝기 올림, 설정모드에서 숫자 올림  
0x18 : up
8) 수동밝기모드에서 밝기 내림, 설정모드웨서 숫자 내림
0x52 : down 

 

아두이노 IDE에 keypad 라이브러리와 IRremote 라이브러리를 설치해서 아래 코드를 아두이노 우노에 업로드하면 된다.

물론 키패드와 송수신 모듈을 아두이노와 연결해야 되는데, 연결방법은 인터넷에 다 있다. (검색하면 된다.)

 

참조 사이트:

https://www.makerguides.com/ir-receiver-remote-arduino-tutorial/

 

IR Remote and Receiver with Arduino Tutorial (4 Examples)

Learn how to use an infrared (IR) sensor/receiver and remote with the Arduino. Wiring diagrams and many example codes included!

www.makerguides.com

https://github.com/Arduino-IRremote/Arduino-IRremote#sending-ir-codes

 

GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple

Infrared remote library for Arduino: send and receive infrared signals with multiple protocols - GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive in...

github.com

https://mechatrofice.com/arduino/keypad-interfacing-with-arduino

 

Keypad Interfacing with Arduino 4x4, 4x3 with LCD connection and code

A Matrix Keypad is a very useful module for embedded systems and a variety of projects. This tutorial briefly explains the interface of 4×3 and 4×4 keypads with Arduino and few programs using keypad...

mechatrofice.com

https://lastminuteengineers.com/arduino-keypad-tutorial/

 

In-Depth: Interface 4x3 & 4x4 Membrane Keypad with Arduino

Learn about 4x3 & 4x4 Membrane Keypad along with its Working, Pinout, Wiring, Library, Arduino Code for Reading Key Presses.

lastminuteengineers.com

keypad 라이브러리에는 한번 누름만 존재하고, 길게 누름에 대한 함수가 존재하지 않기 때문에,

그냥 길게 누름의 신호를 별도의 키 하나에 할당해서 간단하게 구현하였다.

LED 벽시계의 키는 8개뿐이지만, 길게 누름이 3개 할당되어 있어서, 키를 11개만 쓰면 되기 때문에.

// Code for IR controller of Mooas LCD Digital Wall Clock
// coded by HooK7346
// 2023. 3. 8.
/*
* Key # : LED On/Off
* Key * : Change Display
* Key 1 : Brightness Auto On/Off
* Key 2 : Time dot Fade In/Out setting
* Key 3 : Alarm On/Off
* Key 4 : Settings Menu
* Key 5 : OK, Next
* Key 7 : Alarm Time Check
* Key 8 : Alarm Setting
* Key 6 : Up
* Key 9 : Down
*/

#include <Arduino.h>
#define DISABLE_CODE_FOR_RECEIVER // Saves 450 bytes program memory and 269 bytes RAM if receiving functions are not used.
//#define SEND_PWM_BY_TIMER // Disable carrier PWM generation in software and use (restricted) hardware PWM.
//#define USE_NO_SEND_PWM // Use no carrier PWM, just simulate an active low receiver signal. Overrides SEND_PWM_BY_TIMER definition
#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc.
#include <IRremote.hpp>
#include <Keypad.h>

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {2, 3, 4, 5};
byte colPins[COLS] = {6, 7, 8};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

uint8_t sCmd_LED_On_Off = 0x1C;
uint8_t sCmd_Change_Display = 0x40;
uint8_t sCmd_Bright_Auto_On_Off = 0x08;
uint8_t sCmd_Alarm_On_Off = 0x44;
uint8_t sCmd_Setting = 0x5E;
uint8_t sCmd_Alarm_Setting = 0x4A;
uint8_t sCmd_Up = 0x18;
uint8_t sCmd_Down = 0x52;

uint8_t sRepeats_short = 0;
uint8_t sRepeats_long = 30;

void setup() {
pinMode(LED_BUILTIN, OUTPUT);

Serial.begin(115200);
 
IrSender.begin(DISABLE_LED_FEEDBACK); // Start with IR_SEND_PIN as send pin and disable feedback LED at default feedback LED pin

Serial.print(F("Send IR signals at pin "));
Serial.println(IR_SEND_PIN);
}

void loop() {
char key = keypad.getKey();
switch (key) {
case '#':
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_LED_On_Off, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_short);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_LED_On_Off, sRepeats_short);

break;
case '*': // Change Display button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Change_Display, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_short);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Change_Display, sRepeats_short);

break;
case '1': // Brightness Auto On/Off button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Bright_Auto_On_Off, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_short);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Bright_Auto_On_Off, sRepeats_short);

break;
case '2': // Time dot Fade In/Out setting button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Bright_Auto_On_Off, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_long);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Bright_Auto_On_Off, sRepeats_long);

break;
case '3': // Alarm On/Off button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Alarm_On_Off, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_short);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Alarm_On_Off, sRepeats_short);

break;
case '4': // Settings Menu button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Setting, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_long);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Setting, sRepeats_long);

break;
case '5': // OK, Next button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Setting, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_short);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Setting, sRepeats_short);

break;
case '7': // Alarm Time Check button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Alarm_Setting, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_short);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Alarm_Setting, sRepeats_short);

break;
case '8': // Alarm Settings button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Alarm_Setting, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_long);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Alarm_Setting, sRepeats_long);

break;
case '6': // Up button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Up, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_short);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Up, sRepeats_short);

break;
case '9': // Down button
/*
* Print current send values
*/
//Serial.println();
Serial.print(F("Send now: address=0x00, command=0x"));
Serial.print(sCmd_Down, HEX);
Serial.print(F(", repeats="));
Serial.print(sRepeats_short);
Serial.println();

//Serial.println(F("Send standard NEC with 8 bit address"));
Serial.flush();

IrSender.sendNEC(0x00, sCmd_Down, sRepeats_short);

break;
}
}
Posted by 훅크선장
, |

gnuradio의 예제, 2020년도에 직접 실험한 것들

HackRF one, RTL-SDR, BladeRF  등

 

 

 

 

RTL-SDR_FM_radio_receiver_with_freq_slider.grc
0.02MB
RTL-SDR_FM_radio_receiver_with_freq_selection.grc
0.02MB
get_sig.grc
0.01MB
send_sig.grc
0.01MB
FM_Receiver.grc
0.01MB
fm_example_by_HooK.grc
0.04MB

윈도우즈에서 만든 간단한 예제 FM_Receiver.grc 에서는  음성 신호 마지막이 24KHz 인데, 이 설정이 리눅스 (칼리리눅스) 에서 Alsa 오디오 드라이버에서는 지원되지 않는 음성주파수 라고 나온다. 2배로 늘려서, 48KHz 로 하면, 정상적으로 출력된다. 

48KHz로 설정하였으면, 바로 앞단계의 Re Sampling도 48로 맞춰줘야 한다.

 

Posted by 훅크선장
, |

최근에 아마추어 햄을 시작하면서, 아마추어 무선기사 4급 자격을 취득하고, 장비를 구입했습니다.

저렴하면서도 성능이 적당한 Yaesu FT-65E 제품입니다. (일본제이지만, 선택의 여지가 별로 없어서...)

https://www.radioworld.co.uk/ft-65e-vhfuhf-2m70cm-dual-band-fm-handheld

 

Yaesu FT-65E VHF-UHF, 2m-70cm, Dual Band FM Handheld power settings 5W, 2.5W, and 0.5W.

The Yaesu FT-65E is very compact and light, yet ruggedly constructed. Three selectable output power settings – 5W, 2.5W, and 0.5W. The big front speaker provides a full 1 Watt of powerful very crisp and clear audio in keeping with YAESU's uncompromising

www.radioworld.co.uk

중국 제조이지만, 중국 브랜드 Baofeng 같은 것보다는 훨씬 낫다는 의견이 많아서 구입했습니다.

 

문제는 송수신기에 주파수를 비롯한 여러 설정을 입력하는데, 손으로 일일히 입력하기에는 시간도 많이 걸리고, 그 많은 주파수와 설정을 종이에 기록해놓을 수도 없는데...

전파 송수신기(무전기)도 장비이다 보니, 컴퓨터를 연결해서 설정을 입력할 수 있는 케이블이 따로 있었습니다.

어떤 브랜드는 무전기 살때, 케이블도 같이 넣어주기도 한다는데, 우리의 일본제는 그런거 없이 아예 따로 팔더군요~! 역시나.

https://www.amazon.com/Yaesu-SCU-35-Programming-FT-25R-Handheld/dp/B06W9G8DDD

 

Amazon.com

Enter the characters you see below Sorry, we just need to make sure you're not a robot. For best results, please make sure your browser is accepting cookies.

www.amazon.com

가격이 30달러를 상회하고, 해외 직구의 배송료까지 하면, 몇 만원이 훌쩍 넘는 가격으로, 무전기 가격의 30%에 육박할 수도 있었습니다.

이 케이블은 FT-25, FT-65, FT-4X 등에 공통적으로 사용할 수 있습니다.

그래서, 이 케이블을 DIY한 양덕이 있는지 검색했습니다. 역시 있었습니다. 아래와 같이, 케이블을 직접 분석해서 만든 외국인이 있었습니다.

https://www.youtube.com/watch?v=Xqw2q3maDyU

https://www.youtube.com/watch?v=1JLbUCwtwak

아래와 같은 회로도를 확인하여, 시도해보기로 하였습니다.

회로도는 워낙 간단해서, 케이블 제작이 별로 어렵지 않은데, 문제는 적절한 부품을 구하는 데에 시간이 걸리는 것이었죠.

1N4001 다이오드는 매우 범용 다이오드라서, 구하기 어렵지 않지만, USB to TTL 보드는 3.3v 5v 겸용을 구하는 것이 필요하고, 2.5mm 스테레오 잭 플러그도 일반적으로 쓰는 3.5mm 스테레오 잭이 아니라서 별도로 구해야 합니다.

 

일단 보유하고 있는 USB to TTL 보드와 1N4001 다이오드를 브래드보드에 꽂고, 2.5mm 스테레오 잭 플러그는 아주 오래전 3G 휴대폰용 이어폰마이크에서 잘라서 사용해봤습니다.

브래드 보드를 이용한 테스트에서는 CHIRP 프로그램으로 데이터 읽어오기와 데이터 쓰기가 잘 되었습니다.

너무 간단한 구조라서 살짝 놀라기는 했는데, 잘 되서 아주 좋았습니다.

 

그래서, 케이블을 만들어봤습니다.

부품은 USB to TTL 보드에 핀헤더소켓 6구를 연결하는 형태로 했습니다.  USB to TTL 보드는 다른 용도로도 사용해야 하기 때문에, 탈부착식으로 만들었습니다. 핀헤더소켓 6구에 1N4001 다이오드를 구부려 TX,RX에 연결하고(방향에 주의해서), 거기에 휴대폰 마이크이어폰에서 잘라낸  2.5mm 스테레오 잭 케이블을 납땜하였습니다. 마무리는 수축튜브로 했습니다. (납땜전에 미리 수축튜브에 케이블에 걸어줘야 합니다)

생각보다 볼품도 없고, 케이블의 연결 강도도 높지는 않지만, 그래도 아주 잘 동작합니다.

 

Yaesu 홈페이지에서 memory programmer 프로그램을 받아서도, 케이블을 연결하고 테스트해봤습니다.

아주 만족스럽게, 송수신기로부터 데이터 읽기와 쓰기가 가능하였습니다.

이렇게 어쩌면 매우 간단하게, Yaesu SCU-35 케이블을 복제할 수 있게 되었습니다.

 

집에서 직접 납땜으로 케이블을 만들기 위해서는 다음과 같은 부품들이 있으면 됩니다.

1. USB to TTL 보드 (3.3v 지원 필요)

2. 2.5mm 스테레오 잭 플러그

3. 1N4001 다이오드

4. 핀헤더소켓 6구 

5. 약간의 전선 2가닥 (약 20~30cm)

 

1. https://www.devicemart.co.kr/goods/view?no=1362010 

 

FT232BL USB to TTL 시리얼 모듈 [SZH-CH024]

mini-5P USB / FT232BL chip / Power : 5V or 3.3V / Size : 45mm X 24mm

www.devicemart.co.kr

또는 https://www.devicemart.co.kr/goods/view?no=1324910 또는 https://www.devicemart.co.kr/goods/view?no=1321026

 

CH340G USB to TTL 컨버터 모듈 [SZH-EK092]

간단설명 : Dual 3.3V, 5V 출력 / Status LED / 55mm * 16mm

www.devicemart.co.kr

 

CP2102 USB to TTL 컨버터 모듈 [SZH-CVBE-012]

CP2102 USB to RS232 Converter 칩셋 기반 / USB to TTL 프로젝트에 알맞도록 설계 / Status LED / 3.3V, 5V 모두 호환 가능 / 42mm * 17mm / 케이블 포함

www.devicemart.co.kr

2. https://www.devicemart.co.kr/goods/view?no=15870

 

PJ-플러그 2.5파이/스테레오

스테레오 커넥터 / 2.5mm / MALE / 몸통 부분 모양 랜덤 발송

www.devicemart.co.kr

3. https://www.devicemart.co.kr/goods/view?no=22

 

1N4001

50V, 1A / 벌크 단위 판매

www.devicemart.co.kr

4. https://www.devicemart.co.kr/goods/view?no=12136 

 

핀헤더소켓 Single 1x6 Straight(2.54mm)

핀헤더 소켓 / 스트레이트 타입 / DIP 타입 / 2.54mm pitch / 1열 / 6pin

www.devicemart.co.kr

5. 전선은 납땜하기 적당한 굵기의 아무거나 2가닥만 있으면 됩니다.

이상, 나만을 위한 자작기였습니다.

 

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

이전에 만든 케이블이 급조한 부품으로 만든 것이라, 너무 안 이뻐서, 위의 부품들을 가지고 이쁘게 다시 만들었습니다.

위에서 사용한 부품과는 다르게, 4번 핀헤더소켓 6구 대신에,

듀퐁 6구 암 커넥터가 있어야 하고, 약간의 열수축튜브을 사용하였습니다.

제작하기전에 새로이 구매하여 도착한 부품들을 먼저 보여드립니다.

먼저 전선과 다이오드를 방향에 맞게 연결해줍니다. (회로도를 잘 보고, 다이오드 방향을 잘 봐서 해야 합니다.)

다이오드가 연결되면, 열수축튜브로 한번 감싸줍니다. (아무래도 좁은 공간에 들어가니깐, 의도치않은 합선이 있을 수 있으므로)

회로도에 맞게, 2.5mm 스테레오 잭의 연결단자에 각각의 선을 납땜해 줍니다. (검정선은 GND, 노란색은 PC측의 TX, 흰색은 PC측의 RX 입니다.)

2.5mm 스테레오 잭을 잘 조립해줍니다.

스테레오 잭의 반대편 선에는 USB to TTL 보드를 연결하기 위한, 듀퐁 2.54mm 암 커넥터를 연결해서 납땜합니다.

전선 세가닥이 서로 흩어지지 않게, 다시 열수축튜브로 묶어준 다음에, 듀퐁 6구 커넥터 하우징을 조립해서 완성합니다.

그리고, 보드와 위치에 맞게 연결해서 완성합니다.

이제 완성해서, 앞절과 같이 FT-65 송수신기와 컴퓨터 USB를 연결하여 프로그래밍을 하면 됩니다.

Posted by 훅크선장
, |

Arduino Uno + gShield v5b Board + GRBL 1.1 


※ 모터 결선방법은 다음에 잘 나와있다.

  http://www.diymachining.com/diy-cnc-controller-how-to-setup-your-arduino-gshield/


내가 테스트하고 있는 사진과 영상에선 모터전원을 맨 왼쪽에 두고 보드를 보았을때,

왼쪽부터, 노랑 - 흰색 - 녹색 - 검정 순이다.

         B  - B' -  A' - A 순으로 된 것 같은데...

         

위 링크에서는 B' - B - A' - A 순 으로 결선하라고 되어 있다. 

그러면, 내 모터는  흰색 - 노랑 - 녹색 - 검정 인데, 이렇게 결선하면, 

Z축의 이동이 GRBL Controller 상에서 보이는 스위치와 상하 반대로 움직이던데???? (반드시 확인 필요!)

리미트 스위치는 어느 방향에 있어야 하는가? 시작점? 종료점?


X,Y,Z 축이 +와 - 일때, 움직여야 하는 방향은 어디쪽?  모터와 멀어지는 쪽? 모터와 가까워지는 쪽?

이 방향이 참 애매합니다!!!?? 확인하세요!!



1. grbl 다운로드

   2019년 2월 현재, grbl은 1.1 버전이 나와있으며,

   https://github.com/gnea/grbl/releases 에는 2017년 8월 1일부로 v1.1f 가 있다고 하나, 

   업데이트후에 확인해본 결과, 1.1g 버전으로 업데이트된 상황임.

    

   https://github.com/grbl/grbl 에서,

   우측편에 있는 “Clone or download”를 선택하여, zip 파일로 다운로드 받음.

   

   다운로드된 파일명은 grbl-master.zip 파일이며, 이 파일의 압축을 풀어준다.

   하위에 build, doc, grbl 디렉토리가 있다. 중요한 것은 grbl 디렉토리이다.


2. 아두이노 IDE 설치

   아두이노 IDE 최신버전을 설치하고, 

   https://www.arduino.cc/en/Main/Software 에서 다운로드, 2019년 2월 현재 최신버전은 1.8.8


※ 이미 다른 이전 버전의 grbl이 설치되어 있다면, 미리 제거해야 한다. (grbl 이라는 폴더 이름이 충돌하기 때문에...)   

   기존 설치된 라이브러리를 제거하려면,

   ~/Documents/Arduino/libraries 폴더로 이동한 다음에 해당 grbl 디렉토리를 삭제하고,

   Arduino IDE를 다시 시작하면, 해당 라이브러리가 없어진 것을 확인할 수 있다.

   (최상위 메뉴에서 “스케치” -> “라이브러리 포함하기” 에서 grbl 이름이 없는 것을 확인!)   

   

3. grbl 라이브러리 설치

   최상위 메뉴에서 “스케치” -> “라이브러리 포함하기” -> “ZIP 라이브러리 추가...” 를 선택

   파일선택 다이얼로그가 뜨면, 1번의 과정에서 확인된 grbl 디렉토리가 보이는 곳으로 이동하여, 

   grbl 디렉토리를 선택한 다음 “선택” 버튼 클릭


4. grbl 컴파일 및 업로드

   최상위 메뉴에서 “파일” -> “예제” 에서 아래쪽 “사용자 지정 라이브러리의 예제”쪽에 있는 

   “grbl” -> “grblUpload” 를 선택하면, 파일이 열립니다.

   

   다시, 최상위 메뉴에서 “툴” -> “보드” -> “Arduino/Genuino Uno” 

   “툴” -> “포트” -> “/dev/cu.usbmodem14201”  ※포트명은 컴퓨터에 따라 달라질 수 있음!

   각각을 잘 선택하고, 업로드(오른쪽방향 화살표 동그란 아이콘 클릭)하면 됩니다.

   

   ※ 미리 컴파일이 잘 되는지만 확인해보고(체크 표시 동그란 아이콘 클릭), 업로드하는 것이 좋습니다.


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

Grbl Controller 와 Universal G-Code Sender 를 다운받아서 설치한다.

※ GrblController-3.6.1.7z 파일을 다운받는다. https://github.com/zapmaker/GrblHoming/releases

※ UniversalGcodeSender-v2.0.0-stable2.zip 을 다운받아서 사용한다. 엉뚱한 버전 받으면 고생한다! https://winder.github.io/ugs_website/download/


Port name은 “/dev/cu.usbmodem14201”

Baud Rate는  115200 으로 설정


Open 버튼을 클릭했을때, 다음과 같은 메시지가 나와야 정상이다.


Grbl 1.1g['$'for help]

>$G

...

>$$

$0=10

...

...

...

$132=200.000




Spindle Motor를 켜는 명령어는 M05,  끄는 명령어는 M03 이며, (Spindle On 토글박스 체크와 언체크로 제어할 수 있다.)

Spindle의 속도제어는 S100 ~ S1000 까지로 제어할 수 있다.


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

추가 : 

CNC 장비의 Limit 스위치는 포토커플러를 이용한 최상의 방법을 선택할 수 있다.


별도의 GRBL Buffer Board가 판매되고 있으나, 매우 심플하게 구성할 수 있다.

https://www.tindie.com/products/eccentricwkshp/cnc-optical-limit-switch-isolator-grbl/


LTV-817과 1K, 220 오옴 저항으로 구성할 수 있다. 

https://github.com/gnea/grbl/wiki/Wiring-Limit-Switches









Posted by 훅크선장
, |

0-1. 24v 사용을 위해서, D1 제너다이오드 제거

※   D1 제너다이오드는 ramp 1.4보드에서 아두이노 메가보드로 전원이 공급되도록 하는 역할을 함.

  단, ramp 1.4 보드가 12v 전원만을 사용하도록 되어 있기 때문에

  이것을 연결한 채로 아두이노 메가가 사용되면 아두이노 메가가 24v 전원이 공급되어서 타버림~~!!!!!

  

0-2. 24v 사용을 위해서, 11A용 전원단에 붙은 휴즈 교체 

   http://www.mythoughtspot.com/2017/09/18/modify-ramps-for-24-volts/ 참조

   베드가열을 위한 전원 입력부에 과열방지를 위해서 MF-R1100 폴리 퓨즈가 달려있는데, 이것은 16v 용이라서,

   24v 전원에서는 아마 타버릴 것이기 때문에, 자동차용 32v 10A 퓨즈로 교체(퓨즈홀더를 직접 기판에 납땜하는 방식으로)

   http://www.devicemart.co.kr/goods/view?no=1153151

   http://www.devicemart.co.kr/goods/view?no=11510 

   이상 두 부품을 사용함


1. Arduino Mega 2560 을 위한 grbl 다운로드

   2019년 2월 현재, grbl은 1.1 버전이 나와있으며,

   https://github.com/gnea/grbl-Mega/releases 에는 2017년 8월 2일부로 v1.1f 가 있다고 하나, 

   업데이트후에 확인해본 결과, 1.1g 버전으로 업데이트된 상황임.

    

   https://github.com/gnea/grbl-Mega 에서,

   우측편에 있는 “Clone or download”를 선택하여, zip 파일로 다운로드 받음.

   

   다운로드된 파일명은 grbl-Mega-edge.zip 파일이며, 이 파일의 압축을 풀어준다.

   하위에 build, doc, grbl 디렉토리가 있다. 중요한 것은 grbl 디렉토리이다.


2. 아두이노 IDE 설치

   아두이노 IDE 최신버전을 설치하고, 

   https://www.arduino.cc/en/Main/Software 에서 다운로드, 2019년 2월 현재 최신버전은 1.8.8

   

3. EEPROM 청소

   grbl을 업로드하기 전에 꼭 반드시 EEPROM을 깨끗이 청소하는 작업이 필요하다고 함!!!!

   최상위 메뉴에서 “파일” -> “예제” 에서 중간쯤  

   “EEPROM” -> “eeprom_clear” 를 선택하고 파일이 열리면, 한번 업로드 실행을 해주면 됨.

   

4. grbl mega 라이브러리 설치

   최상위 메뉴에서 “스케치” -> “라이브러리 포함하기” -> “ZIP 라이브러리 추가...” 를 선택

   파일선택 다이얼로그가 뜨면, 1번의 과정에서 확인된 grbl 디렉토리가 보이는 곳으로 이동하여, 

   grbl 디렉토리를 선택한 다음 “선택” 버튼 클릭

   

5. grbl mega 소스 수정 (정말로 중요한 곳이다.)

   ~/Documents/Arduino/libraries/grbl 디렉토리로 이동한 다음,

   config.h 파일을 편집기로 연 다음, 다음 두 라인을 코멘트 처리하고,(맨 앞에 // 를 추가한다.)

   #define DEFAULTS_GENERIC

   #define CPU_MAP_2560_INITIAL

   

   다음 두 라인을 실제 코드 라인으로 바꿔준다. (맨 앞에 있는 // 를 제거한다.)

   // #define DEFAULTS_RAMPS_BOARD

   // #define CPU_MAP_2560_RAMPS_BOARD

   

6. grbl mega 소스 수정, 스핀들 모터의 PWM 속도 제어 가능

   기존 소스로는 PWM 속도 제어 불가능

   https://lotronblog.wordpress.com/2018/01/25/changing-spindle-pin-on-grbl-mega/ 에서

   제안한 방법으로 소스를 수정한다.

   ~/Documents/Arduino/libraries/grbl 디렉토리로 이동한 다음,

   cpu_map.h 파일을 편집기로 연 다음, 다음과 같이 수정한다.

   

  //Control Digital Pin 6 which is Servo 2 signal pin on Ramps 1.4 board

  #define SPINDLE_TCCRA_REGISTER    TCCR4A

  #define SPINDLE_TCCRB_REGISTER    TCCR4B

  //#define SPINDLE_OCR_REGISTER      OCR4C   <- 바뀐 부분

  //#define SPINDLE_COMB_BIT          COM4C1   <- 바뀐 부분, 그리고 아래 두 줄을 추가

  #define SPINDLE_OCR_REGISTER      OCR4A

  #define SPINDLE_COMB_BIT          COM4A1


  // 1/8 Prescaler, 16-bit Fast PWM mode

  //#define SPINDLE_TCCRA_INIT_MASK ((1<<WGM40) | (1<<WGM41))   <- 바뀐 부분

  //#define SPINDLE_TCCRB_INIT_MASK ((1<<WGM42) | (1<<WGM43) | (1<<CS41))    <- 바뀐 부분

  //#define SPINDLE_OCRA_REGISTER   OCR4A // 16-bit Fast PWM mode requires top reset value stored here.   <- 바뀐 부분, 그리고 아래 세 줄을 추가

  #define SPINDLE_TCCRA_INIT_MASK (1<<WGM41)

  #define SPINDLE_TCCRB_INIT_MASK ((1<<WGM42) | (1<<WGM43) | (1<<CS40)) 

  #define SPINDLE_OCRA_REGISTER   ICR4

  #define SPINDLE_OCRA_TOP_VALUE  0x0400 // PWM counter reset value. Should be the same as PWM_MAX_VALUE in hex.


  // Define spindle output pins.

  #define SPINDLE_PWM_DDR   DDRH

  #define SPINDLE_PWM_PORT  PORTH

  //#define SPINDLE_PWM_BIT   5 // MEGA2560 Digital Pin 8    <- 바뀐 부분, 그리고 아래 한 줄을 추가

  #define SPINDLE_PWM_BIT   3 // MEGA2560 Digital Pin 6 

   

  RAMPS 1.4 보드에서 스핀들모터와 스핀들모터 PWM 신호는 리셋스위치 오른쪽의 12개 핀아웃에서 나온다.

    PWM    ON/OFF

  O  ~  O  X  

  O  O  O  O

  O  O  O  O  <- All ground pin


7. grbl mega 컴파일 및 업로드

   최상위 메뉴에서 “파일” -> “예제” 에서 아래쪽 “사용자 지정 라이브러리의 예제”쪽에 있는 

   “grbl” -> “grblUpload” 를 선택하면, 파일이 열립니다.

   

   다시, 최상위 메뉴에서 “툴” -> “보드” -> “Arduino/Genuino Mega or Mega 2560” 

   “툴” -> “프로세서” -> “ATmega2560 (Mega 2560)”

   “툴” -> “포트” -> “/dev/cu.usbmodem14201”  ※포트명은 컴퓨터에 따라 달라질 수 있음!

   각각을 잘 선택하고, 업로드(오른쪽방향 화살표 동그란 아이콘 클릭)하면 됩니다.

   

   ※ 미리 컴파일이 잘 되는지만 확인해보고(체크 표시 동그란 아이콘 클릭), 업로드하는 것이 좋습니다.


P.S. 여기에 사용한 grbl은 순수하게 Mega 보드용이므로, 다른 보드를 위한 grbl을 사용하기 위해서는 미리 제거해야 한다.

     (grbl 이라는 폴더 이름이 충돌하기 때문에...)

   

   기존 설치된 라이브러리를 제거하려면,

   ~/Documents/Arduino/libraries 폴더로 이동한 다음에 해당 grbl 디렉토리를 삭제하고,

   Arduino IDE를 다시 시작하면, 해당 라이브러리가 없어진 것을 확인할 수 있다.

   (최상위 메뉴에서 “스케치” -> “라이브러리 포함하기” 에서 grbl 이름이 없는 것을 확인!)

   

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

Grbl Controller 와 Universal G-Code Sender 를 다운받아서 설치한다.

Port name은 “/dev/cu.usbmodem14201”

Baud Rate는  115200 으로 설정


Open 버튼을 클릭했을때, 다음과 같은 메시지가 나와야 정상이다.


Grbl 1.1g['$'for help]

>$G

...

>$$

$0=10

...

...

...

$132=200.000


Posted by 훅크선장
, |
0. 기본사항

Opencreators의 NP-Mendel 제품 (초기 조립형)
재료 필라멘트는 PLA 1.75mm 사용 

1. Repetier-Host 설치 및 프린터 설정
※ Repetier-Host는 단순히 프린터에 gcode를 집어넣어서 출력하는 용도뿐임!! ※
※ 그러므로, 프린터 연결정보와 물리적인 베드 크기와 온도만 설정하면 됨!!        ※

연결 탭

연결 : 시리얼 연결
포트 : COM3
통신속도 : 250000
전송프로토콜 : 자동감지

프린터 탭

작업/종료 이후 압출기 끄기 (체크 해제함)
작업/종료 이후 압출기 끄기 (체크 해제함)

압출기 탭

압출기 최고온도 : 250
베드 최고온도 : 100

프린터 영역 설정 탭

프린트 영역 폭 : 200 mm
프린트 영역 깊이 : 200 mm
프린트 영역 높이 : 100 mm

스크립트들 탭

이 안에다가 절대로 시작코드나 종료코드 넣지 말 것!!
CURA에서 gcode 생성할 때, 자동으로 시작코드와 종료코드가 들어가기 때문에,
시작코드와 종료코드는 반드시 CURA 설정에서 집어 넣을 것..


2. CURA 설치 및 Preferences 설정
※ 프린터 프로파일을 만들어서 사용할 것!                 ※
※ 프린터 설정의 Machine Settings을 반드시 확인할 것!! ※
※ (Start Gcode와 End Gcode)                ※

Settings 탭
여기서는 화면에 보이는 Print Setup의 내용을 보이거나 숨기는 체크를 한다.

Prints  탭
먼저 NP-Mendel 항목을 Add 한 다음, Machine Settings 를 설정
Printer Settings
X {Width) : 200 mm
Y {Depth) : 200 mm
Z (Height) : 100 mm

GCode Flaver : Repetier 선택

Number of Extruders : 1
Material Diameter : 1.75 mm
Nozzle size : 0.4 mm

Start Gode 내용에 다음을 넣고,

;  -- START GCODE --
;Opencreators NP-Mendel
;Sliced at: {day} {date} {time}
;Basic settings: Layer height: {layer_height}
G28
G92 X-10 Z0.3
G1 X-10 Y180 F8000
G92 E0
G1 E20 F500
G92 E0
G90
;  -- end of START CODE --

End Gcode 내용에 다음을 넣는다.

;  -- END GCODE --
G28 Y
M104 S0
M140 S0
;  -- end of END GCODE --

Profiles 탭
NP-Mendel 설정을 먼저 Import 한 다음에 수정해서 사용한다.

Shell
  Wall Thickness : 0.8 mm
  Top/Bottom Thickness : 0.8 mm
Material
  Printing Temperature : 180 oC
  Printing Temperature Inital Layer : 180 oC
  Diameter : 1.75 mm
Speed
  Print Speed : 50 mm/s
Build Plate Adhesion
  Build Plate Adhesion Type : 때에 따라서 알맞게, Skirt/Brim/Raft 등으로 선정



Posted by 훅크선장
, |

FM_Receiver.grc
0.01MB
fm_example_by_HooK.grc
0.04MB

RTL-SDR FM radio receiver with GNU Radio Companion

http://www.instructables.com/id/RTL-SDR-FM-radio-receiver-with-GNU-Radio-Companion/?ALLSTEPS

를 참고하여서, 약간의 수정을 가한 것입니다.

 

※ 좀더 자세한 FM 수신에 관한 정보는 여기서 볼 수 있습니다. (일본어 자료)

http://wireless-square.com/2016/01/14/fm-receiver-using-gnu-radio/

위와 같이, 샘플링 주파수와 각각의 값을 주어져야 합니다. 아래의 설명에서는 주파수 대역폭이 약간 이상한 값을 사용하였으나, 방송수신에는 큰 차이 없습니다.

 

 

 

HackRF One 장비와 GNU Radio Companion 프로그램을 이용하여서, Kali Linux 2.0 버전에서 실행한 결과입니다.

※ Kali Linux 2.0에서 HackRF One 장비를 정상적으로 사용하기 위해서는, 항상 장비를 USB로 연결한 다음, # rmmod hackrf  명령을 실행해야만 합니다.

 

바로 사용할 수 있는 완성된 GRC 파일은 여기서 다운로드 받을 수 있습니다.

 

다음은 테스트 버전으로 만들어본 것으로 주파수 입력을 텍스트 박스에서 하는 형태입니다.

 

 

다음은 완성된 버전으로 주파수 입력을 텍스트 박스에서 할 수도 있고, 슬라이드 바를 움직여서 주파수 변화를 줄 수 있게 만든 것입니다.

 

 

위와 같은 SDR (Software Defined Radio)를 만드는 과정을 단계별로 설명합니다.

 

제일 먼저 (GRC) GNU Radio Companion 을 실행시킵니다.  실행메뉴에서 찾기 어려우면, 그냥 터미널 프로그램에서

# gnuradio companion &

명령어를 실행하면 됩니다.

 

 

0. Variable: samp_rate

HackRF One에서 전파 수신을 하는 주기인 Sampling Rate 샘플링 주기를 정합니다. FM Radio를 설계하는 것이라서, 적절한 2000000 (= 2MHz를 의미)으로 설정합니다. 2e6 으로 입력하면, 화면 표시는 2M 으로 나타납니다.

 

 

1. RTL-SDR Source

HackRF 장비를 나타내는 전파 수신 입력기를 설정합니다. RTL-SDR Source는 대부분의 전파 수신 입력장치를 총괄합니다. RTL2832 계열의 수신기도 사용할 수 있습니다.

여기서는 Sample Rate로 변수인 samp_rate와 Ch0: Frequency를  슬라이드 바 변수값인 channel_freq로 설정합니다.

그리고, ch0: RF Gain을 20 정도로 맞추어줍니다. 

※ RF Gain은 환경에 따라, 40 정도가 적절할 수 도 있습니다.(전파혼선이 많은 환경에서는,)

 

 

 

2. WX GUI FFT Sink

주파수 영역의 그래프를 보기위한 비주얼 화면 출력입니다. Fast Fourier Transform 빠른 푸리에 변환을 수행하는 출력모듈입니다.

여기서는 Sample Rate로 변수인 samp_rate와 Baseband Freq를  슬라이드 바 변수값인 channel_freq로 설정합니다.

그리고 화면 출력을 한 화면에 2개의 탭으로 출력하기 위해서, Notebook에 Notebook_0, 0 로 입력합니다. 첫번째 탭에 출력이 될 것입니다.

 

 

3. Low Pass Filter

HackRF에 들어오는 전파 신호중에서 특정 영역(원하는 FM 라디오 주파수 대역)만을 추출하기 위해서 필요합니다.

Decimation 값은 int(samp_rate/500e3) 로 설정하여, 샘플링 주기로 추출되는 데이터신호 중에서 일부만을 가져옵니다. 이것은 샘플링되는 데이터 량을 줄여주는 역할을 합니다. 비록 일부만 가져오더라도, 뒤에 Rational Resampler로 다시 보완하는 과정이 있기 때문에 문제가 되지 않습니다.

※ 여기서 500e3 즉 500KHz는 통상 채널폭(Channel Width)를 의미합니다.

Sample Rate는 samp_rate로 설정하고, Cutoff Freq는 100k (입력은 100e3 으로), Transition Width는 10k (입력은 10e3으로) 설정합니다.

 

 

4. WBFM Receiver

진짜 FM 신호를 주파수 변환하는 것입니다. 출력은 음성신호로 곧 변환할 수 있습니다. 

FM 라디오 수신을 위해서는 Quadrature Rate는 500k로 해주어야만 합니다.

500e3 으로 입력하는 500k 입력값은 앞의 Low Pass Filter에서 Decimation 값 입력의 일부로 사용한 숫자와 동일해야 합니다.

 

 

5. WX GUI FFT Sink

주파수 영역의 그래프를 보기위한 비주얼 화면 출력입니다. Fast Fourier Transform 빠른 푸리에 변환을 수행하는 출력모듈입니다.

여기서는 Sample Rate로 변수인 samp_rate와 Baseband Freq를  슬라이드 바 변수값인 channel_freq로 설정합니다.

그리고 화면 출력을 한 화면에 2개의 탭으로 출력하기 위해서, Notebook에 Notebook_0, 1 로 입력합니다. 두번째 탭에 출력이 될 것입니다.

두번째 화면에서는 FM 변환이 완료된 주파수 영역을 볼 수 있습니다.

 

 

6. Rational Resampler

FM 변환된 음성신호는 이산신호(디지털 샘플링 신호)이기 때문에, 이 신호를 아날로그로 연결했다가, 다시 디지털 샘플링으로 추출하는 과정을 거칩니다. 

여기서 입력하는 Interpolation 값인 48과  Decimation 값인 500은 임의로 정하는 숫자가 아니라, 앞에 WBFM Receiver의 Quadrature Rate인 500k 가  뒤에 나오는 Audio Sink의 Sample Rate인 48Khz (480000)로 변환되기 위해서 필요한 값이 되어야만 합니다. 

500k 가  48배로 증가했다가, 다시 500 배로 축소되어야만 최종적으로 48k 가 됩니다.

 

 

7. Wav File Sink

FM 라디오에서 출력되는 음성 데이터를 저장하기 위해서, 파일명 File을 지정합니다.

음성데이터의 Sample Rate는 48000으로 설정합니다.

(더 높은 96000, 192000 등으로 증가시킬 수 있습니다. 그러면, 음성 품질은 좋아질 것입니다. 대신 Sample Rate를 변경하면, 앞에서 Rational Resampler에 입력되는 값을 적절히 변경하여야 합니다.)

 

 

8. Multiply Const

소리로 출력되는 FM라디오 음성데이터의 소리 증폭을 위해 Volume 상수를 지정합니다.

 

 

9. WX GUI Slider

소리로 출력되는 FM라디오 음성데이터의 소리 증폭을 위해, 앞의 Multiply Const인 Volume 상수에 대응되는 슬라이드 바를 추가합니다.

ID와 Lable을 모두 volume으로 설정하고, Default Value(기본값)와 Minimum(최소값), Maximum(최대값), 그리고 Num Steps(최소값과 최대값 사이의 총 단계)를 설정합니다.

 

 

10. Audio Sink

실제 컴퓨터의 사운드 카드에 대응하는 소리 출력을 지칭합니다.

Sample Rate는 48KHz 로 설정합니다.

 

 

11. WX GUI Slider

FM 라디오 수신을 위한 주파수 입력 및 슬라이드 바를 지정합니다.

 

 

12. WX GUI Notebook

GRC 파일의 실행시, 화면 출력을 한 화면에 2개의 탭으로 출력하기 위해서 사용하는 화면 설정을 합니다.

Labels에 두 개 화면의 탭 이름을 써줍니다. ['RF Spectrum', 'Demod Sprctrum'] 로 입력하면 됩니다.

 

 

 

 

 

 

 

Posted by 훅크선장
, |

최근 RF 해킹에 관심을 가지게 되어서, HackRF One 장비를 구입했습니다.

외국 문헌에 사용방법이 많이 나와있는데, 저는 가능하면 칼리 리눅스 Kali Linux 2.0을 선호해서, 여기서 사용할 수 있는 방법을 정리해봤습니다.


이미 칼리 리눅스 Kali Linux 2.0 에는 HackRF와 관련된 모든 설치와 

셋팅이 되어 있습니다. 그냥 사용하시면 됩니다.

GNU Radio를 바로 쓰면 됩니다.


다만, 매번 장비를 꽂고나서 반드시

# rmmod hackrf

명령어를 실행시켜야만 합니다. 그래야 정상적으로 장비가 커널에서 인식이 됩니다.


HackRF one에 관련된 정보는 https://greatscottgadgets.com/hackrf/ 를 참고하시면 됩니다.



쉽게 풀어 말하면, 소프트웨어로 조종할 수 있는 전파장비 Radio 입니다. SDR 즉, Software Defined Radio.


GNU Radio라는 훌륭한 프로젝트가 있기 때문에, 우리는 이것을 이용하면 됩니다. 다만, 우리의 칼리 리눅스 2.0에서는 다음과 같이 몇 가지 설치가 필요합니다.

먼저 칼리 리눅스 2.0 한글판으로 부팅합니다. LXDE, Gnome 버전이나 XFCE 윈도우 매니저 버전에서도 동일하게 잘 동작합니다. XFCE, LXDE 윈도우 매니저 버전에서는 아주 잘 동작하는 것을 직접 확인하였습니다.


참고 : Pentoo Linux를 LiveCD로 그냥 사용하는 방법도 있습니다만, Pentoo 리눅스의 작업환경이 일반적인 Debian 이나 Ubuntu 환경과 조금? 다른 Gentoo 리눅스 기반이라서, 명령어나 설치등에 차이로 불편이 많습니다. Pentoo 리눅스를 쓰는 것도 나쁘지는 않습니다. 익숙해지기 전까지 조금 불편할 뿐이죠!


1. 설치를 위해서 컴파일 도구 및 라이브러리의 사전 설치

# apt-get update

# apt-get install git build-essential cmake libusb-1.0-0-dev liblog4cpp5-dev libboost-dev libboost-system-dev libboost-thread-dev libboost-program-options-dev swig gnuradio-dev libvolk-dev
# apt-get install gnuradio gnuradio-dev gr-iqbal

# sync


패키지 설치를 위한 소스 컴파일용 디렉토리를 생성
# cd ~
# mkdir sdr
# cd sdr


hackrf 기존 패키지 제거

# dpkg -r --ignore-depends=gqrx,kali-linux-full,kali-linux-sdr  hackrf

# dpkg -r --ignore-depends=gqrx,kali-linux-full,kali-linux-sdr,gr-osmosdr,libgnuradio-osmosdr0.1.3  libhackrf0


2. hackrf  패키지를 소스로 컴파일 후,  설치
# git clone https://github.com/mossmann/hackrf.git
# cd hackrf/host/
# mkdir build && cd build
# cmake ../ -DINSTALL_UDEV_RULES=ON
# make
# make install

# ldconfig


root@kali:~/sdr/hackrf/host/build# make install
[ 11%] Built target hackrf
[ 22%] Built target hackrf-static
[ 33%] Built target hackrf_cpldjtag
[ 44%] Built target hackrf_info
[ 55%] Built target hackrf_max2837
[ 66%] Built target hackrf_rffc5071
[ 77%] Built target hackrf_si5351c
[ 88%] Built target hackrf_spiflash
[100%] Built target hackrf_transfer
Install the project...
-- Install configuration: ""
-- Up-to-date: /usr/local/lib/pkgconfig/libhackrf.pc
-- Up-to-date: /etc/udev/rules.d/53-hackrf.rules
-- Up-to-date: /usr/local/lib/libhackrf.so.0.4.0
-- Up-to-date: /usr/local/lib/libhackrf.so.0
-- Up-to-date: /usr/local/lib/libhackrf.so
-- Up-to-date: /usr/local/lib/libhackrf.a
-- Up-to-date: /usr/local/include/libhackrf/hackrf.h
-- Up-to-date: /usr/local/bin/hackrf_max2837
-- Up-to-date: /usr/local/bin/hackrf_si5351c
-- Up-to-date: /usr/local/bin/hackrf_transfer
-- Up-to-date: /usr/local/bin/hackrf_rffc5071
-- Up-to-date: /usr/local/bin/hackrf_spiflash
-- Up-to-date: /usr/local/bin/hackrf_cpldjtag
-- Up-to-date: /usr/local/bin/hackrf_info

3. GNU Radio 관련 패키지 설치


기존 gr-osmosdr 패키지 제거


# dpkg -r --ignore-depends=gqrx,kali-linux-sdr gr-osmosdr libgnuradio-osmosdr0.1.3


4. osmocom 패키지를 소스로 컴파일 후,  설치
# cd ~/sdr

git clone git://git.osmocom.org/gr-osmosdr
# cd gr-osmosdr/
# mkdir build && cd build
# cmake ../
# make
# make install
# ldconfig


root@kali:~/sdr/gr-osmosdr/build# make install
[ 41%] Built target gnuradio-osmosdr
[ 41%] Built target osmosdr_swig_swig_doc
[ 44%] Built target _osmosdr_swig_swig_tag
[ 51%] Built target osmosdr_swig_swig_2d0df
[ 55%] Built target _osmosdr_swig
[ 62%] Built target pygen_swig_6ab6b
[ 68%] Built target pygen_python_0fe8f
[ 79%] Built target osmosdr_grc_xml_blocks
[ 86%] Built target pygen_apps_05ff6
[100%] Built target pygen_apps_5ca0e
Install the project...
-- Install configuration: "Release"
-- Up-to-date: /usr/local/lib/pkgconfig/gnuradio-osmosdr.pc
-- Up-to-date: /usr/local/include/osmosdr/api.h
-- Up-to-date: /usr/local/include/osmosdr/pimpl.h
-- Up-to-date: /usr/local/include/osmosdr/ranges.h
-- Up-to-date: /usr/local/include/osmosdr/time_spec.h
-- Up-to-date: /usr/local/include/osmosdr/device.h
-- Up-to-date: /usr/local/include/osmosdr/source.h
-- Up-to-date: /usr/local/include/osmosdr/sink.h
-- Up-to-date: /usr/local/lib/libgnuradio-osmosdr.so.0.1.5git
-- Up-to-date: /usr/local/lib/libgnuradio-osmosdr.so
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/_osmosdr_swig.so
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmosdr_swig.py
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmosdr_swig.pyc
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmosdr_swig.pyo
-- Up-to-date: /usr/local/include/osmosdr/swig/osmosdr_swig.i
-- Up-to-date: /usr/local/include/osmosdr/swig/osmosdr_swig_doc.i
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/__init__.py
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/__init__.pyc
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/__init__.pyo
-- Up-to-date: /usr/local/share/gnuradio/grc/blocks/rtlsdr_source.xml
-- Up-to-date: /usr/local/share/gnuradio/grc/blocks/osmosdr_source.xml
-- Up-to-date: /usr/local/share/gnuradio/grc/blocks/osmosdr_sink.xml
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmocom_siggen_base.py
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmocom_siggen_base.pyc
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmocom_siggen_base.pyo
-- Up-to-date: /usr/local/bin/osmocom_fft
-- Up-to-date: /usr/local/bin/osmocom_siggen
-- Up-to-date: /usr/local/bin/osmocom_siggen_nogui
-- Up-to-date: /usr/local/bin/osmocom_spectrum_sense


4. gqrx  패키지를 소스로 컴파일 후,  설치
# cd ~/sdr

git clone https://github.com/csete/gqrx.git
# cd gqrx/
# mkdir build && cd build

주의: 여기서는 cmake가 아니라, qmake 를 사용
# qmake ../
# make
# make install
# ldconfig


5. rtl-sdr 패키지를 소스로 컴파일 후,  설치
# cd ~/sdr
# git clone git://git.osmocom.org/rtl-sdr.git
# cd rtl-sdr/
# mkdir build && cd build
# cmake ../ -DINSTALL_UDEV_RULES=ON
# make
# make install
# ldconfig


6. gr-osmosdr 에서 만들어진 gnuradio용 블럭정의 파일을 사용하기 위해서, 정해진 위치로 복사
# cd
# cd /usr/local/share/gnuradio/grc/blocks/
# cp *.xml /usr/share/gnuradio/grc/blocks/
# cd /usr/share/gnuradio/grc/blocks/



7. GNU Raido Companion 프로그램을 실행해서, 사용
# cd
# gnuradio-companion &






Posted by 훅크선장
, |

전자회로를 만들다보면, 항상 정격전압의 레귤레이터 회로가 필요한데,

5V 출력을 만드는 방법, 아니 IC 칩들에 대한 내용을 정리해본다. 가장 중요한 것이 입력전압의 범위와 출력전류의 크기이다. 

일반적인 전자회로라면 1번 방법 7805 칩으로 하면 되고, 3A 정도의 출력전류가 필요하다면, 2번 LM2576 밖에는 선택의 여지가 없다. 입력전압이 낮은데도 사용을 해야한다면, 3번 LM1117 이나 4번 LM2940을 써야하는데, LM2940은 가격이 비싼 축에 속하는 칩이다.


1. LM7805 를 이용, 그냥 7805 로 통칭되고 있다.

가장 많이 쓰이는 방법으로, 1A 전류를 처리할 수 있으며, 입력전압이 7.5~35V까지 범위가 넓다.

통상 LM78xx 시리즈로 광범위하게 사용된다. 뒤번호 05가 5V 출력을 의미한다.

레귤레이터 회로 전체 구성이 매우 간단하여, 7805 칩과 커패시터 2~3개만 있으면 된다.

(칩 가격은 250원에 커패시터는 10개에 각 100원 정도이다.)

http://obrazki.elektroda.pl/3228904300_1349300543.gif

http://www.rakeshmondal.info/Electronics/IC%207805%20Schematic%20and%20Circuit%20diagram.png

http://www.rakeshmondal.info/IC-7805-Voltage-Regulator

https://www.fairchildsemi.com/datasheets/LM/LM7805.pdf


2. LM2576 을 이용

3A 전류까지를 처리할 수 있으면, 입력 전압이 7~40V 까지이다. HV 버전 칩을 쓰면, 60V 까지 입력할 수도 있다.

원래 LM2576은 ADJ 버전으로 다양한 출력전압을 선정할 수 있다는 점이 많이 쓰인 것으로 알고 있다.

다만, 회로를 구성할때, 커패시터 뿐만 아니라, 링코일과 쇼트키 다이오드까지 넣어야 해서 약간 복잡하고, 납땜하기도 만만치 않다는 것이 걸림돌이 될 수도 있다.

(칩 가격은 1000~2000원 선이고, 커패시터는 10개당 100원 정도, 쇼트키 다이오드도 10개당 100원 정도, 링코일이 10개당 350원 정도이다.)

http://www.eleccircuit.com/wp-content/uploads/2007/07/lm2576-5_0.jpg

http://www.ti.com/lit/ds/symlink/lm2576.pdf


3. LM1117 5v 출력 버전을 이용, LM1117s-5.0v 등

1A 정도의 전류까지를 처리할 수 있으며, Low Drop Out, 작은 전압하강 출력,  LDO라고 부른다. 입력전압은 6.5~15V이다. ADJ 버전도 있어서, 여러 출력전압을 만들 수도 있다.

레귤레이터 회로 전체 구성이 매우 간단하여, LM1117과 10uF 탄탈커패시터 2개만 있으면 된다.

(칩 가격은 250원 정도, 탄탈커패시터는 10개에 200원쯤이다.)

http://nut-bolt.nl/assets/lm1117.png

http://www.htckorea.co.kr/Datasheet/LDO/LM1117.pdf


4. LM2940 을 이용, LM2940-5 등

1A 전류를 처리할 수 있으면, 특히 출력전압이 5V인데, 입력전압이 6V 정도로 낮을 때 사용할 수 있어서 유용하다.

그래서 Low Drop Out, 작은 전압하강 출력,  LDO라고 부른다. 입력전압은 6~26V이다.

레귤레이터 회로 전체 구성이 매우 간단하여, LM2940 칩과 커패시터 2~4개만 있으면 된다.

(칩 가격이 2500~3000원 정도,  커패시터들은 100원~500원 정도이면 10개 살 수 있다.) 

http://circuits.datasheetdir.com/40/UTC-LM2940-circuits.jpg

http://www.ermicro.com/blog/wp-content/uploads/2009/02/pwr_08.jpg

http://www.ti.com.cn/cn/lit/ds/symlink/lm2940-n.pdf


참고) 모든 부품 가격은 디바이스마트의 가격을 기준으로 산정했습니다.


----------내용 추가------------

5. LM2678 을 이용하면, 5A 출력전류까지도 가능합니다.

하지만, 이정도 되면 그냥 기성품을 사서 쓰는게 낫다고 생각합니다. 

칩가격도 개당 1만원이 넘는지라~! 다만 자작이 가능할 수 있다고는 알고만 있으면 될 듯합니다.


http://www.eleccircuit.com/wp-content/uploads/2007/10/lm2678-5_0_switchg_reg_5v_5a.jpg

http://www.eleccircuit.com/5v-5a-switching-regulator-for-digital-by-lm2678/


6. XL4012 를 이용하면, 최대 12A 출력전류도 가능합니다.

이것도 회로 구성이 간단하지는 않습니다. 게다가 전류가 높아서 기판을 만들때도 전류 크기에 따른 경로 크기를 고려해줘야합니다. 이미 기성품으로 팔고 있는 것들이 있으므로, 그냥 사서 쓰시는 것이 좋습니다.

중국 알리에서 20불이면 살 수 있습니다.

http://www.zahranvane.com/download/XL4012.pdf.d3a22f771d13e7ad5e2e54f94706bdf8

http://www.aliexpress.com/item/DC-DC-step-down-supply-module-buck-converter-30V-28V-25V-24V-22V-20V-18V/2016021208.html


Posted by 훅크선장
, |