Merged Manual
Merged Manual
Arduino
Basic Programming & Applications
[under the aegis DBT STAR College scheme]
11 – 12 April 2018
organized by
Department of Physics
Acharya Narendra Dev College
(University of Delhi)
Govindpuri, Kalkaji, Delhi-110 019, INDIA
Hands – on workshop on
Arduino
Basic Programming & Applications
[under the aegis DBT STAR College scheme]
11 – 12 April 2018
Patron
Dr. Savithri Singh
Principal
Faculty Coordinator
Dr. V. Bhasker Raj
Student Coordinators
Mr. Jatinder Pal Singh
Ms. Priya Chopra
Arduino
Basic Programming & Applications
[under the aegis of DBT STAR College scheme]
11 – 12 April 2018
Programme
1. Introduction 1
7. Projects
To display the ASCII Table for different bytes available till date 25 - 26
8. Resources 62
Hands – on workshop on Arduino : Basic Programming & Applications
[under the aegis DBT STAR College scheme]
11 – 12 April 2018
INTRODUCTION
I am sure most of you in school must have seen the “Line Follower” robot and other simple robotics.
But, when putting one’s head about its functionality often ends up feeling baffled like a toddler. Not all
of us are engineers nor do we belong from the technical background. Fortunately in the 21st century,
things are getting really easy.
WHAT IS ARDUINO?
Arduino is an open-source electronics platform based on easy-to-use hardware and software. It is in-
tended for everyone (artists, designers and hobbyists) making innovative projects. Arduino boards are
able to read inputs as simple as light on a sensor, a finger on a button, temperature and then turn it into
readable output. It is basically a microcontroller. A micro-controller can be comparable to a little stand
alone computer. It is an extremely powerful device, which is able of executing a series of pre-
programmed tasks and interacting with extra hardware devices for input/output, unlike a microproces-
sor which only processes and also needs externally connected hardware for its functioning. Arduino
interacts with the physical world by taking inputs, processing (digital and analog signals) and then giv-
ing output in the usable format.
Thus, Arduino’s main focus is to provide interface for programs to implement in real time.
Cross-platform- The Arduino Software (IDE) runs on Windows, Macintosh OSX, and Linux
operating systems.
Simple, clear programming environment - The Arduino Software (IDE) is easy-to-use for
beginners, yet flexible enough for advanced users to take advantage of as well.
A stage to begin – It gives a platform to implement the ideas without much problem even when
it comes to the programming part.
The ‘Entry Level’ ones are the most basic microprocessors. The processor is available, one just
has to feed in the program and view the working.
The second level, ‘Enhanced Features’ has additional features besides the basic processing. For
example, shield. Shield into your own Arduino for convenient breadboard prototyping and
servo ports, with no soldering required.
The third, ‘Internet of Things’, provides Arduino with another attribute of the Ethernet port at-
tached to the board.
‘Education’, CTC 101, is a package for starters with a prototype to be made.
In the ‘Wearable’ section, the Arduino is the size of a button being so small it can be “stitched”
like a button. The working is as fine as any microcontroller with the size of a pea.
Finally, the “3-D Printer’ is self explanatory. This Arduino board is used for 3 D printers.
Getting started
Any Arduino board can be programmed using the Arduino software (IDE). Using this Interactive De-
velopment Environment (IDE), Arduino can be programmed with any computer. You can either access
this IDE on Arduino’s official website and code online with the Arduino web editor or you can
download the IDE on your computer and use it offline. To run this software, computer should have one
of the following operating systems installed:
Mac OS X or higher
Windows XP 32 or 64-bit, or higher
Linux 32 or 64-bit (Ubuntu or similar)
Let’s download and install the Arduino IDE. According to the operating system follow the given in-
structions.
1. Using a web browser such as Firefox, visit the software download page at
https://www.arduino.cc/en/Main/Software
2. Click the Linux 32-bit or 64-bit link, depending on your system and start the download.
3. Extract the downloaded file to a suitable location. This would create a folder with the same
name as that of the file.
4. Open terminal, change the present working directory to the folder that was created in the last
step.
5. Run the command chmod +x install.sh and then ./install.sh .
1. Using a web browser such as Firefox, visit the software download page at
https://www.arduino.cc/en/Main/Software
2. Choose the version you wish to download. You can choose between the Installer (.exe) and the
Zip packages. The first one installs directly everything you need to use the Arduino Software
(IDE), including the drivers. With the Zip package you need to install the drivers manually. The
Zip file is also useful if you want to create a portable installation.
3. When the download finishes, proceed with the installation and please allow the driver installa-
tion process when you get a warning from the operating system.
MAC OS X
1. Using a web browser, visit the software download page at
https://www.arduino.cc/en/Main/Software
2. Download the file. The file is in Zip format; if you use Safari it will be automatically expanded.
If you use a different browser you may need to extract it manually.
3. Copy the Arduino application into the Applications folder.
Make sure that you also have the matching USB cable for your arduino so that you are able to connect
it to the computer.
After installing the Arduino IDE, when you run it the following window will open up:
Arduino is programmed with a C/C++ ‘dialect’, its syntax, statements and most of the functions are
exactly like C++. It is really just C++ with domain specific libraries, all the C++ libraries cannot be
used due to the limited memory and processing power on the board. All arduino programs can be di-
vided in three main parts: structure, values (variables and constants), and functions. The arduino pro-
gramming language is really great for beginners but have some limitations (like you must have all your
files in the same folder).
A basic Arduino program(also known as a sketch) consists of two functions called setup() and loop()
as explained below:
setup(): This function is called once when a sketch starts after power-up or reset. It is used to initialize
variables, input and output pin modes, and other libraries needed in the sketch.
loop(): After setup() has been called, function loop() is executed repeatedly in the main program. It
controls the board until the board is powered off or is reset .
Apart from these two functions, we can introduce variables, constants, user-defined functions or inbuilt
functions anywhere as per our requirement like any other ordinary program.
An Arduino sketch is a set of instructions created in order to accomplish a particular task. Now, every
programming language has some rule regarding the way these instructions are written and executed.
Arduino follows the same basic rules and syntax (the way the statements or instructions are written in
the sketch) as that of C++. Let’s take a look at some basic programming fundamentals which every
programmer should know before writing a sketch:
if (condition)
{
statements
}
else
{
statements
}
Loops
‘For’, ‘while’ and ‘do while’ statements are used to repeat a certain block of statements for a speci-
fied number of times.
The two other variants of looping are the while loop and the do while loop which can also be used
as per the program’s requirement.
while (condition) do
{ {
statements statements
} }while (condition)
Functions
A function is a block of statements with a specific name that are executed whenever it is called.
Function can be defined by the user or inbuilt like the mathematical functions sin(), cos(), sqrt(),
pow() etc.
type FunctionName (parameters)
{
statements
}
Semicolon
A semicolon (;) musr be used to end a statement or else it will result in a compilation error.
Int x=2428;
Comments
These are the non-executable statements in the program. Comments can be single statement like
// a single line comment
pinMode(pin, mode)
It is used in the setup() block to configure a specified pin to behave as an INPUT or OUTPUT.
digitalRead(pin)
It is used to read the value from a specified pin. The result is either HIGH or LOW.
For example, the statement is such as:
value = digitalRead(pin)
digitalWrite(pin, value)
It is used to output logic level either HIGH or LOW to the specified pin.
analogRead(pin)
It reads the value from a specified analog pin and stores the value in form of an integer ranging
from 0 to 1023.
For example, the statement is such as:
value= analogRead(pin)
analogWrite(pin, value)
It writes an analog value to the output pin. The value can be specified ranging from 0 to 255, 0 meaning
0 V and 255 generating a steady 5 V output at the specified pin.
delay(ms)
Pauses the program for the specified amount of time in milliseconds.
millis()
It returns the time since the board began running the current program in milliseconds.
Serial.begin(rate)
It opens the serial port and sets the baud rate for serial data transmission.
Serial.println(data)
It prints data to the serial port.
PROJECTS
PROJECT 1
Objective: To blink an LED for a particular time period (say one second)
Hardware requirement:
To create this project, you will need:
An LED
One 100 ohm resistor
One breadboard
Connecting wires
Arduino
USB cable
The Circuit:
The Sketch:
/*
Program to blink an LED
*/
void setup()
{
pinMode(LED, OUTPUT);
}
void loop()
{
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(LED, LOW); // turn the LED off by making the voltage LOW
PROJECT 2
Objective:
To blink multiple LEDs (say for 5 seconds).
Hardware requirement:
To create this project, you will need:
Four LEDs
Four 100 ohm resistors
One breadboard
Connecting wires
Arduino and USB cable
The Circuit:
The Sketch:
/*
Program to blink multiple LEDs
*/
void setup()
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
void loop()
digitalWrite(pin0, LOW); // turn the LED off by making the voltage LOW
digitalWrite(pin1, LOW); // turn the LED off by making the voltage LOW
digitalWrite(pin2, LOW); // turn the LED off by making the voltage LOW
digitalWrite(pin3, LOW); // turn the LED off by making the voltage LOW
PROJECT 3
Objective:
To obtain text on Serial Monitor for real time output.
Note: Serial Monitor tool gives the ability to visualize your data in real time. Serial Monitor is ob-
tained by Tools>Serial Monitor in the main menu.
Hardware requirement:
Arduino
USB cable
(No external circuitry is required for this project)
The Sketch:
/*
Program to use Digital Read Serial
(Tools > Serial Plotter menu).
*/
void setup()
Serial.begin(9600); //Sets the Baud Rate of the USB Port to 9600 PWM signals
void loop()
{
Serial.println("Hello. Welcome to the Next Gen hardware-software interface: ARDUINO");
PROJECT 4
Objective:
To detect change in input signal state (Turns on the LED every four button pushes by checking the
modulo of the button push counter).
Note:The modulo function gives you the remainder of the division of two numbers. The basis of the
modulo is if-else condition.
Hardware requirement:
To create this project, you will need:
Push button
One LED
Two100 ohm resistors
One breadboard
Connecting wires
Arduino
USB cable
The Circuit:
The Sketch:
/*
*/
void setup()
{
void loop()
Serial.println("On");
Serial.println(buttonPushCounter);
lastButtonState = buttonState;
if (buttonPushCounter % 4 == 0)
{
digitalWrite(ledPin, HIGH);
}
else
{
digitalWrite(ledPin, LOW);
}
PROJECT 5
Objective:
To convert analog input voltage and obtain it on a Serial Monitor. The analog reading (which goes
from 0 - 1023) is therefore converts to a voltage ranging from 0 – 5V.
Hardware requirement:
To create this project, you will need:
Analog input
One breadboard
Connecting wires
Arduino
USB cable
The Circuit:
The Sketch:
/*
Program to Read Analog Voltage
Reads an analog input on pin 0, converts it to voltage, and prints the result to the Serial Monitor.
*/
void setup()
{ Serial.begin(9600); // initialize serial communication at 9600 bits per second:
}
void loop()
{
int sensorValue = analogRead(A0); // read the input on analog pin 0:
float voltage = sensorValue * (5.0 / 1023.0); // Convert the analog reading (which goes from 0 -
// 1023) to a voltage (0 - 5V):
Serial.println(voltage); // print out the value you read:
}
PROJECT 6
Objective:
Note: The Serial plotter is an offline tool to visualize data and troubleshoot the code offline. Serial
Plotter is obtained by Tools>Serial Plotter in the main menu.
Hardware requirement:
To create this project, you will need:
The Circuit:
The Sketch:
/*
Program to plot Analog Voltage using the Serial plotter
Tools>Serial Plotter
*/
void setup()
void loop()
float voltage = sensorValue * (5.0 / 1023.0); // Converts the analog reading (which goes from 0 –
// 1023) to a voltage (0 – 5V):
PROJECT 7
Objective:
To display the ASCII(American Standard Code for Information Interchange) Table for different bytes
available till date (Program shows Decimal, Hexadecimal, Octal, Binary information of each byte).
Hardware requirement:
To create this project, you will need:
Arduino
USB cable
(No external circuitry is required for this project)
The Sketch:
/*
ASCII table
*/
void setup()
void loop()
// prints value unaltered, i.e. the raw binary version of the byte.
// The Serial Monitor interprets all bytes as ASCII, so 33, the first number,
// will show up as '!'
Serial.write(thisByte);
Serial.print(", bin: ") ; // prints value as string in binary (base 2) also prints ending line break:
Serial.println(thisByte, BIN);
while (true)
{
continue;
}
// The last printed last visible character '~' or 126 and then the program stops.
PROJECT 8
Objective:
To analyse a character entered by a user and give information about it.
Hardware requirement:
Arduino
USB cable
The Sketch:
/*
Program for Character Analysis
*/
void setup()
{
Serial.println("Send any byte and I'll tell you everything I can about it");
Serial.println();
}
void loop()
{
{
int thisChar = Serial.read();
Serial.print("You sent me: \'"); // tell the user what was sent:
Serial.write(thisChar);
Serial.println(thisChar);
Serial.println("it's alphanumeric");
if (isAlpha(thisChar))
{
Serial.println("it's alphabetic");
if (isAscii(thisChar))
{
Serial.println("it's ASCII");
if (isWhitespace(thisChar))
Serial.println("it's whitespace");
}
if (isControl(thisChar))
{
Serial.println("it's a numeric digit");
}
if (isGraph(thisChar))
{
Serial.println("It's a printable character that's not whitespace");
}
if (isLowerCase(thisChar))
{
if (isPrintable(thisChar))
{
Serial.println("It's printable");
}
if (isPunct(thisChar))
{
Serial.println("It's punctuation");
if (isSpace(thisChar))
if (isUpperCase(thisChar))
{
if (isHexadecimalDigit(thisChar))
{
Serial.println("it's a valid hexadecimaldigit (i.e. 0 - 9, a - F, or A – F)");
Serial.println();
}
}
PROJECT 9
Objective:
To use Arduino as a Stopwatch.
Note: A pushbutton is used to start and stop the timer. The program uses millis() function to obtain a
minutest value when the Arduino works as a Stopwatch.
Hardware requirement:
To create this project, you will need:
Push Button
Arduino
USB cable
One LED
Two 100 ohm resistors
The Circuit:
The Sketch:
/*
*/
int frameRate = 100; // the frame rate (frames per second) at which the stopwatch runs -
//Change to suit
void setup()
Serial.begin(9600);
digitalWrite(buttonPin, HIGH); // turn on pullup resistors. Wire button so that press shorts pin to
// ground.
void loop()
buttonState = digitalRead(buttonPin); // Check for button press, read the button state and store
{
blinking = false; // turn off blinking, all done timing
fractional = (int)(elapsedFrames % frameRate); // use modulo operator to get fractional part of 100
// Seconds
{
// pad in leading zeros
Serial.print("0"); // add a zero
else
{
lastButtonState = buttonState; // store buttonState in lastButtonState, to compare next time
/*
*/
if (blinking == true)
{
previousMillis = millis(); // remember the last time we blinked the LED
Serial.println();
}
else
}
}
PROJECT 10
Objective:
To vary the intensity of the LED using Arduino.
Hardware requirement:
One LED
One100 ohm resistor
One breadboard
Connecting wires
Arduino
USB cable
The Circuit:
The Sketch:
/*
*/
void setup()
{
void loop()
brightness = brightness + fadeAmount; // change the brightness for next time through the loop:
if (brightness <= 0 || brightness >= 255) // reverse the direction of the fading at the ends of the fade:
{
fadeAmount = -fadeAmount;
PROJECT 11
Objective:
To change Decimal input to Binary.
Note: A special in-built function Serial.parseInt() is used to get the value as it is without any change.
The underlying concept is to convert the decimal number (up to 16 as the output being used is 4 LEDs)
to binary (2nn=0,1,2…). It can convert up to 16 decimal values (0-15).
Hardware requirement:
To create this project, you will need:
Four LEDs
Four220 ohm resistors
One breadboard
Connecting wires
Arduino
USB cable
The Circuit:
The Sketch:
/*
Decimal to Binary
*/
int outputLED[]={5,4,3,2};
int serialInput;
void setup()
{
Serial.begin(9600);
// Open serial communications and wait for port to open:
pinMode(outputLED[0], OUTPUT);
pinMode(outputLED[1], OUTPUT);
pinMode(outputLED[2], OUTPUT);
pinMode(outputLED[3], OUTPUT);
while (!Serial)
{
; // wait for serial port to connect. serialInputeeded for native USB port only
}
Serial.println("Enter the number to be converted to binary(0-15) ");
Serial.println();
}
void loop()
{
if (Serial.available() > 0) // digitalWrite(outputLED[0],HIGH);
{
serialInput = Serial.parseInt();
//Initialzes serialInput as the first valid integer from the serial monitor
Serial.println(serialInput);
if(serialInput>=8)
{
serialInput=serialInput-8;
digitalWrite(outputLED[0],HIGH);
Serial.println(serialInput);
}
else
digitalWrite(outputLED[0],LOW);
if(serialInput>=4)
{
serialInput=serialInput-4;
Serial.println(serialInput);
digitalWrite(outputLED[1],HIGH);
}
else
digitalWrite(outputLED[1], LOW);
if(serialInput>=2)
{
serialInput=serialInput-2;
Serial.println(serialInput);
digitalWrite(outputLED[2],HIGH);
}
else
digitalWrite(outputLED[2],LOW);
if(serialInput>=1)
{
serialInput=serialInput-1;
Serial.println(serialInput);
digitalWrite(outputLED[3],HIGH);
}
else
digitalWrite(outputLED[3],LOW);
}
}
PROJECT 12
Objective:
To produce the Knightrider effect through LED display. (5 LEDs are used to emulate the effect and
produce a wave-like pattern.
Hardware requirement:
To create this project, you will need:
Five LEDs
Five 100 ohm resistors
One breadboard
Connecting wires
Arduino
USB cable
The Circuit:
The Sketch:
/*
*/
void setup()
{
pinMode(2,OUTPUT); // LED 1 control pin is set up as an output
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
void loop()
delay(500);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
delay(500);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
delay(500);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
delay(500);
digitalWrite(4, LOW);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
PROJECT 13
Objective:
To use Arduino as a function generator.
Hardware requirement:
Arduino
USB cable
The Sketch:
/*
Arduino used as Function Generator
Tools>Serial Plotter
*/
void setup()
{
Serial.begin(9600);
}
void loop()
float angle=0;
{
float sina=sin(angle);
float cosa=cos(angle);
Serial.print(sina);
Serial.print(" ");
Serial.println(cosa);
delay(10);
}
for(float i=0; i<=90; i=i+1) //Sawtooth Wave
{
Serial.println(i);
delay(10);
{
int b=0;
Serial.println(b);
delay(10);
}
for(int a=0; a<=100; a++)
{
int b=100;
Serial.println(b);
delay(10);
Serial.println(i);
delay(10);
for(float i=100;i>=0;i=i-1)
{
Serial.println(i);
delay(10);
PROJECT 14
Objective:
To use Arduino for controlling two-way traffic lights.
Note: One light shouldn’t cross the other to ensures safe walking for pedestrians.
Hardware requirement:
To create this project, you will need:
The Circuit:
The Sketch:
/*
*/
int situations = 4;
long previousCars = 0;
long previousPeds = 0;
int state;
int i = 0;
void setup()
pinMode(trafficLights1[i], OUTPUT);
pinMode(trafficLights2[i], OUTPUT);
}
Serial.begin(9600);
}
void loop()
{
unsigned long currentMillis = millis();
else
{
previousCars = currentMillis;
else
{
i++;
}
}
}
{
for(int x = 0; x < 3; x++)
{
if(lights[x] == '0') state = LOW;
digitalWrite(trafficLights1[x], state);
if(pedestrians == 1)
{
blinkPed(trafficLights1[3]);
}
else
{
digitalWrite(trafficLights1[3], LOW);
}
{
for(int x = 0; x < 3; x++)
{
if(lights[x] == '0') state = LOW;
digitalWrite(trafficLights2[x], state);
}
if(pedestrians == 1)
{
blinkPed(trafficLights2[3]);
}
else
{
digitalWrite(trafficLights2[3], LOW);
}
void situation(int i)
{
switch(i)
{
case 0:
activateTrafficLight1("100",1); // 100 means red ON, yellow OFF, green OFF
case 1:
activateTrafficLight2("010",0);
break;
case 2:
activateTrafficLight1("001",0);
activateTrafficLight2("100",1);
break;
case 3:
activateTrafficLight1("010",0);
activateTrafficLight2("110",0);
break;
}
}
previousPeds = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ped, ledState);
}
}
PROJECT 15
Objective Achieved:
Note: A capacitor will charge, through a resistor, with time constant, defined as T seconds where T =
R * C. The particular number used in one of the loops 647 is 63.2% of 1023, which corresponds to
charging of the capacitor then discharging after reaching its full potential.
Hardware requirement:
To create this project, you will need:
The Circuit:
The Sketch:
/* RCTiming_capacitance_meter
*
* Theory A capcitor will charge, through a resistor, in one time constant, defined as T seconds where
* TC = R * C
*
* TC = time constant period in seconds
* R = resistance in ohms
*
*/
float nanoFarads;
void setup()
{
pinMode(chargePin, OUTPUT); // set chargePin to output
digitalWrite(chargePin, LOW);
void loop()
{
digitalWrite(chargePin, HIGH); // set chargePin HIGH and capacitor charging
startTime = millis();
// convert milliseconds to seconds ( 10^-3 ) and Farads to microFarads ( 10^6 ), net 10^3 (1000)
if (microFarads > 1)
{
Serial.print((long)microFarads); // print the value to serial port
else
{
// if value is smaller than one microFarad, convert to nanoFarads (10^-9 Farad).
PROJECT 16
Objective:
To use Arduino as a voltmeter (0-30 V).
Note: The input is obtained in such a manner that one is able to get values of the voltage running
across the resistors attached to the circuit.
Hardware requirement:
The Circuit:
The Sketch:
/*
*/
int analogInput = 1;
int val = 0;
void setup()
{
pinMode(analogInput, INPUT); //assigning the input port
Serial.begin(9600); //BaudRate
}
void loop()
{
Vout = (val * 5.00) / 1024.00; // formula for calculating voltage out i.e. V+, here 5.00
if (Vin<0.09)//condition
Serial.print(Vin);
PROJECT 17
Objective:
To use Arduino as an Ammeter (0-3 mA).
Hardware requirement:
To create this project, you will need:
The Circuit:
The Sketch:
/*
*/
intanalogInput = 1;
double I = 0.00;
intval = 0;
void setup()
{
pinMode(analogInput, INPUT); //assigning the input port
Serial.begin(9600); //BaudRate
}
void loop()
{
Vout = (val * 5.00) / 1024.00; // formula for calculating voltage out i.e. V+, here 5.00
if (Vin<0.09)//condition
{
Vin=0.00; //statement to quash undesired reading !
}
I=Vin*1000/(R1+R2);
Serial.println();
Serial.print(I);
PROJECT 18
Objective:
To use Arduino for Data Acquisition.
Hardware requirement:
To create this project, you will need:
A 1k ohm resistor
A 2k ohm resistors
A 3k ohm resistor
A 4k ohm resistors
Voltage Source
One breadboard
Connecting wires
Arduino
USB cable
The Circuit:
The Sketch:
/*
Program created for Data Acquisition
*/
void setup()
{
Serial.begin(9600);
pinMode(LED,OUTPUT);
void loop()
digitalWrite(LED,HIGH);
digitalWrite(LED,LOW);
sensorvalue[0]=analogRead(analogpin0);
sensorvalue[1]=analogRead(analogpin1);
sensorvalue[2]=analogRead(analogpin2);
sensorvalue[3]=analogRead(analogpin3);
}
Serial.print('\n');
for(inti=0;i<4;i++)
{ float voltage = sensorvalue[i] * (5.0 / 1023.0); //It changes the analogous values to 0-
255
Serial.print(i);
Serial.print("$ ");
Serial.print(voltage);
Serial.print(' ');
RESOURCES
www.arduino.cc
www.google.com
www.google.com/images
www.elprocus.com/difference-between-avr-arm-8051-and-pic-microcontroller/
www.circuits.io
https://circuitdigest.com
This is just the beginning, with a tool as powerful as the Arduino, the possibilities are endless!