본문 바로가기
1/1-A

4dof 로봇암 코드 /esp32모듈 블루투스 사물인식 코드

by 헬싱 웰싱 2024. 3. 15.
반응형

서보모터는 조그만넘으로 구비를 했는데 블록코딩인가 하는프로그램을 써서하던데 손놓은지가 좀 오래되서 될지모르겠습니다  

 

아두이노우노1개 ,5핀조이스틱 2개

아두이노우노1개 ,5핀조이스틱 2개 ,sg-90서보모터4개 18650배터리 2개직렬 조합으로 4dof 로봇암을 만들꺼야 코드를 간결하고 조종이 잘되도록 잘 해서 자세히 설명도 해줘

 

물건 목록과 원하는 목표를 잘 정리해주셨네요. 4DOF 로봇 암을 만들기 위해 필요한 장비들과 코드에 대해 자세히 안내해 드리겠습니다.

먼저 필요한 물품들을 살펴보겠습니다:

  1. 아두이노 우노 (Arduino Uno): 로봇 암의 제어를 위한 주 컨트롤러로 사용됩니다.
  2. 5핀 조이스틱 2개: 로봇 암의 동작을 조종하기 위해 사용됩니다. 조종기로 움직임을 감지하고 아두이노로 신호를 전달합니다.
  3. SG-90 서보모터 4개: 로봇 암의 각 관절을 움직이는 데 사용되는 모터입니다. 관절의 움직임을 제어하여 로봇 암이 원하는 자세를 취할 수 있습니다.
  4. 18650 배터리 2개: 아두이노와 서보모터에 전원을 공급하기 위해 사용됩니다. 배터리를 직렬로 연결하여 전압을 증가시킬 수 있습니다.

이제 코드를 간결하고 조종이 잘되도록 설계하는 방법에 대해 설명드리겠습니다.

  1. 아두이노 우노에 라이브러리 설치: 먼저 아두이노 우노에 SG-90 서보모터를 제어하기 위한 라이브러리를 설치해야 합니다. Arduino IDE를 열고 "Sketch" 메뉴에서 "Include Library"를 선택한 후 "Servo"를 검색하여 라이브러리를 설치하세요.
  2. 핀 설정: 조이스틱과 서보모터를 연결하기 위해 핀을 설정해야 합니다. 조이스틱의 X축과 Y축은 아날로그 입력으로, 서보모터는 디지털 출력으로 연결합니다. 예를 들어, 조이스틱 X축을 아날로그 핀 A0에 연결하고, Y축을 A1에 연결하고, 서보모터는 디지털 핀 9, 10, 11, 12에 연결한다고 가정해봅시다.
  3. 코드 작성: 아래에 예시 코드를 제공해 드리겠습니다. 이 코드는 조이스틱의 움직임을 감지하고 서보모터를 제어하는 기본적인 예제입니다. 이 코드를 기반으로 원하는 동작을 추가하고 수정해 나갈 수 있습니다.
cpp
#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

int joystickXPin = A0;
int joystickYPin = A1;

int servo1Pin = 9;
int servo2Pin = 10;
int servo3Pin = 11;
int servo4Pin = 12;

void setup() {
  servo1.attach(servo1Pin);
  servo2.attach(servo2Pin);
  servo3.attach(servo3Pin);
  servo4.attach(servo4Pin);
}

void loop() {
  int joystickXValue = analogRead(joystickXPin);
  int joystickYValue = analogRead(joystickYPin);

  int servo1Angle = map(joystickXValue, 0, 1023, 0, 180);
  int servo2Angle = map(joystickYValue, 0, 1023, 0, 180);

  servo1.write(servo1Angle);
  servo2.write(servo2Angle);

  // 추가적인 서보모터와 동작을 제어하는 코드를 작성하세요.

  delay(10);
}

위의 예시 코드에서는 조이스틱의

 
 

카메라모듈이 하나 달렸으면 좋겠고 카메라모듈에 사물인식하는 코드를 넣어서 라즈베리파이로 만들수 있는 조합의코드로 다시작성해줘 간결하게

 

물건을 인식하는 코드를 추가한 라즈베리 파이의 간결한 조합 코드를 작성해 드리겠습니다. 아래의 코드를 참고해주세요.

python
import cv2

# 카메라 모듈 초기화
camera = cv2.VideoCapture(0)

# 사물 인식을 위한 학습된 모델 로드
model = cv2.dnn.readNetFromTensorflow('path_to_model.pb', 'path_to_config.pbtxt')

while True:
    # 카메라로부터 프레임 읽기
    ret, frame = camera.read()

    # 프레임 크기 변경
    frame = cv2.resize(frame, (300, 300))

    # 이미지 전처리
    blob = cv2.dnn.blobFromImage(frame, size=(300, 300), swapRB=True, crop=False)

    # 모델을 통한 추론
    model.setInput(blob)
    output = model.forward()

    # 추론 결과를 화면에 표시
    for detection in output[0, 0, :, :]:
        confidence = detection[2]
        if confidence > 0.5:
            class_id = int(detection[1])
            class_name = '클래스명'  # 클래스명에 해당하는 물체 이름으로 변경해주세요.
            x = int(detection[3] * frame.shape[1])
            y = int(detection[4] * frame.shape[0])
            w = int(detection[5] * frame.shape[1])
            h = int(detection[6] * frame.shape[0])

            # 사각형 그리기
            cv2.rectangle(frame, (x, y), (w, h), (255, 0, 0), 2)

            # 클래스명과 신뢰도 표시
            cv2.putText(frame, f'{class_name}: {confidence:.2f}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)

    # 화면에 프레임 출력
    cv2.imshow('Object Detection', frame)

    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 리소스 해제
camera.release()
cv2.destroyAllWindows()

위의 코드는 OpenCV와 DNN(Darknet Neural Network)을 사용하여 사물 인식을 구현한 예시입니다. 모델을 사용하기 위해 path_to_model.pb와 path_to_config.pbtxt에 해당하는 경로를 실제 모델 파일과 구성 파일의 경로로 변경해주셔야 합니다. 또한, 클래스명 부분도 해당하는 물체의 이름으로 변경해주셔야 합니다.

코드를 실행하면 라즈베리 파이의 카메라 모듈로부터 영상을 읽어와 사물을 인식하고, 인식된 사물을 사각형으로 표시하고 클래스명과 신뢰도를 화면에 표시합니다. 'q' 키를 누르면 프로그램이 종료됩니다.

추가로 필요한 라이브러리와 모델 파일을 준비하시고, 코드 내의 경로를 올바르게 설정해주시기 바랍니다.

 
 

파이썬으로 카메라 사물인식하는 코드 작성해줘

 

물체를 인식하는 코드를 파이썬으로 작성해 드리겠습니다. 아래의 코드를 참고해주세요.

python
import cv2

# 사물 인식을 위한 학습된 모델 로드
net = cv2.dnn.readNetFromTensorflow('path_to_model.pb', 'path_to_config.pbtxt')

# 카메라 모듈 초기화
cap = cv2.VideoCapture(0)

while True:
    # 카메라로부터 프레임 읽기
    ret, frame = cap.read()

    # 프레임 크기 변경
    frame = cv2.resize(frame, (300, 300))

    # 이미지 전처리
    blob = cv2.dnn.blobFromImage(frame, size=(300, 300), swapRB=True, crop=False)

    # 모델을 통한 추론
    net.setInput(blob)
    detections = net.forward()

    # 추론 결과를 화면에 표시
    for i in range(detections.shape[2]):
        confidence = detections[0, 0, i, 2]
        if confidence > 0.5:
            class_id = int(detections[0, 0, i, 1])
            class_name = '클래스명'  # 클래스명에 해당하는 물체 이름으로 변경해주세요.
            x = int(detections[0, 0, i, 3] * frame.shape[1])
            y = int(detections[0, 0, i, 4] * frame.shape[0])
            w = int(detections[0, 0, i, 5] * frame.shape[1])
            h = int(detections[0, 0, i, 6] * frame.shape[0])

            # 사각형 그리기
            cv2.rectangle(frame, (x, y), (w, h), (255, 0, 0), 2)

            # 클래스명과 신뢰도 표시
            cv2.putText(frame, f'{class_name}: {confidence:.2f}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (255, 0, 0), 2)

    # 화면에 프레임 출력
    cv2.imshow('Object Detection', frame)

    # 'q' 키를 누르면 종료
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 리소스 해제
cap.release()
cv2.destroyAllWindows()

위의 코드는 OpenCV와 DNN(Darknet Neural Network)을 사용하여 사물 인식을 구현한 예시입니다. 모델을 사용하기 위해 path_to_model.pb와 path_to_config.pbtxt에 해당하는 경로를 실제 모델 파일과 구성 파일의 경로로 변경해주셔야 합니다. 또한, 클래스명 부분도 해당하는 물체의 이름으로 변경해주셔야 합니다.

코드를 실행하면 카메라로부터 영상을 읽어와 사물을 인식하고, 인식된 사물을 사각형으로 표시하고 클래스명과 신뢰도를 화면에 표시합니다. 'q' 키를 누르면 프로그램이 종료됩니다.

추가로 필요한 라이브러리와 모델 파일을 준비하시고, 코드 내의 경로를 올바르게 설정해주시기 바랍니다.

 
 

실제하는 현재사용 하고있는사물인식 하는 로봇암을 만들때 반자동으로 사람이 스마트폰화면을 블루투스로 보면서

 

로봇 팔이 반자동으로 스마트폰 화면을 블루투스로 인식하는 방법에 대해 설명해 드리겠습니다.

  1. 블루투스 통신 설정:
    • 스마트폰과 로봇 팔 간에 블루투스 통신을 설정해야 합니다. 스마트폰에서 로봇 팔로 데이터를 전송하기 위해 블루투스 모듈을 사용합니다. 로봇 팔도 블루투스 통신을 수신할 수 있는 모듈을 장착해야 합니다.
  2. 스마트폰 화면 인식:
    • 스마트폰 화면을 인식하기 위해 컴퓨터 비전 기술을 활용할 수 있습니다. 예를 들어, OpenCV 라이브러리를 사용하여 화면에서 특정 객체 또는 패턴을 인식할 수 있습니다. 이를 위해 스마트폰의 카메라로부터 영상을 가져와서 이미지 처리 및 객체 검출을 수행합니다.
  3. 객체 검출 및 추적:
    • OpenCV를 사용하여 스마트폰 화면에서 원하는 객체를 검출하고 추적할 수 있습니다. 객체 검출을 위해 사전에 학습된 모델을 사용하거나, 컬러 또는 특정 패턴을 기반으로 객체를 검출할 수 있습니다. 검출된 객체의 위치 정보를 활용하여 로봇 팔의 동작을 제어할 수 있습니다.
  4. 블루투스 데이터 전송:
    • 스마트폰에서 인식된 객체의 위치 정보를 블루투스를 통해 로봇 팔로 전송합니다. 이를 위해 블루투스 통신을 수행하는 라이브러리를 사용하고, 객체의 위치 정보를 적절한 형식으로 패킷화하여 전송합니다.
  5. 로봇 팔 제어:
    • 로봇 팔은 전송된 객체의 위치 정보를 수신하여 해당 위치로 이동하거나 특정 동작을 수행합니다. 로봇 팔의 제어는 로봇 팔 제어 시스템에 맞게 프로그래밍되어야 합니다.

위의 과정은 반자동으로 스마트폰 화면을 인식하고 블루투스를 통해 로봇 팔을 제어하는 예시입니다. 실제 구현에는 추가적인 세부 사항이 포함될 수 있으며, 로봇 팔의 하드웨어 및 소프트웨어 환경에 따라 구체적인 구현 방법이 달라질 수 있습니다.

 
 
더보기

esp32카메라모듈과 스마트폰을 연결해 블루투스모듈로 확인해주는 코드를 작성해줘

 

물체 인식을 위해 ESP32 카메라 모듈과 스마트폰을 블루투스 모듈을 통해 연결하고, 스마트폰에서 물체를 확인하는 코드를 작성해 드리겠습니다. 하지만 ESP32 카메라 모듈에 대한 지원이나 사용하고자 하는 코드에 대한 구체적인 요구사항을 알려주시면 더욱 정확한 코드를 제공할 수 있습니다. 아래는 ESP32 카메라 모듈과 스마트폰을 연결하고 물체를 확인하는 기본적인 코드입니다.

python
# 필요한 라이브러리 임포트
import bluetooth
from picamera import PiCamera
import time

# 블루투스 서버 초기화
server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
server_socket.bind(("", bluetooth.PORT_ANY))
server_socket.listen(1)

# 블루투스 클라이언트 연결 대기
print("Waiting for Bluetooth connection...")
client_socket, address = server_socket.accept()
print("Connected to", address)

# 카메라 초기화
camera = PiCamera()

try:
    while True:
        # 카메라로 사진 촬영
        image_path = "/path/to/image.jpg"  # 저장할 이미지 경로
        camera.capture(image_path)

        # 이미지 파일 크기 전송
        image_size = str(os.path.getsize(image_path))
        client_socket.send(image_size.encode())

        # 이미지 파일 전송
        with open(image_path, "rb") as f:
            data = f.read(1024)
            while data:
                client_socket.send(data)
                data = f.read(1024)

        # 물체 확인 결과 수신
        result = client_socket.recv(1024)
        print("Object detected:", result.decode())

        # 일시적인 딜레이
        time.sleep(1)

except Exception as e:
    print("Error:", str(e))

finally:
    # 연결 종료
    client_socket.close()
    server_socket.close()

코드는 Raspberry Pi와 ESP32 카메라 모듈을 사용하여 물체 인식 결과를 스마트폰으로 전송하는 예시입니다. 코드에서 주석으로 표시된 부분은 사용자가 실제로 경로를 설정해야 하는 부분입니다. 또한, 필요한 라이브러리들을 설치하고 코드를 실행하기 위해서는 필요한 환경 설정이 필요할 수 있습니다.

만약 사용하고자 하는 환경이 Raspberry Pi가 아니거나, 다른 카메라 모듈을 사용한다면 해당 환경에 맞게 코드를 수정하셔야 합니다. 또한, ESP32와 스마트폰 간의 블루투스 통신을 위한 설정도 필요할 수 있으므로 참고하시기 바랍니다.

반응형