We all use calculators in our daily life, whether you are working in an office or counting money at the bank, you are buying your daily grocery or doing shopping online, you will find calculators in different forms everywhere. In fact, the computer was initially considered a giant calculator. So if it is that common, why do we not make our own calculator?
Before going into the details of the project, it is good to know some history of that, let’s know some facts about the calculator. So the first known device for calculation is Abacus. And the first digital calculator was made by Texas Instruments in 1967 before that all calculators were mostly mechanical and they did not need any electronic circuits. The first all-transistor calculator was made by IBM and it is claimed that the calculator performed all the four basic operations such as addition, subtraction, multiplication, and division.
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | Keypad 4x4 | Amazon | Buy Now | |
2 | LCD 16x2 | Amazon | Buy Now | |
3 | Arduino Mega 2560 | Amazon | Buy Now |
In this, we will be going to use the Proteus simulation tool and we will make our whole project using this software only. But no need to worry while using the actual components because if our project works perfectly with simulation, it will definitely work with actual hardware implementation. And the best part of the simulation is, here we will not damage any components by making any inappropriate connections.
If you don’t have an idea about Proteus, Proteus is a software for the simulation of electronic circuits and here we can use different types of microcontrollers and run our applications on them.
So for this project, we need to install this software. This software has a big database for all electronics components but still, it lacks some, therefore we have to install some libraries for modules which we are going to use in this project.
In this project, we will take input from the user using a keypad and perform the operation using Arduino UNO and display the result on an LCD display.
Our project will work the same as a normal digital calculator such that the user will enter two numerical values and select arithmetic operations which she/he wants to perform on the given values. Once the user clicks on the equal button, thereafter Arduino UNO will calculate the output and display the result on the LCD module.
Now, let’s start designing our circuit diagram for the calculator.
Now we have all the required components in the workplace as follows.
Let's start connecting them.
That is all for connection. Make sure all the connections are correct, especially for keypad’s row and column connections otherwise we will get the wrong values from the keypad input.
And while working on the actual components, power the backlight of the LCD module and set the appropriate contrast, else nothing will be visible even if that has been displayed.
In the above-mentioned image, the first argument for RS pin, second for Enable pin, and rest four for data pins.
And required operation will be stored in the ‘op’ variable and a flag will be set for taking the second number.
That is all the code, we need to run an Arduino Calculator.
Now, we have completed the coding and circuit part, it is time to run the simulation in the Proteus.
I hope we have covered everything related to Arduino calculator i.e. Simulation, Code, Working etc. but still if you find anything confusing, ask in the comments.
Thanks for reading this project out. All the best for your projects!
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | LEDs | Amazon | Buy Now | |
2 | Resistor | Amazon | Buy Now | |
3 | LCD 16x2 | Amazon | Buy Now | |
4 | Arduino Mega 2560 | Amazon | Buy Now |
As you all already know the importance of traffic lights and their usage has solved a number of traffic problems, traffic is becoming denser on each road in the whole world by the hour. This leads us to consider traffic density at such roads as well. A number of different solutions have been developed in recent times to help with this problem such as roundabouts. This is done so to ensure the safety of vehicles on road and of people walking on pedestrian walks. With the world going towards automation and autonomous systems, this is the right time to switch traffic lights to an autonomous traffic light system too and make the system intelligent.
We will be going through how to make an autonomous traffic system by using Arduino as a microcontroller. However, we’re not making an actual system rather we will be making a simulation of the said traffic system on a circuit simulating software Proteus. So make sure you already have the latest version of Proteus installed on your PCs and laptops. If not, you should first install the Proteus Software by following the embedded link. Proteus is open database software, meaning people can easily make their own circuit simulating libraries for the software and can easily integrate those libraries. This helps in making the software versatile and easy to use. You can easily add your own components or download libraries of components and place them within the software.
To start working with this project, you need to install and include the following libraries on your Proteus software:
This is a smart 4-way traffic light system. The pedestrian lights work such that whenever a certain traffic light is green its opposite pedestrian lights turn on. An addition of ultrasonic sensors have been made in the traffic light sequence. One ultrasonic sensor is placed at each traffic light. Each ultrasonic sensor controls the time of their respective green traffic light. When the ultrasonic sensor output is high, the traffic light opens for one second, when the ultrasonic sensor output is intermediate the traffic light opens for two seconds and when the ultrasonic sensor output is low the traffic lights open for 3 seconds.
The main components and their use in this project is given below:
We will go through the details of some of the important components being used in this project.
Arduino is an open-source programmable board that serves as a microcontroller and processes information based upon inputs and gives information to actuators in terms of output. Arduino Mega is based upon the chip ATmegaGA2560 and has 53 digital I/O pins.
Liquid Crystal Displays used in electronics are of two basic sizes, 16x2 and 24x2. These represent the number of columns and rows of the LCD. Each pixel can store one character in it. It is also known as a character LCD. It comes equipped with a backlight. The intensity or glow of the backlight can be controlled by attaching a potentiometer at specified pins.
Figure 2: LCD display
An ultrasonic sensor uses SONAR technology to identify objects. It is basically used to find the distance of objects from the sensor. The ultrasonic sensor works by sending out ultrasonic waves and when these waves or parts of waves hit an object, they are reflected backward and the time from their propagation to their return is then noted. This time is then converted into the distance because we already know the speed by which those waves are traveling.
Figure 3: Ultrasonic Sensor
In order to simulate this project on Proteus software, we will first make the circuit diagram on Proteus. After that, we will write our code on Arduino IDE software and integrate it with the circuit made in Proteus.
Open Proteus and open a new project. Import the following components in your Proteus worksheet.
Place the component in your worksheet as illustrated in the figure below:
Figure 5: Placement of components
After placing the components, make the connections as follows:
With this, your circuit connections are complete and we will now move on to the firmware setup of this circuit.
We have divided the Arduino code in 3 segments:
We will look at these sections separately now.
The first step in the code is the declaration of variables that we will utilize in our program. At first is the declaration of ultrasonic sensor pins and setting them up with their respective pins of Arduino board. The syntax of this code is as follows.
Figure 6: Ultrasonic declaration code
Now we will include the library of LCD into our Arduino program, you can download this library from within the software. After that we will declare the LCD by defining the LCD pins. The syntax for which is as follows:
In the next step, we will declare traffic light variables and define their Arduino pins.
Figure 8: Traffic light variable declaration
Now, we will declare the variables of pedestrian LEDs and then allot them their Arduino pins being used in the circuit.
Figure 9: Declaration of pedestrian LEDs
Now, there are two variables being used for each ultrasonic sensor for the calculation of their distance and time duration. We will declare those variables now.
Figure 10: Declaration of variables being used for calculations
Void setup is the part of Arduino program that only runs once, in this section the program that only needs to run once is put, such as declaring pins as output pins or input pins.
Only the echo pins of ultrasonic sensor are input pins while all other pins are going to be output pins for this project.
We will first set up ultrasonic pins as follows:
Now we will declare traffic light pins as output pins. The syntax for this is given as follows:
Figure 12: Setup of Traffic light Pins as Output
Now we will setup our pedestrian LEDs.
Figure 13: Setup of Pedestrian LEDs as Output
Now we will initialize our LCD, this basically tells the microcontroller to start the LCD and give power to it. The syntax is given below.
Figure 14: Initializing LCD
This part of Arduino Program runs in a loop and consists of the main code of the program in which all the calculations are being done.
In the first part of the program, we will set the trigger pin of the first ultrasonic sensor to low and high. This would generate a pulse and send out a wave. After that we will read a pulse input from the echo pin. This will give us the duration in which the wave was propagated and returned. After that we will calculate the distance from the duration of the wave.
Figure 15: Syntax of 1st Ultrasonic Sensor
This distance calculation is for our first traffic light. Now we will use the if loop to check our distance value.
If the value falls between our set limit for the loop, the signal will turn green for three seconds. This will also be displayed on the LCD.
Figure 17: Arduino Code
After that in our if loop, the yellow lights 1 and 2 will turn on to indicate transition.
Figure 18: Arduino Code
Now we will use the if loop to check our distance value.
If the value falls between our set limit for the loop of intermediate traffic, the signal will turn green for two seconds. This will also be displayed on the LCD.
Figure 19: Arduino Code
After that in our if loop, the yellow lights 1 and 2 will turn on to indicate transition.
Now we will use the if loop to check our distance value again.
If the value falls between our set limit for the loop of low traffic, the signal will turn green for one second. This will also be displayed on the LCD.
Figure 21: Arduino Code
After that in our if loop, the yellow lights 1 and 2 will turn on to indicate transition.
Figure 22: Arduino Code
Now we will set the trigger pin of the second ultrasonic sensor to low and high. This would generate a pulse and send out a wave. After that we will read a pulse input from the echo pin. This will give us the duration in which the wave was propagated and returned. After that we will calculate the distance from the duration of the wave.
Figure 23: Arduino Code
This distance calculation is for our Second traffic light. Now we will use the if loop to check our distance value.
Figure 24: Arduino Code
If the value falls between our set limit for the loop, the signal will turn green for three seconds. This will also be displayed on the LCD.
After that in our if loop, the yellow lights 2 and 3 will turn on to indicate transition.
Figure 26: Arduino Code
Now we will use the if loop to check our distance value.
If the value falls between our set limit for the loop of intermediate traffic, the signal will turn green for two seconds. This will also be displayed on the LCD.
Figure 27: Arduino Code
After that in our if loop, the yellow lights 2 and 3 will turn on to indicate transition.
Figure 28: Arduino Code
Now we will use the if loop to check our distance value again.
If the value falls between our set limit for the loop of low traffic, the signal will turn green for one second. This will also be displayed on the LCD.
Figure 29: Arduino Code
After that in our if loop, the yellow lights 2 and 3 will turn on to indicate transition.
Now we will set the trigger pin of the third ultrasonic sensor to low and high. This would generate a pulse and send out a wave. After that, we will read a pulse input from the echo pin. This will give us the duration in which the wave was propagated and returned. After that we will calculate the distance from the duration of the wave.
Figure 31: Arduino Code
This distance calculation is for our third traffic light. Now we will use the if loop to check our distance value.
Figure 32: Arduino Code
If the value falls between our set limit for the loop, the signal will turn green for three seconds. This will also be displayed on the LCD.
Figure 33: Arduino Code
After that in our if loop, the yellow lights 3 and 4 will turn on to indicate transition.
Figure 34: Arduino Code
Now we will use the if loop to check our distance value.
If the value falls between our set limit for the loop of intermediate traffic, the signal will turn green for two seconds. This will also be displayed on the LCD.
After that in our if loop, the yellow lights 3 and 4 will turn on to indicate transition.
Figure 36: Arduino Code
Now we will use the if loop to check our distance value again.
If the value falls between our set limit for the loop of low traffic, the signal will turn green for one second. This will also be displayed on the LCD.
Figure 37: Arduino Code
After that in our if loop, the yellow lights 3 and 4 will turn on to indicate transition.
Figure 38: Arduino Code
Now we will set the trigger pin of the fourth ultrasonic sensor to low and high. This would generate a pulse and send out a wave. After that, we will read a pulse input from the echo pin. This will give us the duration in which the wave was propagated and returned. After that, we will calculate the distance from the duration of the wave.
Figure 39: Arduino Code
This distance calculation is for our fourth traffic light. Now we will use the if loop to check our distance value.
If the value falls between our set limit for the loop, the signal will turn green for three seconds. This will also be displayed on the LCD.
Figure 41: Arduino Code
After that in our if loop, the yellow lights 4 and 1 will turn on to indicate transition.
Figure 42: Arduino Code
Now we will use the if loop to check our distance value.
If the value falls between our set limit for the loop of intermediate traffic, the signal will turn green for two seconds. This will also be displayed on the LCD.
After that in our if loop, the yellow lights 4 and 1 will turn on to indicate transition.
Figure 44: Arduino Code
Now we will use the if loop to check our distance value again.
If the value falls between our set limit for the loop of low traffic, the signal will turn green for one second. This will also be displayed on the LCD.
Figure 45: Arduino Code
After that in our if loop, the yellow lights 4 and 1 will turn on to indicate transition.
Figure 46: Arduino Code
At first, after writing the code, generate its hex file and put that hex file on the Arduino board on your Proteus software. After that, run the simulation. The results of the simulation are shown below thoroughly.
At first, when sensor one gives the output within 500 cm, the traffic light will turn on for one second only.
Figure 47: Simulation Results
However, if the sensor one value is between 500 and 900 cm, the traffic light 1 will be green for 2 seconds with the LCD displaying the remaining time.
Figure 48: Simulation Results
If the sensor values are above 900 cm, then the lights will be green for 3 seconds.
When the sensor two gives the output within 500 cm, traffic light 2 will turn on for one second only.
Figure 50: Simulation Results
However, if the sensor two value is between 500 and 900 cm, the traffic light 2 will be green for 2 seconds with the LCD displaying the remaining time.
Figure 51: Simulation Results
If the sensor values are above 900 cm, then the lights will be green for 3 seconds.
Figure 52: Simulation Results
When sensor three gives the output within 500 cm, traffic light 3 will turn on for one second only.
However, if the sensor three value is between 500 and 900 cm, the traffic light 3 will be green for 2 seconds with the LCD displaying the remaining time.
Figure 54: Simulation Results
If the sensor values are above 900 cm, then the lights will be green for 3 seconds.
Figure 55: Simulation Results
When sensor four gives the output within 500 cm, traffic light 4 will turn on for one second only.
Figure 56: Simulation Results
However, if the sensor four value is between 500 and 900 cm, the traffic light 4 will be green for 2 seconds with the LCD displaying the remaining time.
Figure 57: Simulation Results
If the sensor values are above 900 cm, then the lights will be green for 3 seconds.
Figure 58: Simulation Results
Phew! I know that this was an extremely long project, but that is a part of an engineer’s life. Multiple receptions and running recurring patterns smoothly requires skill and patience only an engineer can possess. I hope you guys made it through. Kudos to your nerves of steel. Thanks for reading.
Hello everyone, welcome to today article which we are going to have a look at how technology has evolved the online casino industry. Some of you might be having knowhow on what casino industry is and some might be having partial or no knowledge at all. So, we are going to start with simple things as we advance our topic of discussion further. You should also have a look at the Technology behind Online Casinos.
The global casino industry is an industry that is made of facilities that involves predictions of outcomes of the final result that will be obtained after an invent has passed. The predictions are made before the event has started. It is made up of the gambling activities such as the gaming machines and the table wagering boards. it is also a common thing for some of these facilities to provide dinning, lodging and the beverage services to their customers. This industry has evolved to an online modernized activity. The online facility has become the most used one especially in this era of corona virus where lockdowns have really affected the physical appearances in the normal global casinos. Online facilities have offered players and bookies a very momentous offer where they can play the game at any place of their comfort.
The first online casino which was referred to as Inter-casino was launched in 1996 and at this time nobody had an idea of what awaited the casino industry. Bookies never thought that one day the industry would evolve to what it is today. Currently, the online casino industry is worthy over 45 billion US dollars something that is still forcing more investors to put their capital in this new area of business and entertainment. You can imagine after the launch of the first online casino industry, in the same month, there was a raise in the number to 15 and a year later, more than 150 online casinos had been launched. Actually, this was the area where investors had started seeing some great potential.
Since the industry crossed the one billion net worth mark in 1998, there have been new inventions and innovations that have led to drastic change and growth in the online casino industry. More technological advances have been made which has led to more players feeling comfortable in joining the industry. This article will focus on how technology has impacted on the online casino industry.
Multiple payment option is one of the areas that have greatly improved the online casino industry. Players can now deposit and withdraw money from sites within seconds. This payment systems introduction has lowered the cost incurred by clients and also fastened the process. Several cashless payment methods have also hit the market. These payment methods such as PayPal, Skrill, mobile money and Wire Transfer, etc have impacted greatly on how customers receive their winnings from the booking sites. You can check on OBLG to take note of all the casinos that offers their payment through PayPal which is the most commonly used universal payment methods by the majority of the bookies especially in Europe and America. Moreover, because of this online payment system, casinos also offer no deposit free spins offers, in order to attract customers.
Although landless betting has a limited amount that a client can play with, the online casino has offered a lot of options that can be used in the process and this has led to the expansion of the casino industry. One greatest thing that happens in technology is that you can adapt to new trend very quickly. Currently, cryptocurrency is taking over as the means of payment because with it you are guaranteed of great financial security and anonymity. Most popular cryptocurrency is the Bitcoin and it has offered very strong facility where even governments are unable to track owners of the casinos or even the players. With this cryptocurrency being used as a mode of payment, the casino industry has grown internationally simply because players from restricted countries can play in anonymity and get their winnings in form of cryptocurrency.
There has also been a shift in focus where most online casinos are introducing casinos that operate in the blockchain technology whereby there is an outcome of better features and makes the future of the casino industry look great.
With new trend in the area of technology, there have been development of the multi-dimensional approach across the casino industry. There has been great input in the development of the games that offers great and clear features to the players and the viewers.
With online gambling, bookers can feel a redefined industry. When you look at the betting sites, you will realize that they have been customized in a manner that it has a very powerful interface which offers the gamers a very welcoming experience while carrying out the gambling at the comfort of their wish. The introduction cool visuals and the tense atmosphere which tries to mimic the situations in real-life has made the online casino industry more and more beautiful. This actually evidence from the growth of the numbers on the gamblers who are who prefer doing their gambling online as compared to those who prefer doing it manually or in the traditional land-based gambling. For example, most online gambling industry have decided to introduce the eSports games in their online gambling platform and this shows the potential of that innovation has made in the gambling industry.
The variety of the games available in the online casino platform has also led to the increased number of gamers joining the gambling industry where some online casinos offer more than 2000 games that a gamer can choose from. The vast options of the games that are available ensure that gamers are never bored due to the availability of too many games options to choose. In some occasions, virtual reality has been involved in making this online gaming industry a reality. The use of this high technology glasses has made gamblers experience more entertainment as they feel inserted into the world of different reality. Users are able to have a real time interaction that is based on the traditional land-based casino interactions.
Despite the great growth in the online gaming industry, it comes home with some disadvantages especially on matters security since it is accompanied with a lot of attacks that are directed towards the gamers. This frequent security attacks are more as compared to what is experienced in the traditional land-based casino. Since the digital information is always very sensitive, it is the duty of the casino site to keep the information very safe lest it falls in the hands of the wrong person. The sensitive personal information that is required for online casino can be used for identity where the client can lose a lot of money through hacking. Online casinos have been forced to use new technology in securing their sites in order to protect their clients from insecurity that might occur.
Some online casinos have even gone a step higher whereby they use the artificial intelligent to improve the security of the site and ensure that they monitor every movement that is made on the sites. There has also been a way where users have to provide the 2FA authentication to ensure that only authorized members get access to the sites.
Customer support has also moved a notch higher with the advent of new advanced ways of solving customer issues in the online casino platforms. In the online casino platforms, you will come across emails, call centers and even live chats which have been introduced in the recent years to improv on customer care services. Some of these casinos have a way of offering 24/7 customer care services and this is done to prove to the customers that they are gambling in a very safe place. This proper customer care services have led to the expansion of the casino industry globally.
The advent of the smartphone industry has also increased the growth in the online industry. Today, the largest population of the world have a smartphone in their pocket and this has led to the people participation more in the online casino games and gambling. Online casinos have taken advantage in the growth of the smartphone owners and have come up with sites that are mobile friendly giving their players a very fascinating environment to entertain themselves. The mobile casino games are very revolutionary as players can get access to the games at any time and any locations and this has made it very convenient to the gamers the mobile phones have introduced portability to this industry.
Some few years ago, the gamers used to visit the betting shops to play games. With the introduction of the online casino, it has become do possible for the games to rich people easily and in any location of this world. Some companies have moved the impact higher by organizing gaming competitions that involves millions of people which could not be achieved in the traditional hall because of the spacing and difficulty in managing the outcome. The online casino has actually introduced the new investment opportunity for the people. This online casino has actually introduced new technology trends in order to place itself in a position which can rival the competitors and also give the pundits an improved gaming experience. They have come up with very user -friendly interfaces that come in with several important features. Some of these sites use artificial intelligent to settle and update results and games too. All these activities are being done to ensure that the online casino site has more clients joining.
Modern online casinos have gone into another level whereby the use of artificial intelligent have revolutionized the industry. Artificial intelligence such as the use of the chatbots have been used to help the gamblers in placement of the bets. The same artificial intelligence has been used by the sites to help customers in the processing of their payments from the bookies and also process withdrawal request for the clients. The bot is very important in this industry because they can offer unlimited customer support. The artificial intelligence has also found use in the online casino industry where the gamers have an interest in playing against the machines instead of playing against the other gamers. Also, the Sportbooks have been using various artificial intelligence mechanism to help the users of the various websites find the various icons and learn how to use the sites.
The smartphone, tablets and the internet industry has made major technological impact in the area of the online casino industry. Statistics show that in 2012 there was a great improvement in the use of the online casino by 12% globally. This improvement was introduced due to the revolutionization of the smartphone and the internet industry. Now close to over one hundred and sixty million pundits visit online casinos on their phones using the mobile phones applications. The mobile gambling is said to be contributing at least 50% of the revenue that is generated from the gambling industry. The mobile applications have greatly impacted on the growth of the online casinos industry.
In conclusion, the online casino industry has grown to a greater extent through the introduction of so many trends in the areas of money transfer, online payment methods, the introduction of artificial intelligence, the great extent to which the mobile phone application industry has grown higher, the introduction of better marketing strategies, better customer support and security systems. With all these, the industry has grown to something else, something better and something magnificent attracting more bookies worldwide.
Working in ladder logic programs is getting further complicated especially for large-scale projects. So, it is very beneficial to know shortcuts for writing ladder logic simpler, more readable, and easier for others to develop. Using this variety of logic gates, enrich the logic and fluency of writing the logic in different situations. For example, using XOR logic is very common for comparing two inputs to decide if they are equal or different. Therefore, we found that it is crucial to go through all logic gates and do simulations for them all in this tutorial. for coherently we get the knowledge to use them fluently in ladder logic programming to solve different logical problems and scenarios. There are seven basic logic gates which are: “AND”, “OR”, “NOT”, “NAND”, “NOR”, “XOR”, and “XNOR”. We have gone through “AND”, “OR”, and “NOT” logic gates including simulation work. So let us go through the other four gates for learning and practicing all basic logic gates.
The “NAND” logic gate is the invert of the “AND” gate like you invert the output of an “AND” logic gate as shown in Fig. 12. Table 5 lists all combinations of the inputs and the output of the “NAND” logic gate.
Fig. 12: NAND symbol
Table 5: the truth table of the “NAND” logic gate
Input A | Input B | Output |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
In addition, the timing diagram of a “NAND” logic gate is shown in fig. 13, it shows the output goes low when both of the inputs A and B are true which is the inverse of the “AND” logic gate. Also, Fig. 14 shows a ladder logic of a “NAND” logic.
Fig. 13: The timing diagram of the “NAND” logic gate
Fig. 14: Ladder logic sample of a “NAND” logic
The NAND logic gate can be considered as the invert of the “AND” logic gate. So as listed in table 1, the truth table of AND and NAND logic gates shows how the NAND gate is the reverse of the AND gate. Also, it shows the NAND gate should come out to your mind when you want the output always low except when both inputs A and B are high.
The NAND gate can be implemented by connecting the negate of the output in series to the inputs A and B. Another way to implement NAND is by inverting both inputs and connecting them in parallel as shown in fig. 1. Rung 1 and rung 2 respectively.
Fig. 1: The NAND ladder logic in two ways
Let’s test our ladder logic in both methods. According to the truth table of NAND gate, we have four test cases. figure 2 shows the first test case when both inputs A and B are false. In this case, the output should be true as shown in fig. 1.
Fig. 2: NAND ladder logic when both inputs are false
figure 3 shows the second test case when inputs A goes true while B is false. In this case, the output should be true as shown in fig. 3.
Figure 4 shows the third test case when inputs B goes high while B is low. In this case, the output should be true as shown in fig. 4.
Fig. 4: NAND ladder logic when input A is true and input B is false
Figure 5 shows the last test case when both inputs A and B become high so the output goes false as shown in fig. 5.
Fig. 5: NAND ladder logic when both inputs are true
Thanks to performing the simulation of the NAND gate, we now can conclude that we should be looking for a NAND logic when we want to shut down an actuator i.e. motor whenever two inputs are in a true logical state simultaneously. For a practical example, when we have three pumps and we want to run them in the mode of two of three. There should be only two of the three pumps to run at any time. In that case scenario, the run condition of any motor can be a NAND of the status of the other two motors.
The “NOR” logic gate receives two inputs and has one output. It is the same as the invert of the “OR” logic gate. Like you follow the output of an “OR” gate by a “NOT” logic gate. Fig. 15 shows the symbol of a “NOR” gate. In addition, the truth table is expressed in table 6. It shows the output becomes false only when one of the input A or input B or both goes high which is the reverse logic of the “OR” logic gate.
The “NOR” logic gate can be formed by connecting the “OR” logic gate to the inverter “NOT” logic gate. Or by inverting the inputs by using “NOT” logic gates and connecting them to the “AND” logic gate as shown in Fig. 16.
Fig. 16: structure of “NOR” logic gate
Table 6: the truth table of the “NOR” gate
Input A | Input B | Output |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
Figure 17 shows an example of a ladder program for implementing the “NOR” logic gate. It shows that the “NOR” gate can be implemented in ladder logic by connecting two contacts of type NC in series.
Fig. 17: A sample ladder for a “NOR” logic gate
On the other hand, the timing diagram of the “NOR” logic gate is depicted in Fig. 18. It shows the output is false as long as either input A or input B or both are true.
This logic gate can be considered as the negate of OR as you can notice in the truth table as listed in table 2. You can now feel when we may need to use the NOR logic? Yes! Exactly you want it when you design for output which is all time off except when both inputs are false.
Table 2: the truth table of NOR versus OR
Input A | Input B | OR | NOR |
0 | 0 | 0 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 1 | 0 |
Figure 6 shows two ways to implement the NOR logic in ladder logic. To make that happen, we connect the invert of the two inputs in series to the output as shown in the top part of fig. 6. The other way is to connect the two inputs in parallel to form OR and then connect to negate the output as shown in the lower part of fig. 6.
Let’s practice simulation of the NOR gate, in fig. 7, the first test case is when both inputs are false, the output is true as shown in fig. 7.
Fig. 7: The Simulation of NOR ladder when both inputs are false
Figure 8 shows the second case when input A is true and input B is false, the output is false as shown in fig. 8.
Fig. 8: The Simulation of NOR ladder when input A is true and input B is false
Figure 9 shows the third test case when input B is true and input A is false, the output is false as shown in fig. 9.
Fig. 9: the Simulation of NOR ladder when input B is true and input A is false
Figure 10 shows the last test case of NOR ladder logic, it shows the output is false
One practical example of using the NOR logic is that, imagine friends we drive some machine with two motors. And it is required to have at least one of them or both are running all the time otherwise alarm should be energized. The NOR logic is the best to manage that alarm to get energized if and only if both motors are off.
Despite this logic gate having two inputs and one output like the “AND” and “OR” logic gates, this logic gate is a bit more complicated than the previous logic gates. Table 4 lists the truth table including all combinations of the inputs and the output. By noticing the truth table of the XOR logic gate, you can see the output becomes low when the two inputs are equal like both are high or both are low. But the output goes high when there is a difference in the state of the two inputs. Imagine my friend, how much this logic gate is very beneficial for comparing two signals.
Input A | Input B | Output |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
On the other hand, Figure 10 shows the symbol of the XOR logic gate and its schematic. See how the basic logic gates OR, AND, and NOT can be utilized to build the logic of XOR logic gate.
Fig. 10: The XOR logic gate symbol
Figure 11 shows a sample of a ladder logic program that implements XOR logic. In addition, it shows the timing diagram of the inputs and output, it shows the output goes high when there is a difference between the two inputs and becomes low when they are equal i.e. both are low or both are high.
Fig 11: Sample of the ladder logic for XOR logic and the timing diagram
The XOR is used to compare two signals if they are equal or different. Table 3 lists the truth table of the XOR. It shows that the output comes to true when inputs are different and becomes false when they are equal.
Table 3: The truth table of XOR logic
Figure 11 shows the construction of XOR ladder logic. It shows that it is composed of, two parallel branches and each branch is forming AND logic of the two inputs in the opposite logical state.
Figure 12, shows the simulation results of XOR when input A and B are false, the output is false.
Figure 13, shows the simulation results of XOR when input A is true and input B is false, the output is true.
Figure 14, shows the simulation results of XOR when input B is true and input A is false, the output is true.
Figure 15, shows the simulation results of XOR when input A is true and input B is true, the output is false.
In a conclusion, the XOR logic in simulation shows that the output is low whenever both inputs are equal and goes high when the inputs are different in the logical state. A very good practical example for utilizing the XOR logic is that imagine friends we have a motor that is energized by two different destinations, and it should be requested by only one at a time. So we can get the run signal from the XOR of the two input switches. So, the only case to run the motor is by requesting from one source.
This logic gate is the invert of the XOR gate. So it is equivalent to applying an inverter to the “XOR” logic gate. Table 7 lists the combination of its two inputs and its output. It shows clearly that, the output becomes true when inputs are equal i.e. both inputs are true or both are false.
Input A | Input B | Output |
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Fig. 20 shows the symbol of the “XNOR” logic gate, it shows clearly how it is the invert of the XOR logic gate. This logic gate is very useful to validate if two signals are equal or not.
Fig. 20: The symbol of the “XNOR” logic gate
On the other hand, Fig. 21 shows a sample ladder logic of an “XNOR” logic gate implementation. It shows that there are only two ways to have the output in the TRUE state which are by setting both inputs TRUE or set both FALSE.
Fig. 22 depicts the timing diagram of the inputs and output of the “XNOR” logic gate and clearly shows the output goes high when both inputs have the same state.
Fig. 22: the timing diagram of the “XNOR” logic gate
The XNOR is the invert of the XOR and it is used to compare two input signals. Table 4 lists the cases of the truth table of XNOR logic. It shows the output goes high when both inputs are equal i.e. both are high or both of them are low.
Figure 16 shows the construction of XNOR ladder logic. It shows that it is composed of, two parallel branches and each branch is forming AND logic of the two inputs in the same logical state.
Figure 17, shows the simulation results of XNOR when input A and B are equal i.e. both are false, the output is high.
Fig. 17: The Simulation of XNOR ladder when both inputs are false
Figure 18, shows the simulation results of XNOR when input A is true and input B is false i.e. they are different. So the output goes false.
Fig. 18: The Simulation of XNOR ladder when input A is false and input B is high
Figure 19, shows the simulation results of XNOR when input A is false and input B is true i.e. they are different. So the output goes false.
Fig. 19: The Simulation of the XNOR ladder when input B is true and input A is false.
In the last case when both inputs A and B are high as shown in Fig. 20, the output becomes true.
Fig. 20: The Simulation of XNOR ladder when both inputs are true
We can conclude that the XNOR is marked by the true status of its output whenever both inputs are equal and vice versa. One of the most common scenarios for the best practice of XNOR is the protection of the operator's hands in the cutting machine. In that machine, the command for running the knife driving motor is an XNOR of two switches on the left and right hand of the operator. In that way, it is guaranteed that to run the motor, the operator should use both hands at the same time.
I am very pleased to see you up to this point of our tutorial, Now you are familiar with all logic gates and practiced their logic on the simulator. In addition, you can feel the importance of mastering all these logic gates to ease your programming and enrich your programming skills. In the next tutorial, we are going to go deeply through the edge signal including rising and falling edge. We are going to introduce the benefits of these edge signals and how they can be utilized in ladder logic programming to solve a lot of problems. So be ready for more learning and practice with simulation in ladder logic series.
Hello readers, I hope you all are doing great. Welcome to Section 5 of the ESP32 Programming Series. In this section, we are going to interface different Embedded Sensors with the ESP32 Microcontroller Board. ESP32 development board is featured with some inbuilt sensors(i.e. hall effect sensor, capacitive touch sensor) so, in the initial tutorials of this section, we will explore these built-in ESP32 sensors and in the later lectures, we will interface third-party sensors with the ESP32.
In today's lecture, we will discuss the working/operation of the ESP32 built-in Hall Effect Sensor. Hall Effect sensor is used to detect the variation in the magnetic field of its surroundings. So, let's first understand What's Hall Effect:
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | ESP32 | Amazon | Buy Now |
The Hall Effect phenomenon was first discovered by Edwin Hall in 1879. When current passes through a conductor, the electrons move in a straight line and thus the voltage difference across the conductor's surface remains zero, as shown in the below figure:
However, when a magnet is placed near the current-carrying conductor in a way that the direction of the magnetic field is perpendicular to the flow of current, the electrons get diverted and don't follow a straight line, which results in generating a small potential difference across the conductor's surface, as shown in the below figure:
This small potential difference generated because of magnetic field presence is called Hall Voltage. This magnetic field influence over the current-carrying conductor is termed the Hall Effect.
A Hall Effect Sensor is a non-contact type embedded sensor, used to detect the presence & intensity of a magnetic field in its surroundings. Different third-party Hall Effect Sensors available in the market are shown in the below figure:
In ESP32, the Hall effect sensor is located inside the ESP-WROOM-32 metallic cover. As the Hall Effect sensor is a non-contact type, it doesn't have to be in contact with the magnet. We just need to place the magnet above this metallic sheet and the ESP32 Hall Effect sensor will detect it.
To understand the working of the Hall sensor with ESP32, let's test the builtin ESP32 example:
Here's the code for this ESP32 Hall Sensor example:
int val = 0;
void setup()
{
Serial.begin (9600);
}
void loop()
{
val = hallRead();
Serial.print ("sensor value = ");
Serial.println (val);//to graph
delay(100);
}
The code is quite simple, where the hallRead() function is called to read the hall sensor value, store it into a variable and then print it on the Serial monitor. Finally added a small delay to get the next value. Let me explain the code line by line for the beginners:
int val = 0;
void setup()
{
Serial.begin (9600);
}
void loop()
{
val = hallRead();
Serial.print ("sensor value = ");
Serial.println (val);//to graph
delay(100);
}
This concludes the tutorial. I hope you found this helpful, test it out and if feel any difficulty, let me know in the comments. In the next tutorial, we will have a look at another built-in sensor of ESP32 i.e. Capacitive Touch Sensor. Thanks for reading.
People are still choosing manual parking methods, which have a number of drawbacks, such as searching for a vacant spot in a parking lot without knowing if the lot is full or not, resulting in time and fuel waste. Vehicle safety is also a concern that may be addressed. We've all been in a position when we've spent a long time looking for parking at a location just to discover that none is available. You would think that if you knew the slots were full, you would've ended up finding another parking spot.
Based on these scenarios, we came up with the idea of a Car Parking System with Automatic Billing which will also reduce manpower such as security, booth attendants, etc., required in parking lots. Everything in the modern day is automated, and with this project, we can automate this procedure using simple electronics components and Arduino. Let's get started.
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | DS1307 | Amazon | Buy Now | |
2 | Keypad 4x3 | Amazon | Buy Now | |
3 | LCD 20x4 | Amazon | Buy Now | |
4 | Arduino Uno | Amazon | Buy Now |
Instead of using real components, we'll use the Proteus Simulation tool to design this project. It's also a good habit to experiment with simulations before attempting to build everything with real components. By simulating an issue that may develop when working on actual components, we may identify the problem and avoid any damage to our components.
Proteus is an interesting software that lets you model and build electronics circuits. Despite having a huge library of electronics components, Proteus software lacks pre-installed modules such as Arduino boards, Ultrasonic sensors, RTC modules, LCD modules, and so on.
Now, we’ll start installing the libraries, which is needed for our project:
By clicking the button below, you can download the entire project, including Proteus Simulation and Arduino Code.
These are required components for Accident Detection, which are as follows:
The RS pin will be set to logic high to display the data on the LCD.
Distance = (Time x SpeedOfSound) / 2.
Speed of Sound: 340 meters per second i.e., 0.034Distance in Centimeters = (( Time taken by pulse signal (in microseconds) / 2) / 29)
Now, it’s time to start the design of the Proteus Simulation of our Car parking system
After importing all required components to the workplace, let’s move to connecting them.
Now we have done the circuit, it’s time to move to the coding side of this project.
We have completed the Proteus simulation circuit and Arduino code for the Car Parking project. And it is ready for testing.
As we can see that for 50% value on the pot ultrasonic sensor value is near to 500 cm and for 77% value on the pot ultrasonic sensor value is near to 850 cm.
Here it is not visible which button on the keypad has clicked but suppose we have clicked ‘1’ and if that location is vacant then it will display that message.
I hope you have a good understanding of how our Car parking system project works and that you have liked it. Although it’s a tough nut to crack in the first read, I strongly recommend you to read the logic part twice for better understanding. I believe we have covered almost everything, please let us know if you have any questions or suggestions in the comments section.
Thank you very much for reading this project. All the best for your projects!
Given that IPC has been globally adopted well-known standards for training in the field of electronics, many times you will find yourself working in an environment that adheres to IPC standards, where all professionals and organizations, you are working in communicates in IPC-based terminology. If you do not have a good handle on the IPC standard, it can cause unnecessary and expensive delays in the manufacturing process.
It is beneficial for a company or organization to adopt the practice of following IPC standards within, as it will not only help in improving efficiency but also maintain quality standards of the industry. So, it goes without saying that all these lead to influence the hiring policy of many organizations as they prefer to employ staff with IPC certification.
Other than all these mentioned benefits, let's briefly analyze all major advantages that come with practicing IPC standards.
In the highly competitive world of electronics, the key strategy of maintaining a leading position is consistency in delivering quality products with great efficiency. Adopting visual inspection in the manufacturing process as per guidelines provided by IPC, directly impacts the efficiency of the production process. It is evident that consistent inspection of the manufacturing process has a positive influence in terms of customer satisfaction and repetitive business.
On the contrary, failing to adopt the IPC standard will lead to massive duplication of working hours, which will waste crucial time and result in chaos and non-standardization within the fabrication level. An organization's level of internal consistency should reflect industry best practices to ensure optimal production symmetry and collaboration.
Miscommunication among professionals due to non-standardized working processes can lead to inconsistency and expensive delayed production. In the OEM (original equipment manufacturers), CEMs (contract electronics manufacturers), ODMs (original design manufacturers) and EMS (electronics manufacturing service) industry, it is crucial that vendors and manufacturers/contractors use the same terminology and practice the same standards. IPC certification provides that certainty in the process. Many professionals associated with the electronics industry confirm all the advantages that come with IPC standardized practices within the industry due to cross-channel communication, and attribute their success, in large part, to speaking the same language.
When a company consistently follows the IPC standardized production process and streamlines cross-channel communications and interactions, what comes next is a significant reduction in production costs and time.
IPC-A-610 course ensures the acceptability of electronic assemblies such as soldering criteria, surface mounting criteria and jumper wire assembly requirements among others, whereas and J-STD-001 course help maintains a standard of each product, at each stage in the assembly line and process, while evaluating and serving under the same scrutiny as others. On top of reducing costs by decreasing the number of rebuilds and reworks, these courses also focus on improving production time. These certifications establish standards within the fabrication process and guarantee that your operation employs a higher standard of quality control.
After pursuing IPC certifications, you’ll find yourself capable of delivering a consistent, high-quality product, and communicating with other vendors/manufacturers in your supply chain. These certifications enable your company to become a trusted provider within the industry as well as assure security in terms of future business growth.
If you currently do not have globally recognized IPC certification in your institute or on your resume and you want to make that superior change, contact Advanced Rework Technology (A.R.T.) today. A.R.T Ltd also offers bespoke training that can be based entirely around the requirements of your company and even specific products, with all theory and practical equipment supplied by them too. All is just a call away from you. Call A.R.T. Ltd today on 01245 237 083.
Hello readers, I hope you are all doing great. In this tutorial, we are going to discuss the OTA web updater on the ESP32.
We already covered the fundamentals of OTA programming in ESP32, in our previous tutorial where we used the Arduino IDE to upload OTA code into the ESP32 module using the network port.
In the OTA web updater, you need to create a web server page for OTA programming.
Fig.1 ESP32 OTA web updater
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | ESP32 | Amazon | Buy Now |
Fig. 2
In this tutorial, we will discuss only the OTA web updater method using Arduino IDE and ESP32 dev-Kit V1 module.
If you want to know more about the basics of ESP32 and how to get started with Arduino IDE, then read Introduction to ESP32 Programming Series.
#include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h> #include <Update.h> const char* host = "esp32"; const char* ssid = "SSID"; const char* password = "password"; WebServer server(80); /* * Login page */ const char* loginIndex = "<form name='loginForm'>" "<table width='20%' bgcolor='A09F9F' align='center'>" "<tr>" "<td colspan=2>" "<center><font size=4><b>ESP32 Login Page</b></font></center>" "<br>" "</td>" "<br>" "<br>" "</tr>" "<td>Username:</td>" "<td><input type='text' size=25 name='userid'><br></td>" "</tr>" "<br>" "<br>" "<tr>" "<td>Password:</td>" "<td><input type='Password' size=25 name='pwd'><br></td>" "<br>" "<br>" "</tr>" "<tr>" "<td><input type='submit' onclick='check(this.form)' value='Login'></td>" "</tr>" "</table>" "</form>" "<script>" "function check(form)" "{" "if(form.userid.value=='admin' && form.pwd.value=='admin')" "{" "window.open('/serverIndex')" "}" "else" "{" " alert('Error Password or Username')/*displays error message*/" "}" "}" "</script>"; /* * Server Index Page */ const char* serverIndex = "<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>" "<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>" "<input type='file' name='update'>" "<input type='submit' value='Update'>" "</form>" "<div id='prg'>progress: 0%</div>" "<script>" "$('form').submit(function(e){" "e.preventDefault();" "var form = $('#upload_form')[0];" "var data = new FormData(form);" " $.ajax({" "url: '/update'," "type: 'POST'," "data: data," "contentType: false," "processData:false," "xhr: function() {" "var xhr = new window.XMLHttpRequest();" "xhr.upload.addEventListener('progress', function(evt) {" "if (evt.lengthComputable) {" "var per = evt.loaded / evt.total;" "$('#prg').html('progress: ' + Math.round(per*100) + '%');" "}" "}, false);" "return xhr;" "}," "success:function(d, s) {" "console.log('success!')" "}," "error: function (a, b, c) {" "}" "});" "});" "</script>"; /* * setup function */ void setup(void) { Serial.begin(115200); // Connect to WiFi network WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); /*use mdns for host name resolution*/ if (!MDNS.begin(host)) { //http://esp32.local Serial.println("Error setting up MDNS responder!"); while (1) { delay(1000); } } Serial.println("mDNS responder started"); server.on("/", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", loginIndex); }); server.on("/serverIndex", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", serverIndex); }); /*handling uploading firmware file */ server.on("/update", HTTP_POST, []() { server.sendHeader("Connection", "close"); server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK"); ESP.restart(); }, []() { HTTPUpload& upload = server.upload(); if (upload.status == UPLOAD_FILE_START) { Serial.printf("Update: %s\n", upload.filename.c_str()); if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_WRITE) { /* flashing firmware to ESP*/ if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_END) { if (Update.end(true)) { //true to set the size to the current progress Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize); } else { Update.printError(Serial); } } }); server.begin(); } void loop(void) { server.handleClient(); delay(1); }
Fig. 4
Fig. 6
Fig. 7
Fig. 9
Fig. 10
Fig. 12
Fig. 13
Fig. 14
Fig. 16
Fig. 17
#include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h> #include <Update.h> const char* host = "esp32"; const char* ssid = "SSID"; const char* password = "password"; //variabls to blink without delay: const int led = 2; unsigned long previousMillis = 0; // will store last time LED was updated const long interval = 1000; // interval at which to blink (milliseconds) int ledState = LOW; // ledState used to set the LED WebServer server(80); /* * Login page */ const char* loginIndex = "<form name='loginForm'>" "<table width='20%' bgcolor='A09F9F' align='center'>" "<tr>" "<td colspan=2>" "<center><font size=4><b>ESP32 Login Page</b></font></center>" "<br>" "</td>" "<br>" "<br>" "</tr>" "<td>Username:</td>" "<td><input type='text' size=25 name='userid'><br></td>" "</tr>" "<br>" "<br>" "<tr>" "<td>Password:</td>" "<td><input type='Password' size=25 name='pwd'><br></td>" "<br>" "<br>" "</tr>" "<tr>" "<td><input type='submit' onclick='check(this.form)' value='Login'></td>" "</tr>" "</table>" "</form>" "<script>" "function check(form)" "{" "if(form.userid.value=='admin' && form.pwd.value=='admin')" "{" "window.open('/serverIndex')" "}" "else" "{" " alert('Error Password or Username')/*displays error message*/" "}" "}" "</script>"; /* * Server Index Page */ const char* serverIndex = "<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>" "<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>" "<input type='file' name='update'>" "<input type='submit' value='Update'>" "</form>" "<div id='prg'>progress: 0%</div>" "<script>" "$('form').submit(function(e){" "e.preventDefault();" "var form = $('#upload_form')[0];" "var data = new FormData(form);" " $.ajax({" "url: '/update'," "type: 'POST'," "data: data," "contentType: false," "processData:false," "xhr: function() {" "var xhr = new window.XMLHttpRequest();" "xhr.upload.addEventListener('progress', function(evt) {" "if (evt.lengthComputable) {" "var per = evt.loaded / evt.total;" "$('#prg').html('progress: ' + Math.round(per*100) + '%');" "}" "}, false);" "return xhr;" "}," "success:function(d, s) {" "console.log('success!')" "}," "error: function (a, b, c) {" "}" "});" "});" "</script>"; /* * setup function */ void setup(void) { pinMode(led, OUTPUT); Serial.begin(115200); // Connect to WiFi network WiFi.begin(ssid, password); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); /*use mdns for host name resolution*/ if (!MDNS.begin(host)) { //http://esp32.local Serial.println("Error setting up MDNS responder!"); while (1) { delay(1000); } } Serial.println("mDNS responder started"); /*return index page which is stored in serverIndex */ server.on("/", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", loginIndex); }); server.on("/serverIndex", HTTP_GET, []() { server.sendHeader("Connection", "close"); server.send(200, "text/html", serverIndex); }); /*handling uploading firmware file */ server.on("/update", HTTP_POST, []() { server.sendHeader("Connection", "close"); server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK"); ESP.restart(); }, []() { HTTPUpload& upload = server.upload(); if (upload.status == UPLOAD_FILE_START) { Serial.printf("Update: %s\n", upload.filename.c_str()); if (!Update.begin(UPDATE_SIZE_UNKNOWN)) { //start with max available size Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_WRITE) { /* flashing firmware to ESP*/ if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) { Update.printError(Serial); } } else if (upload.status == UPLOAD_FILE_END) { if (Update.end(true)) { //true to set the size to the current progress Serial.printf("Update Success: %u\nRebooting...\n", upload.totalSize); } else { Update.printError(Serial); } } }); server.begin(); } void loop(void) { server.handleClient(); delay(1); //loop to blink without delay unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you blinked the LED previousMillis = currentMillis; // if the LED is off turn it on and vice-versa: ledState = not(ledState); // set the LED with the ledState of the variable: digitalWrite(led, ledState); } }
Fig. 19
Fig. 20
Fig. 21 bin file
Fig. 23 LED blink
This concludes the tutorial. I hope, you found this helpful and I hope to see you soon for the new ESP32 tutorial.
PWM stands for Pulse-Width Modulation. Once the switching frequency (fsw) has been chosen, the ratio between the switch-on time (TON) and the switch-off time (TOFF) is varied. This is commonly called duty-cycle (D). The duty cycle can be between 0 and 1 and is generally expressed as a percentage (%).
D = TON / (TON + TOFF) = TON x fsw
The variation of the pulse width, made at a high frequency (kHz), is perceived as continuous and can be translated into a variation of the rotation speed of a motor, dimming a LED, driving an encoder, driving power conversion, and etc. The use of PWM is also widely used in the automotive sector in electronic control units (ECU - Electronic Control Unit) to manage the energy to be supplied to some actuators, both fixed and variable frequency. Among the various actuators used in a vehicle and controlled by PWM i.e. diesel pressure regulator, EGR valve actuator, voltage regulator in modern alternators, turbocharger variable geometry regulation actuator, electric fans, etc.
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | STM32 Nucleo | Amazon | Buy Now |
In this article, we will see how to configure and write an application to dim an LED connected to an output pin (GPIO) of the STM32F446RE Nucleo board. First of all, let's see how to configure the initialization code with the STCube tool.
It is necessary to identify a GPIO to associate a timer to generate the PWM. For example, we choose PB3 associated with Channel 2 of Timer 2 (TIM2_CH2). Note that the pin turns orange to remind us of that timer 2 still needs to be configured.
Now you need to configure timer two which is hooked to pin PB3.
We configure the clock tree so that the clock frequency (HCLK) of the microcontroller is 84 MHz, handling frequency divisor and multiplier of PLLCLK. The bus to which the timers are connected (APB1 timer and APB2 timer clocks) is also at 84 MHz.
We now know that timer 2 has a clock source of 84 MHz, so every time the clock switches the timer does a count. If we configure it to count to 84 million (it is a 32-bit timer, the Counter must be between 0 and 4294967295) it will take a second. We can set this number to exactly half so that the LED lights up for half a second and turns it off for another half-second. In practice, we will see at the output a square wave that will have a duty cycle of 50% and a switching frequency of 1Hz (too slow not to notice the switching on and off the LED !!). To do what has been said, the timer must be configured as follows:
Now we are ready to lunch the initialization code and write our application.
/* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_TIM2_Init(void);/* USER CODE BEGIN PFP */At the end of main() we find the initialization code of System Clock, Timer 2 and GPIO ( as previously selected in STCube):
void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Configure the main internal regulator output voltage */ __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = 16; RCC_OscInitStruct.PLL.PLLN = 336; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4; RCC_OscInitStruct.PLL.PLLQ = 2; RCC_OscInitStruct.PLL.PLLR = 2; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /** * @brief TIM2 Initialization Function * @param None * @retval None */ static void MX_TIM2_Init(void) { /* USER CODE BEGIN TIM2_Init 0 */ /* USER CODE END TIM2_Init 0 */ TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; /* USER CODE BEGIN TIM2_Init 1 */ /* USER CODE END TIM2_Init 1 */ htim2.Instance = TIM2; htim2.Init.Prescaler = 0; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 83999999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM2_Init 2 */ /* USER CODE END TIM2_Init 2 */ HAL_TIM_MspPostInit(&htim2); } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOB_CLK_ENABLE(); } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ __disable_irq(); while (1) { } /* USER CODE END Error_Handler_Debug */ }
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 */ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 41999999); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }
As mentioned earlier we have set the timer two to count up to 84 million, so we know that counting 84 million a second has elapsed. Now let's use the PWM function to make sure that for half a second the LED stays on and the other half a second off. In practice, to generate a square wave with a duty cycle of 50% and a frequency of one second.
We use the function “HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2)” to enable timer 2 to start in PWM mode and the macro “__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 41999999)” tells the timer which is the value with which to compare the internal count (in this case 41999999) to decide whether the LED should be off or on.
Now we just must connect a led between pin PB3 and ground through a 220OHm resistor to limit the current (if we want to work with a duty cycle of 100%) and compile our application.
Once this is done, we see that the LED will remain on for 500ms second and off for another 500ms as can be seen from the waveform acquired by the PB3.
First, we declare the following define:
#define D_COUNTER 839
Now, we associate it with the field “htim2.Init.Period” of the structure *htim2:
htim2.Init.Period = D_COUNTER;
In this way, we can quickly the number of counts that the timer must do and therefore manage the frequency and duty cycle of our PWM.
This way our timer will count up to 839 in 10us. Consequently, the switching frequency will be 100kHz (clearly exceeding 1Hz !!). Note that as in the previous example we have subtracted 1 from the count value because the timer starts at zero.
Then, we define an unsigned int variable to set the duty cycle:
unsigned int D; //duty cycle In the main() we write; /* USER CODE BEGIN 2 */ D= 10; //it menas duty cycle of 10% HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, (D_COUNTER/100)*D); /* USER CODE END 2 */
Where (D_COUNTER/100)*D needs to re-proportion the value of the duty cycle to the count that the timer must perform.
Compiling we will see that now the LED will always be on but with low brightness, in fact, the duty cycle is only 10% as can be seen from the generated waveform and the rms value of the voltage given to the LED is about 1.1 Volt (as you can see in the bottom corner of the RMS figure for the green trace). Furthermore, the figure confirms that the duty cycle is 10% both intuitively by looking at the green trace and by reading the measurement at the bottom center (Dty+ = 10,48%).
If we set D=70, the LED will be brighter, in fact the RMS value is about 2.82 Volt (as you can see in the bottom corner of the RMS figure for the green trace). Furthermore, the figure confirms that the duty cycle is 70% both intuitively by looking at the green trace and by reading the measurement at the bottom center (Dty+ = 69,54%).
If we set D=100, the led will be illuminated with the maximum brightness imposed by the limitation of the 220 Ohm resistor. The rms value at the ends of the LED with the resistance in series will be 3.3 Volts (the maximum generated by the GPIO)
Now if you write the following code on while(), we will see that the LED will change brightness every 100ms (in practice it increases, every 100ms the duty by 1% starting from 1% until it reaches 100% and then starts all over again)
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ for(D=1; D<=100; D++){ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, (D_COUNTER/100)*D); HAL_Delay(100); } /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */
To do this we include the PWM configuration function ( HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, (D_COUNTER/100)*Duty) in the following loop for(D=1; D<=100; D++) which increases the value of variable D by 1 every 100 ms through the function HAL_Delay(100).
Now we are ready to effectively manage the PWM to control the brightness of a led, but in a similar way, we can control the speed of a DC motor or various actuators.
Hi readers! I hope you are doing well and want to learn something new. Have you ever asked why our homes feel warmer when it’s cold and cooler when it’s hot out? Welcome to learn some of the secrets of HVAC Systems. Today, we will learn about the HVAC System.
Specific requirements of HVAC refer to all installations providing comfort as well as keeping a good air condition indoors for residential, commercial, and industrial buildings. It discusses the necessary components for comfortable air in your home: temperature, humidity, and cleanliness through heating, cooling, and fresh air. Most HVAC systems are based on thermodynamic principles and operate using the refrigeration cycle to transport heat through the phases of heat transfer by compressing, condensing, expanding, and evaporating refrigerants.
Heating the entire or a small part of your house is done by adding thermal energy from a furnace, boiler, or heat pump. Evacuation of heat from within to an external environment using an evaporator and condenser coil installed with a compressor and expansion valve is done by collecting up indoor heat and then releasing that heat outside. Both natural and mechanical-focused ventilation bring fresh air from outside while at the same time eliminating carbon dioxide, moisture, and pollutants from within.
The modern HVAC system has it all, which ranges from split systems and ductless mini-splits to packaged units and geothermal systems. Control usually encompasses thermostats, and most of the time, those are attached to building management systems for higher efficiency. Energy efficiency can be termed as those measures taken to minimize the wastage of energy, and it is expressed in SEER, EER, or COP metrics.
Energy efficiency is important and expressed in metrics such as SEER, EER, and COP. As smart technology and the green agenda continue to gain acceptance, HVAC keeps on evolving with better automation, green refrigerants, and more adaptive controls for comfort and lesser energy consumption.
In this article, we will find a detailed guide on the working principle of the HVAC System. Let’s dive.
HVAC stands for "heating, ventilation, and air conditioning" both in whole and the technology of regulating an indoor climate condition (air quality and comfort) in indoor structures. Heating raises an indoor ambient temperature during the winter months by creating and distributing heat in the form of various modes of heating. Devices used are furnaces, heat pumps, and boilers.
Ventilation improves indoor air quality differently. Ventilation replaces indoor air with new, fresher air from outside while also exhausting indoor pollutants, moisture, and odors. Air conditioning cools indoor air after humidity and excess heat are removed. Collectively, HVAC systems are designed to deliver and maintain an indoor environment that is healthy, comfortable, and energy efficient, and where people can be productive and healthy, does not what the outdoor climate is like.
So, with these elements, it’s possible to secure, make comfortable, and make energy-efficient indoor areas, regardless of what happens outside. By using these systems, people indoors can maintain their health, achieve good results at work, and manage their local climate.
Components |
Brief Description |
Thermostat |
Monitors indoor temperature and signals HVAC components to heat or cool. Smart models improve efficiency through scheduling and automation. |
Furnace/Boiler |
Using gas, oil, or electricity, it warms either air in a furnace or water in a boiler. Used mainly to keep homes warm in colder areas. |
Heat Exchanger |
Moves the warmth from combustion gases or electric coils either directly to air or to circulating water, separate from indoor air.. |
Evaporator Coil |
Uses indoor heat to cool air during the summer. Refrigerant inside the coil soaks out heat and ensures the air in your home becomes cooler. |
Condenser Coil |
Placed outside, it sends off the heat captured from inside to the environment, transforming the refrigerant into a liquid. |
Compressor |
Forces and moves the refrigerant from the evaporator to the condenser through the system. Important for the function of a refrigeration cycle. |
Blower Fan |
Pushes air over the evaporator or heat exchanger and distributes conditioned air through ducts into rooms. |
Air Filter |
Takes dust, allergens, and extra particles out of the air. Maintains a clean indoor environment and preserves the important parts of your heating and cooling system. |
Ductwork |
A network of insulated pipes or channels that distribute heated or cooled air throughout the building and return it for reconditioning. |
Vents & Registers |
Openings in walls, floors, or ceilings where air enters or exits rooms. Registers often have adjustable grilles for airflow control. |
The refrigerator cycle is the foundation of all HVAC air conditioning systems. The refrigeration cycle is a natural process based on the concept of heat flow from a higher temperature site to a lower temperature site. But by putting energy into this process, we can move heat from a lower temperature site to a higher temperature site. Thermodynamically, the HVAC concept allows us to move heat from the indoor space to the outdoor air, cooling the occupied space.
Once the refrigerant gas has absorbed heat and changed to a gas at the evaporator coil, it will then be sent to the compressor, located in the outdoor unit or the compressor/condenser unit. The compressor produces both pressure and temperature by being compressed into a smaller space. The high-pressure-high-temperature gas then leaves the compressor and heads to the outdoor condenser coil.
In the condenser coil (generally also located outside the building), that hot refrigerant gives off heat to the outside air and begins to condense back to a liquid. The refrigerant, however, will still be under a high-pressure condition.
This high-pressure liquid refrigerant then passes through an expansion valve or a capillary tube. This will lower its pressure as well as its temperature all at once. The refrigerant is now a cold, low-pressure liquid and will then go through the phase of cooling.
This cycle continues incessantly, factoring in the conditioned environment and staying with a comfortable temperature profile. The significance is that with heat pumps, this process can be turned upside down to deliver heating and cooling according to seasonality.
HVAC systems can utilize various methods for heating indoor spaces. Each of the methods may serve particular building sizes, climates, and types of energy sources. Below are the most commonly used heating systems:
Furnaces are a popular heating method throughout much of North America. They send hot air through ducts that deliver it to all areas in the building. A variety of fuels can be used to run a furnace.
Natural gas is burned in the heat exchanger of a gas furnace to heat the air.
With an electric furnace, heat is generated by electricity through coil filaments. Electric resistance heating is typically preferred when electricity costs are low or when gas is not available.
Oil Furnace: Seldom found today, but may be used in some older homes or rural applications.
Furnaces can heat quickly and can also be incorporated with a central AC system to control the climate throughout the year.
Similar to air conditioning, heat pumps work by taking heat from outside to inside in the winter and, in summer, pushing heat from inside to out.
In heating mode, heat pumps take heat from outside, even while it's cold outside, and use it to heat a space inside.
While cooling, the system changes the direction it moves cool air from the outside to the inside (just like a normal air conditioner).
An air-source pump is what is classified as an "A" type source heat pump. Ground-source heat pumps or geothermal heat pumps take heat energy from under the earth, so less energy is used.
Under moderate climate conditions, heat pumps provide plenty of usefulness. Used properly, based on your climate and season, we saw some energy bills reduced by up to 50 percent.
Heating with a boiler is common in older homes that don’t have ductwork. A boiler transforms water into heat, which it shares through a network of pipes (or radiators or a radiant system) to heat the space.
Radiant floor heating will give you consistent warmth, better efficiency of your existing heating system, and a reduced amount of energy consumed.
A boiler run on either natural gas, oil, or electricity is the primary source that acts as the heart of a radiant floor heating system. An efficiently maintained boiler can reliably run for 20 - 30 years.
Fresh, healthy, and comfortable indoor air is made possible mostly by the ventilation function of HVAC. If the air becomes saturated and polluted inside homes, ventilation can stop this from causing discomfort and harming people’s health.
Constant air change must improve indoor air quality by continuously replacing stale indoor air with fresh outdoor air. Constant ventilation will also help in eliminating excess moisture. Excessive moisture creates a conducive environment for the growth of mold, mildew, and contributes to unpleasant odors from the chef, pets, home products, or cleaning products.
Every minute of every day, a little carbon dioxide (CO₂) is released. CO₂ stays trapped inside a closed room and can create a lot of trouble, due to its properties as a greenhouse gas, if there is no airflow. Others give off volatile organic compounds (VOCs); some home cleaning products, some paints, some furniture, etc. To have a VOC issue in any location takes a pretty high concentration. It moves some of the air around the home, ventilating and keeping oxygen up, while decreasing humidity, creating a healthier and better-feeling living space.
Type |
Description |
Natural Ventilation |
Uses windows, vents, and openings to allow outdoor air to flow in freely. |
Mechanical Ventilation |
Uses fans and ducts to remove stale air and introduce fresh air. |
Balanced Ventilation |
A system that brings in fresh air while simultaneously exhausting stale air. |
Heat Recovery Ventilators (HRVs) |
Exchange heat between incoming and outgoing air streams to improve efficiency. |
Energy Recovery Ventilators (ERVs) |
Transfer both heat and moisture, helping to maintain indoor humidity balance. |
To achieve air conditioning, heat and moisture from the indoor air are removed.
Cooling Cycle:
The evaporator (indoor coil) absorbs heat from the indoor air
The compressor sends refrigerant outside to remove heat
The condenser (outdoor coil) rejects heat to the outside air
Expansion Valve (for this discussion only) cools the refrigerant before it goes back through the cycle
The cooling cycle lowers both temperature and humidity inside a building, designed to achieve a comfortable environment.
HVAC systems utilize various sensors and control mechanisms to achieve optimal operation.
Control the temperature set point
Modern thermostats are programmable and Wi-Fi enabled
Segment building into multiple zones, allowing for independent temperature control
Monitor or control large HVAC systems with centralized software.
Choose Energy-Efficient Equipment: When selecting HVAC equipment, look for Energy Star-rated equipment, which has been shown to use less energy.
Seal Ducts and Pipe Insulation: There are layers of efficiency that are lost to the outside; maximize duct-system component efficiency.
Install Programmable Thermostats: Using a programmable thermostat allows your team to select the temperature that will automatically adjust depending on the occupancy or schedule.
Install Variable Speed Components: Variable speed motors, for both the compressor and fan(s), sense system demand, and you can save significant energy costs.
Schedule Clean and Check Equipment: Ensure air filters are clean, refrigerant charge is correct, and connect with the HVAC vendor for regular maintenance.
Size and Optimize: Be sure to size and layout equipment correctly to achieve the best efficiency.
Replace Old Equipment: There is a general rule in energy efficiency that says if the old equipment is not cost-effective to maintain, it is better to replace new energy-efficient systems.
Metric |
Description |
SEER (Seasonal Energy Efficiency Ratio) |
Cooling efficiency over a season. Higher SEER = better. |
EER (Energy Efficiency Ratio) |
Instantaneous cooling efficiency. |
AFUE (Annual Fuel Utilization Efficiency) |
Efficiency of heating systems. Higher AFUE = less wasted fuel. |
COP (Coefficient of Performance) |
Ratio of heating/cooling provided to energy consumed. |
These systems assist in providing healthy air indoors, along with comfort levels for temperature, humidity, and air quality for persons in that space. Such systems can therefore be used almost anywhere to keep people comfortable, safe, and productive throughout the year. If people know about the HVAC cycle, ventilation, and heating, they are better prepared to decide what to do with their system.
On account of rising energy prices and more awareness of climate problems, there is now more attention on energy-saving HVAC technology. Today, most heating and cooling systems feature smart thermostats, adjustable-speed parts, and mild-to-the-environment refrigerants. Frequent maintenance and using advanced strategies for control can considerably increase the system’s productivity and its useful lifespan.
With time, the HVAC industry will seek smarter and more sustainable ways to achieve a balance between results and environmental protection. By being informed about advancements, individuals can enjoy better comfort, lessen their energy dependence, and lessen the harm HVAC systems may have on the environment.