The two most significant hazards to the agriculture industry are the need for extensive labor and a scarcity of water. According to the World Wildlife Fund (WWF) organization, water shortages might affect two-thirds of the world's population by 2025, putting both the ecosystem and human health at risk. The use of automatic plant watering systems eliminates both of these problems by watering plants at specified times and amounts while monitoring their hydration levels through measuring moisture in the soil surrounding the plants. Automatic plant watering systems can be used in homemade gardens and can also be deployed in fields for large-scale use. Whenever designing an automatic watering system, it is important to keep in mind that the system should be expandable, allowing for the simple integration of new devices in order to broaden the applicability of the system.
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | Buzzer | Amazon | Buy Now | |
2 | LEDs | Amazon | Buy Now | |
3 | DS1307 | Amazon | Buy Now | |
4 | LCD 20x4 | Amazon | Buy Now | |
5 | Arduino Uno | Amazon | Buy Now |
Three main components of an autonomous watering system are:
It is necessary to integrate the water level sensor with the microcontroller before it can be installed within the water reservoir. The location of the water level sensor within the reservoir is variable and is determined by the user and the application for which it is being utilized. The Arduino receives continuous data from the water level sensor and warns the user when the water goes below a certain level, either by an alarm or a buzzer, as appropriate.
The soil moisture sensor operates in a manner similar to that of the water level sensor. The tip of the sensor is inserted into the soil near the plant, and the sensor is activated. In the case of a moisture sensor, the closeness of the sensor to the plant is also variable, and the user may adjust it depending on the features of the plant for which it is being used. In vast agricultural fields, a single sensor may be used for numerous plants if they are closely spaced and their hydration levels can be determined by measuring the soil moisture at one location that overlaps with another spot on the soil surface.
The RTC module operates on the same concept of time monitoring in the background as other electronic devices such as computers and smartphones; even when these devices appear to be turned off, they continue to keep track of the current time. The RTC module, on the other hand, is capable of exchanging time information with the Arduino board. On a specific day of the week, at a specific time of day, the Arduino is pre-programmed to turn on the water pump and turn off the water pump after a specified length of time.
Figure # 1: Arduino UNO
Figure # 2: Soil Moisture Sensor
Figure # 3: Water Level Sensor
Figure # 4: RTC Module
Figure # 5: 12V Relay
Figure # 6: PCF 8574
Figure 7 shows the circuit diagram of the system. Proteus was used to simulate the circuit and Arduino App was used for the simulation of the Arduino code. The circuit was designed in a way that is easy to understand and further integrated easily. We will now go through a step-by-step guide on how the circuit was built.
Figure # 7: Proteus Circuit diagram
A normal Arduino code has two main segments:
Figure # 12: Arduino Code
Figure # 13: Arduino Code
Figure # 14: Arduino Code
Figure # 15: Arduino Code
Figure # 16: Arduino Code
Figure # 17: Arduino Code
Figure # 18: Arduino Code
Figure # 19: Arduino Code
Figure # 20: Arduino Code
Figure # 21: Arduino Code
Figure # 22: Arduino Code
Figure # 23: Arduino Code
Figure # 24: Arduino Code
If you see the code closely, you may see the function of the right hour, which is called various times in the main code. The function code in itself is written at the bottom of the main code. This function is used for displaying the time and date on the LCD and also for fixing the date and time.
Figure # 8: Proteus circuit simulation when soil is soggy
Figure # 9: Proteus circuit simulation when soil is moist
Figure # 10: Proteus circuit simulation when soil is dry
Figure # 11: Proteus circuit simulation when soil is dry and it is time to water the plant
As you can see from figure 8 that our simulation is running according to the program set at Arduino. You can increase or decrease the values coming from the sensors through the Potentiometer. So, that was all for today. I hope you have enjoyed today's lecture. If you have any questions, please ask in the comments. Thanks for reading.Are you here to learn about Databases and CRUD operations in the C# programming language? If so, then you will be an expert in no time. Learning Databases and CRUD operations in C# is not a piece of cake. But, if you know all the terms and steps of CRUD operations and databases in C#, it will not be rocket science for you. This article contains all the information you should know regarding databases and CRUD operations. So, keep reading till the end!
We know that you are already aware of the C# programming language. So, here is a quick overview of the C# programming language before we move to the actual topic:
C#, also known as C-Sharp, is an object-intended coding language that operates on the .NET Platform and is developed by Microsoft. ISO and ECMA have certified the C# programming language. C# is a broad programming language that can help accomplish hundreds of activities and purposes in different fields. It resembles Java, C++, and other programming languages but, it is truly one of a kind. The best thing is that it is object-oriented and is easy to use. It has an infinite list of advantages.
Some of the advantages of the C# are listed below:
All the above advantages make the C# programming language stand out in other languages. It is undoubtedly the most contemporary and exceptional language out there!
Before we begin learning about CRUD operations in a database within the C# programming language, it is crucial to know what a Database is.
A database is basically a coordinated set of formatted data kept digitally within a computer network. A database administration tool is generally in charge of a dataset. The DBMS, the dataset, and the programs that interact with these are collectively called a database platform. Every database operation can access a single relational database. It is generated as an inclusion within the data catalog by the data proprietor (usually a database manager with authority for that collection), who gives it a title and a specification. Several databases utilize structured query language (SQL) when generating and accessing data.
Here is the most awaited section of the entire article: CRUD operations. Please grab a notebook to note every detail for your better understanding. And if you do not wish to write these, you can always read our article from the website. Let us begin:
The abbreviation CRUD refers to Create, Read, Update, and Delete in software coding. Permanent memory has these four primary functions. Additionally, every letter of the abbreviation may relate to every functionality within a relational network program that is linked to a standard HTTP service, SQL declaration, or DDS action.
It may also apply to consumer-interface standards that let users browse, explore, and alter data using computer-based documentation. Objects are viewed, produced, modified, and removed in this way. Furthermore, CRUD is data-driven, and HTTP operation verbs are regulated.
The CRUD feature is present in almost all programs. CRUD is something that every coder has to use at some stage. In the C# programming language, CRUD operations in the database are quite crucial to learn because they are a fundamental component of programming. CRUD is important because of its Create, Read, Update, and Delete features. A brief explanation of these features is listed below:
In this section, we will discuss the steps required to operate the standard CRUD operations in ASP.NET MVC within the C# programming language. So, please pay extra attention to this section so that you do not have to face any difficulty while coding.
You must be thinking about the term MVC. Well, MVC abbreviates for Model View Controller. It is actually a development paradigm that isolates the business strategy from the display strategy and information. In a nutshell, it is a framework for designing online applications. According to MVC, the program can be divided into three layers:
Now that you know about the MVC, we can begin the discussion of the steps of CRUD operations in C#:
Afterward, select the initial activity outcome and select AddView. Choose to Generate as your theme, model type as your developed model, and info context category as your EDMX developed prototype. After that, execute the project.
Then, insert the View. However, make sure the style is set to List. After that, launch the project.
Next, insert a view in the same way you did before, but ensure to set the theme to Edit. After that, launch the project.
Now, just set the theme to Delete and execute the program.
Please remember that you can always change the HTML according to your needs. We hope that you understood how CRUD operations work in databases of the C# programming language.
We want our readers to have crystal clear concepts regarding CRUD operations in the C#. That is why we also included this brief section of CRUD operations in C# connecting the SQL Database. Let us begin:
Please remember these steps. If you mess up in one step, your program will not execute the right way. So, it would be great for you if you note the steps down!
Now that you know about the launch of CRUD operations in databases within the C# programming language, it is time to know the benefits of using CRUD operations. You must have this question that why do programmers prefer CRUD? In simple words, developers use CRUD because of its exceptional productivity. Additionally, performing CRUD operations protects against SQL manipulation attacks. Because all SQL Entries utilize saved methods rather than string synthesis to generate flexible queries from client input info, everything entered into a variable is quoted.
It would not be wrong to say that CRUD is just too crucial to be overlooked. Mastering it initially can help you feel more confident when working with unknown stacks. CRUD Operations help in our daily desktop tasks. Some of these are:
These are just some of them. CRUD is a part of everyone’s life whether one is a programmer or not.
Program permissions are a SQL Administration feature that allows code to alter credentials without requiring the person's permission. Individuals should have the necessary rights on the relational records to execute ad hoc SQL queries. Clients can view and change data in apps like Microsoft Excel, PowerPoint, and others after authorization is allowed. Customers can even ignore the app's corporate rules.
However, it is an undesirable scenario that may be avoided by using the Application Authority. Such kind of flaws can be prevented by combining database access protection with an Application License. Because Application licenses are uploaded to the system via a recorded method, CRUD is required. It can also be done by providing authorization to run the CRUD saved methods and removing immediate table entry.
After an Application Account is established, authorization and passcode are granted. The passcode is also hard to change because it is programmed into the program. CRUD is indeed the procedure to utilize while modifying data. Thus, the world of programming would be incomplete without CRUD Operations.
In this article, we discussed the CRUD operations in databases within the C# programming language. We also discussed Standard CRUD Operations In ASP.NET MVC as well as in Connecting SQL Databases Utilizing C#, with some benefits of using CRUD. These might seem complicated to you. Once you become an expert, all the CRUD operations in the C# will not be rocket science for you. Just make sure to follow all the steps correctly to avoid any mistakes.
Happy Programming Precious Readers!
Hello everyone, I hope you're all doing well. In the previous lecture(Chapter 0: ESP32 Pinout), we discussed the ESP32 features & specs in detail. Today, we are officially starting this ESP32 Programming Series. In this ESP32 Programming Series, we will start with basic concepts and will gradually move towards complex topics. I will try to keep this ESP32 series as simple as I can. But still, if you encounter any issues, please ask in the comments, will try to resolve the issues as soon as possible.
As ESP32 has numerous features & applications, so I have divided this series into different sections. I have named the 1st section "ESP32 IDEs". In this section, we will discuss different IDEs used to program ESP32 boards. In each Chapter of this section, we will install one of these ESP32 IDEs and will test a simple LED Blinking Code in it. We will set up the ESP32 Development Environment for Windows, Mac, and Linux users.
As I am sharing the 1st Chapter today, so first we will unbox the ESP32 board, set up the most commonly used ESP32 IDE i.e. Arduino IDE, and test a simple WiFi Scan Code on the ESP32.
Here's a video lecture for better understanding:
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | ESP32 | Amazon | Buy Now |
IDE is an abbreviation of Integrated Development Environment. IDE is a software package used to write & compile the code. As ESP32 is one of the most popular microcontroller boards, there are numerous third-party IDEs available to program it, and each IDE supports its own programming language. So, if you are a C# developer or an Arduino expert, you can quickly and easily get your hands dirty with ESP32. The below table shows the most commonly used ESP32 IDEs along with their supported programming language:
ESP32 IDEs | ||||
---|---|---|---|---|
No. |
ESP32 IDEs |
Programming Language |
||
1 |
Arduino IDE |
Arduino C |
||
2 |
Thonny IDE |
MicroPython |
||
3 |
Visual Studio Code |
Arduino C |
||
4 |
PlatformIO IDE |
C++ |
||
5 |
ESP-IDF(official IDE by EspressIF) |
C |
||
6 |
nanoFramework |
C# |
In today's lecture, we will install the Arduino IDE and configure it for ESP32 Programming. So, let's get started:
First of all, we need to install the Arduino IDE itself. To program ESP32 with Arduino IDE, we need to install the ESP32 Boards in Arduino IDE. Before installing the ESP32 Boards, we first need to add a JSON File containing information about ESP32 Boards. JSON format is used to share information between two computers. So, this JSON file will add the information of ESP32 boards in the Arduino IDE. So, let me summarize these 3 steps in proper order:
We need to first download & install the Arduino IDE.
After installing the Arduino IDE, we need to add the ESP32 JSON File in it. So, follow the below steps:
Steps to install ESP32 JSON File in Arduino IDE:
Now, we are ready to install the ESP32 Boards in Arduino IDE:
In some cases, the Arduino IDE won't automatically detect the ESP32 COM Port, so here we need to install the COM Port driver for ESP32. Let's do it:
If you don't find the ESP32 COM Port in the Port Section of Arduino IDE, then you need to install the COM Port Driver manually. So, follow the below steps:
After installing this COM Port Driver, restart your Arduino IDE and it's recommended to restart your computer as well.
So, we have successfully installed the ESP32 Boards in the Arduino IDE. Now, let's upload a simple LED Blinking Code in the ESP32:
Now that the Arduino IDE is ready to handle the ESP32 Dev Kit module, you can write the code for the ESP32 module. We will just upload a simple WiFi Scan Code to verify that our ESP32 installation is correct.
That concludes today's discussion. We hope you found this post informative. In the next tutorial, we will install the ESP32 Boards in the Visual Studio Code. If you have any questions, please ask in the comments. Take care. Have a good day.
Hello friends, I hope you all are doing great. In today's lecture, we will have a look at the I2C Communication with STM32 Microcontroller board. I am going to use the Nucleo board for today's lecture. In the previous lecture, we have discussed STM32 Serial communication both in Interrupt Mode and polling Mode. Today, we will study another way of communication(i.e. I2C) with STM32. So, let's first have a look at what is I2C Communication:
Where To Buy? | ||||
---|---|---|---|---|
No. | Components | Distributor | Link To Buy | |
1 | STM32 Nucleo | Amazon | Buy Now |
I²C (Inter-Integrated Circuit) is a two-wire serial communication system used between integrated circuits. Like any serial protocol, one of its advantages is that of using only two lines that transmit or receive a sequence of bits, the limit is the communication speed which has been improved over the years.
The bus was conceived and developed by Philips (now NXP) It was designed to overcome the difficulties inherent in the use of parallel buses for communication between a control unit and various peripherals.
Serial transmission is a mode of communication between digital devices in which bits are sent one at a time and sequentially to the receiver in the same order in which they were transmitted by the sender. Although the communication modules are more complex than the parallel transmission, the serial mode is one of the most widespread especially in communications between chips that must communicate with each other over great distances, because:
SDA and SCL lines need to be pulled up with resistors. The value of these resistors depends on the bus length ( ie the bus capacitance) and the transmission speed. The common value is 4.7kO. In any case, there are many guides to size them and we refer their reading to the more attentive reader.
The transmission mode is Half-duplex ie the transmission between devices is alternated.
As shown by the previous image, we can use this communication to put in communication different peripherals as Analog-Digital Converters (ADCs), Digital-Analog Converters (DACs), EEPROM memories, sensors, LCD screen, RF module, Real-Time Clock, etc.
The Nucleo boards provide one or more I2C interfaces that can be quickly configured with STCube Tool.
There are four modes of operation:
The first two are used to operate in slave mode, while the last two are in master mode. By default, the interface is configurated in slave mode.
By default, the I2C interface operates in Slave mode, but it is possible to switch to Master mode to send a Start condition message. Furthermore, it needs to write in I2C_CR2 register the correct clock configuration to generate the expected timings. The Master sends a Stop condition when the last data byte is transferred, and the interface generates an interrupt.
In general, the packet message is as follow:
Furthermore, there are three ways to exchange data, named:
HAL library provides the following functions to transmit and receive in polling mode:
HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)The parameters are:
HAL_I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_I2C_Slave_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_I2C_Slave_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)The additional parameters are:
HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
HAL_I2C_Master_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)Master receives in master mode an amount of data in non-blocking mode with interrupt.
HAL_I2C_Master_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)Master transmits in master mode an amount of data in non-blocking mode with interrupt.
HAL_I2C_Slave_Receive_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)Slave receives in master mode an amount of data in non-blocking mode with interrupt.
HAL_I2C_Slave_Transmit_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)Slave transmits in master mode an amount of data in non-blocking mode with interrupt.
HAL_I2C_Master_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)Master receives in master mode an amount of data in non-blocking mode with DMA.
HAL_I2C_Master_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)Master transmits in master mode an amount of data in non-blocking mode with DMA.
HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)Slave receives in master mode an amount of data in non-blocking mode with DMA.
HAL_I2C_Slave_Transmit_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size)Slave transmits in master mode an amount of data in non-blocking mode with DMA. In the STCube tool, the I2C can be configurated fastly and easily as follow.
In Pinout & Configuration, widow selects Connectivity and selects one of the available I2C (I2C1, I2C2, etc). In parameter settings, the master and slave features can be set. Master features are I2C speed mode (standard mode by default and fast mode) and the I2C clock speed (Hz). In standard mode, the device can send up to 400kbit/s while in fast mode up to 1Mbit/s. In general, like clock speed, the STM32 supports 100kHz, 400kHz and sometimes 1MHz.
The main feature of slaves is the primary address length that in general, as previously said, is 7-Bit. Furthermore, the slave can have a secondary address.
Then need to configure the GPIO, as follow:
Now the I2C configuration is terminated and can be possible to generate the code initialization and finally be ready to write our application.
In several domestic, commercial, or industrial settings where gases or liquids have to be distributed or mixed, solenoid valves are used to ensure the accuracy and precision of all the control aspects. To help you understand the types and working principles of solenoid valves, selection criteria, and everything in between, we’ve covered all you need to know about these electrically controlled valves. You should also have a look at the Linear Solenoid.
Solenoid valves are electromechanical devices that feature two major components: a valve body (G) and a solenoid (Figure 1). The solenoid is an electric coil (A) with a movable magnetic core that’s centrally located, also called a plunger (E). It’s also made up of an armature (B), a shading ring (C), a spring (D), and a seal (F).
For a normally closed valve in the resting position, the plunger closes a small hole or orifice that allows the fluid to flow. As soon as the electric current passes through the coil, it’s energized, and an electromagnetic field forms and exerts a force on the plunger, opening the orifice.
That said, it’s worth noting that solenoid valves are only used to control clean liquid and gases. This is because dirt can easily block the orifice, causing performance issues.
Before we look at the working principles of solenoids, we’ll first look at the two popular solenoid valve configurations. These are the normally closed (NC) and the normally open (NO) solenoid valves.
For NC solenoid valves, it is closed when the coil is de-energized, i.e., when there’s no electric current flowing through it. This means that the orifice is closed, and no medium can flow through it. Once the solenoid is powered, the current flows through the coil and energizes it. This creates an electromagnetic field with a resultant force that pushes the plunger upwards to overcome the resistive spring force. This opens up the orifice and allows the fluid media to flow through the valve. NC valves are good for fail-safe applications that need the media to stop flowing if power is lost.
With NO solenoid valves, the valve is always open when the coil is de-energized. Once an electric current passes through the coil, an electromagnetic field is created, and the resultant force pushes the plunger to the downward position to overcome the resistive spring force. Here, the seal will be seated right on the orifice, closing it and preventing any fluid from flowing via the valve. Often, a NO solenoid is best used for applications, which require the solenoid valve to be on or open for a longer period since it becomes more energy and cost-efficient.
Besides the normally closed and normally open solenoids, there’s also another type called the latching or bi-stable solenoid valve. Unlike the previous two, this type is switched on and off using an instantaneous or momentary power source. The solenoid will stay in its recent/current position provided there’s no power supplied. This is accomplished by replacing a spring with permanent magnets.
There are three main ways in which solenoids work. These are:
A direct-acting solenoid can either be NO or NC, and its mode of operation is simple. The maximum flow rate and operating pressure are directly proportional to the hole size (diameter) and the solenoid valve’s magnetic force. With this operating principle, the solenoid doesn’t require a minimum pressure or any pressure difference. Direct-acting solenoids are therefore used for small flow rates.
Solenoid valves in this category use the pressure difference of the medium to assist in the opening and closing of the valve. The typical minimum pressure required for the valve to operate is nearly 0.5 bar.
In between the outlet and inlet ports is a rubber layer called a diaphragm, which has an orifice through which the fluid medium can easily flow.
Above the membrane is a pressure chamber that serves as an amplifier. This chamber allows a smaller solenoid valve to control a larger flow rate. They are used in industrial or domestic applications that require a higher flow rate and enough pressure differential.
With this type of solenoid valve, you enjoy the benefits of both direct-acting and indirect-acting valve operations. Semi-direct acting solenoids operate at zero bar for low flow rate applications and also at pressure differential for high flow rate applications.
Solenoid valves with this working principle have a construction similar to the indirect operating valves except that it has two holes on either side of the membrane, and the plunger is connected directly to the rubber layer. That way, when the electromagnetic force pushes the plunger, the membrane is lifted, opening the valve.
Simultaneously, the second hole is opened if the plunger has a larger diameter compared to the first hole in the rubber membrane. The result is that the pressure inside the chamber above the rubber layer will drop. Hence the membrane isn’t lifted just by the solenoid plunger but also the differential pressure.
Solenoids are used in industrial, commercial, and domestic applications to close, open, mix or divert fluid medium. Common domestic applications of solenoids include irrigation systems with automatic control and refrigeration systems to control refrigerants.
Other domestic use cases include air conditioning systems to control air pressure, washing machines and dishwashers to control water flow, and water tanks to control the inflow/outflow of water. In commercial settings, solenoid valves find applications in car washes to control soap and water flow.
And since solenoid valves find different applications in various industries, they must have certain approvals to ensure they conform to industry standards and regulations. Some of the common approvals include:
Now that you know what a solenoid valve is, the types, working principles, use cases, and approvals, what follows is to choose the right type for the right applications. When choosing solenoids, you always want to pay attention to the specific applications and the environment in which they will be installed. From here, you can pay attention to the housing material, the seal material, and the degree of protection as far as temperature and pressure considerations are concerned. Other factors to consider are the operation type, valve function, i.e., whether NO or NC, the voltage type (DC or AC), and the solenoid’s response time.