Smaller and cheaper alternative to Arduino Uno for permanent projects
I think the first best choice is to remove the ATMega328p-pu chip from your Arduino UNO and incorporate it into your final circuit. The chips are only about $1.50.
That way, you can just use your UNO as a programmer instead of the final device that you deploy.
I'm not sure why there isn't more documentation about the proper way to remove the ATMega328p-pu chip and using it on your breadboard, after completing your programming.
I explain exactly how to do this on my blog: http://raddev.us/arduino/post/2018/07/03/arduino-uno-using-your-atmega328p-u-as-stand-alone
But, here are the basics. First you remove the chip. It will look like the following after you do so. (Note: I'm using the Elegoo clone of an UNO).
Next, you apply power to pin 7 and connect pin 8 to GND.
Need A 16MHz Crystal
But, the chip won't seem to run your sketch at this point. That's because you actually need a crystal to run at 16MHz.
The UNO board has that chip installed and that is why it works. You can see it here:
Finally you add the 16MHz crystal and a couple of 22pF caps and your chip will run standalone (no UNO).
You add the crystal to pins 9 & 10. You can see all the details by reading my blog entry or reading the atmega328 datasheet.
Finally, Just Wire Everything Else Up
After that, just wire the rest of your circuit up to the proper pins and you can run your ATMega328p-pu standalone.
It's actually a nice learning experience too.
Just buy replacement atmega328p-pu chips for your UNO and you can create all the projects you want to for very cheap.
Check the STM32F103C8T6 development board, cost about $ 1.5, and is faster/has more memory than the Arduino Uno, and is much smaller.
It can work with the Arduino IDE, but not all libraries are supported, so check before you want to use it if your used libraries are supported, or if there are different libraries you can use instead.
Update
Differences:
Arduino Uno STM32F103C8T6 Mini Dev Board
MicroController Atmega328P Cortex M3
MIPS/MHz 1 1.25
Operating Voltage [V] 5 3.3, most pins 5V tolerant
Input Voltage [V] 7-12 USB only
Input Voltage (limit) [V] 6-20 (USB)
Digital I/O Pins 16 37
From them:PWM Digital I/O Pins 6 12
Analog Input Pins 6 10
DC Current per I/O Pin [mA] 20 ?
DC Current for 3.3V Pin [mA] 50 ?
Flash [KB} 32 64
SRAM [KB] 2 20
EEPROM [KB] 1 -
Clock Speed [MHz] 16 72
I2C 1 2
SPI 1 2 (18 MBit/s)
UART 1 3
CAN 0 1
USB 0 USB 2.0 FS 12 MBit
DMA 0 7 channels (ATsP, SPI, I2C, USART)
RTC 0 1
CRC 0 1
Unique ID 0 1
Programmed by USB SWD Debug (around $5)
IDE Arduino IDE Arduino IDE, CubeMX, ...
Libraries Many Limited
Dimensions [mm] 68.6 x 53.4 53 x 22
Weight [g] 25 ?
Price (cheapest) [$] 2.50 1.50
Note: as written earlier, despite the mostly better specs, not all libraries are supported. Also a programmer need to be bought (only once, cost about $5).
For my product, I went from an Arduino Uno:
to the Arduino Pro Mini:
Yes you will need a FTDI cable for programming and serial coms to the PC, but providing you don't need coms all the time, you will only need the one cable to upload the program to each device. They can be found pretty cheap too.
However I notice that the Arduino Pro Mini is retired now, so it may be a bit harder to source (it is still available on AliExpress). So for this reason, I suggest that you instead try the Arduino Nano:
which has the added advantage of onboard USB, meaning you no longer need the FTDI cable for programming or coms.
The ATMega328P that is the processor of these 3 boards does not have native USB, which means that the board also needs to include the FTDI FT232RL IC that is used in the FTDI cable. Having this IC can add additional costs to your bottom line.
For a few dollars cheaper per device, you can use a microcontroller (such as the ATMega32U4) that has native USB coms (and hence you save on the FTDI IC). One such product is the Arduino Micro:
All of these boards mentioned are native within the Arduino Ecosystem and (apart from the retired Pro Mini) should be easy to source online or at your local electronics shop. Your Arduino Uno program will work for all of these alternatives - you just have to change the board in the Arduino IDE:
There is one more board that I would like to mention - the DigiSpark:
It is only suitable for smaller programs, is limited in some of its features and is not an oficial Arduino board. Having said that, there is plenty of Arduino support - and its cheap!