Showing posts with label embedded c tutorial. Show all posts
Showing posts with label embedded c tutorial. Show all posts

Monday, November 02, 2015

Soil Moisture Meter Project Using Microcontroller


Soil Moisture Meter Project Using Microcontroller
Microcontroller Based Soil Moisture Meter


Grove - Moisture Sensor :

Basically grove moisture sensor is used to measuring the moisture of the soil. It also can be used as water sensor. We can water  plants according to its humidity by using the sensor .  Look at the sensor pictures and its pin out.
Grove - Moisture Sensor
Grove - Moisture Sensor


Soil Moisture Meter Project Using PIC Microcontroller
Soil Moisture Meter Project Using Microcontroller

Basic Concepts:

  The Moisture sensor will be connected with a pic microcntroller and a LCD display will also be connected with microcontroller . Moisture sensor will provide voltage into microcontroller's RA1 pin(ADC) according to the humidity of soil . It will provide reading from (0-721). After calculating the percentage and soil condition , the microcontroller sends out that data to the LCD Display . That's the basic concept .



ADC(Analog to Digital Converter ) :

We need a basic knowledge about ADC . Let's  take a look at here :
LPG Gas Leakage Detector using (MQ-9)  Gas Sensor and pic18f2550 Microcontroller
Thief Detector using PIC Microcontroller & PIR Motion Sensor
ADCON1 Register
LPG Gas Leakage Detector using (MQ-9) Gas Sensor and pic Microcontroller


Basically ADC is like as voltage divider . According to voltage It produce output 
 bit 5 : VCFG0: Voltage Reference Configuration bit (VREF- source)
1 = VREF- (AN2)
0 = VSS or 0 volt


bit 4 :VCFG0: Voltage Reference Configuration bit (VREF+ source)
1 = VREF+ (AN3)
0 = VDD or 5volt


We will set  VCFG0[bit 5]=0and VCFG0[bit4]=0 . So we will get highest value 5volt[1023] and lowest value 0volt[0].The ADCON1 is a 10 bit register that means  2 to the power 10  is it's highest counting capacity and result is 1024 . So this register can count from 0 to 1023 . When 0 volt , we get reading at RA1 pin  0 .When 5 volt , we get reading at RA1 pin 1023. It means 5volt equivalent to 1023 .

As we know in water the sensor provide 722 data and  absolutely it should be 100% .
If   reading 744 means 100
So     ""        1     ""      (100/744) %
and   reading % of source reading will be (100/744)*source %

MikroC Source Code :

 


 sbit LCD_RS at LATB7_bit;  
 sbit LCD_EN at LATB6_bit;  
 sbit LCD_D4 at LATB5_bit;  
 sbit LCD_D5 at LATB4_bit;  
 sbit LCD_D6 at LATB3_bit;  
 sbit LCD_D7 at LATB2_bit;  
 sbit LCD_RS_Direction at TRISB7_bit;  
 sbit LCD_EN_Direction at TRISB6_bit;  
 sbit LCD_D4_Direction at TRISB5_bit;  
 sbit LCD_D5_Direction at TRISB4_bit;  
 sbit LCD_D6_Direction at TRISB3_bit;  
 sbit LCD_D7_Direction at TRISB2_bit;  
 // End LCD module connections  
 double source=0;   
 int view=0;  
 char txt[6];  
 void main() {  
 ADCON1=0x0D;         // Configure RE1 pin as input  
 CMCON=7;  
 TRISC.F4=0;  
  ADC_Init();            // Initialize ADC  
  Lcd_Init();            // Initialize LCD  
  Lcd_Cmd(_LCD_CLEAR);        // Clear display  
  Lcd_Cmd(_LCD_CURSOR_OFF);     // Cursor off  
     
  while(1){  
  source=Adc_Read(1);  
  source=100*source;  
  source=source/744;  
  inttostr(source,txt);  
  if(source>96){  
  source=100;  
  }  
  if(source>83){  
   Lcd_Cmd(_LCD_CLEAR);  
  Lcd_Out(1,3, "Water!!");  
  Lcd_Out(2,1, "Hum:");  
 Lcd_Out(2,5,txt);  
  Lcd_Chr(2,11,0x25);  
   Lcd_Chr(2,12,' ');  
    Lcd_Chr(2,13,' ');  
     Lcd_Chr(2,14,' ');  
      Lcd_Chr(2,15,' ');  
      Lcd_Chr(2,16,' ');  
    delay_ms(1000);  
  }   
  else if(source>40&&source<=83){  
   Lcd_Cmd(_LCD_CLEAR);  
  Lcd_Out(1,3, "Humid Soil");  
  Lcd_Out(2,1, "Hum:");  
 Lcd_Out(2,5,txt);  
  Lcd_Chr(2,11,0x25);  
   Lcd_Chr(2,12,' ');  
    Lcd_Chr(2,13,' ');  
     Lcd_Chr(2,14,' ');  
      Lcd_Chr(2,15,' ');  
      Lcd_Chr(2,16,' ');  
       PORTC.f4=0; //motor off  
    delay_ms(1000);  
  } else{  
   Lcd_Cmd(_LCD_CLEAR);  
  Lcd_Out(1,3, "Dry Soil");  
  Lcd_Out(2,1, "Hum:");  
 Lcd_Out(2,5,txt);  
  Lcd_Chr(2,11,0x25);  
   Lcd_Chr(2,12,' ');  
    Lcd_Chr(2,13,' ');  
     Lcd_Chr(2,14,' ');  
      Lcd_Chr(2,15,' ');  
      Lcd_Chr(2,16,' ');  
       PORTC.f4=1;  // motor on  
   delay_ms(1000);  
   PORTC.f4=1;  
  }  
 }  
 }  

  Circuit :

Microcontroller Based Soil Moisture Meter circuit
Microcontroller Based Soil Moisture Meter circuit


Result:

Soil Moisture Meter Project Using Microcontroller
Soil Moisture Meter Project Using Microcontroller

Practical Video of This Project



Download MikroC Project and images(Google Drive)

 

Thank You!


Gas Leakage Detector Project using Microcontroller and (MQ-9) Gas Sensor



 
LPG Gas Leakage Detector using (MQ-9)  Gas Sensor and pic18f2550 Microcontroller

Gas Sensor (MQ-9) :

  MQ-9 Gas Sensor is one kind of semiconductor which has very lower conductivity in open air. But in Carbon Monoxide, Methane and LPG gas it has good conductivity. By using ADC of pic microcontroller we can measure it. Let's take a look on MQ-9 sensor .
Gas Sensor (MQ-9)


Gas Sensor (MQ-9) pin out
 

Datasheet of  MQ-9


 

Basic Concepts :

The MQ-9 sensor will be connected with a pic microcntroller and a buzzer will also be connected with microcontroller. When LPG gas will be detected in sensor, it will provide voltage into microcontroller's RA1 pin(ADC). It will provide reading more than 590. At this situation microcontroller will turn on the buzzer and LED. That's the basic concept. 

ADC(Analog to Digital Converter ) :

We need a basic knowledge about ADC. Let's  take a look at here :
LPG Gas Leakage Detector using (MQ-9)  Gas Sensor and pic18f2550 Microcontroller
Thief Detector using PIC Microcontroller & PIR Motion Sensor
ADCON1 Register
LPG Gas Leakage Detector using (MQ-9) Gas Sensor and pic Microcontroller


Basically ADC works like as a voltage divider. According to voltage It produce output.

bit 5 : VCFG0: Voltage Reference Configuration bit (VREF- source)
1 = VREF- (AN2)
0 = VSS or 0 volt


bit 4 :VCFG0: Voltage Reference Configuration bit (VREF+ source)
1 = VREF+ (AN3)
0 = VDD or 5volt


We will set  VCFG0[bit 5]=0and VCFG0[bit4]=0. So we will get highest value 5volt[1023] and lowest value 0volt[0].The ADCON1 is a 10 bit register that means  2 to the power 10  is it's highest counting capacity and result is 1024. So this register can count from 0 to 1023. When 0 volt, we get reading at RA1 pin  0. When 5 volt, we get reading at RA1 pin 1023. It means 5volt equivalent to 1023 .

 If  5 volt    equal    reading 1023 .

So 1  volt   equal    reading 1023/5  
[When LPG Gas detect MQ-9 Sensor provide more than 2.93 volt at AO Pin]
So 3 volt equal  reading  (1023/5)*2.93 =599 When we get reading 599 at ADC channel, we understand  that sensor detects LPG. So it makes PORTB.F6 pin high and Buzzer turns on .


 MikroC Source Code :

  




double source=0;   
char txt[15];  
 void main() {  
 ADCON1=0x0D;         // Configure RA1 pin as input  
 CMCON=7;  
 TRISB.F6=0;  
  ADC_Init();            
        
  while(1){  
  source=Adc_Read(1);  
  PORTB.F6=0;  
 if(source>600){   
 delay_ms(500);    
 PORTB.F6=1;  
 }  
 }  
 }  

 

Proteus Circuit :

 

LPG Gas Leakage Detector using (MQ-9)  Gas Sensor and pic18f2550 Microcontroller

LPG Gas Leakage Detector using (MQ-9) Gas Sensor and pic Microcontroller

 

RESULT:

LPG Gas Leakage Detector using (MQ-9) Gas Sensor and pic Microcontroller


PRACTICAL VIDEO  YOUTUBE


Download This Project(google drive)

Thank You!


Wednesday, October 21, 2015

Bluetooth Based Temperature Meter Project using Microcontroller and MikroC USART Terminal

Bluetooth Based Temperature Meter Project using Microcontroller and MikroC USART Terminal

In this project , we will measure surroundings temperature and it will be shown at MikroC USART Terminal . First of all we need to set up LM35  sensor with pic microcontroller and an ADC register will take data from the temperature sensor . After calculating the temperature in centigrade  it will be sent to  our computer's MikroC USART terminal through Bluetooth[HC-06] . That is the basic concepts of this project.

Bluetooth Based Temperature Meter Project using Microcontroller and MikroC USART Terminal
Bluetooth Based Temperature Meter Project using Microcontroller


We will need an ADC Converter so that microcontroller can read the temperature .

ADC [Analog to Digital Converter]:


Thief Detector using PIC Microcontroller & PIR Motion Sensor

Thief Detector using PIC Microcontroller & PIR Motion Sensor

Thief Detector using PIC Microcontroller & PIR Motion Sensor
ADCON1 Register
Basically ADC is like as voltage divider . According to voltage It produce output .
bit 5 : VCFG0: Voltage Reference Configuration bit (VREF- source)
1 = VREF- (AN2)
0 = VSS or 0 volt


bit 4 :VCFG0: Voltage Reference Configuration bit (VREF+ source)
1 = VREF+ (AN3)
0 = VDD or 5volt


We will set  VCFG0[bit 5]=0and VCFG0[bit4]=0 . So we will get highest value 5volt[1023] and lowest value 0volt[0].The ADCON1 is a 10 bit register that means  (2 to the power 10) is it's highest counting capacity and the result is 1024 . So this register can count from 0 to 1023 . When 0 volt , we get reading at RA0 pin  0 .When 5 volt , we get reading at RA0 pin 1023. It means 5volt equivalent to 1023 .
 If  1023 reading value    equal   to 5 volt.
So 1      reading value    equal   to  5/1023 volt
So 'read_val'  reading  value   equal  to (5/1023)*read_val .volt .
As we know LM35 reading can be changed  with  0.01 v per degree centigrade change , the temperature calculation should be like that :
    0.01 volt   for     1      degree centigrade Temperature
so  1     ,,       ,,  (1/0.01)   ,,         ,,              ,,
and (5/1023)*read_val    volt    for  [{(5/1023)*read_val }/0.01]  degree centigrade Temperature .


Mikro C Library Funtions :

UARTx_Init:  This function will initialize USART option of  Microcontroller with Baud rate . We will use baud rate 38400 . The code will be look like this :
 UART1_Init(38400);


UARTx_Data_Ready: This will check if it is available to read or transmit data .
UARTx_Read_Text: To read text data .Look at the example .
if (UART1_Data_Ready() == 1) {
UART1_Read_Text(  txt,  ")" , 13); }
This is checking if data is available to read . ")" means , txt car array variable will be being stored until the ")" will found . 13 means to try for 13 times . So , i think our text should not be longer than 11 character .
UARTx_Write_Text: This will send text data . Look at the example :

if (UART1_Tx_Idle() == 1) {// this will check , if the last data transmission is completed

 UART1_Write_Text("button2");
 }

Recommended: How to Interface Bluetooth Module (HC-06) with PIC Microcontroller [Step by Step Picture]




Circuit :



Bluetooth Based Temperature Meter Project using Microcontroller and MikroC USART Terminal
Bluetooth Based Temperature Meter Project using Microcontroller and MikroC USART Terminal

Source Code :


 char txt[8];  
 double chk;  
 int i=0,ckop=0;  
 void main() {  
 ADCON1=0x0E;         // Configure RE1 pin as input  
 CMCON=7;  
 for(i=0;i<16;i++){txt[i]=' ';}  
   TRISA.F3=1;  
    TRISA.F4=1;        // Initialize ADC  
 Adc_Init();  
   UART1_Init(38400);  
      delay_ms(200);            // Initialize LCD  
  while(1){  
  chk=Adc_Read(0);  
  chk=(chk*5)/1023;  
  chk=chk/0.01;  //10mV == 1 degree
  inttostr(chk,txt);  
  UART1_Write_Text(" Temperature:");  
  UART1_Write_Text(txt);  
  UART1_Write_Text(" \n");  
  delay_ms(6000);  
 }  
 }  

Result:


Bluetooth Based Temperature Meter Project using Microcontroller and MikroC USART TerminalBluetooth Based Temperature Meter Project using Microcontroller and MikroC USART Terminal

Bluetooth Based Temperature Meter Project using Microcontroller and MikroC USART Terminal




Download This Project

Thank You!

 

Monday, July 13, 2015

Temperature Meter using Microcontroller and LM35 Temperature Sensor


Temperature Meter using  Microcontroller and  LM35 Temperature Sensor
We can  build a Temperature meter by pic18f2550 microcontroller and we need a temperature sensor . In this project we will use LM35 temperature sensor and it is a popular temperature sensor .Look at the picture which is given below .
Microcontroller Project : Temperature Meter using  LM35 Temperature Sensor and pic18f2550 Microcontroller
The Picture has been taken from internet
LM35 produce different voltage outputs at different temperatures . LM35 increase it's output voltage 10mV or 0.01v  for each degree increment of temperature . That means 0.01 v per degree centigrade. 
Now we need to get a microcontroller as a system to read temperature from sensor . We will use ADC of the microcontroller and the reading will be shown in LCD display . It's the basic idea of the project .

We need a basic knowledge about ADC . Let's  take a look at here :

Thief Detector using PIC Microcontroller & PIR Motion Sensor
Thief Detector using PIC Microcontroller & PIR Motion Sensor

Thief Detector using PIC Microcontroller & PIR Motion Sensor
ADCON1 Register
Basically ADC is like as voltage divider . According to voltage It produce output .
bit 5 : VCFG0: Voltage Reference Configuration bit (VREF- source)
1 = VREF- (AN2)
0 = VSS or 0 volt


bit 4 :VCFG0: Voltage Reference Configuration bit (VREF+ source)
1 = VREF+ (AN3)
0 = VDD or 5volt


We will set  VCFG0[bit 5]=0and VCFG0[bit4]=0 . So we will get highest value 5volt[1023] and lowest value 0volt[0].The ADCON1 is a 10 bit register that means  (2 to the power 10) is it's highest counting capacity and the result is 1024 . So this register can count from 0 to 1023 . When 0 volt , we get reading at RA0 pin  0 .When 5 volt , we get reading at RA0 pin 1023. It means 5volt equivalent to 1023 .
 If  1023 reading value    equal   to 5 volt.
So 1      reading value    equal   to  5/1023 volt
So 'read_val'  reading  value   equal  to (5/1023)*read_val .volt .
As we know LM35 reading can be changed  with  0.01 v per degree centigrade change . According to the datasheet 10mV = 1 degree centigrade temperature .The temperature calculation should be like that :
    0.01 volt   for     1      degree centigrade Temperature
so  1     ,,       ,,  (1/0.01)   ,,         ,,              ,,
and (5/1023)*read_val    volt    for  [{(5/1023)*read_val }/0.01]  degree centigrade Temperature .

Source Code :







sbit LCD_RS at LATB7_bit;
sbit LCD_EN at LATB6_bit;
sbit LCD_D4 at LATB5_bit;
sbit LCD_D5 at LATB4_bit;
sbit LCD_D6 at LATB3_bit;
sbit LCD_D7 at LATB2_bit;

sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D4_Direction at TRISB5_bit;
sbit LCD_D5_Direction at TRISB4_bit;
sbit LCD_D6_Direction at TRISB3_bit;
sbit LCD_D7_Direction at TRISB2_bit;
// End LCD module connections

double source=0;
int temperature=0;
char txt[15];

void main() {
ADCON1=0x0E;                  // Configure RA0 pin as input
CMCON=7;
TRISB.F0=0;
  ADC_Init();                        // Initialize ADC

  Lcd_Init();                        // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off

  Lcd_Out(1, 3, "Temperature");
                  // Different LCD displays have different
  Lcd_Chr(2,12,223);                   //   char code for degree
  Lcd_Chr(2,13,'C');                  // Display "C" for Celsius
  while(1){
 source=Adc_Read(0);
 source=(source*5)/1023;
 source=source/0.01;
if(source>30){       // when temperature goes higher than 30 degree , fan turns on .
PORTB.F0=1;
} 
else{                    // when temperature goes lower than 30 degree , fan remains off .
 PORTB.F0=0;
}
inttostr(source,txt);
Lcd_Out(2,1,txt);



}
}

Circuit :

Temperature Meter using  Microcontroller and  LM35 Temperature Sensor


During temperature lower than 30 degree:

Temperature Meter using  Microcontroller and  LM35 Temperature Sensor


During temperature higher than 30 degree:

Temperature Meter using  Microcontroller and  LM35 Temperature Sensor

This Project's Proteus Simulation in Youtube , Please Watch This:


                             

Simply Just click on the "Skip Ad" and you will get the download option.

Thank You !!


Thursday, June 25, 2015

How to make PCB (Printed Circuit Board) at Home [step by step]

Today I will show how to make PCB at home. PCB means Printed Circuit Board. Would you like to know more about PCB? Please follow the link  Wikipedia.

How to make PCB (Printed Circuit Board) at Home [step by step]
We will need     1.Ferric Chloride  
                         2. Copper Board  
                         3. Glossy Paper .
                         4. Iron 
                         5. Drill Bit [Drill Bit 0.8mm]
                         6. Paint Thinner
                         7. Hand Gloves


How to make PCB (Printed Circuit Board) at Home [step by step]


How to make PCB (Printed Circuit Board) at Home [step by step]




Now follow me with my instructions.

Step 1:  

Open the PCB diagram with Foxit reader or Adobe reader. It doesn't matter what you are using, just make sure that you are printing it with 100% (Actual) size.

 How to make PCB (Printed Circuit Board) at Home [step by step]


 Now the picture will be looked like this :


 How to make PCB (Printed Circuit Board) at Home [step by step]

It is recommended, the printer should be Laser printer. If you don't have Laser printer don't worry, I have a solution. First print out the circuit diagram on a normal paper in 100% size. Now make a photo copy of the diagram with glossy paper  by photostat machine. Because both Laser printer and Photostat machine have same type of ink. 


Note : We are getting the circuit diagram on a glossy paper.



After printing the circuit will  look like that :


How to make PCB (Printed Circuit Board) at Home [step by step]


Keep it for future and look at step 2.


Step 2:

Buy a copper board and cut it with required dimension. If you are in Bangladesh , you can visit http://toolsbd.com to collect necessary parts. A little rubbing is required to make clean the copper board . Look at the picture :

How to make PCB (Printed Circuit Board) at Home [step by step]
 
Now using  Masking Tape, add  PCB Diagram with  Copper Board carefully . 
 
This picture of masking is collected from techtunes.com.bd .Some how i missed this step to capture
 We need to provide heat on this and we should use an Iron. Be careful, you don't need to provide very high temperature . At first keep it on copper board so that heat can spread. After 2or3 min, start ironing  smoothly. Keep it in mind that rough ironing will damage the copper board
 

How to make PCB (Printed Circuit Board) at Home [step by step]

How to make PCB (Printed Circuit Board) at Home [step by step]
 
After heating for 15or 20 mins. Now pour water on it carefully and keep it underwater at least 20 mins.  Look the picture here.
 

How to make PCB (Printed Circuit Board) at Home [step by step]



How to make PCB (Printed Circuit Board) at Home [step by step]
wait for 20 mins


Now  remove the paper carefully and carefully wash it by water. It will look like this 
 

How to make PCB (Printed Circuit Board) at Home [step by step]

Step 3:

Bring  a pot with water and provide some Ferric Chloride on that . Be careful you should provide
Ferric Chloride on water . Don't watering on Ferric Chloride . Now sink the copper board and keep moving the water pot slowly for 20 min . You will see that copper will be being vanished . 

How to make PCB (Printed Circuit Board) at Home [step by step]


How to make PCB (Printed Circuit Board) at Home [step by step]


How to make PCB (Printed Circuit Board) at Home [step by step]
How to make PCB (Printed Circuit Board) at Home [step by step]

After completing this step  wash the board with soap and use paint thinner to clear and remove ink from the board . 

How to make PCB (Printed Circuit Board) at Home [step by step]
 
Now, we need to drill the board. If you have drill machine, you can use it. If  you don't have a drill machine, don't worry. I have a solution for you.
 





You can follow my method using drill bit. I didn't buy any drill machine !!!


How to make PCB (Printed Circuit Board) at Home [step by step]
How to make PCB (Printed Circuit Board) at Home [step by step]


Thank You !

Please Share and Bookmark posts.

Tags

: (1) 18F2550 (1) 36KHz (3) and (1) arduino (1) Based (1) battery (1) Bipolar (1) Blinking (1) blinks (1) Bluetooth (1) bluetooth device interfacing (1) bluetooth module (1) button (1) circuit (1) clock (1) control (1) crystal oscillator (3) Db9 (1) DC Motor (2) digital (2) Digital Voting Machine (1) digital voting machine using pic (1) display (2) DS1307 (1) electronic (1) embedded c programming tutorial (11) embedded c tutorial (11) experiment kit (4) external interrupt (4) flash (1) flashing (1) Gas Leakage detector (1) HC-06 (1) home (1) how (1) How to (10) i2c tutorial (1) in (1) indicator (1) infrared Connection (3) interface (8) interfacing (3) Interrupt (3) Introduction (1) IR Connection (3) IR Receiver (4) IR Transmitter (4) key pad (1) keyboard (1) keypad (1) lavel (1) Lcd 16x2 (2) lcd 2x16 (2) led (1) lm35 (2) LPG (1) machine (1) make (1) Make bootloader (1) making (1) matrix (1) max232 (1) membrane keyboard (2) meter (2) Micocontroller (1) microchip (4) microchip pic (2) microchips (3) microcontroller (9) microcontroller based (3) microcontroller programming (3) Microcontroller Project (4) Microcontroller Projects (1) microcontroller_project (2) microcontrollers (4) Microprocessor (2) mikroC (5) mikroc code to start and stopstart and stop dc motor (1) mikroc pro for pic (2) Motion detector (1) MQ-9 Gas Sensor (1) musical (1) NEC Protocol (4) pcb (5) PIC (3) pic controller (11) pic microcontroller (11) pic microcontroller tutorial (11) pic programming (1) pic programming in c (12) pic proteus (1) Pic Tutorial (12) pic18 (2) pic18f2550 (11) picmicrocontroller (4) picRFモジュール (1) PIR Motion Sensor (1) printed circuit board (1) proteus (6) pulse width modulation (1) push (1) push button (1) PWM (1) real (1) rf transmitter (3) Rs 232 (1) Rs232 (1) scroll (1) scrolling (1) Serial communication (1) Serial Connection (1) Serial Port (1) serial port rs232 (1) Servo Motembedded c programming tutorial (1) simulation (2) Soil Moisture Meter (1) speed control (1) step by step (7) step bystep (1) Stepper Motor (2) text (2) Thief Detector (1) time (1) timer (4) timer0 (4) tone (1) TSOP38236 Receiver (4) tutorial (2) Unipolar (1) USART Connection (1) USB (1) usb 1.0 (1) USB bootloadere (1) USB HID (1) using (9) voltmeter (1) voting (1) water level indicator (3) with (2) work (1)

Traffic Feed


Live Traffic Feed
Visitor Tracking

Leave Your Message Here

Name

Email *

Message *

Like on Facebook