Showcase: Built With OnStep


Khalid Baheyeldin
 

Gilles,

This would be a good addition to the showcase Wiki page.

Before I do that, can you please add a picture or two of the internals?


Gilles Gagnon
 

I will provide pictures a bit later today. Is 1280x960 pixels OK? 


Khalid Baheyeldin
 

On Fri, Jan 25, 2019 at 04:46 PM, Gilles Gagnon wrote:
Is 1280x960 pixels OK? 
For me, that is a good size. Not everyone uses a desktop with a large screen, that
can do 4000 x 3000. I only use a laptop, and it can do that. My previous laptop
was only 1280x800 though.

More important that resolution is that the pictures should not be too big as to clog
the inbox of some. Posting the pictures to Flickr, or some other public sharing site
with only links to the emails, is ever better.


Gilles Gagnon
 

Hello Khalid,

Here are a few pictures of my version of the SHC.

We can see that the buttons and display have obviously been soldered on the top part of the prototype PCB, with the display on a separate small PCB in order to be flush and aligned with the inside top window of the enclosure. The teensy 3.2 was soldered (raised, not flush) on the underside of the prototype PCB so it is out of the way of the SHC buttons and display. This also provided me with access to the micro USB connector so the SHC can be flashed with newer firmware, if needed. After I figured out the layout, it took me an evening to solder and install.

I was lucky enough to have only two issues: 1) inverting the I2C SDA and SCL wires, resulting in no display; and 2) a tiny solder bridge between the Shift and West buttons switches resulting in odd behavior.

Thanks


Khalid Baheyeldin
 

Very nice. Thanks for sharing.

Added it to the show case page.

I agree that the 0.96" screen is too small. That is why Dave recommends only the 1.13"
display for the ESP32 based SHC kit that he designed (details soon).


Dave Schwartz
 

As long as we're showing off SHC's...

Here's our ESP32s-based SHC. Its now complete with PCB V1.01 and a 3D-printable case. While technically the .96" (SSD1306) display is supported, the bezel in this design supports only the 1.3" (SH1106) display. For the small difference in price and the much-improved readability, I don't see why anyone would want to use the .96" display but if there is enough demand, I will design a bezel for it.

The project page is at https://baheyeldin.com/astronomy/onstep-esp32-smart-hand-controller-shc.html and the assembly instruction document linked at the bottom has lots of pictures of how the 'guts' are assembled so I'm not repeating that here.

There are a number of these in the field now... four 'beta' models that I sent out completely assembled and a number of the kits without the modules that were sent as add-ons to STM32 controller kits.

All of these people are probably anxious to get the 3D-printable case I promised for it. I have been holding off posting this until I had completed development of the 3D-printable case and that's now finished.

The attached pictures show the design in FreeCAD (which I will be releasing shortly) and various views of the finished product (the one with the red case is an early version but the only one I have of the PCB in the case without the display or faceplate). That's not a display defect in the 'RA/DEC display... the camera caught it during the transition from a '1' to a '2'.

All the openings in the sides are 'knockouts'... they are 2.5mm deep pockets from the inside of the case, which has 3mm walls, so they are only visible from the outside as ghostly imprints but are easy to cut out with an Xacto knife if you want to use them. For example, many will want to open the RJ opening on the bottom but not many will want to open the RJ on the side yet (the passthrough port functionality has not been released by Howard) or maybe not ever. If you don't mind another opening on the side you can open the knockout for the USB so you can reflash the ESP32S without having to remove it from the case.

Depending on how accurate your printer is and what material you use, you may have to fiddle (file) the parts a bit after printing. For example, the clearance between the box and the faceplate is supposed to be .2mm all around but the clearance was just barely enough (almost zero) on the parts from my printer. Similarly, the openings for the button caps in the faceplate are 12mm and the button caps are supposed to be 11.8mm but I had to scale my button caps down to 95% before replicating them 6 times in the slicer before they fit perfectly (filing the posts would also work but was tedious so just reprinting at 95% is faster).

These 3D-printed button caps actually work better in this application than the supplied button caps... they stick up farther than the original caps (easier to feel in the dark) and can move a around a bit (the pocket on the bottom is larger than the switch's post) to tolerate assembly variances while still being vertical.

The way to assemble is:

1) open the knockouts you want to use,

2) prepare the bottom posts for how you want to hold the case together. The holes in the bezel and faceplate, as well as the PCB are 3.4mm so you can either tap the posts in the box for a 4-40 or M3 machine screw (the inside diameter of the lower posts is 2.4mm or 3/32 - sized for an M3 or 4-40 tap)  or finish drilling through the posts through the bottom to use a 4-40 or M3 machine screw and nut on the bottom. The latter may be better for some because if you tap, you need to use a finishing tap to thread all the way to the bottom of the post (but not through the case) and the threads are fairly delicate if you're a gorilla on the screwdriver.

3) lay the faceplate on a table with the posts up, put the button caps in the holes, making sure they move freely (lift the faceplate and let it back down on the table, if the buttons move up and down on their own, you have it right).

4) lay the inverted PCB, with the display module unplugged, on top of the faceplate posts with the button shafts in the button cap pockets and the posts aligned with the holes in the corners of the PCB. Put the box over that assembly in the right orientation, slide toward the edge of the table and pick it up to turn in upright.

5) The display module fits in a pocket on the underside of the bezel and then plug it into the header at the top of the big rectangular opening. The tab on the bottom of the bezel ensures you have it centered.

6) all that left is to fasten it together. I used 4-40, 1 inch machine screws with tapped holes. You may need to shorten the ones for the bottom corners because the hole is not quite 1 inch deep even after you used the bottom tap. The though-bolt may be easier to construct as long as you don't mind nuts on the bottom.

The STL files are on my in the public area of my Google drive https://drive.google.com/drive/folders/1kFKasl2IzegPsQQSOKps8zy5NTFplVp_

I would have put them in the files area of the group but I don't have privileges to create a subfolder or upload files.

On 2019-01-25 9:21 p.m., Khalid Baheyeldin wrote:
Very nice. Thanks for sharing.

Added it to the show case page.

I agree that the 0.96" screen is too small. That is why Dave recommends only the 1.13"
display for the ESP32 based SHC kit that he designed (details soon).


Dave Schwartz
 

P.S. I'm now working on a V1.03 version of the PCB.

V1.02 fixed the error on the board that the assembly instructions talk about reworking (none of these were ever produced). V1.03 will have a 5-way pushbutton for the center button, the idea shamelessly stolen from an earlier post on the group.

This will allow the center-button's normal 'push-down' action as well as 'push-sideways' action to act like the button in that direction when in the guiding mode. Those PCBs were only dropped off by the UPS-man yesterday evening so I haven't even had a chance to put the first one together yet for testing.

After successful testing, I will be making the PCB on EasyEDA public.

The new pushbutton is in exactly the same place on the PCB as the old one so I don't anticipate any changes in the case. However, the current button cap will not work for this pushbutton (no freedom of movement to the side) so I will have to design a button cap for it to allow all needed degrees of freedom. That's when I'll make the FreeCAD design public too.

On 2019-01-26 3:08 p.m., Dave Schwartz wrote:
As long as we're showing off SHC's...


Khalid Baheyeldin
 

Thanks for the writeup Dave, I linked to it in the showcase.

The Google Drive STL link says 'request access'. You should make it public, or give me access, and I will copy them to the Files area.

The assembly instructions for the case should be either in the assembly instructions for the SHC itself (I think that is the best option), or in the Files area with the STL files.


Dave Schwartz
 

On 2019-01-26 3:33 p.m., Khalid Baheyeldin wrote:
Thanks for the writeup Dave, I linked to it in the showcase.

The Google Drive STL link says 'request access'. You should make it public, or give me access, and I will copy them to the Files area.
Now made public

The assembly instructions for the case should be either in the assembly instructions for the SHC itself (I think that is the best option), or in the Files area with the STL files.
I will do that.


Dave Schwartz
 

So after a fair bit of experimentation, I've got a working cap for the 5-way button used in the center of the V1.03 ESP32S-based SHC. The attached pictures are screen-shots of the FreeCAD application, just the 5-way button cap and a photo of the V1.03 SHC in operation so you can see what the button looks like.


With the 5-way button cap, the base is 1mm as opposed to 3mm, which allows it to tilt when being pushed to the side without also activating the 'push' switch. The specs for the button say that the force required to activate the 'push-down' contact is about the same as that of the single-action buttons (and that seems about right to me) while it takes about half that pressure to activate one of the 'push-sideways' contacts. The top edge of the post is not rounded so your finger catches on the edge better to push sideways. The pocket on the bottom is square and sized to fit the post on the switch fairly snugly. Depending on how well your printer does with such blind holes, you may have to use a small screwdriver to scrape out any excess plastic (I did) so that the button goes far enough down on the post so that the bottom is about half a millimeter above where the square post of the button goes into the surrounding cylinder that activates the side contacts. Too high and the 'push-down' contact will close too easily and too low and it will not close at all - so you have to adjust until the action is correct.

Of course, I don't claim that this is the best possible design for any of this, which is why I have now posted the FreeCAD source file along with the individual part STL files in my public Google drive folder https://drive.google.com/open?id=1kFKasl2IzegPsQQSOKps8zy5NTFplVp_ If a design doesn't work for you, feel free to modify it to your needs. Send your updated FreeCAD file to me and I will probably include it in future releases.

A few other things now that this phase is wrapped up... The PCB design is now public on EasyEDA - search for 'OnStep ESP32 SHC' and you will find it. I've also updated the combined STM32 controller/ESP32 SHC kit order form to include the options for a kit with just the PCB and infrastructure parts (in case you have easy access to the correct ESP32S and display modules) and a complete kit which includes the modules - I have about 15 sets of the modules on hand. None of the SHC kits include the case... you'll have to figure out how to get the 3D-printable case made on your own but that's not difficult these days.


Roman Hujer
 

Hi All I created a new Box for OnStep Mini 2.0 on base MiniPCB2 all the stl models and photo that are now available in Thingverse for all.

I also created a PCB on EasyEDA for alternative use of Bluetooth HC05 or HC06 modules in MiniPCB2

Roman


Khalid Baheyeldin
 

On Mon, Feb 4, 2019 at 04:06 PM, Roman Hujer wrote:

I created a new Box for OnStep Mini 2.0 on base MiniPCB2 all the stl models and photo that are now available in Thingverse for all.

Thanks Roman.

I added it to the MiniPCB page.

I also created a PCB on EasyEDA for alternative use of Bluetooth HC05 or HC06 modules in MiniPCB2

The page says Bluetooth not supported, so I will leave this part for Howard for review and possible addition.


Roman Hujer
 

Dear Khalid Small update on Thingverse add alternative top cover with Pi-Fan for better cooling. Roman PS Bluetooth in MiniPCB2 working ok.


Khalid Baheyeldin
 

Corrected description for case, to say it has a fan.
Added link to EasyEDA Bluetooth PCB.

Thanks for the great work ...


Dave Schwartz
 

For the people who I've been sending OnStep ESP32S SHC's to, I've got an update to the 3D-printable button cap for the 5-way switch.

I am planning to experiment with 3D-printing a harmonic drive reducer and the material recommended for the flex spline is 'Soft PLA'. This stuff is sort of mid-way between regular PLA (completely stiff) and TPU (really rubbery). I had planned to make the 5-way cap with TPU but it was a failure because my printer (Anycubic i3 Mega) couldn't feed it properly. Although the vendor has an upgraded extruder drive that theoretically supports TPU (now called the Anycubic Mega-S), I decided to retry the 5-way cap in the soft PLA even after installing the upgrade.

The result is that it worked really well. I found I had to lower the extrusion temp even a bit below recommended (my hotend always seemed to run a bit above what was indicated anyway), turn off the heated print bed and set the travel speed to 20mm/sec (reduced even further to 75% with a setting in the printer AND use an external fan. It was a thing of beauty.

However, in making the design even better, I tweaked the FreeCAD design so that the button is 2mm taller (much easier to feel and push around) and tightened up the fit of the switchpost pocket since it now prints even more accurately than the orignal PLA design (although that may be due to the upgraded extruder drive).

The new STL file and FreeCAD source are in the same place as the earlier files.


Roman Hujer
 

Dear All

Now another update for Box for OnStep Mini 2.0 is available.

Adds a version with a focuser port with this PCB and PCB for external stepper driver on my Focuser for Newton with 2" dual speed Crayford 1:10

All my FreeCAD souces for OnStep project on new GitHub repository is available.

Roman


Khalid Baheyeldin
 

On Fri, Feb 22, 2019 at 01:30 PM, Roman Hujer wrote:

Now another update for Box for OnStep Mini 2.0 is available.

Adds a version with a focuser port with this PCB and PCB for external stepper driver on my Focuser for Newton with 2" dual speed Crayford 1:10

All my FreeCAD souces for OnStep project on new GitHub repository is available.

Roman

Roman,

Well done ...

I like to add all this to the show case page, but it is a lot of links in different categories.

Also, it keeps changing as you improve it.

Can you create a web page somewhere (e.g. Google Sites which is free), and add all this stuff?

That way, the link from the Showcase page remains the same, and you can update the page as you develop new stuff, without requiring the show case page to keep page.


SurfaceCleanerZ
 
Edited

Hi,
did you have success with the SSD1309 OLED? I'm trying to get it working. I have a DIYMORE 2.42" SSD1309 resoldered to work with I2C (R5 bridged and R4 moved to R3).

I added a class for it in u8g2_ext.h:
class U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C : public U8G2_EXT {
public: U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2_EXT() {
  u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
  u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
};
};

and
  // SSD1309 is the 2.42" 
  #define OLED_DISPLAY SSD1309
in SHC_Config.h

And
#define SSD1309 2
...
class SmartHandController
{
public:
  enum OLED { OLED_SH1106, OLED_SSD1306, OLED_SSD1309 };
in SmartController.h

And
    // The display, SSD1306, SH1106 or SSD1309
    #define OLED_DISPLAY SSD1309
in TeenAstro_Config.h

And
  if (model == OLED_SH1106)
    display = new U8G2_EXT_SH1106_128X64_NONAME_1_HW_I2C(U8G2_R0);
  if (model == OLED_SSD1306)
    display = new U8G2_EXT_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0);
  else if (model == OLED_SSD1309)
    display = new U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C(U8G2_R0);   
  display->begin();
in SmartController.cpp.

I'm using the beta from today and an Teensy 3.2 based SHC v1.04 (I changed GND and VCC, description on PCB is wrong, as stated).

The display needs RES connected to VCC via a 10kOhm resistor.
https://forum.arduino.cc/index.php?topic=442255.0

Then it goes on after powering the Teensy via USB.

Regards,
Stefan


kevindt@...
 

Hi,

I think you're missing an argument in your class you added to u8g2_ext.h and in the constructor that you added to Config.h

Take a look at 


and you'll see that there is an argument for buffer size that is missing from your addition.  

I've set it below to use the single page (same as SHC's current SH1106 setting, least memory) rather than buffering the full frame (same as SHC's current SSD1306 setting, fastest but most memory).  I don't have a SSD1309 to test with, but you might need to try the other buffer settings (1,2 or F).

I'm using the alpha from a couple of days ago, rather than the beta, so file names may differ below.  It compiles without errors with the following:

Use this in u8g2_ext.h:

class U8G2_EXT_SSD1309_128X64_NONAME2_1_HW_I2C : public U8G2_EXT {
public: U8G2_EXT_SSD1309_128X64_NONAME2_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2_EXT() {
  u8g2_Setup_ssd1309_i2c_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
  u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
}
};

and this in SmartController.cpp:

  if (model == OLED_SH1106)
    display = new U8G2_EXT_SH1106_128X64_NONAME_1_HW_I2C(U8G2_R0);
  if (model == OLED_SSD1306)
    display = new U8G2_EXT_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0);
  else if (model == OLED_SSD1309)
    display = new U8G2_EXT_SSD1309_128X64_NONAME2_1_HW_I2C(U8G2_R0);     
  display->begin();

together with your other additions:

  // SSD1309 is the 2.42"  
  #define OLED_DISPLAY SSD1309
in Config.h

And
#define SSD1309 2
...
class SmartHandController
{
public:
  enum OLED { OLED_SH1106, OLED_SSD1306, OLED_SSD1309 };
in SmartController.h

And
    // The display, SSD1306, SH1106 or SSD1309
    #define OLED_DISPLAY SSD1309
in Config.h


Kevin.

On Saturday, March 23, 2019, 2:25:23 PM PDT, SurfaceCleanerZ <coca_cola1@...> wrote:


[Edited Message Follows]

Hi,
did you have success with the SSD1309 OLED? I'm trying to get it working. I have a DIYMORE 2.42" SSD1309 resoldered to work with I2C (R5 bridged and R4 moved to R3).

I added a class for it in u8g2_ext.h:
class U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C : public U8G2_EXT {
public: U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2_EXT() {
  u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
  u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
};
};

and
  // SSD1309 is the 2.42" 
  #define OLED_DISPLAY SSD1309
in SHC_Config.h

And
#define SSD1309 2
...
class SmartHandController
{
public:
  enum OLED { OLED_SH1106, OLED_SSD1306, OLED_SSD1309 };
in SmartController.h

And
    // The display, SSD1306, SH1106 or SSD1309
    #define OLED_DISPLAY SSD1309
in TeenAstro_Config.h

And
  if (model == OLED_SH1106)
    display = new U8G2_EXT_SH1106_128X64_NONAME_1_HW_I2C(U8G2_R0);
  if (model == OLED_SSD1306)
    display = new U8G2_EXT_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0);
  else if (model == OLED_SSD1309)
    display = new U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C(U8G2_R0);   
  display->begin();
in SmartController.cpp.

I'm using the beta from today and an Teensy 3.2 based SHC v1.04 (I changed GND and VCC, description on PCB is wrong, as stated).

The display needs RES connected to VCC via a 10kOhm resistor.
https://forum.arduino.cc/index.php?topic=442255.0

Then it goes on after powering the Teensy via USB.

Regards,
Stefan


Kevin Dorsey-Tyler <kevindt@...>
 

Looks like you edited to add the missing bit between your edits :)

On Sunday, March 24, 2019, 10:53:24 AM PDT, Kevin Dorsey-Tyler via Groups.Io <kevindt@...> wrote:


Hi,

I think you're missing an argument in your class you added to u8g2_ext.h and in the constructor that you added to Config.h

Take a look at 


and you'll see that there is an argument for buffer size that is missing from your addition.  

I've set it below to use the single page (same as SHC's current SH1106 setting, least memory) rather than buffering the full frame (same as SHC's current SSD1306 setting, fastest but most memory).  I don't have a SSD1309 to test with, but you might need to try the other buffer settings (1,2 or F).

I'm using the alpha from a couple of days ago, rather than the beta, so file names may differ below.  It compiles without errors with the following:

Use this in u8g2_ext.h:

class U8G2_EXT_SSD1309_128X64_NONAME2_1_HW_I2C : public U8G2_EXT {
public: U8G2_EXT_SSD1309_128X64_NONAME2_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2_EXT() {
  u8g2_Setup_ssd1309_i2c_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
  u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
}
};

and this in SmartController.cpp:

  if (model == OLED_SH1106)
    display = new U8G2_EXT_SH1106_128X64_NONAME_1_HW_I2C(U8G2_R0);
  if (model == OLED_SSD1306)
    display = new U8G2_EXT_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0);
  else if (model == OLED_SSD1309)
    display = new U8G2_EXT_SSD1309_128X64_NONAME2_1_HW_I2C(U8G2_R0);     
  display->begin();

together with your other additions:

  // SSD1309 is the 2.42"  
  #define OLED_DISPLAY SSD1309
in Config.h

And
#define SSD1309 2
...
class SmartHandController
{
public:
  enum OLED { OLED_SH1106, OLED_SSD1306, OLED_SSD1309 };
in SmartController.h

And
    // The display, SSD1306, SH1106 or SSD1309
    #define OLED_DISPLAY SSD1309
in Config.h


Kevin.
On Saturday, March 23, 2019, 2:25:23 PM PDT, SurfaceCleanerZ <coca_cola1@...> wrote:


[Edited Message Follows]

Hi,
did you have success with the SSD1309 OLED? I'm trying to get it working. I have a DIYMORE 2.42" SSD1309 resoldered to work with I2C (R5 bridged and R4 moved to R3).

I added a class for it in u8g2_ext.h:
class U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C : public U8G2_EXT {
public: U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2_EXT() {
  u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino);
  u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data);
};
};

and
  // SSD1309 is the 2.42" 
  #define OLED_DISPLAY SSD1309
in SHC_Config.h

And
#define SSD1309 2
...
class SmartHandController
{
public:
  enum OLED { OLED_SH1106, OLED_SSD1306, OLED_SSD1309 };
in SmartController.h

And
    // The display, SSD1306, SH1106 or SSD1309
    #define OLED_DISPLAY SSD1309
in TeenAstro_Config.h

And
  if (model == OLED_SH1106)
    display = new U8G2_EXT_SH1106_128X64_NONAME_1_HW_I2C(U8G2_R0);
  if (model == OLED_SSD1306)
    display = new U8G2_EXT_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0);
  else if (model == OLED_SSD1309)
    display = new U8G2_EXT_SSD1309_128X64_NONAME2_F_HW_I2C(U8G2_R0);   
  display->begin();
in SmartController.cpp.

I'm using the beta from today and an Teensy 3.2 based SHC v1.04 (I changed GND and VCC, description on PCB is wrong, as stated).

The display needs RES connected to VCC via a 10kOhm resistor.
https://forum.arduino.cc/index.php?topic=442255.0

Then it goes on after powering the Teensy via USB.

Regards,
Stefan