MLA-30 Antenna Rotor

A simple antenna rotor for the MLA-30 or similar small and light antennas.
17h 57m
2× print file
0.20 mm
0.10 mm
0.40 mm
169.00 g
20
98
0
1103
updated April 4, 2022

Description

PDF

A simple antenna rotor for the MLA-30 or similar small and light antennas. Only a few parts are needed and it is easy to print, preferably in PETG.

You can mount it in different ways, on a tripod, with a table clamp or simply with screws.

I would still have to work a little on the software, but it works so far.

The stepper motor is sufficient in the 5 volt version, it does not require much power and can be operated via usb.

The tube is simply attached to the 8mm bolts with a little PVC tape.

Mechanical parts

5 x M5 Threaded Inserts

5 x M5 Screws, longer than 20mm shorter than 50mm

2 x M3 Threaded Inserts

2 x M3 Screws, longer than 15mm

1 x M8 Screws, longer than 100mm

2 x 608zz ball bearing

1 x  MR128ZZ ball bearing

1 x Round tube plastic 12 mm

Electronic parts

1 x 28BYJ-48 Steppermotor 5 Volts

1 x Stepper motor driver (e.g. ULN2003)

1 x Arduino

Software

Arduino Code:

https://elektro.turanis.de/html/prj143/index.html and Arduino Example

 

#define PIN_IN1 9  // blue
#define PIN_IN2 8  // pink
#define PIN_IN3 7 // yellow
#define PIN_IN4 6 // orange

int incomingByte;      // a variable to read incoming serial data into

unsigned int lowSpeed  = 1600; // max: 16000
unsigned int highSpeed =  1000;

void setup()
{
    Serial.begin(9600); 
    pinMode(PIN_IN1, OUTPUT);
    pinMode(PIN_IN2, OUTPUT);
    pinMode(PIN_IN3, OUTPUT);
    pinMode(PIN_IN4, OUTPUT);
}

void loop()
{
    unsigned long n = millis() / 3000; // 3 seconds

      if (Serial.available() > 0) {
    // read the oldest byte in the serial buffer:
    incomingByte = Serial.read();
    if (incomingByte == 'R') {
      rotateRight(lowSpeed);
    }
    if (incomingByte == 'L') {
     rotateLeft(lowSpeed);
    }
       if (incomingByte == 'S') {
    stopMotor(); 
    }
  }else{
    stopMotor(); 
  }
  

}

void rotateRight(unsigned int motorSpeed)
{
    setMotor(LOW, LOW, LOW, HIGH, motorSpeed);
    setMotor(LOW, LOW, HIGH, HIGH, motorSpeed);
    setMotor(LOW, LOW, HIGH, LOW, motorSpeed);
    setMotor(LOW, HIGH, HIGH, LOW, motorSpeed);
    setMotor(LOW, HIGH, LOW, LOW, motorSpeed);
    setMotor(HIGH, HIGH, LOW, LOW, motorSpeed);
    setMotor(HIGH, LOW, LOW, LOW, motorSpeed);
    setMotor(HIGH, LOW, LOW, HIGH, motorSpeed);
}

void rotateLeft(unsigned int motorSpeed)
{
    setMotor(HIGH, LOW, LOW, LOW, motorSpeed);
    setMotor(HIGH, HIGH, LOW, LOW, motorSpeed);
    setMotor(LOW, HIGH, LOW, LOW, motorSpeed);
    setMotor(LOW, HIGH, HIGH, LOW, motorSpeed);
    setMotor(LOW, LOW, HIGH, LOW, motorSpeed);
    setMotor(LOW, LOW, HIGH, HIGH, motorSpeed);
    setMotor(LOW, LOW, LOW, HIGH, motorSpeed);
    setMotor(HIGH, LOW, LOW, HIGH, motorSpeed);
}

void stopMotor()
{
    setMotor(LOW, LOW, LOW, LOW, 0);
}

void setMotor(byte in1, byte in2, byte in3, byte in4, unsigned int motorSpeed)
{
    digitalWrite(PIN_IN1, in1);
    digitalWrite(PIN_IN2, in2);
    digitalWrite(PIN_IN3, in3);
    digitalWrite(PIN_IN4, in4);
    delayMicroseconds(motorSpeed);
}

Python Code

#!/usr/bin/env python3

import PySimpleGUI as sg
import serial
import sys
import glob


def serial_ports():
    """ Lists serial port names
        :raises EnvironmentError:
            On unsupported or unknown platforms
        :returns:
            A list of the serial ports available on the system
            https://stackoverflow.com/a/14224477
    """
    if sys.platform.startswith('win'):
        ports = ['COM%s' % (i + 1) for i in range(256)]
    elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
        # this excludes your current terminal "/dev/tty"
        ports = glob.glob('/dev/tty[A-Za-z]*')
    elif sys.platform.startswith('darwin'):
        ports = glob.glob('/dev/cu.*')
    else:
        raise EnvironmentError('Unsupported platform')

    result = []
    for port in ports:
        try:
            s = serial.Serial(port)
            s.close()
            result.append(port)
        except (OSError, serial.SerialException):
            pass
    return result


sg.theme('DarkRed1')
font1 = ("Arial, 16")
font0 = ("Arial, 8")


layout = [
    [sg.Text('Serial Port', size=(10, 1),font=font1)],
    [sg.Combo(serial_ports(),size= (20,1),font=font1,key='seriel_port')],
    [sg.Text('Steps', size=(10, 1),font=font1)],
    [sg.InputText('10',font=font1, size=(10,1), key='steps', enable_events=True)],
    [sg.Button('Right',font=font1, button_color=('white', 'DarkRed'), key='right')],
    [sg.Button('Left',font=font1, button_color=('white', 'DarkRed'), key='left')]
]

window = sg.Window("Rotator", 
                        layout, 
                        default_element_size=(14,2), 
                        text_justification='r', 
                       # auto_size_text=False, 
                        keep_on_top = True,
                        auto_size_buttons=False, 
                        return_keyboard_events=True,
                        default_button_element_size=(14,1), 
                        finalize=True)    

          
while True:      
        event, values = window.read()
        steps = int(values['steps'])
        ser = serial.Serial(values['seriel_port'], 9600)         
        if event == sg.WIN_CLOSED:
            exit(69)
        if event == 'right':
            for i in range(steps):
                ser.write(b'R')
        if event == 'left':
            for i in range(steps):
                ser.write(b'L')
           

         

Tags



Model origin

The author hasn't provided the model origin yet.

License