Jump to content

Banner.jpg.b83b14cd4142fe10848741bb2a14c66b.jpg

Gina

Beyond the Event Horizon
  • Posts

    45,326
  • Joined

  • Last visited

  • Days Won

    120

Posts posted by Gina

  1. Realised that since I am running a test simulation with the ESP32 powered from the USB, I can use the Serial Monitor to see results - easier that setting up a load of Node_RED stuff.

    1. Testing at 1pps which is about 4.5 mph ATM.  Mean Speed reads 4.0mph.
    2. Testing at 2pps = 9mph.  Mean Speed reads 9.0mph.
    3. Testing at 12mph which is 375ms period.  Mean Speed reads 11.0mph.
  2. OTOH if the fault is in the code, generating a simulated interrupt within the same ESP32 should have the desired effect but if the problem is internal timing issues it might not.  The interrupt handler should have no problem with interrupts at the sort of rate we have here.  All it does is increment the PulseCount.

    // Checks if Hall sensor was triggered - Interrupt Handler
    void IRAM_ATTR HallTriggered() {
    //  Serial.println("Hall Triggered");
      ++PulseCount; // Increment count
    }

    So if I produce code to increment the PulseCount at a variable rate it should do the same thing.  I think the easiest way would be to add another period to the list with the period set in millis.

    void loop() {
      if (!client.connected()) {reconnect();}
      client.loop();
    // time the various periods
      long now = millis();
      if(now - lastP > Ptest) {++PulseCount; lastP = now;}
      if(now - last3s > P3s) {do3sJobs(); last3s = now;}
      if(now - last1m > P1m) {do1mJobs(); last1m = now;}
      if(now - last3m > P3m) {do3mJobs(); last3m = now;}
    }

     

  3. I'm now looking into a way of simulating the anemometer in a test rig indoors.  Whilst I could do the testing all in one ESP32, I think it would be more realistic to use a separate source of pulses to feed the test ESP32.  One way is to use another ESP32 to generate the pulses either using a pot to vary the pulse rate or even set up as another client connected to the MQTT network where an input to the Node-RED Dashboard could set the frequency.  Using MQTT would mean I would have an exact control of the pulse rate.

  4. This is the latest Wind display still showing the problem, which isn't surprising as the wind is still a moderate breeze - I estimate around Force 3-4, possibly gusting 5 looking at the trees.  This is the large oak trees at the bottom of the next field and a lot higher than my wind instruments so I'm not surprised that the Gusts are less strong at me anemometer.  I would say the Gust speed reading is reasonable.

    723619425_Screenshotfrom2020-09-0313-29-59.png.aa9f9945690dfb073f5872eabb10b0a9.png

  5. 9 hours ago, pete_l said:

    In your do1mjobs routine you sum the contents of the meanArray irrespective of the number of entries in it. Then divide the total by a constant. That would explain why your mean value increments. I have no idea why it gets reset to zero - does the ESP32 get reset somehow?

    The meanArray should be fully loaded after the initial startup, with new entries simply overwriting the oldest entry.  It shouldn't be "reset to zero" (emptied) and nor should the new entries be zero.

    9 hours ago, pete_l said:

    As far as OTA uploads go, I would advise you to look into this. It saves a great deal of time and is well worth the effort. It also loads the code in faster :)

    Found this :- ESP8266 Over The Air (OTA) Programming In Arduino IDE 

    A couple of points. 

    1. I presume it's the same for the ESP32.
    2. I have a later Python on my machine.
    3. The tutorial shows the Windows version and I only have Linux (Mint)
  6. An interesting departure from topic 😁  Though not entirely unrelated.

    The problem has been there overnight and still bad.  I have been through the calculations and can't find any "overloaded" numeric types.  I plan to set up another ESP32 for testing as the running one is up inside the wind unit and would require everything taking down and bringing the"works" indoors to update or swap ESP32s.

     

    Screenshot from 2020-09-03 07-43-50.png

  7. // MQTT for wind sensors
    
    /*********
      Rui Santos
      Complete project details at https://randomnerdtutorials.com  
    ********
    Modified and added to by Gina 2020-08-21 onward
    ********
    */
    
    // periods or intervals in milliseconds
    const int P3s = 3000;      // integer
    const int P1m = 60000u;    // unsigned integer 
    const int P3m = 180000ul;  // unsigned long
    long last3s = 0;
    long last1m = 0;
    long last3m = 0;
    // 10m averaging etc.
    int meanArray[10] = {0,0,0,0,0,0,0,0,0,0};
    int gustArray[10] = {0,0,0,0,0,0,0,0,0,0};
    int ringIndex = 0;
    
    // Output variables
    int meanSpeed = 0; // 0-100mph
    int gustSpeed = 0; // 0-100mph
    
    // Set GPIO for Hall Sensor
    const int HallSensorPin = 4;
    int PulseCount = 0, windGust = 0;
    float windSpeed = 0;
    
    #include <WiFi.h>
    #include <PubSubClient.h>
    
    // Replace the next variables with your SSID/Password combination
    const char* ssid = "Ubiquity";
    const char* password = "********";
    
    const char* mqtt_server = "192.168.1.140";
    
    WiFiClient windClient;
    PubSubClient client(windClient);
    
    char msg[50];
    int value = 0;
    
    // Checks if Hall sensor was triggered - Interrupt Handler
    void IRAM_ATTR HallTriggered() {
    //  Serial.println("Hall Triggered");
      ++PulseCount; // Increment count
    }
    
    int Beaufort(int mph){
      if (mph < 1) return 0;
      else if (mph <= 3) return 1;
      else if (mph <= 7) return 2;
      else if (mph <= 12) return 3;
      else if (mph <= 18) return 4;
      else if (mph <= 24) return 5;
      else if (mph <= 31) return 6;
      else if (mph <= 38) return 7;
      else if (mph <= 46) return 8;
      else if (mph <= 54) return 9;
      else if (mph <= 63) return 10;
      else if (mph <= 72) return 11;
      else return 12;
    }
    
    void setup() {
      Serial.begin(115200);
      setup_wifi();
      client.setServer(mqtt_server, 1883);
      client.setCallback(callback);
      
      // Hall Sensor mode INPUT_PULLUP
      pinMode(HallSensorPin, INPUT_PULLUP);
      // Set HallSensor pin as interrupt, assign interrupt function and set FALLING mode
      attachInterrupt(digitalPinToInterrupt(HallSensorPin), HallTriggered, FALLING);
    }
    
    void setup_wifi() {
      delay(10);
      // We start by connecting to a WiFi network
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
    
      WiFi.begin(ssid, password);
    
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
    
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    void callback(char* topic, byte* message, unsigned int length) {
      Serial.print("Message arrived on topic: ");
      Serial.print(topic);
      Serial.print(". Message: ");
      String messageTemp;
      
      for (int i = 0; i < length; i++) {
        Serial.print((char)message[i]);
        messageTemp += (char)message[i];
      }
      Serial.println();
    }
    
    void reconnect() {
      // Loop until we're reconnected
      while (!client.connected()) {
        Serial.print("Attempting MQTT connection...");
        // Attempt to connect
        if (client.connect("windClient")) {
          Serial.println("connected");
          // Subscribe
        } else {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          // Wait 5 seconds before retrying
          delay(5000);
        }
      }
    }
    //
    void sendSpeedMessages(){
      // messages to send :-
      // wind/speed/mph -- meanSpeed
      // wind speed/force -- Beaufort(meanSpeed)
      // wind/gust/mph -- gustSpeed
      // wind/gust/force -- Beaufort(gustSpeed)
      // 
      // Convert the Mean Speed to a char array
      char msString[8];
      dtostrf(meanSpeed, 1, 1, msString);
      client.publish("wind/speed/mph", msString);
      
      // Convert the Mean-Speed-Force to a char array
      char bsString[8];
      dtostrf(Beaufort(meanSpeed), 1, 0, bsString);
      client.publish("wind/speed/force", bsString);
      
      // Convert the Gust-Speed to a char array
      char gsString[8];
      dtostrf(gustSpeed, 1, 0, gsString);
      client.publish("wind/gust/mph", gsString);
    
      // Convert the Gust-Speed-Force to a char array
      char bgString[8];
      dtostrf(Beaufort(gustSpeed), 1, 0, bgString);
      client.publish("wind/gust/force", bgString);
    }
    //  Debugging only
    void sendNumberMessage(int N){
      // Convert the number to a char array
      char numString[8];
      dtostrf(N, 1, 0, numString);
      Serial.print("Number: ");
      Serial.println(numString);
      client.publish("wind/number", numString);
    }
    void sendNumberMessage2(int N){
      // Convert the number to a char array
      char numString[8];
      dtostrf(N, 1, 0, numString);
      Serial.print("Number: ");
      Serial.println(numString);
      client.publish("wind/number2", numString);
    } 
    //
    void do3sJobs (){
      windSpeed += PulseCount;  //  Accumulate mean speed
      if (PulseCount > windGust) {windGust = PulseCount;};  // Get max speed for gust
      PulseCount = 0;
    }
    void do1mJobs(){
      // wind speed mean and gust ring arrays and report
      meanArray[ringIndex] = windSpeed; // put windSpeed into new array index
      gustArray[ringIndex] = windGust;  // put windGust into new array index
    //  windSpeed /=13;  // /20 and *1.5 -- leave this for later
      meanSpeed = 0; gustSpeed = 0; windSpeed = 0; windGust = 0;
      for (int i = 0; i < 10; i++) { meanSpeed += meanArray[i];  // sum the windSpeeds 
        if (gustArray[i] > gustSpeed){gustSpeed = gustArray[i];}; // find maximum gust speed
      }
      meanSpeed /=133;  // the first sum was over 20 values and then the second over 10 values
      gustSpeed *= 1.5;  // Speed count over 3s rather than 4.5s
      sendSpeedMessages();
    //  sendNumberMessage(ringIndex); debugging only
      ringIndex = (ringIndex+1)%10; // move ringIndex on to next location in the ring arrays
    }
    void do3mJobs(){
    }
    
    void loop() {
      if (!client.connected()) {reconnect();}
      client.loop();
    // time the various periods
      long now = millis();
      if(now - last3s > P3s) {do3sJobs(); last3s = now;}
      if(now - last1m > P1m) {do1mJobs(); last1m = now;}
      if(now - last3m > P3m) {do3mJobs(); last3m = now;}
    }

     

  8. It seems to have got worse.  I may try copying the wind speed code onto another ESP32 and feeding it with varying frequency pulses and see what happens as the pulse rate is increased.  I can add in code to send various numbers to the MQTT network to see what's happening.

    1182742818_Screenshotfrom2020-09-0222-24-49.png.31f836c53f1e84bf12b3bda4ea155200.png  1743428833_Screenshotfrom2020-09-0222-25-20.png.3ee2a166517aa0b973c96ccf944bde1e.png

  9. This small redesign only allows for the new dome mounting and not remote focussing or remote controlled cover.  The aim is to get the ASC working again ASAP.  I can work on a major change with remote focussing and dome cover in easy time without the pressure of wanting the ASC in use.

  10. Somewhere in that code must be an error but I've been through it many times and can't see it.  It is probably a case of three sevens are twenty two - you can go over calculations or code many times and the error remains invisible.  Many years ago when I was programming I would go through the code bit by bit and explain what it was doing to my friend.  Sometimes I would then find the problem myself or she would.  She knew practically nothing about coding but was an enormous help.

  11. I think the problem is probably in the sketch so I'm continuing here.  Since the problem seems it might be to do with the increased breeze today I'm wondering if I'm exceeding the capacity of a numeric type somewhere.  I thought I allowed plenty of headroom but maybe not.

    I'm seeing gusts up to 13mph with mean speed up to 10mph. 

    Let's go over the process in detail.  The anemometer produces one count per revolution and one pulse per second for 4.5mph ie. 3 pulses in the 3s Gust interval.  I thought I had designed the code to take speed up to 100mph.  At that hopefully highly unlikely speed we would get 67 pulses per sec.  (2/3 of 100.)  First integration period is 1m so 20 times the 3s period and 60x100x2/3 counts.  That's 4,000 counts.  Then we put that into the 10 integer ring array.  So far so good.  Definitely no overload.

    Next, the mean speed over 10m is calculated by summing the 10 ring array locations (before dividing to get the mean).  Now a mean wind speed of 100mph would produce a sum of 10x400 = 40,000.  Oops > 32,767 BUT we aren't getting 100mph winds and this would be alright for a speed up to 100x32767/40000 = 81.9 mph.

    I can't see a problem with the wind speeds I'm getting today.  Think I'll post the complete sketch and maybe someone can look through it and find my error.

    // MQTT for wind sensors
    
    /*********
      Rui Santos
      Complete project details at https://randomnerdtutorials.com  
    ********
    Modified and added to by Gina 2020-08-21 onward
    ********
    */
    
    // periods or intervals in milliseconds
    const int P3s = 3000;      // integer
    const int P1m = 60000u;    // unsigned integer 
    const int P3m = 180000ul;  // unsigned long
    long last3s = 0;
    long last1m = 0;
    long last3m = 0;
    
    // ADC pins
    const int An1 = 34;
    const int An2 = 35;
    const int An3 = 32;
    const int An4 = 33;
    // ADC readings
    int dir1 = 0;
    int dir2 = 0;
    int dir3 = 0;
    int dir4 = 0;
    
    // Gray to binary table
    int codeArray[16] = {0,1,3,2,7,6,4,5,15,14,12,13,8,9,11,10};
    int dirn = 0;
    
    // Direction count bins
    int bin[20] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    /* Direction compass Points - not used
    String CPt[16] = {"N", "NNE", "NE", "ENE", "E", "ESE", "SE",
       "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW",  "NNW"};
    */
    // 10m averaging etc.
    int meanArray[10] = {0,0,0,0,0,0,0,0,0,0};
    int gustArray[10] = {0,0,0,0,0,0,0,0,0,0};
    int ringIndex = 0;
    
    // Output variables
    int Direction = 0; // 0-359 degrees
    int meanSpeed = 0; // 0-100mph
    int gustSpeed = 0; // 0-100mph
    
    // Set GPIO for Hall Sensor
    const int HallSensorPin = 4;
    int PulseCount = 0, windGust = 0;
    float windSpeed = 0;
    
    #include <WiFi.h>
    #include <PubSubClient.h>
    
    // Replace the next variables with your SSID/Password combination
    const char* ssid = "Ubiquity";
    const char* password = "********";
    
    const char* mqtt_server = "192.168.1.140";
    
    WiFiClient windClient;
    PubSubClient client(windClient);
    
    char msg[50];
    int value = 0;
    
    // Checks if Hall sensor was triggered - Interrupt Handler
    void IRAM_ATTR HallTriggered() {
    //  Serial.println("Hall Triggered");
      ++PulseCount; // Increment count
    }
    
    int Beaufort(int mph){
      if (mph < 1) return 0;
      else if (mph <= 3) return 1;
      else if (mph <= 7) return 2;
      else if (mph <= 12) return 3;
      else if (mph <= 18) return 4;
      else if (mph <= 24) return 5;
      else if (mph <= 31) return 6;
      else if (mph <= 38) return 7;
      else if (mph <= 46) return 8;
      else if (mph <= 54) return 9;
      else if (mph <= 63) return 10;
      else if (mph <= 72) return 11;
      else return 12;
    }
    
    void setup() {
      Serial.begin(115200);
      setup_wifi();
      client.setServer(mqtt_server, 1883);
      client.setCallback(callback);
      
      // Hall Sensor mode INPUT_PULLUP
      pinMode(HallSensorPin, INPUT_PULLUP);
      // Set HallSensor pin as interrupt, assign interrupt function and set FALLING mode
      attachInterrupt(digitalPinToInterrupt(HallSensorPin), HallTriggered, FALLING);
    }
    
    void setup_wifi() {
      delay(10);
      // We start by connecting to a WiFi network
      Serial.println();
      Serial.print("Connecting to ");
      Serial.println(ssid);
    
      WiFi.begin(ssid, password);
    
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
    
      Serial.println("");
      Serial.println("WiFi connected");
      Serial.println("IP address: ");
      Serial.println(WiFi.localIP());
    }
    
    void callback(char* topic, byte* message, unsigned int length) {
      Serial.print("Message arrived on topic: ");
      Serial.print(topic);
      Serial.print(". Message: ");
      String messageTemp;
      
      for (int i = 0; i < length; i++) {
        Serial.print((char)message[i]);
        messageTemp += (char)message[i];
      }
      Serial.println();
    }
    
    void reconnect() {
      // Loop until we're reconnected
      while (!client.connected()) {
        Serial.print("Attempting MQTT connection...");
        // Attempt to connect
        if (client.connect("windClient")) {
          Serial.println("connected");
          // Subscribe
        } else {
          Serial.print("failed, rc=");
          Serial.print(client.state());
          Serial.println(" try again in 5 seconds");
          // Wait 5 seconds before retrying
          delay(5000);
        }
      }
    }
    
    //Get instantaneous wind direction - variable dirn
    int readDirection(){    
        // Read wind vane optical sensor values
        dir1 = analogRead(An1);
        dir2 = analogRead(An2);
        dir3 = analogRead(An3);
        dir4 = analogRead(An4);
        // Convert Gray bits to integer
        int Gray = 0;
        if (dir1 > 2000) {Gray = 8;};
        if (dir2 > 2000) {Gray += 4;};
        if (dir3 > 2000) {Gray += 2;};
        if (dir4 > 2000) {Gray += 1;};
        //  Convert Gray to binary
        dirn = 15 - codeArray[Gray]; // correct rotation direction
        dirn = (dirn - 1) %16; // correct encoder for North
        return dirn;
    }
    //
    void sendSpeedMessages(){
      // messages to send :-
      // wind/speed/mph -- meanSpeed
      // wind speed/force -- Beaufort(meanSpeed)
      // wind/gust/mph -- gustSpeed
      // wind/gust/force -- Beaufort(gustSpeed)
      // 
      // Convert the Mean Speed to a char array
      char msString[8];
      dtostrf(meanSpeed, 1, 1, msString);
    //  Serial.print("Mean Speed: ");
    //  Serial.println(msString);
      client.publish("wind/speed/mph", msString);
      
      // Convert the Mean-Speed-Force to a char array
      char bsString[8];
      dtostrf(Beaufort(meanSpeed), 1, 0, bsString);
    //  Serial.print("Force: ");
    //  Serial.println(bsString);
      client.publish("wind/speed/force", bsString);
      
      // Convert the Gust-Speed to a char array
      char gsString[8];
      dtostrf(gustSpeed, 1, 0, gsString);
    //  Serial.print("Gust: ");
    //  Serial.println(gsString);
      client.publish("wind/gust/mph", gsString);
    
      // Convert the Gust-Speed-Force to a char array
      char bgString[8];
      dtostrf(Beaufort(gustSpeed), 1, 0, bgString);
    //  Serial.print("Gust Force: ");
    //  Serial.println(bgString);
      client.publish("wind/gust/force", bgString);
    }
    void sendDirectionMessage(int Dir){
      // Convert the Direction to a char array
      char dirString[8];
      dtostrf(Dir, 1, 0, dirString);
    //  Serial.print("Direction: ");
    //  Serial.println(dirString);
      client.publish("wind/direction", dirString);
    }
    void sendDirectionMessageInst(int Dir){
      // Convert the Direction to a char array
      char dirString[8];
      dtostrf(Dir, 1, 0, dirString);
    //  Serial.print("Direction: ");
    //  Serial.println(dirString);
      client.publish("wind/direction/inst", dirString);
    }
    /*  Debugging only
    void sendNumberMessage(int N){
      // Convert the number to a char array
      char numString[8];
      dtostrf(N, 1, 0, numString);
      Serial.print("Number: ");
      Serial.println(numString);
      client.publish("wind/number", numString);
    }
    void sendNumberMessage2(int N){
      // Convert the number to a char array
      char numString[8];
      dtostrf(N, 1, 0, numString);
      Serial.print("Number: ");
      Serial.println(numString);
      client.publish("wind/number2", numString);
    } 
    */
    void do3sJobs (){
      byte instDir = readDirection();
      sendDirectionMessageInst(instDir); // send instantaneous direction
      windSpeed += PulseCount;  //  Accumulate mean speed
      if (PulseCount > windGust) {windGust = PulseCount;};  // Get max speed for gust
      PulseCount = 0;
      ++bin[instDir]; // increment appropriate bin
    }
    void do1mJobs(){
      // wind speed mean and gust ring arrays and report
      meanArray[ringIndex] = windSpeed; // put windSpeed into new array index
      gustArray[ringIndex] = windGust;  // put windGust into new array index
    //  windSpeed /=13;  // /20 and *1.5 -- leave this for later
      meanSpeed = 0; gustSpeed = 0; windSpeed = 0; windGust = 0;
      for (int i = 0; i < 10; i++) { meanSpeed += meanArray[i];  // sum the windSpeeds 
        if (gustArray[i] > gustSpeed){gustSpeed = gustArray[i];}; // find maximum gust speed
      }
      meanSpeed /=133;  // the first sum was over 20 values and then the second over 10 values
      gustSpeed *= 1.5;  // Speed count over 3s rather than 4.5s
      sendSpeedMessages();
    //  sendNumberMessage(ringIndex); debugging only
      ringIndex = (ringIndex+1)%10; // move ringIndex on to next location in the ring arrays
    }
    void do3mJobs(){
      // wind direction calculations and report
      int sum[16];
      int S=0,I=0,W=0;
      bin[16] = bin[0];
      bin[17] = bin[1];
      bin[18] = bin[2];
      bin[19] = bin[3];
      for (int i = 0; i < 16; i++) {
        sum[i] = bin[i] + bin[i+1] + bin[i+2] + bin[i+3] + bin[i+4];
        // find the index with the highest sum and save sum and index
        if (sum[i] > S){S = sum[i]; I = i;}; 
    //    sendNumberMessage2(I);  //  send index for debugging
      }
      W = (bin[I+1] + 2 * bin[I+2] + 3 * bin[I+3] + 4 * bin[I+4]) * 45 / S;
      sendDirectionMessage((I * 45 + W)%720 /2);
      //Empty the bins ready for a new direction calculation
      for (int i = 0; i < 16; i++) {bin[i] = 0;};
    }
    
    void loop() {
      if (!client.connected()) {reconnect();}
      client.loop();
    // time the various periods
      long now = millis();
      if(now - last3s > P3s) {do3sJobs(); last3s = now;}
      if(now - last1m > P1m) {do1mJobs(); last1m = now;}
      if(now - last3m > P3m) {do3mJobs(); last3m = now;}
    }

     

  12. I'm copying a post here as I don't know the best place for it.

    1 minute ago, Gina said:

    I'm getting a strange problem with the wind speed.  Whether this is anything to do with MQTT or just the sketch in the wind ESP32 I don't know.  Until today the speed calculations have been fine but now the mean speed keeps resetting then building up again to the correct value.  These are enlargements of the mean speed history in the dashboard and the MQTT Explorer.   I'm wondering if the stronger breeze today could be anything to do with it. 

    Unfortunately, to upload a new sketch to the ESP32 in the wind client means taking the wind sensor mast and unit down and connecting the ESP32 to the Mint box USB.  I seem to remember reading something about uploading a new Arduino sketch over WiFi but can't find it now.

    1793347282_Screenshotfrom2020-09-0218-58-34.png.914361683966b2b9ce5245748f918fec.png  377560496_Screenshotfrom2020-09-0218-59-26.png.030fb1b9913a6c30b97b9da267f09107.png

  13. I'm getting a strange problem with the wind speed.  Whether this is anything to do with MQTT or just the sketch in the wind ESP32 I don't know.  Until today the speed calculations have been fine but now the mean speed keeps resetting then building up again to the correct value.  These are enlargements of the mean speed history in the dashboard and the MQTT Explorer.   I'm wondering if the stronger breeze today could be anything to do with it. 

    Unfortunately, to upload a new sketch to the ESP32 in the wind client means taking the wind sensor mast and unit down and connecting the ESP32 to the Mint box USB.  I seem to remember reading something about uploading a new Arduino sketch over WiFi but can't find it now.

    1793347282_Screenshotfrom2020-09-0218-58-34.png.914361683966b2b9ce5245748f918fec.png  377560496_Screenshotfrom2020-09-0218-59-26.png.030fb1b9913a6c30b97b9da267f09107.png

  14. Two possibilities for the screws that hold the ring to clamp the dome.  Tapped holes in a solid lump of PLA or a flange with nuts and bolts.  I think one problem with the old arrangement is that the wind could blow rain up the cone and under the dome.  This flange would stop that.  Also, since there is a possibility of needing to remove the dome more than once in the future, metal nuts are more suitable than threaded plastic!

    310671412_Screenshotfrom2020-09-0215-38-40.png.019a38042d3d314ca49f40b2dfa1086c.png

  15. The most important change will be in the dome sealing.  This will be a 3D printed ring which will sit on the small flange on the dome and clamp it to the body of the ASC with a rubber sealing ring.  This means a change to the part the dome sits down onto.

    This is the current arrangement of the sealed part of the ASC.  The dome is outlined in red to make it show better.  The conical shaped section will need to have a wide, flat top to take the clamping ring.  I shall split the clear blue part into two to make in printable without support material.

    278935444_Screenshotfrom2020-09-0213-14-33a.png.9432395fdd58007d0d9d3dfdce9b1b1e.png

  16. Actually, I've been very lucky with lack of droppings on the dome.  Not had a bird dropping so far and I guess fly droppings have been washed off by the rain or are so small and out of focus that they don't show.  I didn't notice anything when I washed the dome.

    • Like 1
  17. Looks like here we go again!!  With a new design of ASC casing.  Must say, I'm not really happy with the idea of setting the focus manually and relying on it not changing over many months of use.  I don't want to have to keep taking it down and removing the dome to reset the focus so remote focussing seems to be on the agenda again!!  Groan!  The main imaging lenses needed a 6" quadrant gear (lever) with a stepper motor with small pinion engaging it.  I would rather not have to enclose a 6" lever within the ASC casing!  The problem is getting reduction gearing without too much backlash.   I shall have to get thinking...

    Another thought is an external cover for the dome to use when not using the camera.  Although it's quite capable of daytime imaging and can produce some rather nice pictures of the clouds scudding across the sky, I don't want much of this and mostly the ASC is not used in daytime.  Nor is it used when it's raining.  A cover would keep the sun off in the daytime and insect and bird droppings at any time.  It should lengthen the life of the dome and reduce cleaning.

    ATM the electronics is in the observatory rather than within the ASC casing but if I add remote focussing and remote dome cover control that's a lot more wires between electronics and ASC and it would make sense to have the electronics in the ASC casing.

  18. I'm looking again at the clamping and sealing of the dome.  I would like a dome with a wide flange with holes for screwing the dome down but these are still still out of stock (as they were before).

    These are the two domes - I have the one with the narrow flange.  I have tried many makes of dome in the past but these are the only ones that are distortion free that I have found.  I could print a ring with fixing holes that would emulate a flange for clamping down the dome.  It should be possible to get a seal using some EPDM sheet left over from my obsy roof.

    1392067228_Screenshotfrom2020-09-0122-20-52.png.639ff2de173dbf0e9c2b86cce4d61624.png1149667596_Screenshotfrom2020-09-0122-20-12.png.25e0427afaa091d2ceaafd5188cf8109.png

×
×
  • 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. By using this site, you agree to our Terms of Use.