lnd_solution의 등록된 링크

 lnd_solution로 등록된 네이버 블로그 포스트 수는 44건입니다.

CNC용 테이블제작 [내부링크]

CNC조각기를 올려놓을 테이블을 만들 프로파일과 부속들이 도착했습니다. 사진 설명을 입력하세요. 도착했으면 만들어야겠죠.......... 뼈대 조립하고 바퀴 달고..... 기본 크기가 테이블 사이즈다 보니 임팩트 사용해도 힘듭니다. 사진 설명을 입력하세요. 만들다 보니 스프링 너트 개수가 모자라서 프로파일 3개를 조립 못한채 미완으로.... 다시 주문.....쩝.... 나무판때기 올려 놓으니 괜찮아 보이긴 하네요....ㅋ

산업용 터치스크린(HMI)을 아두이노에 적용해보기 ( 1 ) [내부링크]

초보분들중에 산업용 터치스크린 제품을 아두이노 및 일반 MCU에 적용하려다 좌절하시는분들이 많으신데 간략하게 팁을 드리고자 글을 올립니다. 저도 PLC 및 일반 MCU 펌웨어로만 터치스크린을 사용했었기 때문에 아두이노에 적용하기는 처음입니다. 그러니 저도 초보입니다. ^^ 그리고 여러가지 산업용 장치나 센서같은 품목들은 모드버스(modbus) 프로토콜을 지원하는 경우가 많으며 터치스크린 또한 마찬가지이기 때문에 모드버스 프로토콜에 대해서 전혀 모르고 아두이노로 산업용 터치스크린을 사용하는건 힘들다고 보시면 됩니다. 먼저 터치스크린, USB-UART 변환기와 RS232모듈과 소켓 그리고 터치스크린 다운로드에 사용될 랜선과 전원 케이블을 준비합니다. 사진 설명을 입력하세요. 사진에 나온 RS232모듈은 시중제품이 아니라 제가 만든겁니다...( RS232모듈제품들 중 불량이 좀 있어서;;; ) 그리고 터치스크린에 연결하는데 저는 일반적으로 저가형으로 많이 사용하는 이지뷰 제품을 사용하였습

산업용 터치스크린(HMI)을 아두이노에 적용해보기 ( 2 ) [내부링크]

터치스크린에 간단한 작화(?) 작업과 통신 프레임을 확인한 이후 아두이노와 터치스크린을 RS232모듈을 통해 서로 연결합니다. 그리고 출력용 LED를 아두이노( 나노 )에 연결합니다. 소프트웨어 시리얼연결 D5(RX), D6(TX) 출력 LED : D3 , D4 사용되는 모드버스 함수는 0x01과 0x05 두가지 뿐이라서 프로그램이 단순하다고 생각될수 있습니다. 물론 실재 프로젝트에 사용되는 프로그램을 작성할 경우 모든 모드버스 함수와 최대 데이터 범위를 가져야 하는데 코딩양이 상당히 많기 때문에 생략하겠습니다. ( 저는 모드버스 라이브러리를 직접 만들어 사용하지만 아두이노용 공개 라이브러리가 있습니다. 그런데 슬레이브를 지원하는지는 불확실합니다.) 어떤 원리로 터치스크린을 동작시키는줄 아는게 더 중요한거죠 그리고 CRC 에러 체크 함수는 이해할 필요없이 온라인에 돌아다니는거 복사해서 사용해도 무방합니다. #include <SoftwareSerial.h> #include <MsTim

스텝모터 1축 티칭 [내부링크]

이전부터 만들고 싶었던 스텝모터용 C기반 라이브러리가 있어서 먼저 테스트용 스텝모터와 동작 기구부를 제작하였습니다. 기구부는 설계없이 그냥 직관적으로 만드는거라서 캐드로 드로잉하고 아크릴 가공... 엉성하지만 직접 만든 아크릴 절곡기로 아크릴도 구워주고(?) 90도로 접어줍니다. 그리고 필요 부품들을 모두 준비하는데 다 모아도 별거 없습니다 ^^ 가지고 있는 스텝모터중 스크류 일체형이 있어서 모터도 이 놈으로 골랐습니다. 그리고 조립하면 끝인데 가지고 있는 샤프트 홀더중 2개가 샤프트에 규격이 맞지 않아서 테이프로 감아 두께를 맞쳐서 조립...엄청 엉성해 보입니다. ( 중국산이라도 좀 심한 부품들이 있습니다 ) 게다가 샤프트가 튀어 나와 있는데 어차피 테스트 후 해체할 거라 길이 맞쳐서 자르지 않고 그냥 저 상태로 조립했는데 아크릴 가공 할 때 미리 생각해 두었기 때문에 조립에는 문제가 없었습니다. 간단한 거라 제작은 금방 끝났습니다. 기구부 만들때 원점 센서를 빼 먹어서 대충 스텝

아두이노 제작 의뢰를 맡길 때 초보들의 중요한 착각 중 하나.... [내부링크]

초보분들이 생각하는 큰 착각중 하나가 아두이노에 대한 기술적 범위에 기구부 및 구조물 파트를 포함한다고 생각하는것인데 더 큰 착각은 기구 파트 접근이 아두이노에 비해 훨씬 쉽다고 생각한다는게 문제입니다. 물론 박스 자르거나 3D 프린터로 뽑은 부품으로 간단한 회전같은 움직임은 초등학생도 할수 있으니 그렇게 생각할수 있지만 인형뽑기 기계를 흉내내는 수준만 되더라도 관련 실무자가 아니라면 구현이 쉽지 않고, 힘들게 만들더라도 아주 지저분한 모습이 대부분입니다. 아두이노의 경우 의뢰를 받는 사람들 대부분이 전자 관련 실무 경력을 가진 개발자들입니다. 위 그림처럼 PCB설계하거나 PCB동작을 위한 펌웨어 하는 사람들이 대부분이어서 기구부에 대한 전문성은 없다고 보시면 됩니다. 의뢰를 주시는 분이나 의뢰를 받는 개발자나 기구 파트에 대해서는 사실상 같은 수준입니다. 거기에 비해 전문적인 기구부 제작에 필요한 사람들은 별도로 있습니다. 실무 업무가 완전히 다른 기계설계 및 기구설계를 하는 사람

아두이노를 모드버스 슬레이브 2개로 동작 [내부링크]

이번에 하나의 MCU에서 2개의 모드버스 마스터를 대응해야 할 상황이 생겨서 기존에 제작했었던 모드버스 슬레이브 라이브러리를 수정하였습니다. 먼저 라이브러리가 적용될 32bit MCU에 슬레이브 동작을 위한 동적메모리 10개( 즉 마스터 10개와 상대..)까지 생성해도 문제없이 동작하는것을 확인 한 후 하급 MCU 테스트를 하기 전 가장 거북이인 아두이노 우노( 호환 )에게 별다른 기능없이 가장 기본적인 통신만 시켰는데 다행히 동작.... 모드버스에 대한 각종 편의 함수들을 포함하고 있어서 라이브러리가 좀 무거운 편인데 시뮬레이션에서 에러없이 잘 동작하는것을 확인할 수 있습니다. 아래 코드에서 modbus_ 로 시작하는 변수나 함수는 라이브러리 내부 변수나 함수입니다. #include <SoftwareSerial.h> #include "modbus_slave.h" SoftwareSerial serial_1 = SoftwareSerial(2, 3); Modbus_variable* mo

작업용 책상 수납 선반 제작 [내부링크]

몇 일전 설계한 수납 선반 제작에 필요한 샤프트가 도착하였습니다. 이제 조립에 필요한 모서리부분을 3D 프린트하고 다듬기 작업해줍니다. 그런데 주문 했던 샤프트 중 하나가 길이가 조금더 길게 와서 글라인더로 날리고 정상적인 조립이 가능한지 먼저 가조립 해봅니다. 별 문제없이 조립될것 같으므로 샤프트 고정을 위한 에폭시를 준비하고 샤프트가 고정될 모서리 부품들의 구멍에 넉넉히 발라줍니다. 그리고 확실하게 샤프트가 모서리부품의 구멍에 끼워지도록 소형 망치로 두드려가며 뼈대 조립후 에폭시가 경화될때까지 다음날까지 기다려 줍니다. 그리고 다음날 아크릴 가공한걸 올려주니 기대 이상의 퀄리티를 보여주었는데 제품 전시에 쓰는 진열장 같은 느낌이였습니다. 그리고 작업용 책상에 올리고 정리를 했는데 뼈대 자체가 차지하는 부피가 없다는게 너무 좋았습니다.

기구부 제작용 레이저 조각기 테스트 [내부링크]

오늘 주말이라서 그동안 못했던 테스트들을 진행하려고 합니다. 그동안 구입하고 방치 해 두었던 레이저 조각기를 테스트해보았습니다. 먼저 캐드로 간단히 드로잉 그리고 레이저 프로그램으로 캐드파일 넘기기~ 그런데 캐드파일의 글씨가 넘어오지 않았습니다. 문제가 무엇인지...... 잘모르겠네요 글씨는 어쩔수 없이 레이저프로그램에서 다시 작성후 조각기 동작 다행히 결과는 깨끗하게 잘 나왔습니다.

무료 전자캐드 EasyEDA vs Kicad [내부링크]

상용캐드의 크랙 단속 위험이 없는 일반인이 취미로 사용하기 무난한 EasyEDA와 Kicad 를 만져 보았습니다. 참고로 저는 이 두놈의 사용법을 전혀 모르는 상태였습니다....ㅋ EasyEDA 은 스케메틱 환경이 상당히 직관적이고 상용 캐드들과의 단축키 및 마우스 사용에 대한 유사성이 많아서 기존 전자캐드 사용자들은 쉽게 적응할걸로 보였습니다. 아트웍 환경 또한 상당히 직관적이라 큰 어려움없이 접근할수 있었지만 풋프린트 제작 파트를 못 찾았는데 그냥 부품 규격 또는 부품 품번만 사용하는건지 아직 잘 모르겠네요 그리고 카퍼 영역 지정할때 선들이 깔끔하게 안움직이는 문제도 있는것 같습니다. 간단하게 스케메틱 그리고 아트웍 마무리까지 10~15분정도 걸렸는데 전반적으로 볼때 EasyEDA는 취미용으로 사용하기엔 무난한 수준인것 같았습니다 kicad의 경우 스케메틱 사용에서 마우스 및 단축키 그리고 부품 선택 같은 인터페이스가 다른 전자캐드들과 좀 달라서 ..... ( 한 5분정도 만지니

라즈베리파이 TCP 소켓통신 ( 파이썬 ) [내부링크]

파이썬을 사용한 라즈베리파이 IO핀 제어를 제외한 네트워크, GUI, OPENCV 등의 구현은 라즈베리파이의 전용 기능이 아니기 때문에 윈도우즈 및 리눅스 기반 PC에서도 프로그래밍 기술을 그대로 사용해도 됩니다. 와이파이 모듈이나 PC프로그램과의 TCP소켓 통신 서버 측 구현 ( 소켓생성 -> 바인드 -> 클라이언트 연결 대기 -> 연결 후 데이터를 받아 다시 데이터 보내기 ) import socket # 서버 buffer_size=1024 # 소켓 통신에 사용될 데이터 버퍼 크기 my_socket= socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP 소켓 생성 s_address=('', 5000) # 현재 장치의 주소와 포트 ( 튜플 데이터 ) my_socket.bind(s_address) # 튜블로 정의된 주소데이터와 소켓을 결합 my_socket.listen(1) # 클라이언트 연결 대기, 인자는 동시연결 가능 소켓 수 clie

라즈베리파이 OpenCV 영상전송 소켓통신 [내부링크]

일반적으로 영상스트리밍에 대해 검색이나 관련 서적에서 가장 많이 소개하는게 웹페이지 출력 형태입니다. ( 저는 개인적으로 웹방식의 스트리밍과 원격제어를 좋아하지 않습니다. ) 이번에는 컴퓨터 프로그램 및 스마트폰 앱으로 확인되는 CCTV기능으로 확장할 수 있도록 소켓통신을 사용한 영상전송을 구현해 보았습니다. 소켓통신 및 opencv는 이미 소개하였기 때문에 주석은 달지 않았습니다. 데이터 처리와 관련된 부분은 검색으로 확인하시길... 라즈베리파이 ( 클라이언트 ) 코드 import cv2 import socket import pickle import struct cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) s_address= ("192.168.0.4", 5000) my_socket= socket.socket(socket.AF_INET, so

OpenCV 움직임 감지 영상스트리밍 [내부링크]

라즈베리파이와 esp32cam을 사용하여 opencv 및 코딩을 안하고 영상을 스트리밍 할수 있는 방법이 있지만 응용 기능구현이 제한되기 때문에 간단하게라도 코딩에 의한 스트리밍 방법을 익혀두는게 좋습니다. 먼저 웹브라우저 출력을 위한 웹페이지에 대한 html 페이지 작성 <html> <body> <img src="{{ url_for('video') }}" width="100%"> </body> </html> opencv와 플라스크를 사용한 영상스트리밍 코딩 from flask import Flask, render_template, Response import cv2 app= Flask(__name__) cap=cv2.VideoCapture(0, cv2.CAP_V4L) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) def gen_frame(): while True: ret, img= cap

라즈베리파이 부팅시 파이썬 GUI 자동실행과 실무적용 예 [내부링크]

라즈베리파이가 부팅후 사용자가 지정한 프로그램을 자동실행을 하는 방법은 여러가지가 있지만 GUI프로그램은 해당 되지 않는 경우가 있습니다. GUI 자동 실행 방법 중 가장 간단한 방법은 $sudo nano /etc/xdg/lxsession/LXDE-pi/autostart 실행 후 @/bin/python3 /home/pi/gui.py & <- 마지막줄에 추가 ( @/bin/python3 /디렉토리/파이썬파일.py & ) 리부팅 해보면 지난글에서 만든 GUI프로그램이 실행되는것을 확인할 수 있습니다. 그런데 이런 윈도우 출력으로는 실용성에 의문이 있을것 같아서 라즈베리파이 기반의 터치스크린 제품에 GUI 프로그램을 자동 실행 봤습니다. 실행 윈도우를 풀스크린으로 동작시켰으며 여러가지 위젯을 배치 해보았지만 위젯의 동작 코드는 없습니다 ^^;; 대충 만든거라서 레이아웃 구성이 좀 엉망이지만 실무에서 충분히 적용 가능한 수준이라는걸 확인할 수 있습니다.

CNC조각기 개조작업 진행 [내부링크]

올해초부터 CNC조각기를 직접 설계하려고 계획중이었는데 시간이 없다보니 어쩔 수 없이 조각기 프레임 구입을 하였습니다. 하지만 값싼 알리의 제품은 역시 중국다운 품질 덕분에 바로 사용은 안될것 같고 특정 파트는 다시 재설계해서 교체하는 작업을 진행중입니다. 열심히 분해하며 재설계 도면작업 중에 물건들이 하나씩 도착합니다. 가격이 저렴한 어댑터 슬리브를 발견하고 바로 질렀는데 덕분에 65파이 스핀들에서도 10미리 생크의 엔드밀과 아큐센터를 사용할 수 있게 되었습니다... 엔드밀도 한번 끼워봅니다... 맘 같아서는 밀링도 하나 구입해서 페이스밀로 면을 밀어버리고 싶지만 가공 공장이 아니므로 아쉽지만 조각기로 만족해야겠습니다. 도착한 물건중에 선반 심압대에서 사용할 드릴척도 있어서 조립해보니 작은 드릴은 쓰는데 문제 없을듯 합니다. 아직도 선반용 DRO(디지털 선형스케일 디스플레이)부터 여러 물품들이 있지만 언제 도착할지 모르겠네요

PLC의 RS485통신을 WIFI와 이더넷으로 변경하는 PCB테스트 [내부링크]

설계한 놈이 제대로 동작하는지 테스트 중.. 간단한 PCB라서 쉽게 마무리... ^^

산업용 PCB 설계의 현타.... [내부링크]

설계 노가다 할 땐 복잡해 보여도 마무리되면 항상 간단해 보입니다... ㅡㅡ;; 빨리 부품 납땜하고 테스트 해야 겠습니다... ㄱㄱㄱㄱ

소형 전기박스 양산 [내부링크]

엄청난 노가다 끝에 만들어진 결과물들......ㅋ H자동차 1차 및 2차 협력업체들이 사용하는 놈들이라 한번씩 물량 터지면 정신없습니다.

PYQT 요약 1.기본구조 [내부링크]

import sys # 기본적으로 포함 from PyQt5.QtCore import QCoreApplication from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import * # QtWidgets class MyApp(QWidget): # QtWidgets을 상속 받아서 클래스 생성 def __init__(self): # 생성자 super().__init__() # QWidget의 상위 객체 생성 self.initUI() # 필수 초기동작 메소드 호출 def initUI(self): self.setGeometry(300, 300, 400, 500) # 윈도우 위치 및 크기 self.setWindowTitle('윈도우 입니다.') # 윈도우 타이틀 self.setWindowIcon(QIcon('로고이미지.jpg')) btn = QPushButton('나가기', self) # QPushButton클래스의 객체 생성 btn.resize(btn

PYQT 요약 2. QMainWindow와 기본 동작 함수 [내부링크]

class MyApp(QMainWindow): # QMainWindow에서 상속되어야 상태바 및 메뉴가 가능 def __init__(self): super().__init__() self.initUI() def initUI(self): self.statusBar() # 상태표시줄 생성 self.statusBar().showMessage("안녕하세요") # 상태표시줄 문자출력 menu = self.menuBar() # 메뉴바 생성 menu_file = menu.addMenu('File') # 메뉴바 항목생성 (메뉴그룹생성) menu_edit = menu.addMenu('Edit') # 메뉴바 항목생성 (메뉴그룹생성) menu_view = menu.addMenu('View') # 메뉴바 항목생성 (메뉴그룹생성) file_exit = QAction('Exit', self) # 메뉴그룹의 객체 생성 file_exit.setShortcut('Ctrl+Q') # 단축키 지정 file_exit.

PYQT 요약 3.레이블과 레이아웃 [내부링크]

def initUI(self): label1 = QLabel('레이블1', self) # 레이블 객체 생성 label1.move(15, 10) # 생성 윈도우에 대한 절대좌표 Button_ok = QPushButton('OK') Button_cancel = QPushButton('Cancel') hbox = QHBoxLayout() # 가로 레이아웃 객체 생성 hbox.addStretch(1) # 위젯이 차지하지 않는 공간이 자동으로 늘어남 hbox.addWidget(Button_ok) # 가로 레이아웃에 버튼 추가 hbox.addWidget(Button_cancel) # 가로 레이아웃에 버튼 추가 vbox = QVBoxLayout() # 세로 레이아웃 객체 생성 vbox.addStretch(1) # 위젯이 차지하지 않는 공간이 자동으로 늘어남 vbox.addLayout(hbox) # hbox 레이아웃을 세로 레이아웃에 추가 self.setLayout(vbox) # 현재 윈도우에 레

PYQT 요약 4.이벤트와 시그널 [내부링크]

lcd = QLCDNumber(self) # LCD디스플레이 객체생성 sld = QSlider(Qt.Horizontal, self) # 슬라이더 객체생성 # Qt.Horizontal: 가로, PyQt5.QtCore vbox = QVBoxLayout() vbox.addWidget(lcd) vbox.addWidget(sld) self.setLayout(vbox) sld.valueChanged.connect(lcd.display) # ()안 함수가 슬롯, 값이 변할 때 연결(.valueChanged) self.setGeometry(300, 300, 350, 300) self.setWindowTitle('review') self.show() #이스케이프 키를 누르면 윈도우가 닫힘 def initUI(self): self.setGeometry(300, 300, 350, 300) self.setWindowTitle('review') self.show() def keyPressEvent(self

PYQT 요약 5.대화상자 [내부링크]

#문자입력 다이얼로그 self.btn = QPushButton('다이얼로그', self) self.btn.move(20, 20) self.btn.clicked.connect(self.showDialog) # self.btn 의 클릭을 showDialog (슬롯) 와 연결 self.le = QLineEdit(self) self.le.move(130, 22) self.setGeometry(300, 300, 290,150) self.setWindowTitle('입력 다이얼로그') self.show() def showDialog(self): text, ok = QInputDialog.getText(self, '입력 다이얼로그', '이름 입력:') # QInputDialog.getText(self, 타이틀, 레이블) # 리턴값은 입력자료 객체, ok버튼 클릭여부(True, False) if ok: self.le.setText(str(text)) # 입력자료 객체를 문자열로 변환하여 라인에디터

PYQT 요약 6.여러가지 위젯(1) [내부링크]

#체크박스 cb = QCheckBox('타이틀 변경', self) # 체크박스 객체 생성 cb.move(20,20) cb.toggle() # 한번 클릭 실행 cb.stateChanged.connect(self.changeTitle) # 상태변화시(stateChanged) changeTitle 함수로 연결 self.setGeometry(300, 300, 290,150) self.setWindowTitle('입력 다이얼로그') self.show() def changeTitle(self, state): if state == Qt.Checked: # 체크상태 확인 self.setWindowTitle('체크박스가 활성화') else: self.setWindowTitle('비활성화') #눌림표시 토글 버튼 self.col = QColor(0, 0, 0) btn_red = QPushButton('Red', self) btn_red.setCheckable(True) btn_red.move(10,

PYQT 요약 7.여러가지 위젯(2) [내부링크]

#이미지 넣기 pixmap = QPixmap("로고이미지.jpg") # 이미지 객체 생성 lbl = QLabel(self) lbl.setPixmap(pixmap) # 레이블 객체에 이미지 객체를 넣음 hbox = QHBoxLayout(self) hbox.addWidget(lbl) self.setLayout(hbox) #텍스트 입력 레이블 self.lbl = QLabel(self) self.lbl.move(60,40) qle = QLineEdit(self) qle.move(60, 100) qle.textChanged[str].connect(self.onChanged) # textChanged[str]: 문자가 변경이 될 때 -> 변경된 문자열을 가지고 슬롯을 호출 self.setGeometry(300, 300, 350, 300) self.setWindowTitle('안녕하세요 PyQt5!') self.show() def onChanged(self, text): # text에 textC

PYQT 요약 8.여러가지 위젯(3) [내부링크]

#페인터 self.a = '안녕하세요 PyQt5 \n 환영합니다.' # self.a : 클래스 구역에서 변수가 생성, 메서드가 종료되더라도 사라지지않음 self.setGeometry(300, 300, 350, 350) self.setWindowTitle('안녕하세요 PyQt5!') self.show() def paintEvent(self, event): # 창이 활성화, 비활성화 될때마다 반복호출 qp = QPainter() # 페인터 객체 생성 qp.begin(self) # 페인터 관련 작업은 .begin(self)과 .end() 사이에 위치해야 함 #self.drawText(event, qp) self.drawLines(qp) # self.drawPoints(qp) qp.end() # 페인터 객체 종료 def drawText(self, event, qp): qp.setPen(QColor(168, 34, 3)) # 페인터 객체 색지정 qp.setFont(QFont('gulim',

PYQT 요약 9.파일 불러오기, 이미지 띄우기, 이미지 변환 [내부링크]

class MyApp(QWidget): def __init__(self): super().__init__() # 상위 클래스의 메소드를 초기화 self.initUI() def initUI(self): # 이미지를 띄울려면 이미지 객체와 이미지를 그려줄 메소드가 필요 self.sid = QImage("").scaled(120, 120) btn = QPushButton("이미지 변경",self) btn.resize(btn.sizeHint()) btn.move(20,150) btn.clicked.connect(self.openFileNameDialog) self.setGeometry(1400, 250, 320, 200) self.setWindowTitle('안녕하세요 PyQt5!') self.show() def paintEvent(self, event): # 이미지를 오픈할때 호출되는 메소드 (오버라이드 사용) painter = QPainter() # 페인터 객체생성 painter.beg

PYQT 요약 10.웹캠 움직임감지 (opencv python) [내부링크]

class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(1000, 250, 650, 540) self.setWindowTitle('안녕하세요 PyQt5!') self.cpt = cv2.VideoCapture(0) # VideoCapture(캠번호), 캡쳐 객체생성 self.fps = 24 # 프레임 개수 변수 self.sens = 300 # 영상 변화 감도 변수 _, self.img_o = self.cpt.read() # cpt.read() : 한 장면을 읽어서 self.img_o 에 저장 self.img_o = cv2.cvtColor(self.img_o, cv2.COLOR_RGB2GRAY) # RGB -> GRAY 로 변환 # cv2.cvtColor( 원본영상 , 변환 상수) : 영상변환 cv2.imwrite('img_o.jpg', self.

PYQT 요약 11.SQLite 사용 [내부링크]

SQLite 기본 사용법 connection = sqlite3.connect(“ db_name.db “) 데이터베이스 파일연결 및 생성, 그리고 객체 생성 cur = connection.cursor() 데이터베이스 객체의 커서 위치를 담는 변수 생성 cur.execute(“CREATE TABLE school(Name text, number int, math_score int) “) cur.execute(“DELETE FROM xxx”) connection.commit() cur.execute(“SELECT *“) res = cur.fetchall() SQL 명령실행과 결과값 얻기 cur.close() <- 커서 반납 connection.close() <- 접속 종료 SQLite 기본명령어 create table : 테이블 생성명령 create table 테이블이름(데이터이름1 데이터형, 데이터이름2 데이터형, 데이터이름3 데이터형, …) cursor.execute(“create ta

선반용 DRO장착 중.... [내부링크]

선반 작업을 편하게 하기 위한 디지털 달고 있는 중 ...ㅋ 아직도 할 일이 많이 남았습니다.... ㅡㅡ;;

산업용 PCB.. 단가 낮추기... [내부링크]

PCB크기 또한 단가에 영향을 준다 조립에 문제 없으면서도 최대한 작게~ 메탈마스크 및 SMT 비용을 낮추기 위해 TOP 레이어만 SMD 부품을 삽입 산업용 PCB는 고속회로 및 BGA 부품을 잘 사용하지 않으므로 다층기판 사용X, 최대한 양면 배선으로 마무리 외부 노출되는 각종 소켓은 BOTTOM 면에 위치, 공간활용의 최적화... 이 조건들 맞추다보면 가끔씩 머리에서 연기가 올라온다.... ㅡㅡ;

산업용 IO기판 조립 [내부링크]

잘못된 배선을 최소화하고 배선의 편의성을 위한 IO기판과 명판과의 조립입니다.

레이저조각기 아크릴 가공 [내부링크]

현재 제작중인 탁상형 기계에 들어갈 아크릴 기구부 가공

비주얼스튜디오 코드 초기화 [내부링크]

아두이노 및 여러 소프트웨어 개발에 사용하는 비주얼스튜디오 코드의 설정을 잘못해서 초기화 시키려 지우고 다시 설치하여도 그전 설정이 그대로 남아 곤란할 경우가 있었습니다. 이전 설정이 모두 사라지게 하려면 C:\Users\사용자이름 에서 .vscode 폴더를 삭제 그리고 C:\Users\사용자이름\AppData\Roaming\Code 폴더내의 내용을 모두 삭제 마지막으로 visual studio code 를 삭제후 다시 설치

라즈베리파이 필수 초기 설정 [내부링크]

라즈베리파이의 OS인 라즈비안 설치시 필수 설정부분 라즈비안 정식 이미지 쓰기 프로그램의 오른쪽 하단 기어모양을 클릭하여 SSH사용 선택과 사용자 이름, 비번을 필수 선택. ---> 별도의 모니터와 키보드없이 사용하려면 이게 젤 쉬운 방법입니다. 그리고 파이썬 프로그래밍 IDE는 VSCODE 를 추천합니다. 예전에는 원격 코딩과 실행시키려면 파이참 프로를 사용해야 했는데 지금은 vscode에서 다 지원합니다. vscode 설치 후 vscode 원격 설정은 아래 동영상을 참고 하시면 되는데 https://www.youtube.com/watch?v=VmVXtCIok8I 동영상에서 말하는 한글 관련 문제는 지금은 발생하지 않습니다. vscode 터미널이 putty 역할을 대신 하므로 정말 편리합니다.

라즈베리파이 원격사용시 hdmi설정 ( 부팅하는 중 먹통방지) [내부링크]

라즈베리 원격으로 사용할경우 부팅중에 초록불이 잘 깜빡이다가 갑자기 먹통이 되길래 순간 당황했는데 pi@raspberrypi:~ $ sudo nano /boot/config.txt ..... # uncomment if hdmi display is not detected and composite is being output #hdmi_force_hotplug=1 <- # 을 제거 이미지 설치후 putty 연결해서 바로 설정 고쳐주면 해결~

vscode 라즈베리파이 연결 에러 [내부링크]

라즈베리 이미지 재설치후 vscode와 연결되지 않고 vscode 출력창 다음과 같은 오류 메세지가 뜬다면 [18:31:45.975] "install" terminal command done [18:31:45.975] Install terminal quit with output: 프로세스에서 없는 파이프에 쓰려고 했습니다. [18:31:45.976] Received install output: 프로세스에서 없는 파이프에 쓰려고 했습니다. [18:31:45.976] Failed to parse remote port from server output [18:31:45.976] Resolver error: Error: ....... C:\Users\사용자이름\.ssh 폴더안에 known_hosts <- 이 파일을 제거후 다시 Remote - SSH 잡으면 해결

라즈베리파이 apt-get 관련 명령에서 Reading package lists... Error! [내부링크]

$sudo apt-get update 부터 패키시 설치시 Reading package lists... Error! 문장이 생기며 명령 수행이 안될 경우 $sudo rm -vf /var/lib/apt/lists/* 실행 후 $sudo apt-get update 실행

라즈베리파이4 핀맵, I/O 입출력 [내부링크]

라즈베리파이 핀맵 I/O핀 출력 import RPi.GPIO as GPIO # RPi.GPIO 모듈 사용, as 뒤 GPIO : 코딩에서 사용할 이름 import time # 시간 모듈 사용 GPIO.setmode(GPIO.BCM) # GPIO.BCM => GPIO 핀번호로 라즈베리 IO핀을 사용 GPIO.setup(2, GPIO.OUT, initial = GPIO.HIGH) # GPIO2 핀을 출력으로 설정, initial : 초기 출력 GPIO.setup(3, GPIO.IN) # GPIO3 핀을 입력으로 설정 for i in range(1,10): GPIO.output(2, True) # GPIO2 핀을 HIGH 로 출력 , True 대신 GPIO.HIGH 사용가능 time.sleep(1) # 1초 딜레이 <==> 아두이노 delay(1000) , 0.1초면 time.sleep(0.1) GPIO.output(2, False) # GPIO2 핀을 LOW 로 출력 , False 대신

삼바 설치: 라즈베리파이( 리눅스 ) 디렉토리 -> 윈도우즈에서 원격 접속 [내부링크]

라즈베리파이 터미널에서 pi@raspberrypi:~ $ sudo apt-get update pi@raspberrypi:~ $ sudo apt-get install samba samba-common-bin <- 삼바 설치 설치 후 pi@raspberrypi:~ $ sudo nano /etc/samba/smb.conf <- 파일 열어서 마지막 줄에 다음 내용 추가 [pi] <-삼바 사용 계정 path=/home/pi/ <- 공유할 라즈비안의 디렉토리 writeable=Yes <- 윈도우에서 접속하여 쓰기 가능 create mask=0777 <- 모든 권한 허용(777) directory mask=0777 public=no <- 접속할때 비번 인증 pi@raspberrypi:~ $ sudo smbpasswd -a pi <- 삼바 서버 비번 설정( 비번 두번 입력해줌 ) 후 삼바 서버 재실행 pi@raspberrypi:~ $ sudo systemctl restart smbd 윈도우즈에서

파이썬 문법 간략 정리1 [내부링크]

라즈베리파이 사용을 위해 파이썬 문법을 간략하게 정리해봅니다. 입출력 - print( ) : 문자열출력에 정수값을 출력할 경우 print(" 값: %d " % 변수) print("하이") a=123 print(a) print("a의 값은 %d" % a) - input( ): 키보드에서 문자(열)를 입력 받음, 숫자로 받고 싶으면 형변환 int( input( ) ) a=input() print("입력 받은 문자: %s" % a) a=int(input("숫자 입력: ")) print("입력 받은 숫자: %d" % a) 변수의 자료형 - 숫자, 문자형: C언어처럼 int char.. 자료형을 선언할 필요가 없으며, 대입되는 자료에 의해 변수 타입이 자동변환 됩니다. # 주석 a=1 b="안녕 파이썬" print(a,b) # == print( 1, "안녕 파이썬") - 리스트, 튜플, 딕셔너리: 배열과 비슷한 놈들인데 차이점은 있습니다. *리스트 : 배열과 유사, [ ] 괄호에 값(요소)들

파이썬 문법 간략 정리2 [내부링크]

제어문 C언어에서 if( 조건 ) { .. } , for( 조건 ) { .. }, while( 조건 ) { .. } 이러한 구조를 if 조건: 들여쓰기 실행코드 # vscode 에서 tab키로 이동 elif 조건: 들여쓰기 실행코드 else: 들여쓰기 실행코드 for 조건: 들여쓰기 실행코드 while 조건: 들여쓰기 실행코드 형태로 구조가 변경된다고 생각하면 됩니다. ( 조건식 ) => 조건식: , { 실행코드 } => 실행코드를 들여쓰기 좀 더 구조가 다른 놈은 for문인데 for( i=0; i<10; i++ ) -> for i in range( 0, 10, 1 ): 그리고 else if( ) => elif 조건: 만 조심하면 무난하게 조건문을 사용할수 있습니다. a=0 if a<10: for a in range(0,10,1): print(a) while a != 0: print(a) a-=1 print(a) 함수 : 함수 또한 조건문과 같이 들여쓰기로 C언어의 { }를 대신합니

아두이노 기계 및 기구부 설계제작 [내부링크]

알루미늄, 플라스틱류, 아크릴로 이루어진 가벼운 기계류 제작 백만돌이 제작소에서 하는 일 전시 및 시연용 품목의 동작용 기계파트, 유튜브에 나오는 각종 아두이노 응용 기계 벤치마킹, 교육 및 각종 동작 테스트용 모션 기구부, 졸업 작품, 기타 각종 용도로 사용되는 비철재료(알루미늄, 수지류, 아크릴 등)로 이루어진 소형 경량 기계 및 모션 기구부 제작, 관련 아두이노 또는 기타 컨트롤에 대한 PCB설계제작 및 전기제어를 처리. - 개인 제작의뢰가 가능, 세금계산서 발행 - 간단한 소액 기구부도 부담없이 의뢰 가능 - 아두이노 + 경량 기구부 -모션 기구부 -PCB 및 PLC -다양한 터치스크린 사용 비전문가에 의한 아두이노 응용 기계 및 기구부의 문제점 일반적인 검색으로 확인되는 아두이노로 동작시키는 대부분의 기구부의 경우 비전문 제작에 의해 설계컨셉 및 가공 조립과정이 수준 미달인 경우가 많아서 불필요한 흔들림이나 불안정한 동작 그리고 배선 및 커버 마감처리가 제대로 되지 않아 각