Chinese Arduino UNO Clones - The Wavgat versus the generic UNO R3 Clone - The Winner Is?


 
Thread Tools Search this Thread
Top Forums Programming Chinese Arduino UNO Clones - The Wavgat versus the generic UNO R3 Clone - The Winner Is?
# 1  
Old 12-27-2019
Chinese Arduino UNO Clones - The Wavgat versus the generic UNO R3 Clone - The Winner Is?

Waiting for more fun Ardunio parts from AliExpress, I decided to test two cheap Chinese Arduino UNO clones.

Both of these Chinese Ardunio clones sell for about $3 USD, delivered to your door.

The bottom line is that the Wavgat requires extra "poorly written" board management Arduino IDE code, which is buggy and hard to install; and delivers less power on the analog pins.

The generic UNO R3 board management software "out of the box" works flawlessly in the Ardunio IDE and requires zero extra frustrating set up time. Also, this board delivered more power to the analog pins.

Chinese Arduino UNO Clones - The Wavgat versus the generic UNO R3 Clone - The Winner Is?-screen-shot-2019-12-27-15203-pmjpg


Chinese Arduino UNO Clones - The Wavgat versus the generic UNO R3 Clone - The Winner Is?-arduino_uno_r3_cnjpg


On both devices, I ran the same "sync with my mac and get the unix time stamp" code I drafted a few days ago:

Code:
/*
  Sync UNIX Time with Computer and
  LCD Display with I2C on Arduino UN0
  Rough Draft 0.121  (needs improvements)
  Neo December 2019
  https://www.unix.com
*/
// Include Wire Library for I2C
#include <Wire.h>
// Include NewLiquidCrystal Library for I2C
#include <LiquidCrystal_I2C.h>
#include <Time.h>
#include <TimeLib.h>

#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by Unix time_t as ten ASCII digits
#define TIME_HEADER 'T' // Header tag for serial time sync message
#define TIME_REQUEST 7  // ASCII bell character requests a time sync message
#define DEBUG_SKETCH false
#define ENABLE_LED_A0 true
// Define LCD pinout
const int en = 2, rw = 1, rs = 0, d4 = 4, d5 = 5, d6 = 6, d7 = 7, bl = 3;
// can be any integer greater than zero and less than recent unix time
const int time_int = 10;
// Define I2C Address - change if reqiuired
const int i2c_addr = 0x27;
String s;
bool flag = true;
time_t t = now();
LiquidCrystal_I2C lcd(i2c_addr, en, rw, rs, d4, d5, d6, d7, bl, POSITIVE);
void setup()
{
    Serial.begin(9600);
    Wire.begin();
    time_t t = now();
    lcd.begin(16, 2);
    lcd.clear();
    if (ENABLE_LED_A0)
    {
        pinMode(LED_BUILTIN, OUTPUT);
        pinMode(A0, OUTPUT);
        pinMode(13, OUTPUT);
    }
}

void loop()
{
    lcd.clear();
    if (ENABLE_LED_A0)
    {
        // pinMode(LED_BUILTIN, HIGH);
        digitalWrite(A0, HIGH);
        digitalWrite(13, HIGH);
    }
    int count = 0;
    if (Serial.available() and flag)
    {
        lcd.clear();
        lcd.setCursor(0, 1);
        lcd.print("Serial OK");
        count = processSyncMessage();
        //Serial.println("Serial Available: " + count);
        if (count > time_int)
            flag = false;
    }
    lcd.setCursor(0, 0);
    if (timeStatus() == timeNotSet)
    {
        if (flag)
        {
            Serial.println("waiting for sync message");
            lcd.print("Arduino Time:");
        }
    }
    else
    {

        lcd.print("Unix Time:");
        if (DEBUG_SKETCH)
        {
            Serial.println("Time Synced");
        }
    }
    t = now();
    int s = int(t);
    if (s != 0)
    {
        lcd.setCursor(0, 1);
        lcd.print(t);
        lcd.print(" secs");
        if (ENABLE_LED_A0)
        {
            digitalWrite(A0, LOW);
            digitalWrite(13, LOW);
            //pinMode(LED_BUILTIN, LOW);
        }
    }
    Serial.println(s);
    delay(1000);
    lcd.clear();
}

int processSyncMessage()
{
    while (Serial.available() >= TIME_MSG_LEN)
    { // time message consists of header & 10 ASCII digits

        char c = Serial.read();
        int count = 0;
        Serial.print(c);
        time_t pctime = 0;
        if (c == TIME_HEADER)
        {
            for (int i = 0; i < TIME_MSG_LEN - 1; i++)
            {
                c = Serial.read();
                if (c >= '0' && c <= '9')
                {
                    Serial.print(c);
                    count++;
                    pctime = (10 * pctime) + (c - '0'); // convert digits to a number
                }
            }
            Serial.print("\n");
            if (DEBUG_SKETCH)
            {
                Serial.write(pctime + "\n");
                Serial.println(pctime);
            }
            setTime(pctime); // Sync Arduino clock to the time received on the serial port
        }
        return count;
    }
}

My new Rigol 1054Z scope has not arrived yet, so this comparison was not really a proper bench test and I don't claim to be a very detailed "bench tester" anyway. I don't have a proper lab set up yet. However, I do have a very cheap Chinese tabletop microscope which I keep from falling over with two rubber bands Smilie

Chinese Arduino UNO Clones - The Wavgat versus the generic UNO R3 Clone - The Winner Is?-img_8738jpg


Chinese Arduino UNO Clones - The Wavgat versus the generic UNO R3 Clone - The Winner Is?-img_8737jpg


The fact that the analog pins on the Wavgat put out a lot less power than on the generic UNO clone is not really a big deal; but in practice, I could only drive one small off-board LED in series with the Wavgat, but I could drive two in series with the generic UNO.


The BIG showstopper for the Wavgat was the hours it took me to actually edit the board management code to remove all the errors. For example, in many files, the include paths had "\" (backslashes) like on a Windows machine versus the "/" forward slashes (did I get the names of those slashes right?) used on unix-like machines. Not very good porting!! What were they thinking?! This was a real PITA - to go in and edit all the Wavgat board management code to get it to work on macOS. I assume Linux and other unix-like machines will have the same issue.

So, my advice is to avoid the Wavgat Arduino UNO clone like the plague and go with the generic UNO clone, like the one depicted above (marked UNO). The Wavget is not a true Arduino clone because some oddball USB serial drivers (I assume the chip is different but have not yet looked into it) and requires a lot of "time wasting" debugging to get it to work. For what, I ask? Both board are $3 USD delivered to your doorstep from AliExpress.

Chinese Arduino UNO Clones - The Wavgat versus the generic UNO R3 Clone - The Winner Is?-s20191227_012jpg


Go with the Arduino UNO clone (board logo magnified above) which requires no C programming debugging and works out of the box.

Maybe someday I'll do a more "in-depth" four channel o-scope review, but I need it to arrive from China safely and unharmed first!

Let's see what arrives in the mail from China and in what order..... whatever will be will be.

Happy Creative Arduino Hacking!

Edit: Updated code where there was a conflict regarding the onboard LED (digital pin 13), which I fixed (caused by alternating the same sketch between two different boards).
This User Gave Thanks to Neo For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Programming

Basic Arduino UNO Bluetooth Testing with the BLE 4.0 (CC2541, MLT-BT04 IC)

Here is a sketch to do basic testing for the Arduino UNO and the MLT-BT04. This BLE module works with IOS (iPhone) and I'll add some details on my IOS testing with an iPhone in a follow-up post. For now, here is the basic BLE (HM-10) sketch for the Arduino UNO: /* Arduino test-code... (7 Replies)
Discussion started by: Neo
7 Replies

2. Programming

Arduino UNIX Time - Syncing Computer UNIX Time to Arduino Time with Python

Just finished a quick Python script to send the current unix time over to the Arduino from macOS, so in the absence of GPS or some other way to get the unix timestamp (epoch time) to the Arduino, I can get my macOS and Arduino UNO synced to within a second. Normally, when the Arduino starts... (9 Replies)
Discussion started by: Neo
9 Replies

3. Programming

Arduino-cli - Uploading to Unknown Chinese Arduino Boards using the Arduino Command Line Interface

In my further exploration of Arduino, today I decided to install the arduino-cli on my mac today. https://github.com/arduino/arduino-cli I followed the instructions for macOS but when I got to this part: arduino-cli board list I got the dreaded "Unknown" Fully Qualified Board Name... (1 Reply)
Discussion started by: Neo
1 Replies

4. Programming

Very Basic Arduino Uno Board Testing

A very simple Arduino board test... LOL Here is some very easy code to test a cheap Arduino board I just got from China via Aliexpress. I am still waiting on a about 30 more orders from Aliexpress for more Arduino stuff. This was the first order which made it here. /* Arduino test-code... (18 Replies)
Discussion started by: Neo
18 Replies

5. Shell Programming and Scripting

How to write program that find winner who choose the smallest number. UNIX process?

In the game of “Unique”, multiple players privately choose an integer. They then reveal their choice. The winner is the player who chose the smallest unique number. The game is considered a draw if no unique integer was chosen. You would write a program that simulate such a game according to the... (1 Reply)
Discussion started by: dantesma
1 Replies

6. UNIX for Dummies Questions & Answers

Updating git clones

Hi, I'm fairly new to the git command and I'm trying to figure out how to check if your local clone is up to date with the master. I know you can do the same thing on packages with apt-get by using update and then upgrade. Is there something similar with git? (0 Replies)
Discussion started by: silverdust
0 Replies

7. Solaris

Mount Emc Clones in VxVm

The Storage Admin presents a clone of a LUN, on the source side the device is under VxVM control, assuming that on the target side we have scanned the new cloned LUN at the OS level (solairs), from there on how do we initialize and mount the new volume. Please give some guidence on this or a... (1 Reply)
Discussion started by: Tirmazi
1 Replies

8. Programming

Wait for clones

Hi, I have a methode creating several clones with the following flags: CLONE_VM | CLONE_THREAD | CLONE_SIGHAND How to tell the parent process to wait for the clones' completion? pid = clone( ...) waitpid(pid, NULL , 0) always returns me -1 waitpid(-1, NULL, 0) does the same. (1 Reply)
Discussion started by: The-Forgotten
1 Replies

9. UNIX for Dummies Questions & Answers

CTRL+H versus ^? versus BACKSPACE

Hi Gurus! I recently got my shell account (HP UX v11) created by our sysadmin and am having problem deleting with the backspace key. After doing some reading, I believe I need to enter a custom "STTY..." statement in my profile. Can someone please help me with the correct "STTY" sequence... (3 Replies)
Discussion started by: alan
3 Replies
Login or Register to Ask a Question