IT(122)
-
#3/12 아두이노 로봇 HowTo
스텝 1. 로봇 만들기 어떤 로봇을 만들까? 모터의 제어를 이용해 두 개의 바퀴를 움직이고 초음파 센서를 이용해서 앞의 장애물을 피해서 주행하는 로봇을 만들 예정이다. 필요한 준비물은 아두이노 우노 보드 이외에 다음과 같다 - 모터와 바퀴 각각 4개 - 서보 모터 (SG90) - 초음파 센서 (HC-SR04) - 모터 드라이브 컨트롤러 (L298N) - 1k, 2k 저항 및 470uF 25V Capacitor 각 1개 - 18650 배터리 2개와 배터리 홀더 - PCB 지지대 볼트 - 듀퐁 케이블 - 아크릴 (로봇의 몸통의 재료) 모터 동작시키기 모터는 3V로 동작을 하고 전원의 방향을 바꾸면, +와 -의 연결을 거꾸로 하면 회전 방향도 바뀐다. 여기서는 모터 드라이브라는 것을 사용을 ..
2022.11.04 -
#2/12 아두이노 로봇 HowTo
IDE 설치와 기본 설정 아두이노 홈 페이지에서 Software → Downloads로 들어가면 아두이노 IDE를 다운로드 할 수 있는 링크를 찾을 수 있다. 윈도우를 사용하고 있기 때문에 “Windows app Requires Win 8.1 or 10”를 선택을 했다. 페이지가 넘어가면서 “Just Download”나 기부와 함께 다운로드 할 수 있는 “Contribute & Download”를 볼 수 있다. “Just Download”를 선택하면 Microsoft Store로 연결이 되고 무료 설치를 클릭하면 IDE가 자동으로 설치가 된다. 설치된 Arduino IDE를 선택하면 다음과 같은 IDE 창을 볼 수 있다. 아두이노를 사용하게 되면 용도에 따라서 UNO 보드 이외에 다른 보드들도 사..
2022.11.04 -
#1/12 아두이노 로봇 HowTo
스텝 0. 아두이노 개발 환경 아두이노를 이용해서 자율 주행 로봇을 만든다. 아두이노 우노, 모터 두 개, 초음파 센서와 서보 모터를 이용한다. 초음파 센서로 거리를 측정하고 물체가 감지되면 방향을 바꾸어 이동을 한다. 아두이노란? 아두이노(Arduino)란 오픈 소스를 기반으로 한 단일 보드 마이크로컨트롤러로 완성된 보드와 관련 개발 도구 및 환경을 말한다. 2005년 이탈리아의 IDII(Interaction Design Institutelvera)에서 하드웨어에 익숙지 않은 학생들이 자신들의 디자인 작품을 손쉽게 제어할 수 있게 하려고 고안되었다고 한다. (위키백과) 아두이노를 이용해서 센서나 모터 혹은 LED 등을 제어할 수 있어 연결된 다양한 센서나 모터 등의 상호 작용을 하는 ..
2022.11.04 -
Python obfuscation (난독화)
python obfuscation, 파이썬 난독화에 대한 포스팅이다. Script 방식 언어는 쉽게 소스 코드를 얻을 수 있어 중요한 Logic이 쉽게 노출될 수 있다는 문제가 있다. 다른 언어들도 Reverse Engineering을 통해서 알고리즘을 빼려는 시도들도 있긴하다. 어쨌거나 나의 지적 재산권을 방어하기 위한 최소한의 장치는 필요하다. 다양한 무료 툴들이 존재하기 때문에 입맛에 맞게 취사 선택을 할 수 있다. 난독화라고 표현한 것과 같이 소스코드를 읽기 어렵게 바꿔준다는 것이지 100% 알고리즘을 숨길 수는 없다. 유료 툴 중에는 기능이 뛰어나다고 하니 상용화할 프로그램이라면 유료 툴을 고려해 봐야 한다. 그 중에서 내가 선택한 툴은 https://pyarmor.readthedocs.io/e..
2022.07.05 -
Python 얕은 복사와 깊은 복사
a = 1 b = 2 print(a, b) 1 2 a = 3 print(a, b) 3 2 [[1, 2, 3]] [[1, 2, 3], [1, 2, 3]] [[1, 2, 3], [1, 2, 3], [1, 2, 3]] [[10, 2, 3], [1, 2, 3], [1, 2, 3]] 파이썬에서 list를 사용하다 이상함을 느꼈다. 다음을 보자. a = [] b = [1, 2, 3] for i in range(3): a.append(b) print(a) a[0][0] = 10 print(a) a라는 배열에 3번에 걸쳐 list b를 append했다. a[0][0]을 출력했더니 그 결과는 다음과 같다. [[1, 2, 3]] [[1, 2, 3], [1, 2, 3]] [[1, 2, 3], [1, 2, 3], [1, 2..
2022.06.17 -
Pyside6 Custom QTextEdit
Python 뿐만 아니라 UI가 들어간 일을 하다보면 나만의 디자인이 적용된 QTextEdit가 필요할 수 있다. 비단 QTextEdit뿐만 아니라 모든 위젯들이 그럴 수 있겠다. 아래 그림에서 실행된 모습을 보면 전체가 QTextEdit이고 그 안에 노란네모와 빨간 라인이 그려진 것을 볼 수 있다. 이렇게 Customize를 위해서는 QTextEdit을 상속받아서 paintEvent를 overriding 하면 된다. 코드는 다음에 import sys from PySide6.QtWidgets import * from PySide6.QtGui import QPainter, QColor class MyTextEdit(QTextEdit): def paintEvent(self, event): painter = ..
2022.05.30 -
Python Menu & Toolbar
Python의 메뉴와 Toolbar에 대한 자세한 내용이 나와있는 페이지다. Toolbar를 Customize를 요청받아 Study 중에 찾은 페이지다. https://realpython.com/python-menus-toolbars/#using-icons-and-resources-in-pyqt Python and PyQt: Creating Menus, Toolbars, and Status Bars – Real Python In this step-by-step tutorial, you’ll learn how to create, customize, and use Python menus, toolbars, and status bars for creating GUI applications using PyQt...
2022.05.25 -
Pyside6 window resize & layout
FramelessWindowHint로 옵션을 설정한 상태에서 리사이즈를 하도록 코드 수정하다가 찾은 코드, 일반적인 UI의 프로그램을 만들때 시작점이 될만하다. 인터넷에서 찾은 코드, 바로 컴파일이 안되어 조금 수정하니 바로 잘 동작을 한다. from PySide6.QtCore import QTimer, Qt from PySide6.QtWidgets import (QMainWindow, QApplication, QPushButton, QHBoxLayout,QTextEdit, QVBoxLayout, QWidget) class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() #self.setFixedSize(800..
2022.05.22 -
PySide6 Customized Window
Pyside6를 License model 때문에 사용하기 시작했다. 그런데 쉽지가 않은 부분들이 있다. 테스트 용도로 간단한 프로그램을 만들었는데 윈도우 리사이즈에서 막혔다. Menu bar가 window title에 나타나도록 하기 위해서 customizing을 하는데 생각보다 쉽지 않다. 구글링을 Pyside6로 해도 별로 나오지가 않는다. 그래도 여기엔 css를 써서 style을 정하는 stylesheet도 들어가 있다. 일괄적용하는 부분과 별도 적용하는 부분이 모두 들어 있다. 구미에 맞는 것을 골라쓰면 된다. import sys from PySide6.QtCore import QPoint, Qt, QRect from PySide6.QtWidgets import QApplication, QMain..
2022.05.21 -
Python socket error (소켓 통신 에러)
별거 아닌 문제인데 원인을 모를 땐, 난감하다. 채팅 프로그램 샘플을 구글링해서 찾아 테스트하는데 같은 프로그램을 같은 PC에서 돌리는데 에러가 발생한다. AttributeError: module 'socket' has no attribute 'socket' 문제는 해당폴더에 포트 생성 권한이 없어서 발생한 문제라고 한다. 새로 프로젝트를 만들어 소스 복사해서 실행하니 잘 된다. 권한 관련 문제는 가끔 난감하다.
2022.05.20