Smart Home Security System using Arduino

Security systems are widely suggested for homes as well as other locations. Everybody wants to take necessary steps to prevent infiltration at home, thus this security is necessary. Intruders nowadays may take advantage of almost any illegal activity and wreak havoc on a property's security. The security of one's home is a critical concern that everyone faces in the current day.

While there are certain devices on the market that may considerably help protect your house, some of them are excessively costly and need constant maintenance. Many devices regarding smart home security systems are available in the market but these are not user friendly according to the budget, the device we designed provides the user with a better interface with the help of LCD. We have used enough sensors that make sure the security protocol.

So in this way, we designed a reasonable security system that has the features of gas and flame detection with the help of MQ-2 Gas Sensor and flame sensor respectively and also have installed a Motion detector sensor known as PIR sensor to detect the intruder's motion. For a better user interface an LCD and Alarm are installed to alert the user. The whole system is programmed using Arduino UNO. A proteus circuit is designed for this project as shown below:

  • You can download the complete project i.e. Proteus Simulation and Arduino Code by clicking the below button:
Smart Home Security System using Arduino
Where To Buy?
No.ComponentsDistributorLink To Buy
1LCD 20x4AmazonBuy Now
2SIM900AmazonBuy Now
3Flame SensorsAmazonBuy Now
4MQ-2AmazonBuy Now
5PIR SensorAmazonBuy Now
6Arduino UnoAmazonBuy Now

Components Required

For the home security system, we have used 3 sensors which are briefly explained as follows:

Flame Sensor

  • The flame sensor is used to detect the fire, it has 3 pins (Ground, VCC, OUTPUT) with operational voltages ranging from 3.3V to 5V.
  • This sensor may be constructed using an electrical circuit and a receiver similar to that used for electromagnetic radiation.
  • This sensor employs the infrared flame flash technology, which enables it to operate through a layer of oil, dust, water vapor etc.
  • There are several wavelengths of flame sensors normally in the range of 700 to 1100 nm from the source.
  • Normally flame sensors have an operating temperature ranging from -25? ~ 85? with several features like adjustable sensitivity, fast response time and ease to use.
  • Proteus doesn't have a Flame Sensor in its database, so you need to download this Flame Sensor Library for Proteus.

PIR Sensor

  • PIR Sensor is used to detect the intruder’s motion.
  • There are mainly two kinds of infrared sensors one is active and the other is passive.
  • The active infrared sensor emits as well as absorbs the infrared radiations whereas the passive infrared sensor simply absorbs not emit.
  • When an object enters or escapes the sensor's range, a passive infrared sensor is employed to detect it.
  • For adjusting the sensitivity and delay time, there are two trim pots supplied. You may alter them to meet your requirements.
  • The sensor produces a HIGH output when it senses movement within its range; otherwise, it generates a LOW output.
  • PIR also has 3 pins like a Flame sensor.
  • It has operating voltages of range 5V - 20V with output voltage generation of 0V-3V when the object is detected in the sensing range that is 7 meters.
  • Proteus doesn't have a PIR Sensor in its database, so you need to download this PIR Sensor Library for Proteus.

MQ-2 Gas Sensor

  • MQ2 gas sensors detect the presence of gases such as LPG, methane, ethanol and carbon monoxide in the air ranging up to 10000 ppm using electricity.
  • It is also known as chemiresistor for the MQ2 gas sensor.
  • The resistance of the sensing material changes depending on the amount of gas present.
  • When it comes to detecting gas, sensors use variations in resistance value that generates the output voltage.
  • When a sensor material is heated to a high temperature in the air, oxygen is adsorbed on the surface.
  • Because current can flow via the sensor, its analog voltage values may now be read.
  • The voltage values reported here may be used to compute the concentration of a gas. When the gas concentration is high, the voltage values are greater.
  • Proteus doesn't have a Gass Sensor in its database, so you need to download this Gas Sensor Library for Proteus.
 

Arduino UNO

  • Atmel's ATMega328 is used in the Arduino Uno, an open-source single-board microcontroller.
  • Either an external power source or a 5V USB connection may be used to power the device.
  • In all, there are 14 digital input/output pins on the board, with 6 of them serving as PWM outputs.
  • On the board, you'll find a reset button and six analog input pins. The Arduino software is used to program the board, which is written in C language.
  • When it came to controlling the home security system, the Arduino Uno's capabilities were found to be sufficient.
  • Arduino Boards are not present in Proteus, so we need to use this Arduino Library for Proteus.

Circuit Designing

  • This whole project is designed to provide a security system for the home in which multiple safety sensors can be installed with a Buzzer and LCD for a better user interface.
  • We won't design this project in real, instead, we are going to design its Proteus simulation.
  • If you are working on an electronics/embedded project, then it's always a best practice to design its simulation first.
  • In simulations, it's easy to debug your code and thus you can program quickly.
  • Once you are satisfied with your project's working, you can move forward to hardware designing.

So, let's design our Proteus Simulation for Smart Home Security System:

Proteus Simulation

  • These are the components, which we are going to use for designing our Proteus Simulation:
  • So, select these components from Proteus Components Library and place them in your workspace, as shown in the below figure:
  • Next, we need to connect these components' pins to complete our circuit, as shown in the below figure:
  • As you can see in the above simulation, we have used three sensors in total, which we have discussed above.

So, now we are going to design the Arduino Code for this simulation:

Arduino Programming Code

We have designed the circuit in our Proteus Simulation and next, we need to design its Arduino Code, in order to make it work.

LCD Initialization Code

  • First of all, we are going to interface LCD with Arduino UNO and will display the Project's name on the screen.
  • The code is shown in the below figure:
  • As you can see in the above figure, we have first initialized the variables.
  • Arduino board is programmed using Arduino IDE software which has mainly 2 sections void setup and void loop.
  • Before void setup, we have to declare the pins of sensors and actuators that we are using in our project.
  • Depending on the nature of sensors (analog or digital) the pins of sensors are connected to Arduino UNO accordingly.
  • #define is used to declare the pins of Gas, PIR, FIRE and BUZZER.
  • Initially, all the sensors have zero value that is stored by an integer variable.
  • In the void setup section, input and output sensors are defined.
  • GAS, PIR, and FIRE sensors are employed as input sensors to detect and activate the BUZZER, which is an output component.
  • LCD 20×4 is used and lcd.begin is used to initiate the LCD.
  • lcd.setCursor is used to cursor position on LCD and the name of the project is displayed on LCD Screen using lcd.print command.
  • Now, let's run our simulation to check the results, shown in the figure below:

Sensors Interfacing with Arduino

  • In Arduino IDE code execution, void setup runs once while the void loop executes again and again.
  • analogRead and digitalRead commands are used to read the value of analog and digital sensors respectively, while analogWrite and digitalWrite commands are used for sending commands or data.
  • As shown in the above figure, first, we have read the sensors' data and if all sensors are in LOW state, then have displayed the message "You are safe".
  • Let's run the code to check the output:
  • As you can see in the above figure, all sensors are at a LOW state and thus LCD is displaying the safe message.
  • Next, we have added the if loop for the case where all sensors are giving HIGH value:
  • The rest of the code has similar if loops for various conditions of sensors.
  • You can download the complete code and Proteus Simulation from the link, given at the start of this tutorial.
  • Now, let's run our final simulation and test the sensors and if everything goes fine, you will get results as shown in the below figure:

Future Recommendations

It deters the crime and notifies the user about the gas or fire problem. Home security systems are mostly utilized for safety reasons in residences, businesses, and educational facilities. Another option is to use a mobile device or the internet to send data to a remote location. Other modules, such as a wind sensor or a fire sensor, might be added to the system in the future. Voice alarm modules may also alert you to an intruder or a gas leak if you use them. We can increase the number of sensors to make it better. We can use the latest technology of the Internet of Things that makes our system wireless. A growing number of devices and goods are being connected to the Internet, which is referred to as the Internet of Things by the phrase. We can use the Internet of Things to produce a low-cost security system for residential and industrial applications that is especially useful for home security. When the door is opened or an unauthorized entry is detected, the system will send an alert to the owner. The user may take action after getting the notification. ESP8266 Wi-Fi module will connect to and interact with the Internet, while an Arduino Uno microcontroller keeps track of the system's status, as well as a magnetic Reed sensor for sounding the alarm. The principal advantages of this system are ease of installation, low costs, and low maintenance requirements.

So, that was all for today. I hope you have enjoyed today's project. If you have any questions, ask in the comments. Thanks for reading. Take care !!! :)

Data Types, Variables, and Operators in C#

Are you confused between the terms data types, variables, and operators in the C# programming language? If so, then all your confusion will disappear soon because you have found us. As we all know that C# is among the most commonly used programming languages in the world. It is a Microsoft-developed coding language that operates on the.NET Platform. It is utilized to create online applications, computer apps, smartphone applications, videogames, and many other things. When we study C# programming languages, it is crucial to understand these terms: Datatypes, Variables, and Operators. But, why? Keep reading till the end to find out!

Facts about C# Programming Language

COOL, a brilliant abbreviation that represented "C-like Object Oriented Programming Language," has been the initial name of C#. However, Microsoft was unwilling to retain the amusing nickname due to trademark protection issues. And thus, it was given the name C# (C Sharp). Moreover, few people know that the C# programming language was initially created to compete with Java. It is indeed correct to conclude that the objective has been accomplished, based on the rapid surge in viewership and positive feedback from both novice and experienced programmers.

Why Do Programmers Prefer C# Programming Language?

The simple reason why programmers prefer the C# programming language is that it contains many exceptional features and advantages. Some of these are listed below:

  1. C# is an object-intended coding language. It is a unique feature to find in other coding languages. Several popular languages feature object alignment to some extent, yet few have achieved the scale of C# till this day.
  2. C# is a tremendously versatile and convenient-to-maintain coding language. C# systems are generally consistent due to the rigid format of how scripts should be created, making them simpler to alter and manage.
  3. Because the C# programming language is object-intended, it is frequently used to create web pages that are highly productive, accessible, and easy to manage.
  4. This language is indeed an excellent initial step within this field since it allows ambitious programmers to familiarize themselves with coding without feeling frustrated or overburdened.
  5. C# is used in many popular programs like Banshee, Pinta, Paint.NET, Windows Installer XML, and many others.

Thus, there are many reasons why programmers prefer the C# programming language and not others.

Data Types, Variables, and Operators: What Are These?

When you are ready to run your C# environment, it is crucial to have a deep understanding of the terms: Datatypes, Variables, and Operators. Most novice beginners fail to understand these terms and as a result, they make human errors while running the C# program. But, we want you to have the best understanding of everything, and that is why this article is here. Let us now study these terms in detail below:

C# Data Types

A data type is basically a data collection system that contains a particular kind or set of numbers. It determines the kind of data which can be stored within a variable, like integers, floating points, and symbols. These play an important role in C# programming. In the C# programming language, data types are classified into three types which are:

  • Value Data Types
  • Pointer Data Types
  • Reference Data Types

Let us discuss all the types one by one in detail. So, start taking notes!

Value Data Types

The first one is the Value Data Type. It is dependent on integers and floating digits and is generated from the category order.

A data value could be allotted effectively to the Value Data. Both marked and unmarked characters are allowed in Value Type. Moreover, some value data forms are char, int, and float, and char. They also include integer values, floating figures, and alphanumeric characters individually. The software generates space to save the numeric type values whenever you specify an int kind.

The following is a C# script that displays several value data kinds:

The following is the outcome of the abovementioned program:

Pointer Data Types

The next is the Pointer Data Type. The Pointer Data in the C# programming language saves the domain name of the other dataset. They are utilized in a hazardous context, which means that using these pointers inside the software demands the usage of an illegal operator. The C# language pointers offer similar features as the C++ or C ones. This cursor data type has the following format:

type* identifier;

The following is a code that illustrates pointers:

The result of this code is as follows:

Characters Utilized In The Pointer

Two symbols are of great importance in the pointer data type. These are:

    1. & (Ampersand symbol): In C# programming, this symbol is named the Address Operator. It helps to obtain the location of the variable in the C# program.
  • (Asterisk symbol): The Asterisk symbol is named Indirection operator. It retrieves the importance of the variable's address.
Specifying A Pointer

An * (Asterisk mark) may be used to define a pointer within the C# programming language. For instance:

  1. char * c; //pointer to char
  2. int * a;  //pointer to int

Reference Data Types

Last but not least is the Reference Data Type. The Reference data types do not involve the data contained within a variable. However, they link to them (memory address). If two referral variables hold a similar memory address, changing the quantity of one variable would affect the state of the associated reference parameter. A few examples include Object, string, and other constructed-in reference classes. Moreover, the standard data types are typically customer-defined such as Interfaces, Class, and others.

Kinds

In C#, various reference data kinds are:

  • Object Types

Each kind within C#, either directly or implicitly, inherits from the object category type. Boxing and Unboxing terms are used to interpret the contents of various data kinds as things. Whenever a value category is transformed to an entity type, it is boxed. But, when an entity form is transformed to a value category, it is unboxed.

The following is software that illustrates boxing or unboxing:

  • String Types

In C# language, the word string is a bundle of zeros or more unscripted symbols. It, is also generated from the entity type.

The following is a script that illustrates strings:

  • Array Types

The last kind is the Array Type. Arrays are assemblages of datasets of a similar type. They are saved as a series of memory places. The starting item is found at the lowest location whereas, the final one is found at the top location.

The following is a script that displays arrays:

Here, we have covered the entire detail of Data Types in C#. We hope that you have noted everything down!

C# Variables 

This section includes the details of C# Variables, and Do not worry. It is not going to be tough for you!

Variables are the labels given to the memory locations that software modify to produce different outcomes. In simple words, they are standard data storing sites. You may insert data within them and recollect the values as a component of a C# code. Types are used to govern how data within a variable can be interpreted. The C# programming is a Statically Typed programming language. As a result, all actions upon variables are conducted with the Type of variable in mind. There are standards that govern what functions are acceptable to ensure the security of the data contents you place inside a variable. Various sorts of variables exist, including integrals, Boolean, floating points, and others.

Syntax Of Variables

Now, let us define and initialize Variables in terms of Syntax one by one.

  • Specifying Variable

The below syntax may be used to specify a variable:

DataType VariableList ;

In the above syntax, any acceptable C# data format like int, double, bool, float, and others may be used as “DataType”. Whereas, “VariableList” can have one or several variable identities differentiated by commas.

  • Initializing Variable

Variables may be configured utilizing the task controller with the local variable initials to its left side while the value is added to its opposite side. It is demonstrated as follows:

VariableName = Value;

In this case, the variable's title is "VariableName", and the variable's "value" is the number that has been given to it.

  • Declaration and Execution Simultaneously

Initializing variables can also be executed at the same time as declaring them. The following is the code for that:

DataType VariableName = Value;

Any acceptable C# data structure like bool, double, int, and so on can be used as “DataType” above. While the variable's title is "VariableName” and the variable’s "value" is the number that has been allocated to it. The variable will have different variable names and terms depending on your need.

The following is a C# script that shows variable declaration and configuration:

The result of this script is:

Variable Naming Standards

Most programmers do not understand the standards for naming the variables. But, we want our readers to be the best programmers out there. So, we added this little section that would explain a few rules for the naming of Variables. These are listed below:

  1. Only alphabetic or underscore symbols should be used to begin a variable. It must not lead off with a numeral.
  2. A variable can have alphabets, numeric terms, and underscore signs in it.
  3. A variable expression cannot contain any spaces.
  4. Terms like int, switch, const, and others are not acceptable in variable names.

The following is a sample of acceptable and incorrect variable names:

And now, we assume that you have a great understanding of the C# variables and data types.  So, let us move on to the next section: Operators.

C# Operators

Operators are utilized to execute arithmetic or logical operations in software. In the C# programming language, there are a variety of constructed-in operators. Below are a few of them: Arithmetic operators, logical operators, relational operators, bitwise operators, and so on are all examples of operators.

Let us have a look at these examples in detail:

Arithmetic Operators

Adding, subtracting, multiplying, dividing, and other arithmetic processes are performed using arithmetic operators. The following are all of the arithmetic operators used in the C#:

You must remember these arithmetic operators. If one fails to recognize the description of operators, he will make mistakes in the code.

Relational Operators

Relational Operators is another example of the operators used in the C#. Relational Operators are applied for differentiation. It includes determining whether a variable is more or less as compared to some other variable. Let us have a look at the table below:

The script that explains the relational operators is next:

And the outcome of the above code is:

The relational operators are the most important of all the operators as they code for comparison.

Logical Operators

Last but not least, the logical operators are the third type. These are generally utilized to carry out specified logical functions in the C# language. Logical OR, Logical NOT, as well as logical AND are three main logical operators. The following features the three logical operators:

These operators are used in .NET as follows:

We added the scripts to help you have a better understanding of everything. Let us have a look at the coding used in .NET:

Outcome

Now, you have learned three new terms in the C# programming language. All these steps are taking you closer to your dreams of programming.

EndNote

In this article, we have provided you with a detailed summary of three terms used in the C#: Data Types, Variables, and Operators. We understand that all of the terms seem challenging in the beginning. Once you start executing your C# programs, these would be a child’s play for you. Moreover, we would suggest you read this article again. It would help you clear out any confusions that you might have right now. Please keep all the rules and terms in your mind to avoid any errors. We wish you the best of luck with your first C# program execution.

HAPPY C# PROGRAMMING!

List of IDEs to run C# Programs

Are you searching for the best Integrated Development Environments (IDEs) to run the C# programs? If so, then you are on the right page. Undoubtedly, C# is among the most extensively utilized coding languages for developing Windows apps, smartphone applications, and videogames. And when we talk about the C# programming language, it is evident that IDEs will be discussed. In simple words, IDEs are as important when running C# programs as the jam is to bread. But, which IDEs would be the best to run C# programs? This article contains all the information about the best IDEs you need to run C# programs. So, keep reading till the end!

What Is Integrated Development Environment (IDE)?

An Integrated Development Environment, more commonly known as IDE, is a software program for developing projects. It incorporates standard developer resources into a uniform graphical user functionality (GUI). It allows developers to combine the various parts of creating a computer code into one. IDEs boost programmer performance by integrating standard software development tasks like modifying source code, creating exe files, and debugging all in a unified application.

History of IDEs

Before the advent of IDEs, developers used to write their scripts in textual editors. It entailed creating and storing a program in a word processor, then executing the compiler, noticing any errors, and returning to the word processor to modify their script. It wasn't till 1983 when Borland Limited released a Pascal programmer under the name Turbo Pascal. It became the original Pascal programmer with an incorporated editor and processor.

Although Turbo Pascal popularized the concept of an interconnected development platform, many consider Visual Basic, originally debuted in 1991, to represent the first genuine IDE. Visual Basic, the initial BASIC coding language, was a widely used coding language within the 1980s. With the emergence of Visual Basic, coding was viewed in pictorial terms, resulting in significant productivity gains.

Components of IDE

An IDE usually comprises of three main components discussed below:

  1. Development Automation Features: Tools that automate basic, repeated operations as an essential aspect of making a local version of the program for programmer's usage like generating machine standard code into dual code, bundling binary code, as well as performing automated inspections.
  2. Source Script Editor:  A text reviser that will help you write software code by emphasizing syntax with graphical cues, giving language-specified automatic completion, and scanning for problems as you type.
  3. Debugger: A debugger is a system that can visually show the faulty area in the source code and also evaluates other applications.

Few IDEs like Eclipse include the required processor, interpreter, or even both. Whereas others notably, Lazarus does not have both. So, there are different kinds of IDEs which we shall discuss later in this article.

Why Do Programmers Use IDEs?

Now, you must be thinking that there must be other ways to run the C# program, but why do programmers prefer IDEs? The simple answer to your question is: IDEs save a lot of time, which is an advantage in today's hectic world where everyone wishes to save time.

Other than this, there are other features in IDEs which are listed below:

  • An IDE enables programmers to begin coding new apps faster because different tools do not require to be individually built and connected in the initial setup.
  • Programmers don't have to invest hours studying various tools separately as every resource is displayed on a similar workbench. It is also valuable for training new programmers, who may utilize an IDE to educate themselves with conventional tools and procedures.
  • The IDE's assistance topics are frequently upgraded, offering fresh samples, program designs, and other features. Developers that are learning and staying up to date with standard principles provide benefit to their organization. It results in increased efficiency.
  • Many IDE functions, like smart code finishing and automatic code production, are designed to conserve time by eliminating the demand to write whole character patterns.
  • IDEs analyze the script while typed, allowing for real-time detection of problems generated by human mistakes.
  • It also governs the production process, making it easier for developers to collaborate and recruits to get things done quickly.

You see there are a lot of features of IDEs, and that is why developers use them. You are also going to be on the list of these programmers soon!

IDE-Supported Programming Languages

Some individuals get confused in IDE-supportive and non-supportive programming languages. So, we added this little section for you so that you do not face any confusion when running your C# program.

IDEs are targeted to a particular coding language or a group of languages, resulting in a tool collection matched to the language's needs. So, Integrated Development Environments support many programming languages. For instance, Xcode supports Objective-C, Cocoa, Swift programming languages, and Cocoa Touching APIs.

On the other hand, multi-language IDEs including Eclipse (Python, C, PHP, C++, Java, etc.), Komodo (PHP, Perl, JavaScript, Python), and NetBeans (C++, Java, Python, JavaScript, PHP, and much more) are also present. Plugins are an excellent way for programmers to gain compatibility for different languages.

Best IDEs To Run C# Programs

The most awaited section of the entire article is here. It contains a list of the best IDEs that you should learn to run your C# programs and develop applications. So, start noting down every detail.

Let us begin:

Visual Studio Code

The first IDE on our list is Microsoft’s Visual Studio Code, and that too for various reasons. Visual Studio Code is a free and open-source script editing tool. This exceptional script editor provides great support for C#, JavaScript, and Typescript. It includes adaptive completions dependent on variable kinds, crucial categories, and functional descriptions. It also offers automatic completion with IntelliSense functionality. Moreover, it has perfect compatibility for C# diagnostics and may be used with the C# plugins for advanced editing.

Features

Visual Studio is recommended for both expert and novice developers. It is the finest development software available on any system including, C# and. NET. Some of the exceptional features of VS Code are:

  • The VS Code C# IDE is incredibly easy to customize and modify.
  • Visual Studio Code works perfectly with Node JS.
  • It offers convenient operation with Git as well as other Program Configuration Management suppliers for improved version regulation.
  • Compatible systems: Windows, macOS, Linux.
  • The Omni sharp service allows you to adjust the parameters in the menu below, which makes it easier to organize API operations.
  • VS Code offers outstanding automatic completion features with context-enlightened recommendations, with code restructuring and debugging services.
  • VS comes in three editions: Community Edition, Enterprise Edition, and Professional edition. This feature can help you work according to your needs.

So, Visual Studio is undoubtedly the best choice on our list.

Scriptcs

The second IDE on our list is the Scriptcs. CS-Script is an excellent open-source coding environment that allows you to write programs in the C#. It is also compatible with ECMA. These programs can use Mono APIs and the .NET Platform. It is considered the second-best Integrated Development Environment used to run the C# program after Visual Studio. However, if you simply want to write C# programs and do not want to deal with compilation, you should choose a minimal code editor like Scriptcs rather than VS Code.

Features

  • Scriptcs provides a light textual editor for revising C# code.
  • With Scriptcs, you do not have to deal with complicated compilation or analysis.
  • The most significant aspect of Script CS is indeed the potential to generate a solution folder for Visual Studio on the run for VS Code.
  • It enables you to quickly set up the platform for fresh codes. It also offers instant syntax highlighting.
  • This C# IDE is an amazing coding tool that makes managing dependencies effortless.
  • Compatible systems are Windows and macOS.

Thus, Scriptcs is an ideal alternative to VS Code.

Eclipse aCute

The next IDE on our list is the Eclipse aCute. Eclipse aCute is a language-dependent plugin that offers C# and.NET Standard programming resources. It enables the transfer of tools towards various language characteristics. Eclipse aCute is among the top C# IDEs that have useful functions for programmers who want to create their custom script editor.

Features

Let us have a look at its features:

  • C# programming is now easier using the Eclipse IDE extension.
  • .NET Basic is used to create the application.
  • It offers ready-to-use script templates.
  • Windows is the only operating system that is supported.
  • Eclipse aCute immediately verifies syntax.
  • Filters can additionally be used on applications to execute script tests.
  • The speech server supports script completion.
  • Acute can immediately move to the parameters, types, and function declarations.

SlickEdit

SlickEdit is the unique IDE on our list. It is a cross-platform, multiple language script editor that works across nine environments and supports around 60 languages. It integrates version management and enables you to synchronize. This C# IDE includes advanced editing capabilities as well as better performance.

Features

Just like other IDEs, SlickEdit contains features that help programmers to run their C# programs. A few of the features are:

  • The most notable characteristic of SlickEdit is symbol interpretation and navigation.
  • It Offers syntax extensions and requisition. Moreover, it provides a JUnit interface.
  • Several cursor keys and choices are available.
  • Processes large script files, up to 2 TB in size.
  • Its standard and premium editions come with a variety of payment options to meet your requirements.
  • Linux, Windows, Mac, and Raspberry Pi are all compatible platforms.
  • You can utilize debugging tools for your script to display all mistakes for better accessibility.

Thus, SlickEdit is another ideal IDE to run your C# program.

Project Rider

Last but not least integrated development environment on our list is the Rider. The Rider is another excellent C# IDE platform that integrates seamlessly with two of the best software: ReSharper and IntelliJ. It is compatible with both the .NET Foundation and .NET Standard.

Features

Some of the notable features of Rider IDE are:

  • Rider includes more than 2200 continuous code evaluations and dozens of contextual operations and refactoring.
  • It provides built-in compatibility for Typescript, Sass, JavaScript, CSS, and HTML.
  • It works on Mac, Windows, and Linux computers.
  • It lets you execute and analyze xUnit.net and NUnit system testing.
  • It gives you the possibility of splitting the reviser vertically as well as horizontally.
  • Innovative keyboard commands are supported.
  • It is perfect for programmers working in different companies.

So, Rider may be the last on our list of the best IDEs but, its features prove that it is an excellent IDE which you can use.

Disadvantages of Using IDEs

Now that you know about the best IDEs to run your C# programs, it is essential to know about the disadvantages of using Integrated Development Environments. These are less as compared to the advantages. But, we want you to know every detail regarding IDEs. Please take notes. Some of these are:

  • The functionalities of IDEs could be burdensome to novice coders and designers.
  • Beginners who become overly dependent on IDE conveniences and other support which may not consistently be accessible can develop poor coding habits.
  • IDEs are challenging to use. It would take a lot of effort and dedication to learn about it.
  • A complex IDE might not be the perfect tool for new developers.
  • These do not detect every human error in your code creation.

So, above are some of the disadvantages that beginners like you might face. Just be careful while coding and do not completely rely on the IDEs.

Conclusion

In this article, we have discussed all the details of the Integrated Development Environment. Moreover, we provided a list of the best Integrated Development Environments to run C# programs, so readers have no confusion regarding anything.

Out of all the five options discussed, Microsoft’s Visual Studio is undoubtedly the best, and we would recommend you use it. We hope you have no questions regarding anything, and we wish you all the best for your first C# program.

Happy Coding!

 

6 Tips to Help You Prepare for an Engineering Degree

Engineering is one of the most profitable and fastest-growing industries in 2021. As the world continues to embrace automation and machine learning, engineers will become even more essential than they are now. Earning your undergraduate in engineering can open the door for many careers in development, manufacturing, programming and more. The best part is that with so many specializations, the discipline has virtually limitless possibilities.

But starting a new program is intimidating, especially when you have to consider different schools and potential costs. At the top institutions, engineering degrees are some of the most competitive. This means the acceptance rate is lower than average, and you'll have to prepare ahead of time if you want to get in. Even after that acceptance letter comes in, you'll need additional skills and strategies to make the most out of your studies. Rather than feeling overwhelmed by coursework, these helpful tips will prepare you to tackle all your classes with ease. You'll maximize your learning, lower stress and get a better school-life balance that makes college more memorable.

Take Advanced Placement Classes

If you're still in high school, take AP classes that will prepare you for an engineering degree. You may want to take AP Calculus, Physics, Computer Science and Statistics to give yourself the most well-rounded foundation. In addition to being more familiar with the building blocks of the field, you'll also be a more desirable applicant. College admissions offices look for students whose histories demonstrate passion and foresight. Someone who has dedicated themselves to learning about the major before they've even been accepted is always promising. For those who are already out of school, don't worry. You can still begin studying now. In fact, it may be beneficial to hire a tutor to get your skills in math and science up to par prior to the start of school.

Follow Real Engineers Online

Look for real-life professionals who use their social media platforms to share, enrich and educate others. They can be found in professional networks, like LinkedIn, or more casual sites like Twitter and YouTube. It's a good idea to start building your own circle on LinkedIn so you have a higher chance of finding a good mentor later. You can also learn a lot from these experts just by reading their regular content. Don't be afraid to reach out and introduce yourself, either. While not everyone may be willing to answer questions, the majority are passionate about their field and love helping aspiring engineers learn more. While they may be too busy to act as a personal guide, they can still likely point you in the direction of helpful resources to further your learning.

Start Exploring Your Payment Options Early

Paying for an engineering degree can be daunting, but there are several options to build a solid plan. If you have savings, factor those into your total tuition cost, then break it down year by year. This will help you determine how much you'll have covered from the start and what percentage you'll need to cover through alternative means. Usually, that means student loans and scholarships. There are hundreds of scholarships you can apply for throughout the year, but most have set deadlines that run between September and May.

Scholarships.com is a great source to start looking for opportunities by major and state. Your school's financial aid department can also direct you to appropriate sources for scholarships and grants. When it comes to loans, the average student tends to have a mix of both federal and private. Federal loans are issued by the government, but they have stricter limits than private loans. Borrowing some of your student loans from a private lender can help you balance your debt and make it easier to pay off when payments are due after graduation and need to build a budget around.

Build Solid Study Habits

Engineering students study plenty of extra hours a week on top of attending regular classes. To make sure you get enough sleep and avoid burnout, you'll need to plan ahead. If studying has never been your strong suit, address your biggest challenges now. Maybe you need to set a timer and work in short bursts rather than long strides. Do you benefit more from visual learning, like videos, or reading a textbook?

You should also look into your school's learning resources. Make sure you know where the tutoring center is and how to schedule an appointment. The better you are at studying, the more you learn in less time. Good habits also translate to strong work skills, too. A person who is able to manage their time well, set deadlines and follow through systematically is more likely to excel in their career. These are also core qualities of a good engineer that employers look for, which you can demonstrate through a strong resume.

Don't Neglect Writing or Communications Skills

Engineers must be able to clearly express often complicated ideas to others in layman's terms. You will have to be an excellent writer and a strong presenter. In addition to collaborating with peers, you will also likely find yourself working with people outside of engineering in your role. Many professionals even find themselves in consulting positions, which require the ability to easily transmit ideas through written and verbal communication. By taking some English composition and public speaking courses, you'll be more prepared to share your knowledge and work with the world.

Start a Portfolio of Projects

Part of the hiring process for future jobs will require showing a portfolio of your work. Employers will assess the quality and presentation, but they'll also be looking at the skills you need to make your projects come to life. You should not wait until you've graduated to start working on serious projects. Use your time in school wisely, and take full advantage of the resources you'll have access to on campus. Engineering labs give you the ability to work with high-level equipment you won't be able to access after you graduate. You can also work on teams, join clubs and turn to your professors for guidance.

How To Setup C# Environment

Hello friends, I hope you all are fine. In today's tutorial, we will discuss How to set up the C# environment? This question deserves to get answered in detail, and that is why we wrote this article for you. In the previous tutorial, we have seen a detailed Introduction to C# Programming Language.

So, keep reading to find out everything about how to set up a C# environment.

What is C# And What are its Advantages? 

C#, also known as C sharp, is an all-purpose, contemporary, object-intended coding language. Microsoft created the #C programming language as part of the .Net project. It is certified by the European Computer Manufacturers Association (ECMA) as well as the ISO. The updated iteration of the C# programming language is version number 7.2, and it is one of the main languages for Standard Language Framework. C# is identical to Java language and is simple for individuals familiar with Java, C++, or C.

As great as it sounds, the advantages of the C# programming language are exceptional. A few of them are listed below:

  • C# is a contemporary language with a basic pattern. It is simple to comprehend.
  • It offers many features, including compilations, generic versions, garbage management, and others.
  • It allows for cross-language compatibility, which means it can readily connect with code developed in other programming languages.
  • C# has a relatively reduced learning curve. It makes it perfect for newcomers or experienced programmers wishing to expand their development toolbox.

So, learning C# programming language offers you long-term benefits with amazing little learning time.

Fundamental Components required to Setup C# Environment

Everything in this entire world is made up of some fundamental components. Without those components, that particular thing would not work. The C# Environment works the same way. But, what elements are involved in the setup of the C# Environment? Let us have a detailed look at the components in this section. Before we begin, here is a reminder for you: Start Taking Notes!

.Net Framework

The.NET System is a production, integration, and execution platform for online services and projects. Installation of the .NET Framework element is required to launch C# apps or other projects. The .NET also promotes many coding languages such as Visual C++, JavaScript, Visual Basic, and F#. Yet C# is among the most widely used programming languages within the.NET Platform. It features two fundamental elements:

  1. Common Language Runtime (CLR):  The .NET Platform includes an operated infrastructure called CLR that executes the script. It offers services that assist the development procedure to go more smoothly. Moreover, elements and programs with objects that communicate between languages are uncomplicated to create with the CLR. Entities written in multiple languages may interact with one another and have closely integrated characteristics.
  2. Framework Class Library (FCL): Framework Class Library, more commonly known as FCL, is a set of objects, data types, and interfaces that allows you to view system features. The .NET FCL creates the foundation that develops the control mechanisms, applications, and elements. It may be utilized to enhance Microsoft GUI apps, console services, ASP.NET programs, productivity-enabled applications, online services, and service-intended applications.

Apart from these two, the .NET Framework also has other elements listed below:

  • LINQ
  • Common Language Specification
  • Windows Communication Foundation (WCF)
  • Metadata and Assemblies
  • Windows Workflow Foundation
  • Net and ASP.Net AJAX
  • Windows Presentation Foundation
  • Common Type System
  • Windows Forms

Visual Studio IDE

Visual Studio is a Microsoft Integrated Development Environment (IDE) platform for designing projects in many coding languages like Visual Basic, C#, and others. For business purposes, it is necessary to purchase a Microsoft permit to download and operate Visual Studio. However, Microsoft offers a complimentary VB Community Edition for educational use. It is indeed an inclusive topic, and so we will discuss it in the next section.

We agree that the terms above may seem scary. But, we promise that once you grasp the concept of the entire environment set up of C# programming language, these terms will be child’s play for you.

What Visual Studio IDE Actually Is?

Visual Studio is an Integrated Development Environment (IDE). You may write managed or indigenous script with the assistance of this IDE. It takes advantage of different software programming frameworks from Microsoft, such as Windows Store, Windows API, Microsoft Silverlight, etc. The best thing about it is that it is not a dialect-specific IDE, and both Windows and Mac offer it.

History of Visual Studio IDE

Visual Studio 97, with edition number 5.0, became the first iteration of VS launched in 1997. The newest release of VS is version number 15.0, which is also known as Visual Studio 2017. March 7, 2017, was its launching date. In the most recent release of Visual Studio, the .Net Platform variants facilitated range from 3.5 to 4.7.

Editions Of Visual Studio

Microsoft has released three different editions of Visual Studio. This section contains the information of these three editions so, please read carefully. These are:

Community Edition

The Community Edition, released in 2014, is a free-of-charge version. The remaining three editions charge. This release has features that are identical to the Professional one. Any independent programmer can create cost-free or premium applications such as internet games, web services, and many others.

Professional Edition

The Professional Edition is the business version of Visual Studio. It arrived in VS 2010 as well as is available in newer versions. It features tools like System Navigator and connectivity with SQL, as well as encourages XSLT programming. Its primary goal is to empower members with versatility, efficiency, cooperation, and perks such as Pluralsight, Azure, Microsoft software, and other Microsoft services.

This version is offered for a free test period, after which the customer must make payments to keep using it.

Enterprise Edition

The third and the last Enterprise Edition is an all-in-one, end-to-end tool for organizations of any complexity with high-quality and scale requirements. The prime advantage is that this edition is exceptionally expandable and produces high-quality programming.

This version comes with a 90-day complimentary trial, after which the customer must spend money to resume accessing it.

Features of Visual Studio

Now, you would be questioning: Why am I studying Visual Studio in-depth even though I can set up my C# environment using different tools? Well, Visual Studio has exceptional features which are hard to find in other tool platforms. Let us have a look at some of the features Visual Studio offers:

Develop code productively

  • The script could be typed efficiently utilizing Visual Studio instead of risking the existing document context.
  • The displayed features are: calling patterns, linked functions, verifications, test progress, and other aspects of the software.

Testing

  • VS testing products include quality standards, signals, test progress reporting, and other functions. They may be utilized to manage and carry out the testing process.

Debugging

  • Bugs may be detected and fixed immediately and easily with the Visual Studio debugging feature.
  • It may be accomplished in a variety of languages, regionally and remotely.

Cooperation

Git repositories maintained by any service can be used to organize the original code. Azure DevOps manages the script of the program conveniently.

Extension

Utilizing different features, controls, and layouts can enhance the productivity of Visual Studio.

Developers

The exceptional Visual Studio comes with several visual developers to help with app designing. These tools are listed below:

  • Data developer
  • Windows Forms Developer
  • Website designer/development
  • Mapping developer
  • Class developer
  • WPF developer

Other features include:

  • Object Browser
  • Server Explorer
  • Team Explorer
  • Properties Editor
  • ASP.NET Web Site Administration Feature
  • Dotfuscator Community Edition
  • Text Generation Platform

So you see, there are various features of the Visual Studio, and that is why you should use it while setting up your C# environment.

Steps to Install Visual Studio

The most awaited section of the entire article is here: Steps for C# Environment Setup. Now that you have a great understanding of all the terms and tools, this section will be easier for you. Let us begin:

  • Install Microsoft Visual Studio Community Edition

The first step is to install the Visual Studio Community Edition. Here is how you can install it:

  • After installing the executable file, you must launch it. When the system is launched, the following popup box appears, which starts the installation process. Next, select "Continue" from the drop-down menu.
  • When you select “Continue”, the Visual Studio modules and services begin installation, as seen below:
  • Choose the environment next. Click “.NET Desktop Development” to execute the code on the C# Interactive App:
  • The specifications of the products and programs downloaded for the .NET desktop development will display on the right side.
  • Once the setup is finished, you might be asked to restart your computer. Restarting your computer will finalize the install of Visual Studio Community Edition:

Running Visual Studio for the first time

The second step is to start operating in the visual studio. For this, you have to open the installed Visual Studio from your laptop. And let us get started with Programming:

  • Once you click on Visual Studio Community, you may notice the following tool popup windows:
  • Begin developing your initial program as explained below:
  • Code editor: From this, the client will edit the code.
  • Output window: It displays results, compiler alerts, failure signals, and troubleshooting information.
  • Solution Viewer: It shows the items that the user is presently focusing on.
  • Properties: It would provide extra information and perspective about the selected pieces of the program.

Create A New Project

Here’s how you can do it:
  • Go to File –> New –>Project to establish a fresh console app within the C#, as illustrated below.
  • Click on Console Application. Then, type the program's name and pick a destination to save program contents. After it, press OK as follows:
  • After you select OK, a predetermined template will appear, asking you to begin typing the C# code.

And Kudos! You are done setting up the C# environment. Wasn’t that easy? Now, you are ready to setup your C# environment. But before that, you should read the next and last section carefully.

Common Mistakes during Visual Studio Installation

We want you to work productively and error-free so that, you do not have to face any problem while setting up the C# environment. This is why we have added this small section of common mistakes to let you know everything.

These are listed below:

Misinterpreting Standard Values For Unreferenced Variables

Value classes in C# cannot be empty. These should have a term, and even unreferenced elements should have a result. It is referred to as the type's standard setting. When verifying if a parameter is unreferenced, it generates the following, typically surprising result:

In the above illustration, the standard state for the Point equals (0,0) and not empty, because it is a numeric kind. In C# programming, failing to identify it is a fairly straightforward (and widespread) blunder.

Manipulation of sets by using repeated statements

Although database searching is a common application for LINQ expressions, they may be applied to any enumerable set. For instance, rather than creating a C# List for all accounts in a collection:

You can just type:

It is a quite common mistake and we do not want our readers to go through that. Also, you must takes notes to remember all these points.

Overlooking The Free Tools

This point must be noted down! Because the CLR system includes a garbage collection tool, you do not have to manually clear any space allocated to any item. The erase operation in C++ and the free () tool in C do not even exist. But, this doesn't imply that once you've used something, you could just ignore it. Many different kinds of entities encapsulate different kind of system component like a disc file, database interconnection, and others. Ignoring these elements can rapidly exhaust the overall quantity of system services, resulting in poor efficiency and, eventually, program failures.

Other mistakes can be:
  • Keeping minimum exceptions
  • Letting compiler alerts to build up.
  • Utilizing undefined or incorrect string inspection techniques
  • Neglecting the fundamental entities within a LINQ expression
So, you need to be careful while setting up C# environment.

Conclusion

In this article, we have provided details regarding setting up your C# environment along with discussing some common mistakes made by developers while this process. We hope that you will avoid those mistakes and will work productively. We wish best of luck to all our readers. Happy Programming!

Smart Irrigation System using Arduino UNO

Hello everyone, we are back with a new project and we hope you all are doing well. In this article, we will discuss a project named Smart Irrigation System using Arduino UNO. We will use different sensors to measure the environmental and crop parameters which are responsible for good production. We will also make the water pump system automatic which will open the water valve automatically according to the soil moisture of the crop.

We will discuss all points and concepts briefly in this article and also provide a Proteus Simulation to observe how it will work in the real world. Complete fully explained code and simulation are also provided below as you go ahead in this article. You can download it from there.

Smart Irrigation System using Arduino UNO

Let’s start with an Introduction:

Where To Buy?
No.ComponentsDistributorLink To Buy
1LCD 20x4AmazonBuy Now
2LDR SensorAmazonBuy Now
3MQ-135AmazonBuy Now
4Arduino UnoAmazonBuy Now

Introduction 

In the late decades, there has been a quick advancement in Smart Agricultural Systems. Show that agriculture has great importance worldwide. Indeed, in India for example, about 70 % of the people rely upon the vital sector of agriculture. In the past, irrigation systems used to be dependent on the mills to irrigate the farm by conventional methods without knowing the appropriate quantities of these crops.

These old systems are a major cause of the waste of large quantities of water and thus destroy some crops because of the lack of adequate quantities of water. However, with the recent technological developments, there have been innovative systems for irrigation without the farmer interfering in the irrigation process. We will discuss it in brief below.

We will do a simulation on Proteus 8 Professional Software.

Working

The working of this project is like, we will use a Soil Moisture sensor for measuring the moisture of Soil according to which water valves are controlled. When the moisture level gets below a threshold value, valves will open with the help of a relay or solenoid till the soil is well moisturized.

  • The BMP180 sensor will measure the Atmospheric Pressure.
  • The DHT11 sensor will measure the temperature and humidity of the climate.
  • The MQ135 sensor will measure the Air Quality Index of the environment.
  • LDR will measure the sunlight intensity.
  • We will use a 20x4 LCD Screen for displaying the data gathered from the sensors.
  • And the main thing, we will use an Arduino UNO microcontroller as the brain of the project.

In a used case, when the moisture level gets below a threshold value, valves will open with the help of a relay or solenoid for a required time interval.

Block Diagram

  • Here's the Block Diagram of Smart Irrigation System:

Components Required

Here's the list of components used in this project:
  • Arduino UNO
  • BMP180 Sensor
  • DHT11 Sensor
  • LDR Sensor
  • MQ135 Gas Sensor
  • Soil Moisture Sensor
  • 20x4 LCD Display
  • PCF8574 remote 8-bit I/O expander for the I2C bus
  • Breadboard.
  • Jumper wires (Male to Male, Male to Female, Female to Male.)

Since we are designing a prototype of this project, we will use jumper wires instead of soldering.

  • Power Supply

You can use a Battery, Adapter or any DC source of 5-8v(recommendable).

Circuit Diagram

Since we are making a prototype of this project, we will make connections on the breadboard and avoid soldering the components. We will use male to male, male to female and female to female jumper wires. 

Pins Connections

These are the pin connections of all components.
Pin Connections of Smart Irrigation System
No. Sensor Pinout
1 Soil Moisture Sensor Data - A0 (Arduino)
2 LDR Sensor LDR-Resistor Junction - A2 (Arduino)
3 MQ135 Gas Sensor Out - A1 (Arduino)
4 DHT11 Sensor Data - D2 (Arduino)
5 BMP180 Pressure Sensor SDA-SDA (Arduino) SCL - SCL (Arduino)
 

Arduino Libraries Required

You need to install these third-party Arduino Libraries, in order to interface sensors:

  1. Adafruit_BMP085.h
  2. DHT.h
  3. LiquidCrystal_I2C.h

We have added comments in the code for better understanding so it can be understood easily.

Note - Change the Address of the LCD Screen while you run the code in Proteus, change it to 0x20 instead of 0x27 or anyone else. In the real experiment, we can alter the address of the LCD by changing the configurations of A0, A1 and A2 pins of the PCF8574 module.

Proteus Libraries Required

We will show you a demo of this project as a simulation. We are using Proteus 8 Professional Software for the simulation.

Proteus Simulation Connections

  • This potentiometer defines the soil water content in the proteus simulation.
  • When the resistance is maximum at the test pin, the circuit shows zero volts across the voltmeter, which means the sensor is either in the dry ground or taken out of the ground, i.e. giving zero moisture value of the water content.
  • And when resistance is zero, the circuit will show the maximum voltage across the voltmeter which indicates the sensor is inserted in a wet ground i.e. water contents in the soil are too high.
  • This is important. We have attached the output pin with an LC filter. This filter is not required in real hardware implementation.
  • We are using it in Proteus Simulation only as Proteus gives the peak-to-peak value and we have to convert that PP value into Vrms.
  • If you are working on a real sensor then you don’t need to add this LC circuit.
  • Similarly for Gas sensor, as we increase the potentiometer, in simulation it means good air quality.

Steps for Simulation

These are the steps for simulation. Follow them to create a fully working simulation.
  • Download the Zip Files given at the start of this tutorial.
  • Extract them in the LIBRARY folder. You will find it inside the Labcenter Electronics Folder.
  • Go to Arduino IDE and open the code, go to Tools and select the board Arduino UNO.
  • Go to Sketch and Click on Export Compiled Binary. It will create a compiled .hex file of the code which will be used as the main program in the simulation ahead.
  • Open Proteus software and add components by searching like Arduino, DHT11, BMP180, 20x4 LCD, etc.
You can see the components listed here.

Note - We used a simple LED instead of the valve because the valve component is not available in the Software, simply replace the LED with a valve in a real project. Make connections according to the circuit diagram and add virtual terminals to Serial pins to see the readings and Data.

  • Paste the Program File here for all the sensors.
  • Paste the Compiled Binary File as a Program file of Arduino UNO.
  • Run the simulation and you can see the readings by opening the virtual terminal.

Observations and Results

 
  1. In this simulation and project, you can see the sensor's information first in the terminal.
  2. After that, we are getting well organized and easily understood data on the terminal by every sensor according to code.
  3. According to the code, when the value of the soil moisture sensor gets less than a threshold value, the LED gets on.

This means when the soil gets dry the valve will open and water will be provided to the crops.

pH Sensor Library for Proteus

Hi guys, I hope you are good and doing well in your life. In this article, I am going to tell you about a new pH Sensor Library for Proteus. I hope you all will enjoy it and find it useful. We are all well aware of pH Sensors which are used for the detection of pH of different fluids. By knowing the pH of a liquid we can tell whether the liquid is acidic or basic. You can’t find a pH sensor in Proteus software, so we designed a pH sensor for simulation purposes. You can interface this pH Sensor with any Microcontroller, for example: Arduino, PIC Microcontroller, 8051 Microcontroller etc.

In this pH Sensor Library, I have added four different pH Sensors, which are used for the detection of the pH of any fluid. Since we can’t place real liquid and measure pH in this software, I have attached a test pin in the pH meter where you have to connect a potentiometer. The potentiometer will produce a reading from 0 to 1023, which will be mapped from 0 to 14 in the program code. We can predict the nature of the liquid. We will have a look at how to use these sensors below. So, here’s the list of all four pH sensors, I have added to this pH sensor  library:

  • PH METER
  • PH METER 2
  • PH METER 3
  • PH METER 4

So, let’s start with downloading and installing the pH Sensor Library for Proteus.

Where To Buy?
No.ComponentsDistributorLink To Buy
1LEDsAmazonBuy Now
2ResistorAmazonBuy Now
3Arduino UnoAmazonBuy Now

What is a pH Sensor?

  • A pH sensor is a device that is used to measure the pH value of a liquid. pH can be defined as the concentration of H+ ions in a liquid. We can find whether the fluid is acidic, basic or neutral by knowing the pH of the liquid.
  • Real pH sensors are shown below:

pH sensor Library for Proteus

  • First, download the zip file of Proteus Library for pH Sensor.
  • Click the link below to download the library zip file of pH Meter:
pH Sensor Library for Proteus
  • After downloading the zip file, extract its files and open the folder named “Proteus Library Files“.
  • In this folder, you will find three files, named:
    • pHMeterLibraryTEP.IDX
    • pHMeterLibraryTEP.LIB
    • pHMeterLibraryTEP.HEX
  • We have to place these files in the ‘LIBRARY’ folder of Proteus software.
  • Now, open Proteus. if you are already working on it you have to restart it.
  • In the components search box, search for “PH METER” and you will get four results, as shown in the below figure:
  • Let’s place these four pH Meter models in our Proteus workspace:

Adding Hex File to the Sensor

  • Now we need to paste the hex file of the pH METER in the properties section of the sensor. Double click on the sensor to open the properties window.
  • Go to the program file section, browse to the hex file, which we have downloaded above and placed it in the ‘LIBRARY’ folder of Proteus software:
  • After adding the hex file, click the Ok button.
  • Now all is ready, let’s create a circuit to check it's working.

pH Sensor Proteus Simulation

  • The pH sensor is now ready to simulate in Proteus, so let’s design a simple circuit to understand its working:
  • As you can see, I have placed an LC filter on the analog output of the pH sensor, it's because proteus gives us a peak to peak voltage value and we need to convert it to Vrms.
  • While performing the real experiment, you don’t need to do the above stuff.
  • Now, let’s run the Proteus simulation. You will see such a screen if everything will work fine.

Interfacing of pH sensor with Arduino UNO

  • Add Arduino UNO  and pH sensor to the components list and place them in the workspace.
  • Placed an LC filter on the analog output of the pH sensor, as mentioned above.
  • Connect it to the A0 pin of Arduino. Add a virtual terminal also to see the readings generated.
  • Paste the hex file of the program at the program file section of the Arduino.
  • Now run the simulation, if everything's fine you will get results as shown in the below figure:
  • You can watch the complete working simulation in the below video:

So, that was all for today. I hope you have enjoyed today's lecture. Thanks for reading !!!

First Project using STM32 in STM32CubeIDE

We will use for our examples STM32CubeIDE released by ST and completely free. STM32CubeIDE is a development tool and supports multi operative system (SO), which is part of the STM32Cube software ecosystem. STM32CubeIDE allows using a single platform to configure peripherals, to generate/compile/debug the code for STM32 microcontrollers and microprocessors. The framework used is Eclipse®/CDT, as tool-chain for the development is used GCC toolchain and GDB for the debugging.

To start the project, you must first select the MCU and then initialize and configure the peripherals the user wants to use. At this point, the initialization code is generated. At any time, the user can go back and change initializations and configurations, without affecting the user code. We will dive into these steps with a simple example in the next paragraph.

Where To Buy?
No.ComponentsDistributorLink To Buy
1STM32 NucleoAmazonBuy Now

First Project in STM using STM32CubeIDE

  • First of all, you have to install on your PC the STM32CubeIDE. In order to do it, you have to go on the ST site and after registered in it you can navigate to "https://www.st.com/en/development-tools/stm32cubeide.html" to download it.
  • At this point, you can install it, if you'll find problems you can check the "UM2563 - STM32CubeIDE installation guide".
  • STM32 Nucleo board (in our example we will use NUCLEO-L053R8, but you can use the one you prefer, as already said all Nucleo boards are pinout compatible);
  • USB 2.0 Cable - A-Male to Mini-B Cord to connect PC to ST-LINK;
  • Breadboard to hold and connect the simple electrical components;
  • Jumper Cables Kit to connect the Nucleo board to breadboard or other components;
  • Various basic electrical components such as Resistors (THT), Capacitors (THT), Buzzers, LEDs, etc.
Now let’s start!

Blinking LED using STM32 Nucleo Board

  • Turning a LED on and off is a basic and classical experiment when dealing with NUCLEO for the first time.
  • First, let's turn on the led, to do this we have to connect the LED to the power supply (on Nucleo we can find 3.3V and 5V).
Assuming:
  • the power supply 5V;
  • LED forward voltage of LED 7 Volt;
  • LED maximum forward current 20mA;

We must connect in series to LED a resistor. What resistance value must be considered to limit the current to 20 mA (see the formula below)?

R > 5 - 1.7/0.02 , where R > 165 ?

A good value of R is 220 ?.

Now we must be able to turn off the led, to do it we need a switch to connect and disconnect the power supply as shown below.

In this case when the switch is closed the Led is ON, when the switch is open the Led is OFF. This can be easily done with a Nucleo board by configuring a GPIO (General Purpose Input Output) pin.

The steps required to configure a core board are explained below. Obviously, this is a very simple practical example, but peripherals, communication protocols and anything else can be configured in a similar way.

Steps to generate the config. files from STM32CubeMX

As already said, we will use for our examples a NUCLEO-L053R8 board. For our examples, so also a Windows PC is required. The ST-Link USB connector is used both for serial data communications, and firmware downloading and debugging on the MCU. A Type-A to mini-B USB cable must be connected between the board and the computer. The USART2 peripheral uses PA2 and PA3 pins, which are wired to the ST-Link connector. In addition, USART2 is selected to communicate with the PC via the ST-Link Virtual COM Port. A tool that emulates the serial communication terminal is necessary to view received messages and send them. You can download many open-source tools as Tera Term. In this way, you can display on PC the messages received from the board over the virtual communication Port and the other way around.

In this paragraph, we will initialize the peripherals using STM32CubeMX. The STM32CubeMX tool to create the necessary config. files to enable drivers of peripheral used (for more detail read “UM1718 - User manual STM32CubeMX for STM32 configuration and initialization C code generation.”).

Steps to Follow

  • Select the NUCLEO-L053R8 board looking in a selection bar within the New Project menu.
  • Select the required features (debug, GPIOs, peripherals, timer) from the Pinout view: peripheral operating modes as well as assignment of relevant signals on pins.
  • Configure the MCU clock tree from the Clock Configuration view.
  • Configure the peripheral parameters from the Configuration view.
  • Configure the project settings in the Project Manager menu and generation of the project (initialization code only).
  • Update the project with the user application code corresponding to the Led blinking example.
  • Compile, and execute the project on the board.

Creating a new STM32CubeMX project

  • Select File -> New project from the main menu bar to open the New Project window.
  • Go to the Board selector tab and filter on STM32L0 Series.
  • Select NUCLEO-L053R8 board and then click on OK button to confirm. In this way the board is loaded within the STM32CubeMX user interface.
  • Insert the project name, in this case, "BlinkLed" and click finish.
  • Then the tool will open the pinout view.

Selecting the features from the Pinout view

  • Select Debug Serial Wire under SYS, for do it click on System Core (on the topo right) and then select SYS and finally flag on “Debug Serial Wire”.
 
  • Select Internal Clock as clock source under TIM2 peripheral. To do this click on Timers and then select TIM2. Now go to clock source and select through the drop-down menu “internal clock”.
  • Select one of the available pins (basically anyone!) as GPIO output, for example PA9 (the last pin of CN5)
Check that the signals are properly assigned on pins:
  • SYS_SWDIO on PA13
  • SYS_SWCLK on PA14
  • GPIO OUTPUT on PA5

Configuring the MCU clock tree

  • Go to the Clock Configuration tab and in this project, there is no need to change the configuration.

Configuring the peripheral parameters

  • Come back to Pinout&Configuration and select System Core -> GPIO to open the peripheral Parameter Settings window and in this case no change the configuration.
  • Select Timers -> TIM2 and change the Prescaler to 16000 and the Counter Period to 1000.
  • Go to the NVIC Settings tab and flag TIM2 global interrupt to enable the interrupt related to TIM2.

Configuring the project settings and generating the project

  • In the Project Manager tab, configure the code to be generated and click OK to generate the code.

Updating the project with the user application code

  • Our project has been initialized by STCubeMX.
  • In /BlinkLed/Core/Src/main.c we will find our main where we will write the main body of our program.

STM32 Programming Code for Led Blinking

The user code must be inserted between the "USER CODE BEGIN" and "USER CODE END" so that if you go to regenerate the initializations that part of the code is not deleted or overwritten. As shown in the code below, the simplest way is to use the function:

  • HAL_GPIO_TogglePin(GPIOx, GPIO_Pin) in the infinite loop ( while (1) ) with a chosen delay, for example of 1 second. To do this we use the function HAL_Delay(Delay). The declarations of these two functions with their parameters are described below
  • HAL_GPIO_TogglePin(GPIOx, GPIO_Pin): Toggles the specified GPIO pins.
  • GPIOx: Where x can be (A..E and H) to select the GPIO peripheral for STM32L0xx family devices. Note that GPIOE is not available on all devices. All port bits are not necessarily available on all GPIOs.
  • GPIO_Pin: Specifies the pins to be toggled.
  • HAL_Delay(Delay): This function provides minimum delay (in milliseconds) based on variable incremented. In the default implementation, SysTick timer is the source of time base. It is used to generate interrupts at regular time intervals where uwTick is incremented.

Note This function is declared as __weak to be overwritten in case of other implementations in a user file.

- Delay: specifies the delay time length, in milliseconds.

So, in our case GPIOx is GPIOA and the GPIO_PIN is GPIO_PIN_9 (see below).

int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_TIM2_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_9); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }

Now we are ready to compile and run the project:

  • Compile the project within IDE.
  • Download it to the board.
  • Run the program.

Another simple way is to use the function

  • HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState).
  • HAL_GPIO_WritePin(GPIOx, GPIO_Pin, PinState): Sets or clears the selected data port bit.

Note This function uses GPIOx_BSRR register to allow atomic read/modify accesses. In this way, there is no risk of an IRQ occurring between the read and the modified access.

  • GPIOx: where x can be (A..E and H) to select the GPIO peripheral for STM32L0xx family devices.

Note that GPIOE is not available on all devices.

  • GPIO_Pin: specifies the port bit to be written.

This parameter can be one of GPIO_PIN_x where x can be (0..15).

All port bits are not necessarily available on all GPIOs.

  • PinState: specifies the value to be written to the selected bit.

This parameter can be one of the GPIO_PinState enum values:

  • GPIO_PIN_RESET: to clear the port pin
  • GPIO_PIN_SET: to set the port pin

So, in our case GPIOx is GPIOA and the GPIO_PIN is GPIO_PIN_9 and the pin state changes between 0 (LOW or CLEAR) and 1 (HIGH or SET).

In this case, the code is the following:

while (1) { HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,0); HAL_Delay(1000); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9,1); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }

There are many other ways to blink an Led such as PWM, Interrupts etc. and will discuss it in the upcoming lectures. Thanks for reading.

Introduction to Nucleo Development Board

To become familiar with the world of microcontrollers it is necessary to have a development board (also known as a kit), which generally allows you to start working on it easily. Fortunately, the ST provides a wide portfolio of development boards. In this guide, we will describe and use the Nucleo board.

The Nucleo has been introduced a few years ago and its line is divided into three main groups:

  • Nucleo-32;
  • Nucleo-64;
  • Nucleo-144.
Where To Buy?
No.ComponentsDistributorLink To Buy
1STM32 NucleoAmazonBuy Now

Nucleo-32 Development Board

The number of pins available, so the package, gives the name to the board: Nucleo-32 uses an LQFP-32 package; Nucleo-64 and LQFP-64; Nucleo-144 an LQFP-144. The Nucleo-64 was the first line introduced and counts 16 different boards.

The Nucleo boards have interesting advantages compared to the Discovery. First, is the cheaper cost, you can buy it for around 15-25 dollars. Now in 2021 due to the lack of processed semiconductors, it is very difficult to find them on the normal distribution channels and costs are rising. A return to normal is expected from 2023. Furthermore, Nucleo boards are designed to be pin-to-pin compatible with each other. It is a very important advantage, in fact, if I start to develop my firmware on generic Nucleo later then I can adapt my code to another one.

In the next paragraphs, we will see the main structure of STM32-64

STM32 Nucleo-64 parts

The Nucleo-64 is composed of two parts:

  • ST-LINK part
  • MCU part

The part with the mini-USB connector is an ST-LINK 2.1 integrated debugger. It needs to upload the firmware on the target MCU and run the debugging. Furthermore, the ST-LINK interface provides a Virtual COM Port (VCP), which can be used to exchange data and messages with the host PC. The ST-LINK interface can be used as a stand-alone ST-LINK programmer, in fac,t can be easily cuttable to reduce board size.

To program the STM32 on board, simply plug in the two jumpers on CN4, as shown in the figure below in pink, but do not use the CN11 connector as that may disturb communication with the STM32 microcontroller of the Nucleo.

However, the ST-LINK provides an optional SWD interface which can be used to program another board without detaching the ST-LINK interface from the Nucleo by removing the two jumpers labeled ST-LINK (CN4).

The rest of the board, MCU part, contains the target MCU (the microcontroller we will use to develop our applications), a RESET button, a user-programmable push button (switch), and an LED. It is possible to mount an external high-speed crystal (HSE) through X3 pads (see figure below). Generally, the Nucleo boards, especially the most recent ones, provide a low-speed crystal (LSE).

Finally, the board has several pin headers we will look at in the next paragraph.

STM32 Nucleo-64 connectors

The STM32 Nucleo-64 board has 8 connectors:

  • CN2: ST-LINK USB connector on ST-LINK (already described in the previous paragraph);
  • CN11: SWD connector in ST-LINK part (already described in the previous paragraph);
  • CN7 and CN10: ST morpho connectors;
  • CN5, CN6, CN8, and CN9: ARDUINO® Uno V3 connectors;

The CN7 and CN10 ST morpho connectors are male pin headers (2x19, 2.54mm male pin headers) accessible on both sides of the STM32 Nucleo-64 board (see the figure below). All signals and power pins can be probed by an oscilloscope, logical analyzer, or voltmeter through the ST morpho connectors. They are two. They are called Morpho connectors and are a convenient way to access most of the MCU pins.

  • The figure below is shown the CN7 pinout (the STM32 peripherals and GPIOs associated with the Morpho connector) for NUCLEO-L053R8.
  • In the next figure, is shown the CN10 pinout for NUCLEO-L053R8.
  • The previous figure showed the pinout for NUCLEO STM32L053R8, but I remember you the Nucleo is pinout compatible with each other.
  • Another important feature of the Nucleo board is the compatibility with ARDUINO® Uno V3 through the CN5, CN6, CN8, and CN9 connectors (see figure below).
  • CN6 and CN8 are directly connected to CN7 and CN5 and CN9 to CN10.

Setting-Up the Tool-Chain

The first step in developing an application on the STM32 platform is to fully set up the tool-chain. A tool-chain is a set of programs, compilers, and tools that allows us:

  • to write our code and to browse the source files of our application;
  • to browse inside the application code, in order to examine variables, definitions, function declarations, and etc;
  • to compile our code using a cross-platform compiler;
  • to upload and debug our application on the development board (or a custom board).

To carry out these activities we basically need:

  • an IDE with integrated source editor and navigator;
  • a cross-platform compiler able to compile source code for our platform;
  • a debugger that executes the debugging of firmware on our board;
  • a tool that interacts with the ST-LINK interface.

There are several complete tool-chain for the STM32 Cortex-M family, both free and commercial. The most used tools are: IAR for Cortex-M, ARM Keil, and AC6 SW4STM32.

They can integrate everything necessary for the development of applications on STM32 to simplify and accelerate their development. The first two are commercial solutions and therefore have a price to the public that may be too high for those approaching the first time.

So, that was all for today. I hope you have enjoyed today's lecture and have understood this Nucleo Development Board. In the next lecture, we will design our first project in STM32CubeIDE. Thanks for reading.

Introduction to STM32 Family

In this guide, we will explain step by step to start programming on the STMicroelectronics (STM) platform, especially the STM32 family.

The term, "STM32" refers to a family of 32-bit microcontroller integrated circuits based on the ARM® Cortex®M processor. The architecture of these CPUs (Central Processing Unit) is ARM (Advanced Risk Machine) which is a particular family of Reduced Instruction Set Computing (RISC). RISC architecture differs from Complex Instruction Set Computing (CISC) for its simplicity that allows you to create processors capable of executing instruction sets with shorter times. Why use STM32? The advantages are many, and now we will list a part of them:

  1. ST offers a wide portfolio of solutions depending on the developer's needs. We can find products that combine different advanced features while maintaining a high level of integration. In fact, we can choose products with high performance, real-time processing, digital signal processing, and low consumption.
  2. Thanks to the availability of different development tools and available support material, the development of a simple or complex project is quite simple and fast, reducing the time to market if you want to develop a product.
  3. Each microcontroller has an integrated processor core, static RAM, flash memory, debug interface, and various peripherals such as GPIO, ADC, DAC, Timer, SPI, UART-USART, I2C, etc.
  4. For every MCU, ST provides the STM32 Nucleo Board that helps anyone who wants to fastly build and test prototypes for new projects with any STM32 MCU. STM32 Nucleo boards share the same connectors and can be easily expanded with many specialized application hardware add-ons (Nucleo-64 includes ST Morpho and Arduino Uno Rev3 connectors, while Nucleo-32 includes Arduino Nano connectors). Another and not insignificant advantage is the cheap cost of these development boards.

In the next paragraph, it will be illustrated how the STM32 is divided to easily identify the one used for your purposes.

Where To Buy?
No.ComponentsDistributorLink To Buy
1STM32 NucleoAmazonBuy Now

STM32 Family

  • To date, the STM32 family has 16 series of microcontrollers divided into four groups in order to cover all the needs of developers.
  • The four groups are Mainstream, Ultra-Low-Power, High-Performance Wireless.

STM32 Mainstream

The STM32 Mainstream has been designed to offer solutions for a wide range of applications where costs, time to market, reliability, and availability are fundamental requirements. They are widely used in real-time control signal processing applications.

There are 5 series in this group:

  1. STM32F1 are microcontrollers based on the ARM Cortex-M3 core. It was launched in 2007 and evolved over time in terms of maximum clock rate, memory depth, and peripherals. In fact, the maximum clock rate has gone from 24 MHz to 72 MHz, static RAM up to 96 kB, and Flash up to 1024 kB. It also supports Thumb-1 and Thumb-2 instruction sets.
  2. STM32F0 are microcontrollers based on the ARM Cortex-M0 core. It was launched in 2012. The maximum clock rate is 48 MHz and includes the SysTick timer. Static RAM up to 32 kB, and Flash up to 256 kB. It also supports Thumb-1 and Thumb-2 instruction sets.
  3. STM32F3 are microcontrollers based on the ARM Cortex-M0 core. It was launched in 2012. The maximum clock rate is 72 MHz and includes the SysTick timer. Static RAM up to 40 kB, and Flash up to 256 kB. It also supports Thumb-1, Thumb-2, Saturated, DSP, FPU instruction sets.
  4. STM32G0 are microcontrollers based on the Cortex-M0/M0+ core. It was launched in 2018. The maximum clock rate is 64 MHz. Static RAM up to 128 kB, and Flash up to 512 kB. It also supports Thumb-1 and Thumb-2 instruction sets. Compared to the older F0 series, it presents improvements in terms of efficiency and performance.
  5. STM32G4 are microcontrollers based on the Cortex-M4F core. It was launched in 2019. The maximum clock rate is 170 MHz. Static RAM up to 128 kB, and Flash up to 512 kB. Thumb-1, Thumb-2, Saturated, DSP, FPU instruction sets. Compared to the older F3/F4 series, it presents improvements in terms of efficiency and performance and higher performance compared to the L4 series.

STM32 Ultra-Low-Power

The STM32 Ultra-Low-Power has been designed to meet the need to develop devices with low energy consumption (such as portable and wearable devices) but maintaining a good compromise with performance.  There are 6 series in this group:

  1. STM32L0 are microcontrollers based on the ARM Cortex-M0+ core. It was launched in 2014. The maximum clock is 32 MHz, static RAM is of 8 kB, and Flash is up to 64 kB. It also supports Thumb-1 and Thumb-2 instruction sets.
  2. STM32L1 are microcontrollers based on the ARM Cortex-M3 core. It was launched in 2010. The maximum clock rate is 32 MHz, static RAM up to 80 kB, and Flash up to 512 kB. It also supports Thumb-1 and Thumb-2 instruction sets.
  3. STM32L4 are microcontrollers based on the ARM Cortex-M4 core. It was launched in 2015. The maximum clock rate is 80 MHz, static RAM is of 64 kB, and Flash is of 1024 kB. It also supports Thumb-1 and Thumb-2, Saturated, DSP, FPU instruction sets.
  4. STM32L4+ are microcontrollers based on the ARM Cortex-M4 core. It was launched in 2016. The maximum clock rate is 120 MHz, static SRAM up to 640 kB, and Flash up to 2048 kB. It also supports Thumb-1 and Thumb-2, Saturated, DSP, FPU instruction sets. It has been enriched with advanced peripherals such as a TFT-LCD controller, Camera interface, etc.
  5. STM32L5 are microcontrollers based on the ARM Cortex-M33F core. It was launched in 2018. The maximum clock rate is 110 MHz, static SRAM up to 640 kB, and Flash up to 2048 kB. It also supports Thumb-1 and Thumb-2, Saturated, DSP, FPU instruction sets.
  6. STM32U5 is the last ultra-low-power series launched (in 2021). It is an evolution of the L series and is based on the ARM Cortex-M33F core. the new 40 nm silicon technology allows to further reduce energy consumption, it also includes advanced cyber security features and graphics accelerators. The maximum clock rate is 160 MHz, static SRAM up to 640 kB, and Flash up to 2048 kB. It also supports Thumb-1 and Thumb-2, Saturated, DSP, FPU instruction sets.

STM32 High-Performance

The STM32 High-Performance has been designed for data processing and data transfer. It also has a high level of memory integration. There are 5 series in this group:

  1. STM32H7 are microcontrollers based on the ARM Cortex-M7F core. It was launched in 2017. The maximum clock is 480 MHz, static RAM is up to 1.4 MB, and Flash is up to 128 kB. It includes Ethernet and some advanced features such as dual Octo-SPI, JPEG codec, etc. It supports Thumb-1 and Thumb-2, Saturated, DSP, FPU instruction sets.
  2. STM32F7 are microcontrollers based on the ARM Cortex-M7F core. It was launched in 2014. The maximum clock is 216 MHz, static RAM is up to 1.4 MB, and Flash is up to 128 kB. It is fully pin-compatible with F4-series. It supports Thumb-1 and Thumb-2, Saturated, DSP, FPU instruction sets.
  3. STM32F4 was the first series of microcontrollers based on the ARM Cortex-M4F core. It was launched in 2011. The maximum clock is up to 180 MHz. It is the first series to have DSP and FPU. It also has faster ADCs, full-duplex I2S and an improved real-time clock. It supports Thumb-1 and Thumb-2, Saturated, DSP, FPU instruction sets.
  4. STM32F2 are microcontrollers based on the ARM Cortex-M3 core. It was launched in 2010. The maximum clock is 120 MHz, static RAM is up to 128 kB, and Flash is up to 1024 kB. It is fully pin-compatible with the F2 series. It supports Thumb-1, Thumb-2 and Saturated instruction sets.

STM32 Wireless

With STM32 Wireless ST adds in the portfolio a platform for wireless connectivity to the portfolio. It has a broad spectrum of frequencies and is used in various industrial and consumer applications.

It has features compatible with multiple protocols which allows it to communicate with different devices in real-time. Now, only two series belong to this group:

  • STM32WB provides Bluetooth®LE 5.2 and IEEE 802.15.4 communication protocols, Zigbee® and Thread, which can work simultaneously or individually.
 
  • STM32WL is the first series that support LoRa® communication.

So, that was all for today. I hope you have enjoyed today's lecture. In the next lecture, I am going to focus on the Nucleo Development board, as we are going to use that in our upcoming tutorials. Thanks for reading. Take care !!! :)

Syed Zain Nasir

I am Syed Zain Nasir, the founder of <a href=https://www.TheEngineeringProjects.com/>The Engineering Projects</a> (TEP). I am a programmer since 2009 before that I just search things, make small projects and now I am sharing my knowledge through this platform.I also work as a freelancer and did many projects related to programming and electrical circuitry. <a href=https://plus.google.com/+SyedZainNasir/>My Google Profile+</a>

Share
Published by
Syed Zain Nasir