Pro mini pinout. Description of the arduino pro mini board. Arduino Pro Mini - pinout and characteristics. Scheme and initial design. Adding Chinese Pro Mini to Arduino IDE

Not long ago I came across the need to use Arduino Pro Mini in my project and the question immediately arose of how to upload a sketch into it. Of course, various UART adapters are sold with the help of which this issue can be quickly resolved, but at that moment such an adapter was not at hand.

That is, as follows:

Nano -> Pro Mini

  • +5v -> Vcc
  • GND -> GND
  • D10 -> RST
  • D11 -> D11
  • D12 -> D12
  • D13 -> D13

I got it something like this:

After everything is assembled and checked, you can connect the Nano to the computer by blinking 7 times, both boards are ready for use.

Next, to flash the firmware, we need to make sure that when setting up the board to be flashed and the programmer, we use the same port speeds, taking the speed from the sketch as the standard. For the board type you need to find the file boards.txt his path is relative installed program The IDE is like this: Arduino/hardware/arduino/boards.txt. In it we need to find the parameters section for the Pro Mini board, it looks something like this:

Pro5v328.name=Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328

I have a flashable 5 volt mini with an ATmega328 microcontroller, but if you have a different version of the board, then you need to find the section corresponding to your board.

Here you need to make sure that the speed is set correctly:

Pro5v328.upload.speed=19200

Then go to the programmers.txt file, its path Arduino/hardware/arduino/programmers.txt and make sure the parameters are correct:

Arduinoisp.name=Arduino as ISP
arduinoisp.communication=serial
arduinoisp.protocol=stk500v1
arduinoisp.speed=19200

After making sure that all the parameters are correct, you can start the IDE; if it was running, then restart it. This is necessary for the new parameters to take effect.

After launching the IDE, we need to set our board to be flashed and the type of programmer “Arduino as ISP” in the “Tools” menu:

Now we are all ready for the firmware. Select the desired sketch; you can choose any of the examples for testing. And now special attention I’ll tell you how to flash it, the usual button for flashing will not work for us since it is intended for flashing with a standard programmer, i.e. in the Arduino Nano and when we press it, we will simply flash the Nano, which we absolutely do not need.

The correct way to flash the Pro Mini is in the “File” menu and it’s called “Load using a programmer”, I have IDE version 1.5.6-r2, there this item is called “Load using a programmer”, apparently there are translation difficulties in this release, in version 1.0.5-r2 everything is fine.

The first time you may not be able to flash it, and in the future you may get an error like this:

However, do not worry, if everything is assembled correctly and soldered securely, then just press “Reset” on the Pro Mini, wait a couple of seconds and the board will be successfully flashed.

Thank you for your attention, that's all for now.

– a compact version of the Arduino platform, designed for building all kinds of projects that are not large in size. The platform is 100% compatible with other Arduino platforms, such as Arduino UNO, but much more compact than it. In this article, I will review the Chinese analogue of the Arduino Pro mini, tell you how it differs from the original, how this board differs from other Arduino platform boards, and also tell you how to connect it to a computer to upload a sketch into it. Finally, let’s make sure the board is working using the “blink” sketch as an example.

I bought this analogue of Arduino Pro mini on Aliexpress for $1.30, while the original board on the manufacturer’s website costs €13. The difference in price is the first main difference between the Chinese analogue and the original.

The board came in an antistatic bag. The kit also included contact pads.

For comparison, the top board is the original Arduino Pro mini, below is my Chinese counterpart. In terms of the number and location of contacts, the board is identical to the original, except for contacts A4, A5, A6 and A7. On original board These contacts are located in the center; on the analogue they are on the left.

In order to have a visual idea of ​​the size of the board, I will show it next to its Chinese counterpart Arduino UNO. Pro mini was able to be reduced in size by removing USB connector, board matching circuits with USB port, the power connector was also removed. The Chinese analogue is 100% compatible with all modules, drivers, sensors that work with the original version.

The original modern Arduino Pro mini board is based on a microcontroller ATmega328, on the same as Arduino UNO. More early models this board was built on a microcontroller ATmega168.

Chinese analogues of Arduino Pro mini on this moment are being built as ATmega328, and on ATmega168. This is the second difference between the original and its analogue. A board based on ATmega168 will cost less than one based on ATmega328. The main difference between these controllers is that the ATmega328 contains twice as much memory on board as the ATmega168.

Differences between microcontrollers

ATmega168

ATmega328

16 KB

But this does not mean that it will not be possible to build a project on the ATmega168 that was developed on a board with an ATmega328, because 16 KB will be quite enough for many sketches. Still, if you need double the amount of memory, read the board description before purchasing. When purchasing my Chinese counterpart, I chose the $1.30 board with the ATmega168 instead of the $1.93 board with the ATmega328. As you can see, here we can also save on purchases.

The original Pro mini board is produced with two power options: 5 and 3.3 volts. For the version operating from 3.3 volts, the microcontroller operates at a frequency of 8 MHz, for the 5 volt version - at a frequency of 16 MHz. Chinese analogues are also produced in 2 versions. My board runs on 5 volts.
Visually, the operating frequency of the controller can be determined by the quartz installed on the board; if it is in a large case, you can clearly see the frequency at which it operates: 8 or 16 MHz.

Fragments of boards with quartz operating at different frequencies.

About power supply for Arduino Pro mini.

The GND, VCC and RAW pins are used to power the board.
GND- this is the minus power (ground).
VCC– used to supply 3.3 or 5 volt power, depending on the board version. This connector is supplied strictly with the voltage for which the board is designed. The voltage from this contact goes directly to the microcontroller; if it is higher than necessary, the latter may fail.
If you are going to power the board with high voltage, then the “+” power supply should be connected to the connector RAW. This connector can supply up to 12 V, regardless of what voltage the board is designed for. The voltage from this contact is supplied to a voltage stabilizer, which converts it to the required value, and only then is supplied to the controller.

If it so happens that you bought a board and do not know what voltage it is designed for, apply 5 volts to the RAW connector and measure the voltage at the VCC connector. If the board is designed for 3.3 volts, then the corresponding voltage will be at VCC, if it is 5 volts at VCC, then the board is 5 volt.

The Pro mini's digital and analog outputs correspond to the same number of outputs as the UNO board: 14 digital and 6 analog. Contacts A4 (SDA) and A5 (SCL) are used to connect various devices via I2C bus.

About the Arduino Pro mini firmware.

Having become one of the smallest boards on the Arduino platform, the Pro mini board acquired a disadvantage - it is impossible to flash the board without outside help. I'll tell you everything possible ways uploading sketches to Pro mini.

Firmware for Arduino Pro mini using Arduino UNO board.

This is not the easiest way, since not everyone has a UNO board and it is not advisable to buy it specifically for flashing Pro mini boards. But since I have a Chinese analogue of UNO, I will start with this method. To implement this method, a driver must be installed on the UNO board and the number of the COM port to which this board is connected must be determined. How to do this is described in the article about the Chinese analogue of Arduino UNO.

We connect the boards as in the picture. conclusions GND, TX And RX connect with similar ones. Conclusion " VCC"on the Pro mini board we connect to the " 5V" or " 3V3"on the UNO board. If you have a 5 volt version of Pro mini, then connect it to the “5V” terminal, as in my version. If the version is 3-volt, connect to “3V3” on the UNO board. Conclusion RESET on the UNO board we connect to the pin DTR on the Pro mini board. On the original board the output DTR designated as GRN, in general it's the same thing.

When everything is connected, we launch Arduino IDE.



Select the board into which you want to embed the sketch:« Tools» - « Pay:" and select your board, in this case it is "Arduino Pro or Pro Mini».

Since Pro Mini boards can use different microcontrollers (ATmega168 or ATmega328), as well as different supply voltages (3.3 v or 5v ), select your configuration: “ Tools» - « CPU:" V in this example I select " ATmega168 (5 V, 16 MHz)».

Select the port to which the board is connectedUNO: « Tools» - « Port:» in my case it's "COM7».

Let's try to upload the first sketch and make sure the board is working. Select the sketch " Blink ", the meaning of which is to blink the LED built into the board: " File» - « Samples» - « 01. Basics» - « Blink».

Using the buttons " Check" And " Load"The sketch is checked for errors and loaded onto the board. If there are no errors, the blue LED will start blinking on the Pro Mini board.

You can play with the values ​​in the sketch and change the time the LED is on and the time the LED is off, fill the sketch again and see that the LED will blink differently.

Firmware for Arduino Pro mini using a USB to TTL adapter.

I already talked about one of these adapters on the PL2303 chip, now it’s time to try it in practice. There are two versions of this adapter, one without the GRN (DTR) contact, like mine, and the second with this contact. Those with contact cost at least twice as much as those without contact.

If you use an adapter without a GRN (DTR) contact, connect it to the Pro mini as in the picture.

If you have a 3-volt Pro mini version, then the VCC pin of the board must be connected to the 3V3 pin of the USB adapter.

When everything is connected, launch the Arduino IDE. We select the board version, processor and port, select the “Blink” sketch, everything is the same as in the above example with UNO.

To fill the sketch you need:
1. Click on the “ Load».
2. The process of compiling the sketch will begin, as can be seen from the inscription “ Sketch compilation...».
3. As soon as this inscription changes to “ Loading...».
4. Briefly press the button on the Pro mini board RESET.
5. The sketch will be uploaded to the board, and you will be able to see the inscription “ Unloaded"and by the blinking LED on the board.

If you happen to have a USB to TTL adapter in your hands, with the DTR pin (aka GRN, RESET), connect it to the corresponding RESET pin on the Pro mini board. In this case, when uploading a sketch, you won’t have to press the RESET button; the board will reset itself.

This adapter, just like the PL2303, allows you to flash an Arduino board. The connection diagram is as follows:

There are also other USB adapters for flashing the Arduino Pro mini firmware, for example on the FT232 chip, but due to the fact that this adapter is more expensive, I do not take it into account.

Firmware for Arduino Pro mini using CH341A programmer.

The programmer on the CH341A chip can operate in UART mode, which means it can flash an Arduino Pro mini.

The programmer can be presented in different visual designs, the main difference being the price and the presence of additional contacts. Among these contacts, for example, an additional +5V contact can be routed. The one I bought did not have this contact, I had to solder it on the board to get this voltage.

To use this programmer as a UART adapter, you need to open the contacts P/S.

To connect to Pro mini you will need contacts on the programmer: Tx, Rx, GND And +5V. Another feature of this programmer is that there is a contact on board DTR, connecting which to the Pro mini board, there will be no need to press a button Reset, when filling the sketch. To activate this contact, you need to use the contact MOSI, in UART mode it works like DTR.

In my version of the programmer, the +5V contact was not output, I had to take this voltage from the stabilizer leg. The final connection is as follows:

Pro mini CH341A
Tx Rx
Rx Tx
DTR MOSI
GND GND
VCC +5V

Download driver: Yandex disk MEGA Cloud mail@ru

After installing the driver, a virtual COM port will appear in the Device Manager. Filling sketches occurs in the same way as through the PL2303 / CH340G adapters, with the only difference that you do not need to press the button Reset.

It should be noted that this programmer can only be connected to 5 volt Arduino boards as it uses 5 volt levels! The same applies to other devices that require a UART adapter.

Firmware for Arduino Pro mini via COM port.

It will not be possible to directly flash the board via the COM port, since the COM port and the Pro mini have different logical levels. To coordinate them, you need to use an adapter on the MAX232 chip. The chip itself is not expensive, but I don’t know if it’s worth the bother for Pro firmware mini assembly of such an adapter, if the price is no cheaper than buying a USB adapter for .

In any case, I present the diagram.

To make sure that this method works, I had to assemble this circuit myself on a breadboard. Payment in progress...

Most modules sold as parts of Arduino kits are a board with a linear stabilizer and the inscription: “input voltage from 3 to 5 Volts,” and the microcircuits themselves that perform the work of the modules are often powered by a voltage of 3.3V, and can sometimes operate at lowering it to 3 or 1.8V.

This module will help optimize the size and increase the operating time of my GPS logger...

Arduino is packaged in a bag with a barcode:



Maybe this is the original module?


Power indicator LED is green, #13 is red:

Why do you need this particular Arduino - 3.3V, and not like everyone else - 5V for $1.4? Everything is fine when we need to show the miracle that happens when we connect a device to Arduino: we buy modules, connect them to a common 5V source, upload a sketch - and everything shines and puffs. But when developing more or less used devices, you have to think about both energy efficiency and compactness - as a result, half of the extra blocks fly out of the circuits.

As you can see, the processor is Atmega328 of this module can operate at a voltage of 2.7V, and the voltage practically drops at the stabilizer; for comparison, on a 5-volt Arduino (from previous version GPS logger) I observed a voltage of 3.6 V when powered from 5 V at the RAW input.

By the way, at what speed does it produce information? I had a log file, in two minutes it accumulates 5.42 KB (4336 KB) ~ 37 KB/s, if I’m not mistaken, then the speed is almost 15 times less.

The same wiring, we connect the power without a stabilizer - directly to VCC, TX -> 2:


The script reads character by character from the software serial port and writes to the hardware room to which we connected the programmer and see what comes out:
#include // To use the software port. SoftwareSerial mySerial(2, 3); //Initialize pin 2 of Arduino. char ch; // Buffer. void setup() ( Serial.begin(9600); mySerial.begin(9600); ) void loop() ( // If a character is read from the software sweat, if ((ch = mySerial.read()) != -1) Serial.write(ch); // write it to the hardware. )
In the “Port Monitor” there are lines characteristic of the GPS module:

The code written earlier, in fact, is sometimes buggy, so there is still a need to refine it. Having collected this alpha version:


rewrote the script -

almost finished GPS logger

#include #define SER_SP 9600 // Serial port speed. File flDataFile; // File for recording GPS strings. char chGpsLint; // Variable for storing the GPS string, byte btReaded; // its length. void setup() ( Serial.begin(SER_SP); // Set up the port. if (!SD.begin()) // If we can’t start working with the card, delay(3600000); // do nothing for an hour. flDataFile = SD.open("-NKK-LOG.GPS", FILE_WRITE); // File to write: if (!flDataFile) // if we can’t open delay(3600000); // do nothing for an hour. ) void loop() () void serialEvent() ( // Automatically called when new data arrives. while (Serial.available()) ( // While there is data on the serial port, btReaded = Serial.readBytesUntil("\n", chGpsLint, 128) ; // read the line, if (btReaded > 45) // if it is at least this many characters long, flDataFile.write(chGpsLint, btReaded); // write the data to the file. ) flDataFile.flush(); // Flush the file buffer . )

Catch text when interrupted. The one shown in the photo above can already be connected to the battery and used, but the product needs to be completed!

For installation, it was decided to use, but before installing, wouldn’t it be better to think about how the elements would be arranged - Fritzing to help!


The most difficult thing was to finish drawing the board, but it is better to spend time in front of a computer screen than even more time with a soldering iron, choosing the optimal arrangement of elements.
“Hut” on the left - MicroSD->SD memory card adapter;
LEDs at the top right: 3 for cadence and one for indicating the device status (failure when accessing the card, failure when creating a file, waiting for data from GPS), the resistance will be SMD to ground;
The GPS module is not shown: it is located on the back of the board;
there will also be a power battery;
bottom right - jack-3.5 for connecting the reed switch; you will need to drill a hole in the housing near its location.
I started assembling, the size of the board turned out to be exactly the size of the case. It seems to me that I chose it for this case... Hot-melt adhesive will help me in attaching the modules inside the case! At first I wanted to sculpt the battery to the case:


But the design features determine that it is better to place it on the board:


Then a GPS module and its antenna were attached to the board (so that it lay next to the battery), due to lack of space, the “screen” had to be removed from the antenna:


To make removal even more convenient, a “handle” was soldered to the board:


Initially, I planned to mount the Arduino module through the connectors, but since the height of the case was not enough, and I didn’t want to saw or cut anything else, I decided to solder it to the board in a cool way:


The first time I saw such board-on-board mounting was in a Bluetooth module - it turned out cool. The only negative is that you can only remove it back painlessly with a hairdryer. For flashing I will solder more contacts - the board is large.
The illustration above helped me solder the memory card adapter correctly, I re-soldered it 2 times, and on the third time I remembered the location of the contacts =)


We fix it with hot glue for convenience:

^-under the adapter there are power contacts for the GPS module, connected by a jumper: through the jumper, power comes from the linear stabilizer of the Arduino. When connecting to a GPS module via UART, the jumper can be removed so that Arduino does not intercept the interface.


After turning on, the GPS gave GMT time after 80 seconds, and position data after 14 minutes! There is a lot, but this is only from the balcony.
After switching and soldering the LEDs and capacitor to RAW (28uF, just in case, found “extra” parts):

^- to connect to the programmer, contacts stick out on the board.
On the reverse side, the jumper mentioned above allows you to disable the GPS module when working with Arduino or Aruino when working with the GPS module via a UART programmer:

^- contacts are displayed separately for easy connection to GPS.

The cover in which the board is secured is placed on the bottom and secured (for now with rubber bands from the chamber). The bottom, in turn, is attached to the steering wheel; for this there are 4 holes in the vertices of the rectangle:


A number of holes on the edge are needed for display LEDs, but they will still need to be adjusted: either I’ll fix the LEDs inside, or I’ll seal the holes with transparent hot glue, I haven’t decided yet. Glued to the front side of the case:


The bottom is attached to the steering wheel:


The “lid” clings to the bottom (and turns into the bottom):


Once secured to the steering wheel, the “bottom” can no longer be removed, and the device remains in the cover; it can be removed and used separately for debugging or recording a track, for example, a jog.

Three blue cadence indicator LEDs light up according to the following pattern:
[LEDs] [ * * * ] 130 + [ * * ] 120 [ * ] 110 [ * * ] 100 [ * ] 90 [ * * ] 80 [ * ] 70 70 - [Cadence]

From what had to be done:
- after, it was decided to disable it programmatically;
- the voltage booster module has been removed, the current consumption is around 95-125 mA - this is almost 2 times less compared to and there were no LEDs, each of which consumes 10-15 mA;
- SD connected directly;
- the location of the LEDs and elements inside the case conflicts with the desire to make a universal/dismountable system on the board - as a result, the case remains the same and there is almost nowhere to plug the battery into it =)

Source

/** * By popular demand, * I am publishing the long-awaited source code, * without cadence indicators. * One LED (17) is lit at the start of operation * until the first NMEA string of 70 characters is received. */ #include #define FILE_NM "-NKK-LOG.GPS" #define SER_SP 9600 #define RED_ON PORTC |= 0b000001000 // Turn on or #define RED_OFF PORTC &= 0b111110111 // turn off the red LED. volatile word wTotRev, // Total number of pedal revolutions; wTotRevLastWtd = 0; // the last one written to the log. File flNMEA; // File for recording GPS strings. char chNMEA; // Variable for storing the GPS string, byte btReaded; // its length. bool bWaitingGps = true; // Waiting flag for the first current GPS data. void setup() ( delay(800); // Power contacts may bounce when turned on. pinMode(17, OUTPUT); // Device status LEDs. while (!SD.begin()) ( // While the SD card is not detected , RED_ON; delay(150); // flashing. RED_OFF; delay(500); ) flNMEA = SD.open(FILE_NM, FILE_WRITE); // Checking the work with files. if (!flNMEA) // If there is an error when opening a file while (true) ( ​​// blink 2 times. RED_ON; delay(150); RED_OFF; delay(150); RED_ON; delay(150); RED_OFF; delay(500); ) Serial.begin(SER_SP); // Let's start working with the GPS sensor. RED_ON; ) // setup() // void loop() ( ) // loop() // void serialEvent() ( // Automatically called when new data arrives. while (Serial.available( )) ( // While there is data on the serial port, read. btReaded = Serial.readBytesUntil("\n", chNMEA, 128); if (bWaitingGps) ( // If GPS is not yet producing current data, if (btReaded > 70 ) ( // check them. bWaitingGps = false; RED_OFF; flNMEA.write(chNMEA, btReaded); ) ) else if (btReaded > 0) // If GPS previously issued current data, flNMEA.write(chNMEA, btReaded); // write to file. ) flNMEA.flush(); // Reset the file buffer. ) // serialEvent() //

The product was provided for writing a review by the store. The review was published in accordance with clause 18 of the Site Rules.

I'm planning to buy +21 Add to favorites I liked the review +16 +36

Arduino + two servos + charging board + boost converter board + old battery + a bunch of radio components + piece of plywood + toggle switch = an idiot's dream come true!
Lots of text for those who like to read. Lots of spoilers for those who like to read diagonally. Video, for those who love videos. Sketch for those who like to immediately copy and run “on the knee”. Photo, photo, photo. Cat, for cat lovers.

Not really a disclaimer

This is my first project, apart from blinking LED, Hello world, etc. According to tradition, you must first sprinkle ashes on your head to ensure that the code is far from perfect and be sure to get involved in a dispute about this. And also regarding the partial copying of code from another project, ask not to hit too hard, etc. But this won't happen. The code is perfect! Because it works, I like it and I made it for myself.
I’ll give advice to those who are interested: don’t be afraid, join the battle, shovel mountains of code, build your own mega-pyramids from different operators. Over time, style, sophistication, and ideal will come.
As long as there is space in the controller's memory, you are not afraid of anything. If you hit a wall, you will optimize. And this is also development. It's important.
A big book on C programming - yes, useful. But, at first, it is much more useful to have a quick reference guide on commands at hand and keep in your bookmarks several links to working with simple examples, libraries, etc., like, or the same Ampere.
Also, flowcharts help me a lot. Rectangle, diamond, oval. Anyone who has encountered it understands. I'm doing one project now - I can't do it without a flowchart. For me, it’s better to draw for several days - redraw on paper in order to more clearly imagine the entire flow of the program, than to jot down a bunch of code and get stuck in it, because... I do not have the ability to cover the entire code with the power of my programming thoughts, due to my limited experience.
For those who want to repeat it or do it their own way, I will answer all questions.
I will not enter into empty disputes about my writing, style, design, code and necessity of the product, etc. If I made a serious mistake somewhere in the review, I’ll correct it or add it.

You can Google what “The Most Useless Device” is. I came across it by accident. This code was taken as a basis, because it didn’t launch on its own, and I wanted to make my own scripts.

Lyrical digression

They say that after forty, especially when you are already very much after forty, you need to try to “flex” your brain. And that learning languages ​​is the best warm-up. And not only at that age. I'm not very good at languages, but the Health magazine seems to advise... In general, I decided to learn something new for myself. Electronics is not new to me, although I have forgotten most of it, but programming has never been familiar to me. I was afraid of him. But here many signs from above coincided: the magazine “Health”, which recommends learning something new, a long-standing dream to understand (at least a little) programming (at least something) and youtube, in which only the lazy do not talk about how to blink an LED using smart fee for a dollar and a penny.
Before this, I managed the LED blinking pretty well using two transistors, a capacitor and a pair of resistors, but now, they say, it’s not comme il faut. So you need to be in trend.


I really liked this useless, in the literal sense of the word, device. I saw it and fell in love. I want it, that’s all! Like a child's dream! But age has made its own adjustments. I want to make it myself, not buy it. Especially since it's on sale simple devices. I came across an “intellectual” one, but I couldn’t find anything like it on sale. Moreover, it must be done!
And again, Arduino. And I don’t boom-boom in it. So we need to figure it out. Aliexpress to the rescue. I started with Arduino. I understood that the path to study would be thorny and sacrifices were inevitable. So I ordered five different ones. Let them burn, if anything. Debugging of the circuit took place on Uno from another seller. But, since this particular board was in the final device, it was included in the title.
In addition to Arduinos, I ordered a huge amount of all kinds of junk, both Arduino-compatible and near-Arduino. Here I will only tell you about what was useful in this product.

Arduino Pro Mini


Delivery is fast, packaged in a standard antistatic bag and envelope with a pimpled inner surface. The seller is sociable, Russian-speaking.
On a 328 chip. 3.3 volts, 8 MHz. Why is this so? Yes, by mistake. I wanted 5 volts, 16 MHz, but bought this one. It's my own fault. However, for this project it is not critical - I installed an extra voltage converter. That's all. I didn't find any huge differences from other Minis. The brand difference is black textolite(?). Of the jambs: the RAW pin does not work on the board. But that didn’t stop either. Although, a 3.3 V converter could save money with it. The combs are not soldered. The board is made well.
Why so short? Because there is already bias about this seller and his fees (clause 18). Those who want can find it easily. There is no point in retelling it. I also added my two cents in the comments to it. And I corresponded with the seller a lot.


Servo drive SG90


$3.2 per lot of two pieces.
There is nothing special to describe. Weak servo drive with average positioning accuracy, which is highly dependent on the speed of movement. But it's cheap. For the lid drive - more than enough, for the “hand” - on the verge of possibilities. It requires 5 volts to operate, but 3.3 is sufficient for control. I tried to control it through the converter and directly from the Arduino - there is no difference. Therefore, the level converter saved money.


Charge controller and power converter


$2.28 for five pieces. With protection. While charging, the red LED is on; when charging is complete, the blue LED is on. There was a review here.


$0.50 each. Delivery, however, is paid, but I bought a whole bunch of other things from this store, so delivery was not annoying. The USB socket was removed to lighten the weight))) The output produces 5.12 volts.





I took it offline. A little tight. To facilitate the operation of the servo, it was possible to disassemble it, shorten the spring or replace it with a weaker one. But laziness won. I put it like this. True, I had to write in the code additives to the angle of rotation of the servo at high speeds.


TTL converter


$1.5 per piece. Actually, I ordered it first. It's half the price. But, for some strange reasons, he died a heroic death. I still don’t understand how I killed him. For this reason, the project stalled for a month until a new, more advanced one arrived - no need to press reset. Isn't this progress?


The rest is from storage

Voltage regulator 1117T-3.3V in TO220 housing, capacitors 1500.0x6.3 and 470.0x16, two 0.1 μF capacitors, white LED and microswitch from a children's car, 220 Ohm resistor. The battery had been lying around unused for several years. I once took apart a burnt (literally) portable DVD player. The only good thing there was the batteries that survived. Here is one of them that came in handy. Voltage 3.7 V, I didn’t find the capacity in the labeling.
Glue gun, elastic band for money, two hooks from... a bra (thanks to my wife. Darling, I love you!), two furniture dowels, four screws, four adhesive bumpers for furniture doors, a piece of a breadboard, wires, connectors.


The situation with the hull was more complicated. Many boxes have been tried. The plastic box from the Tissot watch turned out to be fragile, partly cardboard. But the metal curtains from it came up. There's even one left in stock. I tried ready-made perfume cases, a wine box, and a candy box. In the end, I decided to do it myself.
High-quality plywood, most likely birch, was found in a children's burning kit. The child has grown up - the set remains. On one side there was a drawing, but the other side looked to put it bluntly, excellent

Simply put, great

At school we had a Trudovik. Aged. In general, he is a wonderful person. He was respected. When we went through electricity, using the example of a battery, a light bulb and a key, he gave us a lecture.
“There is current in the battery. Now he comes out of the positive and follows the wires. It goes, goes, suddenly bam - the key is on the way. And the key is open. Tok understands that there is nowhere to go further. He turned around and went into the battery. And the light doesn't light up. We close the key. The current started flowing again, reached the key, passed through it, passed through the light bulb and returned to the battery. And the light bulb is lit, frankly speaking, perfectly.” Since then, there has been such a phrase in the lexicon, as a synonym for something unexpectedly successful.




I tried cutting plywood with a hacksaw and a jigsaw, but it didn’t work. Chips, which are then difficult to remove, and an uneven edge. I found a way out - a sharp stationery knife. It cuts through half of the plywood on one side and half on the other. Then a little sanding and everything is fine. But, with a good metal ruler and a constantly sharp blade, you get a perfect cut and a straight line.
Of course, not without its flaws - under the Hand made sticker there is a banal hole hidden. I drilled it in the center for the toggle switch. But the servo didn’t fit. I had to move the toggle switch to the side and close the hole. Such difficulties do not frighten me.
I don’t see the point in describing every sneeze involved in making the device. I will describe some points. And he who has hands, let him do it.
I assembled the box using hot melt glue. I didn't spare the glue itself. It holds up perfectly. Doesn't creak, doesn't play. Fast, cheap and cheerful. And in general, as you noticed, almost everything is held together by this glue. I recommend. It greatly speeds up the assembly process. I glued the switch-off microphone from the inside to the left wall - it can be seen a little in the photo.
The lid was attached to the curtain.

I suffered with the veil. I experimented a lot. I wanted the lid to be located on top of the box, and not inside. I even bent several versions of staple curtains from paper clips. Poe later remembered that during the experiments, the curtains from the box of Tissot watches caught his eye. So good, Swiss (Chinese?).
The veil is an important thing. Its quality is very important for the overall external beauty devices.
The main toggle switch needs to be softer, then it will work easier.
The lid is returned to the closed position by an elastic band. There is no need to choose it very rigid - the servo will handle it, but if the curtain is centrally located, the lid will warp.
In the case of plywood, varnishing is mandatory - it gets very dirty. I used clear tsapon varnish. Simply because there was no other one at hand.
It is better to position the servo that controls the “hand” differently. Not on the side, but in front of the toggle switch. Then the “arm” may be simpler to manufacture - L-shaped, instead of U-shaped. The width of the box can be reduced and the toggle switch can be placed in the center.
It is better to rotate the lid servo 180 degrees, then in the code it will be easier to associate the degrees of this servo with the operation of the lid. For me it’s the other way around, so opening means decreasing degrees. But for the “hand” it’s the other way around. And it is more correct to push the lid from the same side from which the elastic band is pulling it back.
The box should not be made too small. It won't be convenient to use. But a flatter one is acceptable. The box is light and if it is flatter it will be more stable. It will be more convenient to push the toggle switch with your finger without holding the box.
I made something like a shield out of two pieces of a breadboard. Soldered into Arduino without connectors. Tightly. I do not mind.


But I made all the peripherals on connectors. It is more comfortable.
Capacitor large capacity Power supply for the arduino (3.3 volts) is required. Without it, the Arduino hangs.
I do not have assembly drawings of the device. It is so simple that many others can be used simple solutions, on which all mechanics are based. In the video, both mine and other similar devices, you can see the drive options used.

#include #include Servo doorServo; //cover servo drive Servo handServo; //arm servo Bounce bouncer = Bounce(12, 40); //create an instance of the Bounce class for pin 12 of the toggle switch int pos = 0; //starting position variable int pos1door = 70; //initial position of the lid servo int pos2door = 30; //final position of the cover servo int pos1hand = 10; //initial position of the hand servo int pos2hand = 160; //final position of the arm servo int r; //random number on which the option to turn off the toggle switch depends #define LED_PIN 11 // number of the output connected to the LED int ledState = LOW; // set the state of the LED with this variable long previousMillis = 0; // store the time of the last switching of the LED #define INTERVAL 30UL // interval between turning the LED on/off void setup() ( pinMode(LED_PIN, OUTPUT); pinMode(12, INPUT); // switch pin 12 to input mode digitalWrite(12, 1); //turn on the pull-up resistor on it Serial.begin(9600); //set the port to a speed of 9600 bps. For debugging. Then you can remove it. doorServo.attach(9); //assign the lid servo to pin 9 handServo.attach(10); //assign the hand servo to pin 10 doorServo.write(pos1door); //set the lid servo to the initial position handServo.write(pos1hand); //set the hand servo to the initial position ) void loop() ( if (bouncer.update()) ( if (bouncer.read()==0) ( //if the button is pressed ( r = random(0,11); //generate a random number jn 0 to 10 Serial.println® ; if (r == 0) ( move_0(); ) //call the function using a random number else if (r == 1) ( move_1(); ) else if (r == 2) ( move_2(); ) else if (r == 3) ( move_3(); ) else if (r == 4) ( move_4(); ) else if (r == 5) ( move_5(); ) else if (r == 6) ( move_0(); ) else if (r == 7) ( move_1(); ) else if (r == 8 ) ( move_4(); ) else if (r == 9) ( move_3(); ) else if (r == 10) ( move_0(); ) ) ) ) // Function library. General principle: open the lid - stick out your hand and turn off the toggle switch - remove your hand - close the lid // and there are options for how to decorate it beautifully............ void move_0())( //simple option: opened-turned-closed //open the lid for(pos = pos1door; pos >= pos2door; pos -=3) ( doorServo.write(pos); delay(15); ) //stick out your hand for(pos = pos1hand; pos<= pos2hand; pos +=3) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand; pos >= pos1hand; pos -=3) ( handServo.write(pos); delay(15); ) //close the lid for(pos = pos2door; pos<= pos1door; pos +=3) { doorServo.write(pos); delay(15); } } void move_1(){ //простой вариант 2: открыли-выключили-закрыли //открываем крышку for(pos = pos1door; pos >= pos2door; pos -=1) ( doorServo.write(pos); delay(15); ) delay(1000); //stick out your hand for(pos = pos1hand; pos<= pos2hand; pos +=1) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand; pos > <= pos1door; pos +=5) { doorServo.write(pos); delay(15); } } void move_2(){ //задумчивый вариант 2: приоткрыли-закрыли-открыли-выключили-закрыли //открываем крышку for(pos = pos1door; pos >= pos2door+15; pos -=5) ( doorServo.write(pos); delay(15); ) delay(1000); //close the lid for(pos = pos2door+15; pos<= pos1door; pos +=5) { doorServo.write(pos); delay(15); } delay(1000); //открываем крышку for(pos = pos1door; pos > <= pos2hand+2; pos +=5) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand+2; pos >= pos1hand; pos -=5) ( handServo.write(pos); delay(15); ) //close the lid for(pos = pos2door; pos<= pos1door; pos +=5) { doorServo.write(pos); delay(15); } } void move_3(){ //дерганый вариант: приоткрыли-подергали - закрыли-открыли-выключили-закрыли //открываем крышку for(pos = pos1door; pos >= pos2door+15; pos -=1) ( doorServo.write(pos); delay(50); ) delay(500); //pull the lid for(int i=1; i<=8; i ++) { doorServo.write(pos2door+18); delay(80); doorServo.write(pos2door+15); delay(80); static unsigned long previousMillis = 0; if(millis() - previousMillis >INTERVAL) ( previousMillis = millis(); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); ) ) delay(500); //close the lid for(pos = pos2door+15; pos<= pos1door; pos +=1) { doorServo.write(pos); delay(50); } delay(1000); //открываем крышку for(pos = pos1door; pos >= pos2door; pos -=5) ( doorServo.write(pos); delay(15); ) //stick out hand for(pos = pos1hand; pos<= pos2hand+2; pos +=5) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand+2; pos >= pos1hand; pos -=5) ( handServo.write(pos); delay(15); ) //close the lid for(pos = pos2door; pos<= pos1door; pos +=5) { doorServo.write(pos); delay(15); } } void move_4(){ //открываем крышку delay(2000); for(pos = pos1door; pos >= pos2door+15; pos -=5) ( doorServo.write(pos); delay(50); ) delay(500); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); delay(2000); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); delay(500); //close the lid for(pos = pos2door+15; pos<= pos1door; pos +=5) { doorServo.write(pos); delay(50); } delay(1000); //открываем крышку не полностью for(pos = pos1door; pos >= pos2door+15; pos -=1) ( doorServo.write(pos); delay(50); ) delay(2000); //open the lid completely for(pos = pos2door+15; pos >= pos2door; pos -=1) ( doorServo.write(pos); delay(15); ) //stick out your hand for(pos = pos1hand; pos<= pos2hand-35; pos +=1) { handServo.write(pos); delay(35); } delay(1000); //высовываем руку for(pos = pos2hand-35; pos <= pos2hand+3; pos +=4) { handServo.write(pos); delay(15); } //убираем руку for(pos = pos2hand+3; pos >= pos1hand; pos -=7) ( handServo.write(pos); delay(15); ) //close the lid for(pos = pos2door; pos<= pos1door; pos +=7) { doorServo.write(pos); delay(15); } delay(500); //открываем крышку for(pos = pos1door; pos >= pos2door+20; pos -=5) ( doorServo.write(pos); delay(50); ) delay(300); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); delay(500); digitalWrite(LED_PIN,!digitalRead(LED_PIN)); delay(100); //close the lid for(pos = pos2door+20; pos<= pos1door; pos +=1) { doorServo.write(pos); delay(50); } } void move_5(){ //возня for(int i=1; i <=2; i ++) { for(pos = pos1door; pos <= pos1door+45; pos +=5) { doorServo.write(pos); delay(50); } for(pos = pos1door+45; pos >= pos1door; pos -=5) ( doorServo.write(pos); delay(50); ) delay(100); ) //pull the lid for(int i=1; i<=3; i ++) { doorServo.write(pos1door-6); delay(80); doorServo.write(pos1door-3); delay(80); } delay(300); //открываем крышку digitalWrite(LED_PIN,!digitalRead(LED_PIN)); for(pos = pos1door; pos >= pos2door+25; pos -=5) ( doorServo.write(pos); delay(50); ) delay(500); //open the cover digitalWrite(LED_PIN,!digitalRead(LED_PIN)); for(pos = pos2door+25; pos >= pos2door+10; pos -=5) ( doorServo.write(pos); delay(50); ) //open the door digitalWrite(LED_PIN,!digitalRead(LED_PIN)); for(pos = pos2door+10; pos >= pos2door-5; pos -=2) ( doorServo.write(pos); delay(50); ) //stick out your hand for(pos = pos1hand; pos<= pos2hand-35; pos +=9) { handServo.write(pos); delay(35); } delay(1000); //убираем руку for(pos = pos2hand-35; pos >= pos2hand-70; pos -=1) ( handServo.write(pos); delay(15); ) delay(1000); //stick out your hand for(pos = pos2hand-70; pos<= pos2hand+3; pos +=9) { handServo.write(pos); delay(15); } delay(50); //убираем руку for(pos = pos2hand+3; pos >= pos1hand; pos -=7) ( handServo.write(pos); delay(15); ) //close the cover digitalWrite(LED_PIN,!digitalRead(LED_PIN)); for(pos = pos2door-5; pos<= pos1door+3; pos +=5) { doorServo.write(pos); delay(50); } }

The sketch suggested by the author from the link at the beginning of the review did not work for me. And I was not yet the pro that I am now)))))))
In general, I began to understand. As a result, based on someone else’s, I made my own sketch. Added anti-bounce protection. It would have been easier, of course, to install a resistor with a capacitor, but I really wanted to program it.


In principle, the scheme is clear from the sketch. But I’ll bring her anyway. Sorry for the quality - as best I could. I took a slightly different converter board - I didn’t find it needed in the front view.


There are no special explanations for the sketch. Perhaps the moment of adding a few degrees of rotation angle, when the servo speed is high. I noticed that if the “hand” jumps out suddenly, it does not turn off the toggle switch. This is obviously due to the poor quality of the servos. Therefore, you need to add a little to the angle of departure of the “arm”. I suspect that with repetition, these additional degrees may be different for you. Depends on the shoulder of the “arm”.
And about the programs. So far there are six programs. Called through random number generation. Moreover, simple programs (0, 1 and 2) are called more often than ordinary ones. It seemed to all my testers that more sophisticated programs should be a rare pleasant bonus, then a certain intrigue appears. So I did.
For lovers of numbers, the size of the box is: length - 150mm, height - 70mm, width - 65mm.

Youtube has greatly degraded the quality. If you need to look at the original, download it. 21 MB.
Here the sketch has been modified to allow you to see all six programs in turn so that you have an idea of ​​them all. In life, as I wrote, they have a pseudo-random order.



Charging is done via micro-USB with a regular mobile charger. Battery life is highly dependent on frequency of use. Sometimes for several days, and sometimes I “kill” in a day.


Lastly.
The project, however, can be further developed and improved. You can come up with new scenarios. You can add a tweeter and voice the device. For example, let him “growl”, like get angry, if the time between turning off and turning on the toggle switch is very short. You can, as in the original project, add movement of the box in different directions.
You can build in a check for the case when the “hand”, for some reason, did not turn off the toggle switch (for example, in the cold, the servo does not reach the desired angle quite a bit) and adjust the angle one at a time, writing some kind of “nervous” message specifically for such a case » shutdown program. You can install the Nano and program via USB without disassembling the device each time.

And in general – you can do it more carefully. There are many different things possible. Actually, this is exactly what I suggest doing to those who are interested in this.
Maybe I missed something. This is a bit of a review for such a simple device. This is what I can apologize for.
Now the cat and thank you for reading to the end.

$6.3 (currently 1.43)

I bought an Arduino Pro Mini complete with a USB-UART adapter on a CP2102 chip 1.5 years ago (prices for them have dropped significantly since then) and they have been lying on my shelf all this time. Everyone couldn't get around to doing anything on this controller. An important role in this was played by the fact that flashing a sketch in Arduino Pro Mini, although not difficult, is a little more difficult than in Arduino UNO, Mega or Nano.

And so I decided to use this controller in one of my projects, it still lies idle.

Arduino Pro Mini DETAILS

ATmega168 or 328

Operating Voltage

3.35 -12 V (3.3V model) or 5 - 12 V (5V model)

Digital I/O Pins

14 (of which 6 provide PWM output)

Analog Input Pins

DC Current per I/O Pin

16 KB (of which 2 KB used by bootloader)

8 MHz (3.3V model) or 16 MHz (5V model)

I happened to have a 16MHz 5-volt model on an ATmega 328 chip. As it turned out when analyzing data from the Internet, there are controller boards that do not have the DTR signal routed. In my case, everything is wired correctly. The kit included a USB-UART converter.

The platform contains 14 digital inputs and outputs (6 of which can be used as PWM outputs), 6 analog inputs, a resonator, a reset button and pin mounting holes. A block of six pins can be connected to a USB-UART converter board.

Arduino Pro Mini is very similar in its technical characteristics and parameters to Arduino Nano. They are the same size in width, but the length of the Arduino Pro Mini is about 1 cm shorter.

10 mm is a lot. But if you solder the pins for connecting USB-UART into the board, all the advantages of this board over the Nano disappear. At the moment, Arduino Pro Mini costs $0.25 less than Arduino Nano. It's immaterial. There are no more advantages and disadvantages, only disadvantages.

And the main disadvantage is the more complex loading of sketches.

There are several ways to flash a sketch.

One way is to use an Arduino UNO as a USB-UART. There are a lot of instructions on the Internet on how to do this, so I won’t dwell on it.

The second way is to use the USB-UART adapter itself. I have it, and the “correct” one, so I decided to use it. How does the adapter work? Arduino communicates with the converter chip via a regular UART, and connects to the computer via USB. The computer recognizes the connected adapter as a COM port.

Uploading the sketch to the Arduino Pro Mini, as it turned out later, is not at all difficult. You just need to connect the wires from the set of 5 pins on the adapter and Arduino:

(Converter)<->(Arduino)

DTR<->GRN
TXD<->RXI
RXD<->TXO
GND<->GND
5V<->VCC

On my Arduino Pro Mini the DRT signal is labeled GRN. It was not easy to guess what was what, especially since on one of the sites a “kind” advisor wrote that GRN needs to be connected to GND. Well, the Internet is a big garbage dump, and this is not the first time I’ve been convinced that the people most willing to give advice on forums are not those who really understand the subject under discussion. So, GRN is DTR.

For those who don't know what DTR is:
Data Terminal Ready (DTR) - control signal in serial data protocol, transmitted from terminal equipment (DTE) to the receiving equipmentto indicate that the terminal is ready for communication.

In Arduino, the DTR signal initiates the Reset signal the moment the sketch starts transferring.

Possible instead of DTR connection<->GRN connect the DTR adapter through a 0.1uF capacitor to Reset Arduino Pro Mini. It works that way too, tested. It is through the capacitor. Despite the fact that it is written on forums and many sites that you need to connect DTR and RESET directly, with a direct connection the sketch is not transferred. At least nothing worked for me with a direct connection.

Theoretically, as they write on the Internet, you can record a sketch without DTR by pressing reset on the controller board exactly at the moment the recording begins. I tried several times to catch this moment, but I couldn’t. I didn’t train my skills in trying to reset at the right time; it’s easier to trust the CP2102 converter chip to supply the Reset signal.

But not all CP2102 are created equal. There are a lot of cheap fakes sold on eBay and AliExpress that people struggle with and often have to modify so that they can record a sketch in the Arduino Pro Mini. In these adapters, the DTR signal from pin 28 of the CP2102 chip is not routed. Some have the Rx and Tx markings mixed up. That’s why there are so many instructions on forums online that contradict each other and sometimes simply mislead readers. I spent about two hours reading these nonsense (I didn’t want to reinvent the wheel, I thought I’d save time) and trying to write a sketch into the controller using these instructions. As a result, all the instructions turned out to be non-working for my CP2102 adapter. It turned out to be the “correct” one, in which the correct markings were applied and all the signals were correctly routed.

It was enough just to connect all the wires and everything worked.

Therefore, if you are faced with the need to record a sketch in Arduino Pro Mini via USB-UART, first check whether the DTR signal is routed on the Arduino Pro Mini board. I read that there are boards on which it is not routed. In this case, you can use the option of connecting the DTR signal from the USB-UART adapter board to the RESET pin of the Arduino Pro Mini via a 0.1-0.15 µF capacitor.

Secondly, check whether the DTR signal is connected to any pin on the USB-UART adapter board. The pin can be, and even be signed as DTR, but not connected to pin 28 of the CP2102 chip. If pin 28 of this microcircuit is not connected anywhere, you need to ensure its connection to the DTR pin. If pin 28 is connected somewhere in the circuit, this track needs to be cut and connected directly to the DTR pin.

The correctness of Rx and Tx markings on a fake CP2102 board can be determined experimentally; there are only 2 options.

I also read instructions on the Internet that you need to record a sketch using the USB-UART adapter CP2102 in the “Upload via programmer” mode, supposedly this is the only way everything works. I don’t know whether the author of this opus is deliberately misleading readers, or whether he had something other than a CP2102 USB-UART adapter, but this advice is WRONG!

Through the USB-UART adapter CP2102, the computer sees the Arduino Pro Mini as if it were connected to a COM port, that is, just like other Arduinos that have a USB-UART adapter on board.

Therefore, sketches are uploaded to Arduino Pro Mini in the same way as to other Arduino models. You only need to select the Pro Mini model in the Arduino programming environment, then in the additional item that appears, select one of 4 possible types of processor (ATmega168 or 328, 3.3 or 5V) and the virtual COM port that appeared after installing the USB-UART adapter drivers. Then you can use the download button or Ctrl-U. If everything is connected correctly, the type and model of the adapter does not matter, the sketches are uploaded via UART. We simply select the COM port that the adapter is determined by.

After 2 hours of reading forums and sites with “guides” and “tips”, which were 99% incorrect, at least they were not suitable for my specific Arduino Pro Mini models and USB-UART adapter CP2102, I managed to connect and upload everything correctly into the controller a slightly modified sketch of LED blinking. I made him blink SOS in Morse code.

Here's a sketch, in case anyone is interested:

// the setup function runs once when you press reset or power the board
void setup() (
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() (
delay(100); // wait
delay(300); // wait
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(300); // wait
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(300);
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(300); // wait
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(300); // wait
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(300); // wait
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(300); // wait
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(300); // wait
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(300); // wait
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(300); // wait
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(300); // wait
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(300); // wait
delay(1500); // wait 1.5 sec.
}

Conclusions:

If I had not tried to save time by “reinventing the wheel” and had not spent time reading useless (even rather harmful) tips and guides on forums and websites, connecting and flashing the Arduino Pro Mini would have taken not 2 hours, but a maximum of 5-10 minutes .

I bought my set of Arduino Pro Mini and USB-UART adapter CP2102, which by today's standards was quite expensive. The truth is that I am consoled by the fact that the adapter is correct and all the signals are connected to it.

Arduino Nano is identical in parameters and capabilities to Arduino Pro Mini, costs just a little more (maximum 25-50 cents), loses 1 cm in size (and with soldered pins the Arduino Pro Mini does not lose at all), but is much more convenient in use due to the built-in USB-UART and the common MicroUSB connector.

Arduino Pro Mini is not the most popular board, type “Arduino Nano” in a search on eBay and sort by price in ascending order and you will see how the cunning Chinese are very cheaply selling a lot of Arduino Pro Minis in this section, passing off as Nano? in the hope that the buyer will not figure it out and, taking advantage of the low price, will buy these controllers. They have all their hope only in customers who are suckers.

Would I recommend buying an Arduino Pro Mini? For a beginner - no. Yes - to a person who knows exactly what it is, what disadvantages it has and whether they are worth the meager savings.

I repeat once again that flashing the Arduino Pro Mini is not difficult, but is this fuss with connecting the wiring or the Arduino UNO worth the price difference of $0.2-$0.25. Especially if you have to connect the controller to the computer for debugging many times, but what if it’s in a case? If you think that connecting and disconnecting 5 wires ten to fifteen times is more profitable than paying 20 cents, this controller is for you.

That's all. I shared my experience and expressed my opinion, it’s up to you to decide.

P.S. A little time passed and I somewhat changed my opinion about the Arduino Pro Mini. Even a savings of 25-50 cents is a lot, especially if a small batch of products using this controller is assembled. It is clear that for a small batch it is better to integrate the controller directly onto the board, rather than using a ready-made Arduino (this is still more of a debugging board). But there are different options, sometimes there are already ready-made boards and you can upgrade them and expand their functionality by integrating Arduino. It will be cheaper than building new boards.

And the presence of a USB-UART adapter on board the product handed over to the user is completely unnecessary and even harmful. So Arduino Pro Mini has the right to life.