sábado, 9 de octubre de 2021

Telescopio OnStep SinapTec con ESP32 (Parte 2)

En esta segunda parte muestro el armado de la placa profesional de PCBWay, hablo sobre sobre las consideraciones al diseñar las partes mecánicas y finalmente explico cómo conectar OnStep con Sky Safari 6 Pro mediante bluetooth.

 

  Proyecto en PCBWay

Firmware OnStep 5.1

viernes, 9 de abril de 2021

Telescopio Robotizado con Bluetooth y WiFi usando ESP32

En el video explico cómo fabricar una montura robotizada para un pequeño telescopio reflector, controlada desde un smartphone con bluetooth y desde Stellarium mediante WiFi. La electrónica está basada en ESP32 y en el firmware OnStep. En esta primera parte explico todo lo que tiene que ver con la electrónica, configuración y carga del firmware desde la IDE de Arduino, como usar la app de Android “OnStep Controller 2” y como configurar Stellarium para usar el telescopio por UBS y WiFi.


miércoles, 24 de febrero de 2021

miércoles, 27 de noviembre de 2019

Cómo Probar Motores Paso a Paso con Arduino y sin Ariduino (con 555)


Código Fuente:

const int dirPin = 8;
const int stepPin = 9;
 
unsigned long pasosvuelta;
float grados;
unsigned long rpms;
unsigned long pasos;
unsigned long retardo;
String mensaje = "";  

//-----------------SETUP------------------------------ 
void setup() {
   pinMode(dirPin, OUTPUT);   //coloco el Pin de Dirección como salida
   pinMode(stepPin, OUTPUT);  //coloco el Pin de Step como salida
   Serial.begin(115200);      //inicio la comunicación serial a 115200 baud
   pasosporvuelta();          //llamo a la función para definir los pasos por vuelta.
}

//-----------------LOOP------------------------------ 
void loop() {
  sentido();    //llamo a la función para definir el sentido de giro.
  giro();       //llamo a la función para definir los grados que debe girar el motor.
  velocidad();  //llamo a la función para definir la velocidad de giro en RPM.
   
  pasos = (grados/360)*pasosvuelta;       //calculo la cantidad de pasos que tengo que enviar. 
  Serial.print(pasos);
  Serial.print(" pasos a ");
  retardo = 30000000/(rpms*pasosvuelta);  //calculo el retardo según las RPM indicadas.
  Serial.print(retardo);
  Serial.print(" uSeg\n");
  Serial.println("---------------------------------------");
   
  for (int x = 0; x < pasos; x++) {      //envio los pasos calculados con el retardo calculado
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(retardo);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(retardo);
  }
}

//-----------------FUNCIONES-------------------------- 
void pasosporvuelta() {          
  Serial.print("¿Pasos por vuelta? (pasos del motor * micropasos) ");
  while (Serial.available() == 0 ) {} //queda esperando hasta recibir un mensaje
  mensaje = Serial.readString();
  pasosvuelta = mensaje.toInt();      //convierte en mensaje recibido en un entero
  if (pasosvuelta == 0) {             //si no es un número envía ERROR y vuelve a llamar a la función
    Serial.print("ERROR\n");
    pasosporvuelta();
  }
  else {                              //si es un número nos envia un mensaje de OK
    Serial.print(pasosvuelta);
    Serial.print(" OK\n");
  }
}

void sentido() {
  Serial.print("¿Sentido de giro? (0 horario / 1 antihorario) ");
  while (Serial.available() == 0 ) {}
  mensaje = Serial.readString();
  if (mensaje == "0\n") {
    Serial.print("horario OK\n");
    digitalWrite(dirPin, HIGH);
  }
  else if (mensaje == "1\n") {
    Serial.print("antihorario OK\n");
    digitalWrite(dirPin, LOW);       
  }
  else {
    Serial.print("ERROR\n");
    sentido();     
  }
}

void giro() {
  Serial.print("¿Grados? ");
  while (Serial.available() == 0 ) {}
  mensaje = Serial.readString();
  grados = mensaje.toFloat();
  if (pasosvuelta == 0) {
    Serial.print("ERROR\n");
    giro();
  }
  else {
    Serial.print(grados);
    Serial.print(" OK\n");
  }
}

void velocidad() {
  Serial.print("¿Velocidad de giro? (RPM) ");
  while (Serial.available() == 0 ) {}
  mensaje = Serial.readString();
  rpms = mensaje.toInt();
  if (rpms == 0) {
    Serial.print("ERROR\n");
    velocidad();
  }
  else {
    Serial.print(rpms);
    Serial.print(" OK\n");
  }
}