I used the Arduino MKR 1010 WiFi controller for the TinyDVM, mainly because I had one and I wanted to try it out. After looking at several OLED displays I settled on the SparkFun Micro OLED breakout board. It seemed to have a reasonable size display and because it was supplied as a breakout board it was easy to prototype. It has a graphical display so I can try out different sizes of text display to see which is best. There is also the added possibility of being able to use some sort of graphical voltage display, such as voltage against time. SparkFun also provided a detailed hook up document along with an extensive library for drawing both text and graphics on the display. The more help I can get the better.
I used female/female connector wires as the Arduino came with the headers installed and I added similar pins to the OLED breakout board. It made it much easier and quicker to connect everything together, although a little bit unreliable as sometimes the wires dropped off the pins (you can see this happening in the video below). The Arduino MKR 1010 uses slightly different pin numbers to the Arduino used in the hook-up document provided but it was easy enough to identify suitable pins, as listed below. The OLED board only uses SPI to communicate so I used that. Note that the SDO pin is not connected as communication is one direction, from the Arduino to the display.
I downloaded the library provided by SparkFun, selected one of the text display examples, updated the pin numbers for (D/C, RST and CS) and programmed it in without any problems.
Next, I decided to make the case for the Tiny DVM. I have a 3D printer and I use TinkerCAD to make the designs. I do not find this software the easiest to use and I still have problems trying to edit existing designs. Still, I am getting better so eventually I am sure I will work out what I am doing wrong. I find the TinkerCAD method of creating designs by adding standard block shapes (including holes) together, easy to understand and use. I think this stems from using the graphic draw tools within Word. Plus, it's free! My first design for the TinyDVM case was a rectangular box big enough to fit the Arduino MKR 1010 WiFi with a hole for the display of the Micro OLED. Unfortunately, because of the pins and headers on the two components I could not fit both components in at the same time. I then added an extendable back part for the case in order to try and accommodate the pins but it did not print properly and was warped at one corner. I am still getting to grips with my 3D printer (an UP Mini - which I really like) and I think that I didn't wait until the base plate was fully warmed up before calibrating and it was only about 50% warmed when I started the print. I didn't stay to watch it print so I did not see it come away from the base plate during the printing process. I could have just done another print but after fitting the two existing parts together I decided I didn't like the sliding case idea anyway so I redesigned the front part of the case to be longer so that the Arduino and display fitted side-by-side. This worked well so I went on to print a simple back plate with two poles to hold in the two PCBs. I want to avoid making everything permanent until I am sure it all works properly. The display is pushed through the case slightly and doesn't look that good so I printed a small bezel to glue onto the front. I could have 3D printed it as one piece as an extension of the main front case but it would have used a lot more plastic in supports. I did forget to include the hole in the side of the case for the USB cable needed to programme the Arduino as initially I thought I would not be programming it while it was all assembled. Rather than print the case again I just drilled a few holes and filed the hole to size. I can add the hole later, along with any other adjustments to the case needed.
The video below shows all these steps.
The next step will be to make some connections to the Arduino MKR 1010 WiFi so that it can measure actual voltages and write a better programme to process and display these values.