Jump to content
dranilc450

Focuseur motorisé wifi

Recommended Posts

Bonsoir Greg,

 

Merci pour le partage.

Pour le PCB, sais tu ou pouvoir le commander. Je suppose qu'il faut une série pour que cela soit rentable. 

Pour le LM  2596, j'ai un projet de montage d'une boite d'alimentation 3.3v, 5v, 12v, 19v, voir 7.5v. Celle-ci sera montée directement sur la monture par l'intermédiaire d'une queue d'aronde, l'optique étant solidaire de la boite, elle aussi, sur queue d'aronde. Ainsi, beaucoup moins de fils pendants, source de problèmes.

Pour le driver A4988, ici sur ton montage:

 

proto.thumb.jpg.c0c0709594528f2c6a14dfc61b7a3133.jpg

le  brochage est différent de celui de cet exemple: http://www.vorobotics.com/wiki/index.phptitle=Stepstick_et_moteurs_pas_à_pas. Suivant le constructeur du composant, peut on avoir des différences, ou est ce pour une simplification de représentation dans ton schéma.

Edited by dranilc450

Share this post


Link to post
Share on other sites

En fait non, j'ai vraiment gardé la ref du A4988.

L'autre, c'est un DRV8825 ... ils ont l'air d'être compatible mais vu que je l'ai pas testé, je peux pas m'avancer sur ce produit.

Là je suis parti sur une autre optimisation, l'ajout de l'abaisseur de tension direct sur le CI avec une dimension totale de 64.7x57.15.

 

prot2.thumb.jpg.4f9354b8e4aeffa1b9df52356751dafe.jpg

 

Le schéma d’implantation en vue de dessus:

 

329714901_CISchema.thumb.png.e292909808407f71f8f3591cad58c72a.png

 

Et le CI au format SVG pour la gravure en simple face: CI.svg

J'ai prévu l'ajout de la sonde de température (la classique ds18b20).

Là, on alimente directement le tout via le 12v en ayant réglé l'abaisseur sur 6V et réglé aussi le Vref du driver PAP sinon le moteur ou driver risque de pas aimer surtout que dans ce cas, le moteur normalement alimenté en 5.4v est passé en 12v ;)

Dans ce cas, on fabrique, on soude, on programme et zou finit ^^

J'ai pas remarqué de chauffe sur les compo, du coup j'ai pas mis de radiateur sur le driver car le moteur a que 0.8A de conso/phase.

Pour la fab du CI simple face, j'ai aucune idée de savoir ou je fais le faire faire vu que c'est pas un modèle complexe ou alors peut être chez seeedstudio vu qu'ils ont fait les PCB de ma future cam86.

 

Edited by Greg34

Share this post


Link to post
Share on other sites

Merci pour les infos. Dans le code, est il possible de changer les valeurs de MS 1,2 ,3  afin de modifier les micros pas pour permettre de faire une mise au point grossière sans désaccoupler le moteur.

Christian.

Edited by dranilc450

Share this post


Link to post
Share on other sites

Non, car Ms1/2/3 sont pontés ensemble (tout est géré en 1/16 de pas).

Mais t’inquiètes, pour ce qui est de la vitesse, j'ai mis 3 vitesses pour tester dans le programme client et la vitesse max envoie du lourd xD

Même pour la plus petite, j'ai multiplié le pas par 4 tellement ça bronchait pas.

 

Pour ce qui est du code (pas optimisé), ça donne ça:


#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

#include<stdlib.h>

#include <WiFiClient.h>
#include <ESP8266WebServer.h>

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);

#include <WiFiManager.h>


#include <SPI.h>
#include <Wire.h>

#include "index.h"


int STBY = D3; //standby mise en pause driver
int STEP = D7;
int DIR  = D8;

int LEDRED = D0;
int LEDGREEN = D1;
int LEDBLUE = D2;


ESP8266WebServer server(80); //Server on port 80


WiFiUDP Udp;
unsigned int localUdpPort = 4210;  // local port to listen on
char incomingPacket[255];  // buffer for incoming packets


void handleRoot() {
  String s = MAIN_page; //Read HTML contents
  server.send(200, "text/html", s); //Send web page
}

void setup()
{
  Serial.begin(115200);
  Serial.println();

  pinMode(LEDBLUE, OUTPUT);
  digitalWrite(LEDBLUE, HIGH); //mode config

  pinMode(STBY, OUTPUT); //met la broche en sortie
  //digitalWrite(STBY, LOW); //Met le driver  tension Off pour commencer
  digitalWrite(STBY, HIGH);

  WiFiManager wifiManager;
  wifiManager.autoConnect("wFocusInit");
  wifiManager.startConfigPortal("wFocusInit");

  WiFi.softAP("wFocusV1"); //< -SSID pour de co directement dessus.

  // initialise la vitesse de rotation du moteur pas à pas en tour par minute




  pinMode(STEP, OUTPUT); //Step
  pinMode(DIR, OUTPUT); //Direction

  pinMode(LEDRED, OUTPUT);
  pinMode(LEDGREEN, OUTPUT);

  digitalWrite(LEDRED, HIGH);
  digitalWrite(LEDGREEN, LOW);

  Udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);

  server.on("/", handleRoot);      //Which routine to handle at root location. This is display page
  //server.on("/setLED", handleLED);
  //server.on("/readADC", handleADC);

  server.begin();                  //Start server
  Serial.println("HTTP server started");
  digitalWrite(LEDBLUE, LOW); //mode config off

}

String floatToString(float x, byte precision = 2) {
  char tmp[50];
  dtostrf(x, 0, precision, tmp);
  return String(tmp);
}

void loop()
{

  server.handleClient();
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    // receive incoming UDP packets
    Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
    int len = Udp.read(incomingPacket, 255);
    if (len > 0)
    {
      incomingPacket[len] = 0;
    }
    Serial.printf("UDP packet contents: %s\n", incomingPacket);

    // digitalWrite(STBY, LOW);

    if (incomingPacket[0] == 'g') {
      digitalWrite(STBY, LOW);
      digitalWrite(DIR, HIGH);
      digitalWrite(LEDRED, LOW);
      digitalWrite(LEDGREEN, HIGH );
      if (incomingPacket[1] == '0') {
        for (int i = 0; i < 3; i++) {
          digitalWrite(STEP, HIGH);
          delayMicroseconds(50);
          digitalWrite(STEP, LOW);
        }
      }

      if (incomingPacket[1] == '1') {
        for (int i = 0; i < 200; i++) {
          digitalWrite(STEP, HIGH);
          delayMicroseconds(500);
          digitalWrite(STEP, LOW);
        }

      }
      if (incomingPacket[1] == '2') {
        for (int i = 0; i < 2000; i++) {
          digitalWrite(STEP, HIGH);
          delayMicroseconds(100);
          digitalWrite(STEP, LOW);
        }

      }
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Focus Out");
      Udp.endPacket();

    }

    if (incomingPacket[0] == 'd') {
      digitalWrite(STBY, LOW);
      digitalWrite(DIR, LOW);
      digitalWrite(LEDRED, LOW);
      digitalWrite(LEDGREEN, HIGH);
      if (incomingPacket[1] == '0') {
        for (int i = 0; i < 3; i++) {
          digitalWrite(STEP, HIGH);
          delayMicroseconds(50);
          digitalWrite(STEP, LOW);
        }
      }

      if (incomingPacket[1] == '1') {
        for (int i = 0; i < 200; i++) {
          digitalWrite(STEP, HIGH);
          delayMicroseconds(500);
          digitalWrite(STEP, LOW);
        }

      }
      if (incomingPacket[1] == '2') {
        for (int i = 0; i < 2000; i++) {
          digitalWrite(STEP, HIGH);
          delayMicroseconds(100);
          digitalWrite(STEP, LOW);
        }

      }
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Focus In");
      Udp.endPacket();
    }

    //command A=getip
    if (incomingPacket[0] == 'A') {
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write(WiFi.localIP().toString().c_str());
      Udp.endPacket();
    }

    //command F=get firmware
    if (incomingPacket[0] == 'F') {
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Firmware wFocus V1.0");
      Udp.endPacket();
    }

    //command P=set driver Off
    if (incomingPacket[0] == 'P') {
      digitalWrite(STBY, HIGH);
      digitalWrite(LEDRED, HIGH);
      digitalWrite(LEDGREEN, LOW );
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Driver power off");
      Udp.endPacket();
    }
    //command P=set driver On
    if (incomingPacket[0] == 'M') {
      digitalWrite(STBY, LOW);
      digitalWrite(LEDRED, LOW);
      digitalWrite(LEDGREEN, HIGH);
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Driver power On");
      Udp.endPacket();
    }

    //command T=get temperature
    /*  if (incomingPacket[0] == 'T') {
        float temp;
        DS18B20.requestTemperatures();
        temp = DS18B20.getTempCByIndex(0);
        Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
        Udp.write("T");
        Udp.print(temp);
        Udp.endPacket();
      }*/
  }
}

L'ESP écoute les trames venant d'un client et fait sa sauce en fonction ('d' pour droite,0/1/2 pour les paliers de vitesse).

 

P.S:ajout du Gerber ->attention, je suis pas électronicien et j'ai pas testé ce fichier mais je vais quand même m'en faire un basé sur ce plan  ->focus.zip

Edited by Greg34
Ajout du fichier Gerber

Share this post


Link to post
Share on other sites

Le code et moi, ça fait deux...... je te crois sur parole. Je te remercie pour le partage. Mais il faut que je réussisse à comprendre un minimum. Déjà, à voir de loin, ça doit être du C++......oui, non.... si oui, il faut que je fasse un peu de recherche pour comprendre le syntaxe de ce langage, oui oui, je comprendrai un jour.......

Merci pour tout ce travail.

Share this post


Link to post
Share on other sites

Un petit tuto pour programmer l'esp avec l'IDE de l'arduino: https://www.fais-le-toi-meme.fr/fr/electronique/tutoriel/programmes-arduino-executes-sur-esp8266-arduino-ide

Tu vas voir, c'est simple et tu risques rien même en faisant des erreurs.

De plus, avec ce petit bijou, on peut téléverser le firmware sans fils (j'entends des dents grincer là ^^ ah mais si j'ai un fil ! l'alim !)

 

Le code repris vite fait en mode moins crade:

#include<stdlib.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <SPI.h>
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>

#include "index.h"

#define ONE_WIRE_BUS D4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);

int STBY = D3; //standby mise en pause driver
int STEP = D7;
int DIR  = D8;

int LEDRED = D0;
int LEDGREEN = D1;
int LEDBLUE = D2;


ESP8266WebServer server(80); //Server on port 80


WiFiUDP Udp;
unsigned int localUdpPort = 4210;  // local port to listen on
char incomingPacket[255];  // buffer for incoming packets


void handleRoot() {
  String s = MAIN_page; //Read HTML contents
  server.send(200, "text/html", s); //Send web page
}

void setup()
{
  Serial.begin(115200);
  Serial.println();

  pinMode(LEDBLUE, OUTPUT);
  digitalWrite(LEDBLUE, HIGH); //mode config

  pinMode(STBY, OUTPUT); //met la broche en sortie
  //digitalWrite(STBY, LOW); //Met le driver  tension Off pour commencer
  digitalWrite(STBY, HIGH);

  WiFiManager wifiManager;
  wifiManager.autoConnect("wFocusInit");
  wifiManager.startConfigPortal("wFocusInit");

  WiFi.softAP("wFocusV1"); //< -SSID pour de co directement dessus.

  // initialise la vitesse de rotation du moteur pas à pas en tour par minute

  pinMode(STEP, OUTPUT); //Step
  pinMode(DIR, OUTPUT); //Direction

  pinMode(LEDRED, OUTPUT);
  pinMode(LEDGREEN, OUTPUT);

  digitalWrite(LEDRED, HIGH);
  digitalWrite(LEDGREEN, LOW);

  Udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);

  server.on("/", handleRoot);      //Which routine to handle at root location. This is display page
  //server.on("/setLED", handleLED);
  //server.on("/readADC", handleADC);

  server.begin();                  //Start server
  Serial.println("HTTP server started");
  digitalWrite(LEDBLUE, LOW); //mode config off

}

String floatToString(float x, byte precision = 2) {
  char tmp[50];
  dtostrf(x, 0, precision, tmp);
  return String(tmp);
}

void Step(int speed)
{
  digitalWrite(STEP, HIGH);
  delayMicroseconds(speed);
  digitalWrite(STEP, LOW);
}


void loop()
{

  server.handleClient();
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    // receive incoming UDP packets
    Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
    int len = Udp.read(incomingPacket, 255);
    if (len > 0)
    {
      incomingPacket[len] = 0;
    }
    Serial.printf("UDP packet contents: %s\n", incomingPacket);

    // *********** Focus out ***********
    if (incomingPacket[0] == 'g') {
      digitalWrite(STBY, LOW);
      digitalWrite(DIR, HIGH);
      digitalWrite(LEDRED, LOW);
      digitalWrite(LEDGREEN, HIGH );
      if (incomingPacket[1] == '0') {
        for (int i = 0; i < 3; i++) {
          Step(50);
        }
      }

      if (incomingPacket[1] == '1') {
        for (int i = 0; i < 200; i++) {
          Step(500);
        }

      }
      if (incomingPacket[1] == '2') {
        for (int i = 0; i < 2000; i++) {
          Step(100);
        }

      }
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Focus Out");
      Udp.endPacket();

    }
    // *********** Focus in ***********
    if (incomingPacket[0] == 'd') {
      digitalWrite(STBY, LOW);
      digitalWrite(DIR, LOW);
      digitalWrite(LEDRED, LOW);
      digitalWrite(LEDGREEN, HIGH);
      if (incomingPacket[1] == '0') {
        for (int i = 0; i < 3; i++) {
          Step(50);
        }
      }

      if (incomingPacket[1] == '1') {
        for (int i = 0; i < 200; i++) {
          Step(500);
        }

      }
      if (incomingPacket[1] == '2') {
        for (int i = 0; i < 2000; i++) {
          Step(100);
        }

      }
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Focus In");
      Udp.endPacket();
    }

    // *********** Liste de commandes ***********
    //command A=getip
    if (incomingPacket[0] == 'A') {
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write(WiFi.localIP().toString().c_str());
      Udp.endPacket();
    }

    //command F=get firmware
    if (incomingPacket[0] == 'F') {
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Firmware wFocus V1.0");
      Udp.endPacket();
    }

    //command P=set driver Off
    if (incomingPacket[0] == 'P') {
      digitalWrite(STBY, HIGH);
      digitalWrite(LEDRED, HIGH);
      digitalWrite(LEDGREEN, LOW );
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Driver power off");
      Udp.endPacket();
    }
    //command P=set driver On
    if (incomingPacket[0] == 'M') {
      digitalWrite(STBY, LOW);
      digitalWrite(LEDRED, LOW);
      digitalWrite(LEDGREEN, HIGH);
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Driver power On");
      Udp.endPacket();
    }

    //command T=get temperature
    /*  if (incomingPacket[0] == 'T') {
        float temp;
        DS18B20.requestTemperatures();
        temp = DS18B20.getTempCByIndex(0);
        Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
        Udp.write("T");
        Udp.print(temp);
        Udp.endPacket();
      }*/
  }
}

 

Edited by Greg34
Correction du code

Share this post


Link to post
Share on other sites

Encore mieux et plus complet ;) ->http://kicad-pcb.org/

 

Imaginons qu'on puisse compiler/téléverser un programme sur un Arduino sans qu'il soit branché sur le PC ? sauf que là, c'est un ESP ^^

En gros ça donne:

IDE Arduino -> compilation & téléversement sans fil avec affichage du module LED en blanc pendant la mise à jour du firmware.

Ca permet de pouvoir bosser à distance sur son boitier sans être connecté en filaire (je kiffe ! :D)

 

Le code:

#include<stdlib.h>
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#include <SPI.h>
#include <ArduinoOTA.h>


int STBY = D3; //standby mise en pause driver
int STEP = D7;
int DIR  = D8;

int LEDRED = D0;
int LEDGREEN = D1;
int LEDBLUE = D2;

bool Pw = false;

WiFiUDP Udp;
unsigned int localUdpPort = 4210;  // local port to listen on
char incomingPacket[255];  // buffer for incoming packets

void setup()
{
  Serial.begin(115200);
  Serial.println();

  pinMode(LEDBLUE, OUTPUT);
  digitalWrite(LEDBLUE, HIGH); //mode config

  pinMode(STBY, OUTPUT); //met la broche en sortie

  digitalWrite(STBY, HIGH);

  WiFiManager wifiManager;
  wifiManager.autoConnect("wFocusInit");
  wifiManager.startConfigPortal("wFocusInit");

  WiFi.softAP("wFocusV1"); //< -SSID pour de co directement dessus.

  //******* OTA ***************
  ArduinoOTA.onStart([]() {
    String type;
    if (ArduinoOTA.getCommand() == U_FLASH)
      type = "sketch";
      type = "filesystem";
    digitalWrite(LEDRED, HIGH); // allume les led au debut du transfert en blanc
    digitalWrite(LEDGREEN, HIGH);
    digitalWrite(LEDBLUE, HIGH);
  });
  ArduinoOTA.onEnd([]() {
    digitalWrite(LEDRED, LOW); // MAJ ok ->led Off
    digitalWrite(LEDGREEN, LOW);
    digitalWrite(LEDBLUE, LOW);
  });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {

    Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
  });
  ArduinoOTA.onError([](ota_error_t error) {
    //Serial.printf("Error[%u]: ", error);
    if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
    else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
    else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
    else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
    else if (error == OTA_END_ERROR) Serial.println("End Failed");
  });
  ArduinoOTA.begin();
  //********* Fin OTA ***************

  pinMode(STEP, OUTPUT); //Step
  pinMode(DIR, OUTPUT); //Direction

  pinMode(LEDRED, OUTPUT);
  pinMode(LEDGREEN, OUTPUT);

  digitalWrite(LEDRED, HIGH);
  digitalWrite(LEDGREEN, LOW);

  Udp.begin(localUdpPort);
  Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
  digitalWrite(LEDBLUE, LOW); //mode config off

}


void Step(int speed)
{
  digitalWrite(STEP, HIGH);
  delayMicroseconds(speed);
  digitalWrite(STEP, LOW);
  delayMicroseconds(speed);
}


void loop()
{
  ArduinoOTA.handle();
  int packetSize = Udp.parsePacket();
  if (packetSize)
  {
    // receive incoming UDP packets
    Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
    int len = Udp.read(incomingPacket, 255);
    if (len > 0)
    {
      incomingPacket[len] = 0;
    }
    Serial.printf("UDP packet contents: %s\n", incomingPacket);

    // *********** Focus in ***********
    if (incomingPacket[0] == 'g') {
      digitalWrite(DIR, HIGH);
      if (Pw == false) {
        Pw = true;
        digitalWrite(STBY, LOW);
        digitalWrite(LEDRED, LOW);
        digitalWrite(LEDGREEN, HIGH );
      }
      if (incomingPacket[1] == '0') {
        Step(1);
      }

      if (incomingPacket[1] == '1') {
        for (int i = 0; i < 200; i++) {
          Step(500);
        }
      }
      if (incomingPacket[1] == '2') {
        for (int i = 0; i < 2000; i++) {
          Step(100);
        }
      }
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Focus Out");
      Udp.endPacket();

    }
    // *********** Focus in ***********
    if (incomingPacket[0] == 'd') {
      digitalWrite(DIR, LOW);
      if (Pw == false) {
        Pw = true;
        digitalWrite(STBY, LOW);
        digitalWrite(LEDRED, LOW);
        digitalWrite(LEDGREEN, HIGH);
      }
      if (incomingPacket[1] == '0') {
        Step(1);
      }

      if (incomingPacket[1] == '1') {
        for (int i = 0; i < 200; i++) {
          Step(500);
        }
      }
      if (incomingPacket[1] == '2') {
        for (int i = 0; i < 2000; i++) {
          Step(100);
        }
      }

      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Focus In");
      Udp.endPacket();
    }

    // *********** Liste de commandes ***********
    //command A=getip
    if (incomingPacket[0] == 'A') {
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write(WiFi.localIP().toString().c_str());
      Udp.endPacket();
    }

    //command F=get firmware
    if (incomingPacket[0] == 'F') {
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Firmware wFocus V1.0");
      Udp.endPacket();
    }

    //command P=set driver Off
    if (incomingPacket[0] == 'P') {
      Pw = false;
      digitalWrite(STBY, HIGH);
      digitalWrite(LEDRED, HIGH);
      digitalWrite(LEDGREEN, LOW );
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Driver power off");
      Udp.endPacket();
    }
    //command P=set driver On
    if (incomingPacket[0] == 'M') {
      Pw = true;
      digitalWrite(STBY, LOW);
      digitalWrite(LEDRED, LOW);
      digitalWrite(LEDGREEN, HIGH);
      Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
      Udp.write("Driver power On");
      Udp.endPacket();
    }
  }
}

 

Edited by Greg34
  • J'aime 1

Share this post


Link to post
Share on other sites

Bonsoir Greg,

 

Je n'avance pas beaucoup...... je n'ai toujours pas reçu mes drivers!!!!! Cependant, je me suis fait aider pour le code de l'ESP et pour l'interface de commande Android, l'apk a été créée. Ayant déjà l'ESP E12, je vais pouvoir le tester avec des leds. J'avance doucement.......

 

Christian.

Share this post


Link to post
Share on other sites

Salut Christian,

 

Idem, de mon coté, j'attends aussi mes PCB (Cam86 et pour le projet du focuser aussi).

C'est pas mal déjà pour l'APK, j'y avais pensé aussi, j'étais parti aussi sur une webconfig  (pour le coté universel) puis j'ai laissé tombé car pour plus de souplesse, je me disais que j'utiliserai que le PC pour piloter le PO.

J'ai refais le code depuis, il me plaisait pas et manquait aussi de précision pour le prog client à venir.

Sur le dernier, j'ai mis/fait coté ESP:

-un goto pour positionner le PO à un endroit précis.

-la possibilité de passer en 1/16 ou un pas 'classique' sur la vitesse basse.

-la possibilité de jouer avec l'accélération de la lib accelstepper (mouvements beaucoup plus souples !)

 

Coté client:

-l’envoi d'une valeur pour le goto. 

-on appuie sur les touches 'w'/'x' pour avancer/reculer le PO avec affichage du nombre de pas.

-possibilité de couper le driver soit pour éviter la chauffe du moteur ou pouvoir le manœuvrer à la main.

-3 vitesses.

-l'ajout de la lecture d'une fwhm relative avec pointage à l'aide de la souris/pad sur une étoile (j'avais déjà bossé sur le projet mais il était foireux....là, j'obtient bien une fwhm la plus basse lors d'une bonne MAP).

 -j'ai ajouté une courbe pour afficher la relation nombre de pas en fonction de la fwhm.

 

Reste à faire: 

-un capteur mécanique pour définir le point le plus bas du PO ?

-sauver les différentes positions en fonction des appareils de prise de vue utilisés (si APN faire 3500 pas, si cam faire 3400, si oculaire de X faire X pas ....etc).

-Faire une mise au point auto en mode rapide et affiner la MAP selon le même procédé en mode 1/16 de pas.

 

Je posterais le tout quand ça sera ok  (avec tests en situation réelle) sinon là, je risque de flooder le sujet à chaque changement de bout de code ^^

 

 

Share this post


Link to post
Share on other sites

Ton code est plus élaboré que le mien, beaucoup plus basique. J'ai effectivement trois vitesses en in et out plus une vitesse qu'il est possible de faire varier à l'aide de curseurs. Il y a aussi la possibilité de ne pas alimenter le moteur afin de faire une mise au point manuelle. Pas de goto, ni de lecture de fwhm. J'ai installé l'apk sur la tablette. Maintenant, il faut attendre que tout arrive.....

Un petit  logiciel sympa pour les apk:  https://code.visualstudio.com/

Edited by dranilc450

Share this post


Link to post
Share on other sites

Bonsoir,

 

Pour les APK, j'ai encore mieux Un IDE gratuit pour un usage qui ne doit pas dépasser les 5000$ dans le cadre de vente de software.

https://www.embarcadero.com/products/delphi/starter

C'est rapide, facile et pour les habitués du langage 'Pascal', il n'y a quasiment pas de changement dans la syntaxe du code.

Que du bon !

Un bout de code en pascal, on place ses boutons etc sur la 'Tform', on compile, on génère directement l'APK sur l'android  ! Elle est pas belle la vie ? :hm: 

Le code que j'ai fait dans l'après midi pour le focuser:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Media,
  FMX.Controls.Presentation, FMX.StdCtrls, IdBaseComponent, IdComponent,
  IdUDPBase, IdUDPClient, IdUDPServer, IdGlobal, IdSocketHandle, FMX.Edit;

type
  TForm1 = class(TForm)
    ButtonF_in: TButton;
    ButtonF_Out: TButton;
    RadioBLow: TRadioButton;
    RadioBMed: TRadioButton;
    RadioBHight: TRadioButton;
    CheckBoxDrv: TCheckBox;
    Label1: TLabel;
    IdUDPServer1: TIdUDPServer;
    Label2: TLabel;
    LabelPos: TLabel;
    StyleBook1: TStyleBook;
    Editgoto: TEdit;
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure ButtonF_inClick(Sender: TObject);
    procedure ButtonF_OutClick(Sender: TObject);
    procedure RadioBLowClick(Sender: TObject);
    procedure RadioBMedClick(Sender: TObject);
    procedure RadioBHightClick(Sender: TObject);
    procedure CheckBoxDrvClick(Sender: TObject);
    procedure IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
      const AData: TIdBytes; ABinding: TIdSocketHandle);
    procedure Button1Click(Sender: TObject);

  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;
  Speed: byte=0;


implementation

{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}
{$R *.NmXhdpiPh.fmx ANDROID}

uses
System.iOUtils;


procedure TForm1.Button1Click(Sender: TObject);
begin
  IdUDPServer1.Broadcast('v'+Editgoto.Text,4210);
  CheckBoxDrv.IsChecked:=false;
end;

procedure TForm1.ButtonF_inClick(Sender: TObject);
begin
  IdUDPServer1.Broadcast('d'+inttostr(Speed),4210);
  CheckBoxDrv.IsChecked:=false;
end;

procedure TForm1.ButtonF_OutClick(Sender: TObject);
begin
  IdUDPServer1.Broadcast('g'+inttostr(Speed),4210);
  CheckBoxDrv.IsChecked:=false;
end;

procedure TForm1.CheckBoxDrvClick(Sender: TObject);
begin
  if CheckBoxDrv.IsChecked=true then
     IdUDPServer1.Broadcast('P',4210);

  if CheckBoxDrv.IsChecked=false then
     IdUDPServer1.Broadcast('M',4210);

end;

procedure TForm1.FormShow(Sender: TObject);
begin
  IdUDPServer1.DefaultPort:=4000;
  IdUDPServer1.Active:=true;
end;

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
  const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
   if AData[0]=Ord('#') then
   begin
     AData[0]:=20;
     LabelPos.Text:='Position:'+BytesToString(AData);
   end
    else
     Label2.Text:='Status:'+BytesToString(AData);
end;

procedure TForm1.RadioBLowClick(Sender: TObject);
begin
  Speed:=0;
end;

procedure TForm1.RadioBMedClick(Sender: TObject);
begin
  Speed:=1;
end;

procedure TForm1.RadioBHightClick(Sender: TObject);
begin
  Speed:=2;
end;

end.

Copie d'écran d'une première version:

Screenshot_20181118-185512.thumb.jpg.f65f1908c994ae8ee2b94155a28b7e0a.jpg

 

Bon là, c'est vraiment pour tuer le temps....j'ai cramé ma carte graphique et du coup je suis sur un portable avec aucun accès à mes anciens dossiers :(

Mais bon, ça reste quand même sympa et facile à utiliser :)

Saleté de carte qui pète au début de mes récup ! vais être obligé d'aller faire du jardinage :D

Edited by Greg34

Share this post


Link to post
Share on other sites
Il y a 2 heures, dranilc a dit :

...... C'est la guigne☹️

 

Bah j'avais une vieille geforce gtx460, elle commençait depuis un bon moment à me faire des écrans bleus ...du coup, j'ai pris une gtx 1050 histoire d'être tranquille à nouveau pour 6/7 ans.

 

il y a 53 minutes, gehelem a dit :

Fallait mettre des fils 😆

 

Ah non la carte wifi pour mon projet va bien, c'était juste ma cochonnerie de carte graphique pleine de fils 😁

 

J'ai reçu mes pcb que j'avais fait faire sous kicad, juste 2 erreurs au niveau des espaces d'une résistance et du régulateur de tension...quand on est noob, on est noob 😊

Mais bon, rien de bien méchant, ça se soude quand même; je ferais mieux la prochaine fois.

 

Je vais réimprimer un nouveau boitier sur mesure dans la foulée.

 

pcb.jpg.83de91abc12058131cefed051c525f98.jpg

 

Par contre, je me demande si ça vaut vraiment la peine d'ajouter une sonde de température ?

Pour moi, la seule utilité future aurait été de surveiller la température de manière à alerter les fluctuations pour faire des dark histoire de respecter la relation dark/temp.

 

 

 

 

 

 

 

  • Merci / Quelle qualité! 1

Share this post


Link to post
Share on other sites

Heu.....Greg..... aurais tu un pcb de plus😍 J'ai le même montage que toi., bien sûr je contribue.😉

Je n'ai toujours pas reçu mon driver et l'interface de téléversement du code..... je tourne en rond!

Dés que le code sera validé, je partagerai, ainsi que l'APK

 

Christian.

Edited by dranilc

Share this post


Link to post
Share on other sites

Oui pas de soucis, envoies moi ton adresse par MP ( pour la contribution laisse tomber, j'en envoie pas 10/jours 😁 ).

Après, j'ai pas encore testé avec le code injecté histoire de voir si j'ai pas fait une boulette au niveau du CI, j'ai vérifié au testeur mais bon...des fois avec la fatigue, on en oublie l'essentiel.

Ca, je le verrai quand j'aurais récupéré ma CG dans la semaine si tout va bien :)

Je remettrai les derniers Gerber en ligne dès que je le pourrai.

 

Edited by Greg34

Share this post


Link to post
Share on other sites

Bonsoir,

 

Vu que j'attends toujours cette satanée carte pour mon pc principale, j'ai modélisée une nouvelle boite pour le PCB.

Bon, c'est du PETG en mode impression dégeu. mais vu le temps d'impression, ça comblera largeeeeeeement mes attentes en terme de solidité/résistance/étanchéité.

B2.jpg.899b5eee20ce756b6c73deb1337614b2.jpg

 

B3.thumb.jpg.40fcfac4561247f17c51c4c6918b5671.jpg

 

 

Du coup, j'ai quand même mis la sonde de température histoire de savoir si j'allais rencontrer des ours polaires dans le jardin ...

J'ai creusé aussi le couvercle de manière à laisser passer modérément le module RGB pour donner l'état.

Mais bon, on peut toujours remplacer ces options par des boutons ou autre en fonction des besoins...ça fonctionne comme un arduino cette petite bête.

Share this post


Link to post
Share on other sites
il y a 24 minutes, Greg34 a dit :

Une petite MAJ pour les fichiers STL ;)

 

https://www.thingiverse.com/thing:3235605

Salut :)

tu dis dans ton lien "Pour ce projet, j'utilise un esp8266 en mode serveur UDP "

arrives-tu à échanger en wifi en l'absence de routeur?  tu peux montrer le sketch?

c'est pour un projet différent mais c'est cette partie qui coince

Share this post


Link to post
Share on other sites
Le 20/10/2018 à 21:21, Greg34 a dit :

IDE Arduino -> compilation & téléversement sans fil avec affichage du module LED en blanc pendant la mise à jour du firmware.

Ca permet de pouvoir bosser à distance sur son boitier sans être connecté en filaire (je kiffe ! :D)

Salut,

 

Es tu content de ta solution flash sans fil? Pour la raquette du TeenAstro ca peut être interessant, c'est un wemos D1Mini

amicalement,

Charles

 

 

Share this post


Link to post
Share on other sites

Salut :)

 

Il y a 1 heure, gerard33 a dit :

Salut :)

tu dis dans ton lien "Pour ce projet, j'utilise un esp8266 en mode serveur UDP "

arrives-tu à échanger en wifi en l'absence de routeur?  tu peux montrer le sketch?

c'est pour un projet différent mais c'est cette partie qui coince

 

Oui, ça marche aussi sans routeur (car par défaut, mon appareil PC/smartphone sera sur le même réseau que l'ESP soit en 192.168.4.1, de plus le client envoie les infos en 'Broadcast'), me faut juste peaufiner la procédure d'initialisation car après la mise sous tension sous WifiManager , je suis obligé de:

-(1)me connecter sur le SSID 'wFocusInit' ->soit je configure le module sur le routeur/soit je fais 'exit'

-(2)me connecter de nouveau sur SSID 'wFocusInit' ->Exit

-(3)Et enfin me connecter sur le SSID 'wFocus'  pour être sur le même réseau par défaut que l'ESP.

 

Même punition une fois le routeur configuré , sauf que là j'élimine la 2ième procédure mais bon, ça va encore, ça prend 10 secondes comme manip.

Je vais voir pour ajouter soit un BP pour bypasser la première procédure dans le cas ou le routeur est déjà configuré (coté visuel sur le module RGB, je passerai du bleu ou rouge en mode attente commandes client) ou

alors je mets un timer de 120 secondes ce qui éliminerait aussi la procédure en mode auto.

 

J'ai mis les 2 sources en PJ ;)

Pour delphi, il faut juste installer la VCL ICS ->http://www.overbyte.eu/frame_index.html?redirTo=/products/ics.html

Pour l'ESP -> https://projetsdiy.fr/arduinoota-ota-mise-jour-sans-fil-ide-arduino-programmes-esp8266/

 

 

il y a une heure, FS2 a dit :

Salut,

 

Es tu content de ta solution flash sans fil? Pour la raquette du TeenAstro ca peut être interessant, c'est un wemos D1Mini

amicalement, 

Charles

 

 

 

Salut :)

 

Pour être honnête, je trouve ça hyper pratique ! pour uploader le code au fur et à mesure, je ne passe que par ça avec l'IDE de l'arduino.

C'est plus rapide que le port COM et encore moins de fils à gérer (n'est ce pô gehelem ? ^^) !

J'ai vite jeté un œil sur le module et je suis quasi sûr que l'OTA peut être géré sur ton wemos D1Mini :)

 

Les P.J:

wfocus.zip

wfocusESP.zip

Share this post


Link to post
Share on other sites

J'ai fait un petit résumé sur mon site (Article 2) du projet sur la page http://astrogpu.free.fr/Bricoles.php avec les derniers Gerber en ligne dans la foulée.

Par contre, attention aux ESP vendus car ils sont souvent soudés avec les fiches mâles pour la connectique et du fait qu'à 90% ils sont soudés de travers, ça a du mal à rentrer dans le PCB.

Autant en prendre à souder soit-même ;)

Sinon à ce jour, tout à l'air Ok et j'ai mon focuser sans fil avec moteur PAP (3200 pas) qui m'a couté moins cher que mon premier focuser en version moteur CC  :)

 

Manque plus que le temps pour en profiter ! mais là, c'est encore bien parti pour des mois de nuages ...

Edited by Greg34

Share this post


Link to post
Share on other sites

J'ai pu tester hier soir malgré une transparence de ciel  assez merd....

Coté positif: c'est bon de faire et de surveiller sa MAP au chaud !

 

J'ai refait un soft que j'avais commencé il y a 2 ans pour le focuser mais en corrigeant quelques bugs et en ajoutant la lecture de la fwhm sur l'axe Y dans la foulée.

Ca restera une fwhm relative pour le moment histoire de ne pas avoir à gérer les 10 SDK du moment ^^.

On coche 'Scan On/Off', on vise une étoile avec la souris sur SharCap ou autre, on verrouille en faisant 'MAJ' clic gauche et on affine la MAP.

La règle reste la même, obtenir la plus petite valeur de la fwhm qui dans ce cas sera moyennée sur 2 axes.

Ajout aussi d'un recentrage automatique de l'étoile en cas de dérive...

Pour le test, j'avais fait une MAP grossière ->retour au chaud à la maison ->MAP à distance (via Teamviewer pour le retour visu caméra)-> vérif MAP avec masque de bahtinov et tri-bahtinov au froid avec le scope.

RAS c'est aussi précis que la MAP à la mano avec mon masque !

Pas d'autofocus encore...je bosse dessus et je pense faire plus tard une MAP auto via la cam de guidage couplée à un DO.

 

Pour les curieux, le soft est sur le site ;)

137281746_Sanstitre.png.6034d929ff5fbd5ec82ce570acf11151.png

 

 

Bon réveillon 2019 ! 🥂

:vin:

:fete:

Edited by Greg34

Share this post


Link to post
Share on other sites

Petit ajout du driver (minimaliste) ASCOM sur le site.

Je l'ai testé avec Sharpcap et il marche nickel (à voir par la suite pour l'améliorer->j'aime pas le .NET ^^).

 

Le soft en 'standalone':

 

Et le bidule en démo sur le télescope avec une petite faute ^^ (un 'da' à la place d'un 'de):

 

 

Bon weekend !

 

 

 

 

Edited by Greg34

Share this post


Link to post
Share on other sites

Bonjour Greg,

 

Cela fait un moment que je ne suis pas passé par ici.......

Je vois que ton projet est maintenant opérationnel..... et cela fonctionne, félicitation.

De mon côté, j'ai pu enfin faire le montage sur la planche à pain et cela fonctionne. Donc je me lance, montage des éléments sur le PCB. L'ESP a fait de la résistance..... Pour les soudures, c'est une autre histoire, je ne suis réellement pas doué!!! Je possédais un vieux fer à souder du siècle dernier, impossible de faire une soudure correcte avec. Je viens de faire l'acquisition d'un nouveau avec contrôle de température, j'espère maintenant faire les choses correctement, le temps s'y prête..... un temps de chien...

 

Christian.

Share this post


Link to post
Share on other sites

Bonjour Christian,

 

Content d'avoir de tes nouvelles et de voir que tu avances.

Pour l'ESP, le module déjà soudé peut poser problème surtout s'il est déjà soudé un peu de travers mais avec ton nouveau fer, ça devrait le faire :)

De mon coté, j'ai mis la partie software en pause vu que je me suis lancé aussi dans le projet de la cam86.

Dur de faire plusieurs trucs à la fois ou alors me faut supprimer les nuits ^^

 

(N'hésites pas à me contacter par MP car je suis passé carrément à coté du post )

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.