Jump to content

Gina

Beyond the Event Horizon
  • Posts

    45,326
  • Joined

  • Last visited

  • Days Won

    120

Everything posted by Gina

  1. Pretty heavy then... I used 11mm OSB on my warm room roof.
  2. I think I see why you want 6 wheels! ? I used 6mm marine ply on my roof and fewer ribs.
  3. Much better today up in The Blackdown Hills - nice drop of rain and a lot cooler - quite pleasant ? Nice cafe at Dunkeswell airfield ?? And great service last time I was there.
  4. ZWO ASI185MC as I think you'll find in the Blog description. This is meant to be the first and last ultimate camera! ? I can't see any modification other than an expensive upgrade to the astro camera such as the ASI385MC-Cool which costs the best part of 700 quid!! Maybe a future possibility but I have better things to spend my money on. I'd have to arrange an air intake Hahaduct from inside the observatory - I wouldn't want to use a 700 squid camera out in the weather and wet.
  5. The dew heater consists of resistors arranged around the lens and attached to the bottom part of the cover. I don't have a photo of this. The wires for the dew heater and Peltier TEC are taken out through a hole in the bottom together with the USB cable which connects to the camera. These were fed in through a ventilation gap up under the barge boards and into the inside of the roof. Here they connect to the control box with a 4 pin connector. The control box is screwed to the inside of the roof. Inside the control box, at the top is a buck converter to drop 13.8v down to 5.1v for the Raspberry Pi. Plugged onto the GPIO pins of the RPi is a HAT (Hardware Attached on Top) which carries components to control focussing, camera cooler and dew heater - more of which later. The left hand twin cable is the main power input from the observatory main supply.
  6. More details of the internal parts. This shows a basic cross-sectional diagram of the camera, Peltier TEC and cooler. The TEC cold side is on top to cool the camera body, which is internally thermally connected to the back of the image sensor providing the most efficient cooling. The hot side is in contact with the "working" surface of the passive cooler. Both sides were coated with thermally conducting grease before assembly. The next two screenshots are from the design in SketchUp of the camera casing and bottom plate - both printed in ABS. The camera casing was designed to closely fit the body of the camera, with a slot for the USB connection. The bottom plate fits round the Peltier TEC with slots for the connecting wires. This has two functions, provide the best possible thermal insulation between the warm cooler and cold camera body, and to attach the camera to the cooler. The bottom plate was glued to the camera casing after the camera was placed in its casing. The photo below shows the camera casing with attached bottom plate and spring loaded screws to hold the assembly of camera, TEC and cooler in good contact without crushing the TEC. The passive cooler was lifted above the table to allow air circulation over the fins. I was testing the cooling for long exposures at night - hence the camera cap.
  7. Now for the inside. Well, some of it. This is mainly the focussing mechanism - gears and stepper motor, and the camera casing can also be seen. This casing not only holds the camera but also provides thermal insulation to stop it getting heat from its surroundings. It was printed in ABS with a criss-cross infill to provide air for better thermal insulation.
  8. Now for some more detail. These photos show the ASC before it was mounted on the observatory roof. The casing was 3D printed in ASA filament which is unaffected by UV so fine for outdoor use in all conditions. The dome is optical quality acrylic which is also supposed to alright outdoors though previous domes have shown yellowing after a year or so - we shall see. The fish-eye lens can be seen inside the dome. Below the main casing is a large fan-less cooler designed to cool by convection only. This takes the heat away from the Peltier TEC hot side. Behind the cooler and screwed to it is an aluminium plate which is used to mount the ASC on the wooden roof. (The holes in the corners and a few other smaller holes, result from its use in a previous project.) The different case colours result from using white ASA for the bottom part and natural ASA for the top. It was a matter of what I had available.
  9. These photos shows the ASC mounted on my observatory roof giving a good all-round view.
  10. I'm hoping this is my final and hence "Ultimate" generation of all sky cameras. Based on the ASI185MC CMOS astro camera and Fujinon fish-eye lens of 1.4mm focal length and f1.8. Image capture is provided by a Raspberry Pi 3 in conjunction with INDI drivers. This is used with KStars/Ekos client software running on a Linux Mint desktop indoors. Communication is via Wi-Fi. The astro camera is an uncooled version but I have added a Peltier TEC cooler. This cools the camera down to something like -15°C for night sky imaging with longer exposures of around a minute. Daytime imaging is also covered using the camera's minimum exposure and gain. The colour camera differentiates between dark clouds and blue sky and also shows the colours of stars at night. This Blog will describe the construction of the hardware and the special driver coding used to control dew heater, camera cooling and focussing.
  11. Gina

    All Sky Camera Mark 7

    I'll be starting the new Blog soon. Maybe today maybe tomorrow. May have a day of rest today. Though posting project info is not too demanding compared with debugging code! Thinking of what to call it "Gina's Ultimate All Sky Camera with WiFi and DIY Camera Cooling" perhaps. I was also thinking of longer titles but I would like to keep it short and to the point. Maybe "Gina's Ultimate All Sky Camera" would be sufficient though I feel the DIY camera cooling is worth mentioning as something different. Maybe also "night and day". Thinking...
  12. I think the reason for irregular indents above is that some are spaces and some tab. The tabs are 4 spaces in the editor and 8 spaces here.
  13. I have edited the Astroberry Board source files successfully to provide just what I want for my All Sky Camera. Providing dew heater control and also Peltier TEC DIY camera cooling at two levels of cooling. I also incorporated a simplified method of focussing employing four buttons viz. Coarse IN Fine IN Fine OUT Coarse OUT. The All sky Camera is now working to my satisfaction and is considered finished. The only thing that might want changing could be the amount of dew heating for cold winter nights but time will tell. Here is the rpi_brd.h code :- /******************************************************************************* Copyright(c) 2014 Radek Kaczorek <rkaczorek AT gmail DOT com> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. . This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. . You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *******************************************************************************/ /******************************************************************************* Edited by Gina for All Sky Camera - 2018-07-01 *******************************************************************************/ #ifndef RPIBRD_H #define RPIBRD_H #include <string> #include <iostream> #include <stdio.h> #include <defaultdevice.h> class IndiRpibrd : public INDI::DefaultDevice { protected: private: int counter; IText SysTimeT[2]; ITextVectorProperty SysTimeTP; IText SysInfoT[3]; ITextVectorProperty SysInfoTP; ISwitch Switch1S[2]; ISwitchVectorProperty Switch1SP; ISwitch Switch2S[2]; ISwitchVectorProperty Switch2SP; ISwitch FocusS[4]; ISwitchVectorProperty FocusSP; enum { FINC, FINF, FOUTF, FOUTC }; public: IndiRpibrd(); virtual ~IndiRpibrd(); virtual const char *getDefaultName(); virtual void TimerHit(); virtual bool Connect(); virtual bool Disconnect(); virtual bool initProperties(); virtual bool updateProperties(); virtual void ISGetProperties(const char *dev); virtual bool ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n); virtual bool ISNewSwitch (const char *dev, const char *name, ISState *states, char *names[], int n); virtual bool ISNewText (const char *dev, const char *name, char *texts[], char *names[], int n); virtual bool ISNewBLOB (const char *dev, const char *name, int sizes[], int blobsizes[], char *blobs[], char *formats[], char *names[], int n); virtual bool ISSnoopDevice(XMLEle *root); virtual bool saveConfigItems(FILE *fp); virtual bool LoadLines(); }; #endif And the rpi_brd.cpp code :- /******************************************************************************* Copyright(c) 2015 Radek Kaczorek <rkaczorek AT gmail DOT com> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. . This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. . You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *******************************************************************************/ /******************************************************************************* Edited by Gina for All Sky Camera - 2018-07-03 *******************************************************************************/ #include <stdio.h> #include <memory> #include <bcm2835.h> #include <string.h> #include "rpi_brd.h" // We declare an auto pointer to IndiRpibrd std::unique_ptr<IndiRpibrd> indiRpibrd(new IndiRpibrd()); // indicate GPIOs used - use P1_* pin numbers not gpio numbers (!!!) #define IN1 RPI_BPLUS_GPIO_J8_31 // GPIO06 #define IN2 RPI_BPLUS_GPIO_J8_33 // GPIO13 #define DIR RPI_BPLUS_GPIO_J8_07 // GPIO4 #define STEP RPI_BPLUS_GPIO_J8_11 // GPIO17 #define SLEEP RPI_BPLUS_GPIO_J8_12 // GPIO18 #define STEP_DELAY 4 // miliseconds #define LIGHT_DELAY 1000 // miliseconds - 1s int FineTicks = 20; // default 20 int CoarseTicks = 100; // default 100 void ISPoll(void *p); void ISInit() { static int isInit =0; if (isInit == 1) return; isInit = 1; if(indiRpibrd.get() == 0) indiRpibrd.reset(new IndiRpibrd()); } void ISGetProperties(const char *dev) { ISInit(); indiRpibrd->ISGetProperties(dev); } void ISNewSwitch(const char *dev, const char *name, ISState *states, char *names[], int num) { ISInit(); indiRpibrd->ISNewSwitch(dev, name, states, names, num); } void ISNewText( const char *dev, const char *name, char *texts[], char *names[], int num) { ISInit(); indiRpibrd->ISNewText(dev, name, texts, names, num); } void ISNewNumber(const char *dev, const char *name, double values[], char *names[], int num) { ISInit(); indiRpibrd->ISNewNumber(dev, name, values, names, num); } void ISNewBLOB (const char *dev, const char *name, int sizes[], int blobsizes[], char *blobs[], char *formats[], char *names[], int num) { INDI_UNUSED(dev); INDI_UNUSED(name); INDI_UNUSED(sizes); INDI_UNUSED(blobsizes); INDI_UNUSED(blobs); INDI_UNUSED(formats); INDI_UNUSED(names); INDI_UNUSED(num); } void ISSnoopDevice (XMLEle *root) { ISInit(); indiRpibrd->ISSnoopDevice(root); } IndiRpibrd::IndiRpibrd() { setVersion(2,1); if (!bcm2835_init()) { IDLog("Problem initiating Astroberry Board."); return; } // init GPIOs std::ofstream exportgpio; exportgpio.open("/sys/class/gpio/export"); exportgpio << IN1 << std::endl; exportgpio << IN2 << std::endl; exportgpio << DIR << std::endl; exportgpio << STEP << std::endl; exportgpio << SLEEP << std::endl; exportgpio.close(); // Set gpios to output mode bcm2835_gpio_fsel(IN1, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(IN2, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(DIR, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(STEP, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel(SLEEP, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_write(IN1, LOW); bcm2835_gpio_write(IN2, HIGH); bcm2835_gpio_write(DIR, HIGH); bcm2835_gpio_write(STEP, HIGH); bcm2835_gpio_write(SLEEP, HIGH); } IndiRpibrd::~IndiRpibrd() { } bool IndiRpibrd::Connect() { SetTimer(1000); /* if ( !IndiRpibrd::LoadLines() ) { IDMessage(getDeviceName(), "Astroberry Board connection error."); return false; } */ IDMessage(getDeviceName(), "Astroberry Board connected successfully."); return true; } bool IndiRpibrd::Disconnect() { /* // close GPIOs std::ofstream unexportgpio; unexportgpio.open("/sys/class/gpio/unexport"); unexportgpio << IN1 << std::endl; unexportgpio << IN2 << std::endl; unexportgpio << IN3 << std::endl; unexportgpio << DIR << std::endl; unexportgpio << STEP << std::endl; unexportgpio << SLEEP << std::endl; unexportgpio.close(); bcm2835_close(); */ IDMessage(getDeviceName(), "Astroberry Board disconnected successfully."); return true; } void IndiRpibrd::TimerHit() { if(isConnected()) { // update gps time struct tm *local_timeinfo; static char ts[32]; time_t rawtime; time(&rawtime); local_timeinfo = localtime (&rawtime); strftime(ts, 20, "%Y-%m-%dT%H:%M:%S", local_timeinfo); IUSaveText(&SysTimeT[0], ts); snprintf(ts, sizeof(ts), "%4.2f", (local_timeinfo->tm_gmtoff/3600.0)); IUSaveText(&SysTimeT[1], ts); SysTimeTP.s = IPS_OK; IDSetText(&SysTimeTP, NULL); if ( counter == 0 ) { SysInfoTP.s = IPS_BUSY; IDSetText(&SysInfoTP, NULL); FILE* pipe; char buffer[128]; //update Hardware pipe = popen("cat /proc/cpuinfo|grep Hardware|awk -F: '{print $2}'", "r"); fgets(buffer, 128, pipe); pclose(pipe); IUSaveText(&SysInfoT[0], buffer); //update uptime pipe = popen("uptime|awk -F, '{print $1}'|awk -Fup '{print $2}'", "r"); fgets(buffer, 128, pipe); pclose(pipe); IUSaveText(&SysInfoT[1], buffer); SysInfoTP.s = IPS_OK; IDSetText(&SysInfoTP, NULL); counter = 10; } counter--; SetTimer(1000); } } const char * IndiRpibrd::getDefaultName() { return (char *)"Astroberry Board"; } bool IndiRpibrd::initProperties() { // We init parent properties first INDI::DefaultDevice::initProperties(); IUFillText(&SysTimeT[0],"LOCAL_TIME","Local Time",NULL); IUFillText(&SysTimeT[1],"UTC_OFFSET","UTC Offset",NULL); IUFillTextVector(&SysTimeTP,SysTimeT,2,getDeviceName(),"SYSTEM_TIME","System Time",MAIN_CONTROL_TAB,IP_RO,60,IPS_IDLE); IUFillText(&SysInfoT[0],"HARDWARE","Hardware",NULL); IUFillText(&SysInfoT[1],"UPTIME","Uptime (hh:mm)",NULL); IUFillTextVector(&SysInfoTP,SysInfoT,2 ,getDeviceName(),"SYSTEM_INFO","System Info",MAIN_CONTROL_TAB,IP_RO,60,IPS_IDLE); IUFillSwitch(&Switch1S[0], "SW1ON", "LOW", ISS_ON); IUFillSwitch(&Switch1S[1], "SW1OFF", "HIGH", ISS_OFF); IUFillSwitchVector(&Switch1SP, Switch1S, 2, getDeviceName(), "SWITCH_1", "Camera Cooler", MAIN_CONTROL_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); IUFillSwitch(&Switch2S[1], "SW2ON", "ON", ISS_OFF); IUFillSwitch(&Switch2S[0], "SW2OFF", "OFF", ISS_ON); IUFillSwitchVector(&Switch2SP, Switch2S, 2, getDeviceName(), "SWITCH_2", "Dew Heater", MAIN_CONTROL_TAB, IP_RW, ISR_1OFMANY, 0, IPS_IDLE); IUFillSwitch(&FocusS[0], "FINC", "IN Coarse", ISS_OFF); IUFillSwitch(&FocusS[1], "FINF", "IN Fine", ISS_OFF); IUFillSwitch(&FocusS[2], "FOUTF", "OUT Fine", ISS_OFF); IUFillSwitch(&FocusS[3], "FOUTC", "OUT Coarse", ISS_OFF); IUFillSwitchVector(&FocusSP, FocusS, 4, getDeviceName(), "FOCUS", "Focussing", FOCUS_TAB, IP_RW, ISR_ATMOST1, 0, IPS_IDLE ); return true; } bool IndiRpibrd::updateProperties() { // Call parent update properties first INDI::DefaultDevice::updateProperties(); if (isConnected()) { defineText(&SysTimeTP); defineText(&SysInfoTP); defineSwitch(&Switch1SP); defineSwitch(&Switch2SP); defineSwitch(&FocusSP); } else { // We're disconnected deleteProperty(SysTimeTP.name); deleteProperty(SysInfoTP.name); deleteProperty(Switch1SP.name); deleteProperty(Switch2SP.name); deleteProperty(FocusSP.name); } return true; } void IndiRpibrd::ISGetProperties(const char *dev) { INDI::DefaultDevice::ISGetProperties(dev); /* Add debug controls so we may debug driver if necessary */ //addDebugControl(); } bool IndiRpibrd::ISNewNumber (const char *dev, const char *name, double values[], char *names[], int n) { return INDI::DefaultDevice::ISNewNumber(dev,name,values,names,n); } bool IndiRpibrd::ISNewSwitch (const char *dev, const char *name, ISState *states, char *names[], int n) { // first we check if it's for our device if (!strcmp(dev, getDeviceName())) { // handle switch 1 if (!strcmp(name, Switch1SP.name)) { IUUpdateSwitch(&Switch1SP, states, names, n); if ( Switch1S[0].s == ISS_ON ) { bcm2835_gpio_write(IN1, LOW); IDMessage(getDeviceName(), "Camera Cooling LOW"); Switch1SP.s = IPS_IDLE; Switch1S[1].s = ISS_OFF; IDSetSwitch(&Switch1SP, NULL); return true; } if ( Switch1S[1].s == ISS_ON ) { bcm2835_gpio_write(IN1, HIGH); IDMessage(getDeviceName(), "Camera Cooling HIGH"); Switch1SP.s = IPS_OK; Switch1S[0].s = ISS_OFF; IDSetSwitch(&Switch1SP, NULL); return true; } } // handle switch 2 if (!strcmp(name, Switch2SP.name)) { IUUpdateSwitch(&Switch2SP, states, names, n); if ( Switch2S[0].s == ISS_ON ) { bcm2835_gpio_write(IN2, HIGH); IDMessage(getDeviceName(), "Dew Heater OFF"); Switch2SP.s = IPS_IDLE; Switch2S[1].s = ISS_OFF; IDSetSwitch(&Switch2SP, NULL); return true; } if ( Switch2S[1].s == ISS_ON ) { bcm2835_gpio_write(IN2, LOW); IDMessage(getDeviceName(), "Dew Heater ON"); Switch2SP.s = IPS_OK; Switch2S[0].s = ISS_OFF; IDSetSwitch(&Switch2SP, NULL); return true; } } // ******************************************************************************************************************** // handle focus if (!strcmp(name, FocusSP.name)) { IUUpdateSwitch(&FocusSP, states, names, n); if ( FocusS[0].s == ISS_ON ) { FocusSP.s = IPS_BUSY; // Yellow Light // *************** Call Motor Code Here ************ bcm2835_gpio_write(SLEEP, HIGH); // wake up // INWARD bcm2835_gpio_write(DIR, HIGH); // process targetTicks int ticks = CoarseTicks; for ( int i = 0; i < ticks; i++ ) { // step on bcm2835_gpio_write(STEP, HIGH); // wait bcm2835_delay(STEP_DELAY/2); // step off bcm2835_gpio_write(STEP, LOW); // wait bcm2835_delay(STEP_DELAY/2); } // motor sleep bcm2835_gpio_write(SLEEP, LOW); IDMessage(getDeviceName(), "Focus IN Coarse"); FocusSP.s = IPS_OK; // Green Light // bcm2835_delay(LIGHT_DELAY); // Enough time to see Green light // FocusSP.s = IPS_IDLE; // Light off FocusS[0].s = ISS_OFF; // Clear Button IDSetSwitch(&FocusSP, NULL); return true; } if ( FocusS[1].s == ISS_ON ) { FocusSP.s = IPS_BUSY; // Yellow Light // *************** Call Motor Code Here ************ bcm2835_gpio_write(SLEEP, HIGH); // wake up // INWARD bcm2835_gpio_write(DIR, HIGH); // process targetTicks int ticks = FineTicks; for ( int i = 0; i < ticks; i++ ) { // step on bcm2835_gpio_write(STEP, HIGH); // wait bcm2835_delay(STEP_DELAY/2); // step off bcm2835_gpio_write(STEP, LOW); // wait bcm2835_delay(STEP_DELAY/2); } // motor sleep bcm2835_gpio_write(SLEEP, LOW); IDMessage(getDeviceName(), "Focus IN Fine"); FocusSP.s = IPS_OK; // Green Light // bcm2835_delay(LIGHT_DELAY); // Enough time to see Green light // FocusSP.s = IPS_IDLE; // Light off FocusS[1].s = ISS_OFF; // Clear Button IDSetSwitch(&FocusSP, NULL); return true; } if ( FocusS[2].s == ISS_ON ) { FocusSP.s = IPS_BUSY; // Yellow Light // *************** Call Motor Code Here ************ bcm2835_gpio_write(SLEEP, HIGH); // wake up // OUTWARD bcm2835_gpio_write(DIR, LOW); // process targetTicks int ticks = FineTicks; for ( int i = 0; i < ticks; i++ ) { // step on bcm2835_gpio_write(STEP, HIGH); // wait bcm2835_delay(STEP_DELAY/2); // step off bcm2835_gpio_write(STEP, LOW); // wait bcm2835_delay(STEP_DELAY/2); } // motor sleep bcm2835_gpio_write(SLEEP, LOW); IDMessage(getDeviceName(), "Focus OUT Fine"); FocusSP.s = IPS_OK; // Green Light // bcm2835_delay(LIGHT_DELAY); // Enough time to see Green light // FocusSP.s = IPS_IDLE; // Light off FocusS[2].s = ISS_OFF; // Clear Button IDSetSwitch(&FocusSP, NULL); return true; } if ( FocusS[3].s == ISS_ON ) { FocusSP.s = IPS_BUSY; // Yellow Light // *************** Call Motor Code Here ************ bcm2835_gpio_write(SLEEP, HIGH); // wake up // OUTWARD bcm2835_gpio_write(DIR, LOW); // process targetTicks int ticks = CoarseTicks; for ( int i = 0; i < ticks; i++ ) { // step on bcm2835_gpio_write(STEP, HIGH); // wait bcm2835_delay(STEP_DELAY/2); // step off bcm2835_gpio_write(STEP, LOW); // wait bcm2835_delay(STEP_DELAY/2); } // motor sleep bcm2835_gpio_write(SLEEP, LOW); IDMessage(getDeviceName(), "Focus OUT Coarse"); FocusSP.s = IPS_OK; // Green Light // bcm2835_delay(LIGHT_DELAY); // Enough time to see Green light // FocusSP.s = IPS_IDLE; // Light off FocusS[3].s = ISS_OFF; // Clear Button IDSetSwitch(&FocusSP, NULL); return true; } } } return INDI::DefaultDevice::ISNewSwitch (dev, name, states, names, n); } bool IndiRpibrd::ISNewText (const char *dev, const char *name, char *texts[], char *names[], int n) { return INDI::DefaultDevice::ISNewText (dev, name, texts, names, n); } bool IndiRpibrd::ISNewBLOB (const char *dev, const char *name, int sizes[], int blobsizes[], char *blobs[], char *formats[], char *names[], int n) { return INDI::DefaultDevice::ISNewBLOB (dev, name, sizes, blobsizes, blobs, formats, names, n); } bool IndiRpibrd::ISSnoopDevice(XMLEle *root) { return INDI::DefaultDevice::ISSnoopDevice(root); } bool IndiRpibrd::saveConfigItems(FILE *fp) { IUSaveConfigSwitch(fp, &Switch1SP); IUSaveConfigSwitch(fp, &Switch2SP); //controller->saveConfigItems(fp); return true; } bool IndiRpibrd::LoadLines() { // load line 1 state if ( bcm2835_gpio_lev(IN1) == LOW ) { Switch1S[0].s = ISS_ON; Switch1S[1].s = ISS_OFF; Switch1SP.s = IPS_IDLE; IDSetSwitch(&Switch1SP, NULL); } else { Switch1S[0].s = ISS_OFF; Switch1S[1].s = ISS_ON; Switch1SP.s = IPS_OK; IDSetSwitch(&Switch1SP, NULL); } // load line 2 state if ( bcm2835_gpio_lev(IN2) == LOW ) { Switch2S[0].s = ISS_ON; Switch2S[1].s = ISS_OFF; Switch2SP.s = IPS_OK; IDSetSwitch(&Switch2SP, NULL); } else { Switch2S[0].s = ISS_OFF; Switch2S[1].s = ISS_ON; Switch2SP.s = IPS_IDLE; IDSetSwitch(&Switch2SP, NULL); } return true; }
  14. Gina

    All Sky Camera Mark 7

    I think that's pretty much it. May want more dew heating in the winter but for now it's FINISHED! Hooray!!! ?
  15. Gina

    All Sky Camera Mark 7

    Reduced the focussing resolution by 5x (20 ticks fine and 100 ticks coarse) and now it seems a bit fine but that isn't a problem. Can't really tell until I can focus on the stars. From what I've seen of the stars I was covering some 4 pixels with the width of a star which isn't bad.
  16. I need Factor 50 sun block too. I haven't spontaneously combusted yet!! ?
  17. Gina

    All Sky Camera Mark 7

    Hooray - focussing works, though it's a bit coarse. I'll bring the card indoors and edit the source file. Or maybe use nano to change it remotely.
  18. Gina

    All Sky Camera Mark 7

    Taken the control box down and brought it indoors. I can see immediately why the focussing isn't working - the SLEEP line is on the wrong GPIO. It's different between the two HATS! Changed the code to the right GPIO line and a connected stepper motor works. It looks like the right amount of shaft movement too. Now to reinstall it back out in the observatory...
  19. Gina

    All Sky Camera Mark 7

    Removed code for all the controls that weren't working. Brought ASC control box in from the observatory and swapped RPi boards. Checked operation of camera cooler and dew heater controls and corrected a logic error in the dew heater control. Then shut down and took unit back out to observatory. Put unit back in place and connected up except for Ethernet cable as now have WiFi. Back indoors and connected successfully by WiFi and camera working fine. Tried the focussing but nothing seemed to be happening. Then tried the camera cooling and cooling seems to be working having waited several minutes to see what's happening to the camera temperature. No way of telling what the dew heater is doing as there isn't any dew. CONCLUSION :- WiFi is working fine but Astroberry Board controls do not seem to be controlling the focus, Camera cooling control seems to be working. I shall have to bring the control box back indoors again and carry out more tests. EDITED to correct results.
  20. It had to be a pier for you Sara ?
  21. No, not really ? I originally thought of as part of a water feature for the garden but may be better as a tall planter.
×
×
  • 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.