Artículos recientes

Novedades

Tutorial sensor táctil capacitivo MPR121

Tutorial sensor táctil capacitivo MPR121

En este tutorial se mostrara el código necesario para poder utilizar el módulo MPR121, se explicara sus características, funcionamiento  y un ejemplo básico para empezar a utilizarlo.

El módulo MPR121 puede controlar 12 electrodos, cada electrodo se comporta como un sensor táctil capacitivo, la comunicación es con interfaz I2C, por lo que solo utiliza dos pines y es fácil de implementar con cualquier microcontrolador.

Modulo MPR121

En el reverso del módulo MPR121 tiene 4 puentes, los cuales hay que romper si no se necesita usar las resistencias pullup que tiene el modulo. También se puede romper el puente de ADD para cambiar la dirección en caso se necesite conectar otro MPR121 al bus I2C

Modulo MPR121 reverso

El electrodo puede ser cualquier superficie conductora, como metal, papel metálico, cobre; para activar el electrodo no necesariamente tiene que haber contacto, la sensibilidad depende de cómo se calibre, esto se lo hace con umbrales el cual el módulo utiliza como referencia para que considere Touch o no. Para cada electrodo se le asigna un umbral de activación. En caso no se utilicen todos los electrodos, también se los puede configurar como salidas para activar LEDs

  

Conexiones entre el módulo MPR121 y Arduino

La alimentación es de 3.3V, la comunicación es a través del I2C del Arduino cuyos pines varía según la placa que se utilice, el pin IRQ generalmente va un pin de interrupción externa que trae el Arduino, a continuación se muestra la conexión del MPR121

   

MPR121

Arduino  Uno, Nano, Mini Pro

Arduino  Mega 2560

Arduino  Due

3.3V

Pin 3.3V (*)

Pin 3.3V (*)

Pin 3.3V (*)

IRQ

Pin 2  (**)

Pin 2(**)

Pin 2(**)

SCL

Pin A5

Pin 21

Pin 21

SDA

Pin A4

Pin 20

Pin 20

GND

Pin GND

Pin GND

Pin GND

 

*EL módulo PMR121 no tiene regulador de voltaje interno, por esto se utiliza la salida de voltaje 3.3V de Arduino, pero se puede usar una fuente externa siempre y cuando no exceda el voltaje de 3.3V.

**Para el pin IRQ se puede usar cualquier pin digital, en este caso no se usa interrupción, pero de ser el caso conectar al pin de interrupción externa correspondiente.

 Conexion MPR121

   

Programación del MPR121

Trabajaremos la programación sin usar librerías, de esta forma podrás migrar el código a cualquier otra plataforma o micro controlador, como los PICs de microchip

Empezamos declarando la librería para la comunicación I2C y el pin IRQ.

#include <Wire.h>
int  Pin_IRQ = 2;  // Pin IRQ en el pin digital 2
boolean EstadoAnterior[12]; //Para Alamacenar el ultimo estado del valor del touch
int address_mpr=0x5A; //dirección de nuestro MPR121

Notar que también creamos una variable para guardar los estados anteriores de los electrodos, para más adelante ver si han cambiado de estado. Además se declara una variable para especificar la dirección i2C de nuestro modulo PMR121

El siguiente paso es en configurar todos nuestros periféricos: los pines, la comunicación serial, el bus i2c y configurar el módulo MPR121.}

void setup(){
  pinMode(Pin_IRQ, INPUT);
  digitalWrite(Pin_IRQ, HIGH); //Habilitamos la resistencia pullup 
  Serial.begin(9600);
  Wire.begin();
  mpr121_Config(address_mpr);
}

Como se observa para configurar el modulo usamos la funcion mpr121_Config(address_mpr), dicha función se muestra a continuación:

void mpr121_Config(int address){

  set_register(address,0x5E,0x00); //ELE_CFG 
  
  // Section A - Controls filtering when data is > baseline.
  set_register(address, 0x2B, 0x01); //MHD_R
  set_register(address, 0x2C, 0x01); //NHD_R
  set_register(address, 0x2D, 0x00); //NCL_R
  set_register(address, 0x2E, 0x00); //FDL_R

  // Section B - Controls filtering when data is < baseline.
  set_register(address, 0x2F, 0x01); //MHD_F
  set_register(address, 0x30, 0x01); //NHD_F
  set_register(address, 0x31, 0xFF); //NCL_F
  set_register(address, 0x32, 0x02); //FDL_F
  
  // Section C - Sets touch and release thresholds for each electrode
  int umbral_Touch=0x44;
  int umbral_Release=0x40;
  set_register(address, 0x41, umbral_Touch); //Umbral Touch 0
  set_register(address, 0x42, umbral_Release); //Umbral Release 0
 
  set_register(address, 0x43, umbral_Touch); //Umbral Touch 1
  set_register(address, 0x44, umbral_Release); //Umbral Release 1
  
  set_register(0x5A, 0x45, umbral_Touch); //Umbral Touch 2
  set_register(0x5A, 0x46, umbral_Release); //Umbral Release 2

  set_register(address, 0x47, umbral_Touch); //Umbral Touch 3
  set_register(address, 0x48, umbral_Release); //Umbral Release 3
  
  set_register(address, 0x49, umbral_Touch); //Umbral Touch 4
  set_register(address, 0x4A, umbral_Release); //Umbral Release 4
  
  set_register(address, 0x4B, umbral_Touch); //Umbral Touch 5
  set_register(address, 0x4C, umbral_Release); //Umbral Release 5
  
  set_register(address, 0x4D, umbral_Touch); //Umbral Touch 6
  set_register(address, 0x4E, umbral_Release); //Umbral Release 6
  
  set_register(address, 0x4F, umbral_Touch); //Umbral Touch 7
  set_register(address, 0x50, umbral_Release); //Umbral Release 7
  
  set_register(address, 0x51, umbral_Touch); //Umbral Touch 8
  set_register(address, 0x52, umbral_Release); //Umbral Release 8
  
  set_register(address, 0x53, umbral_Touch); //Umbral Touch 9
  set_register(address, 0x54, umbral_Release); //Umbral Release 9
  
  set_register(address, 0x55, umbral_Touch); //Umbral Touch 10
  set_register(address, 0x56, umbral_Release); //Umbral Release 10
  
  set_register(address, 0x57, umbral_Touch); //Umbral Touch 11
  set_register(address, 0x58, umbral_Release); //Umbral Release 11
  
  // Section D
  // Set the Filter Configuration
  // Set ESI2
  set_register(address, 0x5D, 0x04); //FIL_CFG
  
  // Section E
  // Electrode Configuration
  // Set ELE_CFG to 0x00 to return to standby mode
  set_register(address, 0x5E, 0x0C);  // ELE_CFG  Enables all 12 Electrodes
  
}

Básicamente en la función anterior se configura los registros necesarios para su funcionamiento, doce de los registros se utilizan para establecer los umbrales de “tocar” y otros doce para  los umbrales de “soltar”, estos valores de registros hay q aumentar o disminuir de acuerdo al tipo de electrodo que usemos, nosotros hemos creado dos variables para establecer los umbrales de Touch y reléase (presionar y soltar) de los 12 electrodos por igual, pero puedes calibrarlo de forma independiente si usas electrodos diferentes

  // Section C - Sets touch and release thresholds for each electrode
  int umbral_Touch=0x44;
  int umbral_Release=0x40;
  
  set_register(address, 0x41, umbral_Touch); //Umbral Touch 0
  set_register(address, 0x42, umbral_Release); //Umbral Release 0
 
  set_register(address, 0x43, umbral_Touch); //Umbral Touch 1
  set_register(address, 0x44, umbral_Release); //Umbral Release 1

Ambos umbrales generalmente son valores cercanos, pero se puede trabajar con un ciclo de histéresis si se pone el umbral de Release por debajo del de Touch.

Una vez configurado el módulo MPR121, el siguiente paso es leer si se ha presionado o tocado algún electrodo, para esto hacemos uso del pin IRQ, que se pone a 0 cada vez que hay una cambio en alguno de los electrodos.

Después de detectar el cambio a través del pin IRQ, leemos el estado de los electrodos, de la siguiente forma:

    if(!digitalRead(Pin_IRQ)){
      
      // Leemos los estados de los electrodos del MPR121
      Wire.requestFrom(address_mpr,2); 
      
      byte LSB = Wire.read();
      byte MSB = Wire.read();
      
      uint16_t touched = ((MSB << 8) | LSB); // 12 de los 16 bits corresponden a los estados táctiles

Como se observa el valor de los electrodos se almacena en una variable de 16bits, de los cuales los 12 menos significativos almacenan los valores del estado de los electrodos.

El siguiente paso es analizar el estado de cada uno de ellos de forma individual, el estado actual se compara con el estado anterior y si existe alguna cambio se realiza la acción correspondiente, que en nuestro caso simplemente es notificar por el puerto serie.

      for (int i=0; i < 12; i++)
      {  
        boolean EstadoActual=bitRead(touched, i);
        if(!(EstadoAnterior[i])&&EstadoActual)
        {
              Serial.print("Electrodo ");
              Serial.print(i);
              Serial.println(" se acaba de tocar");
        }
        
        if(EstadoAnterior[i]&&(!EstadoActual))
        {
              Serial.print("Electrodo ");
              Serial.print(i);
              Serial.println(" ya no está siendo tocado");
        }
        EstadoAnterior[i]=EstadoActual;  
      }     

A continuación se muestra el código completo para leer los 12 electrodos.

#include <Wire.h>
int  Pin_IRQ = 2;  // Pin IRQ en el pin digital 2
boolean EstadoAnterior[12]; //Para Alamacenar el ultimo estado del valor del touch
int address_mpr=0x5A; //dirección de nuestro MPR121

void setup(){
  pinMode(Pin_IRQ, INPUT);
  digitalWrite(Pin_IRQ, HIGH); //Habilitamos la resistencia pullup 
  Serial.begin(9600);
  Wire.begin();
  mpr121_Config(address_mpr);
}

void loop(){

  
    if(!digitalRead(Pin_IRQ)){
      
      // Leemos los estados de los electrodos del MPR121
      Wire.requestFrom(address_mpr,2); 
      
      byte LSB = Wire.read();
      byte MSB = Wire.read();
      
      uint16_t touched = ((MSB << 8) | LSB); // 12 de los 16 bits corresponden a los estados táctiles
  
      //Comprobamos si los electrodos se han presionado
      for (int i=0; i < 12; i++)
      {  
        boolean EstadoActual=bitRead(touched, i);
        if(!(EstadoAnterior[i])&&EstadoActual)
        {
              Serial.print("Electrodo ");
              Serial.print(i);
              Serial.println(" se acaba de tocar");
        }
        
        if(EstadoAnterior[i]&&(!EstadoActual))
        {
              Serial.print("Electrodo ");
              Serial.print(i);
              Serial.println(" ya no está siendo tocado");
        }
        EstadoAnterior[i]=EstadoActual;  
      }     
    }
}


void mpr121_Config(int address){

  set_register(address,0x5E,0x00); //ELE_CFG 
  
  // Section A - Controls filtering when data is > baseline.
  set_register(address, 0x2B, 0x01); //MHD_R
  set_register(address, 0x2C, 0x01); //NHD_R
  set_register(address, 0x2D, 0x00); //NCL_R
  set_register(address, 0x2E, 0x00); //FDL_R

  // Section B - Controls filtering when data is < baseline.
  set_register(address, 0x2F, 0x01); //MHD_F
  set_register(address, 0x30, 0x01); //NHD_F
  set_register(address, 0x31, 0xFF); //NCL_F
  set_register(address, 0x32, 0x02); //FDL_F
  
  // Section C - Sets touch and release thresholds for each electrode
  int umbral_Touch=0x44;
  int umbral_Release=0x40;
  
  set_register(address, 0x41, umbral_Touch); //Umbral Touch 0
  set_register(address, 0x42, umbral_Release); //Umbral Release 0
 
  set_register(address, 0x43, umbral_Touch); //Umbral Touch 1
  set_register(address, 0x44, umbral_Release); //Umbral Release 1
  
  set_register(0x5A, 0x45, umbral_Touch); //Umbral Touch 2
  set_register(0x5A, 0x46, umbral_Release); //Umbral Release 2

  set_register(address, 0x47, umbral_Touch); //Umbral Touch 3
  set_register(address, 0x48, umbral_Release); //Umbral Release 3
  
  set_register(address, 0x49, umbral_Touch); //Umbral Touch 4
  set_register(address, 0x4A, umbral_Release); //Umbral Release 4
  
  set_register(address, 0x4B, umbral_Touch); //Umbral Touch 5
  set_register(address, 0x4C, umbral_Release); //Umbral Release 5
  
  set_register(address, 0x4D, umbral_Touch); //Umbral Touch 6
  set_register(address, 0x4E, umbral_Release); //Umbral Release 6
  
  set_register(address, 0x4F, umbral_Touch); //Umbral Touch 7
  set_register(address, 0x50, umbral_Release); //Umbral Release 7
  
  set_register(address, 0x51, umbral_Touch); //Umbral Touch 8
  set_register(address, 0x52, umbral_Release); //Umbral Release 8
  
  set_register(address, 0x53, umbral_Touch); //Umbral Touch 9
  set_register(address, 0x54, umbral_Release); //Umbral Release 9
  
  set_register(address, 0x55, umbral_Touch); //Umbral Touch 10
  set_register(address, 0x56, umbral_Release); //Umbral Release 10
  
  set_register(address, 0x57, umbral_Touch); //Umbral Touch 11
  set_register(address, 0x58, umbral_Release); //Umbral Release 11
  
  // Section D
  // Set the Filter Configuration
  // Set ESI2
  set_register(address, 0x5D, 0x04); //FIL_CFG
  
  // Section E
  // Electrode Configuration
  // Set ELE_CFG to 0x00 to return to standby mode
  set_register(address, 0x5E, 0x0C);  // ELE_CFG  Enables all 12 Electrodes
  
}

void set_register(int address, unsigned char r, unsigned char v){
    Wire.beginTransmission(address);
    Wire.write(r);
    Wire.write(v);
    Wire.endTransmission();
}

A continuación se muestra la salida del monitor serial cuando se está interactuando con los electrodos

  

Monitor serial MPR121

    

Como se observa en nuestro ejemplo estamos detectando cuando se toca un electrodo y cuando se suelta pero dependerá de su aplicación para ver cuál acción les es más útil.

 

Pueden adquirir los materiales usados en este tutorial en nuestra tienda

Arduino Uno R3

Módulo MPR121 Sensor Capacitivo Tactil

Cable Dupont, hembra a macho 20cm x 20Und

63 Comments

    • Avatar
      California dating
      oct 25, 2019

      The pioneers of LA online dating able to see the end of the runway as the beginning of flight where the plane went from a ground propelled vehicle to an airborne vehicle which transcends the limits of ground transportation.

    • Avatar
      mariakim
      oct 30, 2019

      I’m going to bookmark your web page and maintain checking for new details. I am looking for some good blog sites for studying. I was searching over search engines and found your write my essay blog site. Well i like your high quality blog site design plus your posting abilities. Keep doing it.

    • Avatar
      Lost Book of Remedies
      nov 15, 2019

      I've been looking for info on this topic for a while. I'm happy this one is so great. Keep up the excellent work Lost Book of Remedies

    • Avatar
      ai to jpg
      nov 15, 2019

      They're produced by the very best degree developers who will be distinguished for your polo dress creating. You'll find polo Ron Lauren inside exclusive array which include particular classes for men, women. ai to jpg

    • Avatar
      png to jpg
      nov 15, 2019

      Hey, great blog, but I don’t understand how to add your site in my rss reader. Can you Help me please? png to jpg

    • Avatar
      bmp to jpg
      nov 15, 2019

      Hey, great blog, but I don’t understand how to add your site in my rss reader. Can you Help me please? bmp to jpg

    • Avatar
      pdf to jpg
      nov 15, 2019

      Two full thumbs up for this magneficent article of yours. I've really enjoyed reading this article today and I think this might be one of the best article that I've read yet. Please, keep this work going on in the same quality. pdf to jpg

    • Avatar
      Flat Belly Fix
      nov 15, 2019

      A great website with interesting and unique material what else would you need. Flat Belly Fix

    • Avatar
      Leptitox Review
      nov 15, 2019

      Took me time to understand all of the comments, but I seriously enjoyed the write-up. It proved being really helpful to me and Im positive to all of the commenters right here! Its constantly nice when you can not only be informed, but also entertained! I am certain you had enjoyable writing this write-up. Leptitox Review

    • Avatar
      Custom Keto Diet
      nov 15, 2019

      A debt of gratitude is in order for the blog entry amigo! Keep them coming... Custom Keto Diet

    • Avatar
      His Secret Obsession
      nov 16, 2019

      Wow! Such an amazing and helpful post this is. I really really love it. It's so good and so awesome. I am just amazed. I hope that you continue to do your work like this in the future also. His Secret Obsession

    • Avatar
      Leptitox Review
      nov 16, 2019

      so happy to find good place to many here in the post, the writing is just great, thanks for the post. Leptitox Review

    • Avatar
      Construction
      nov 18, 2019

      Thanks for sharing this information. I really like your blog post very much. You have really shared a informative and interesting blog post . Construction

    • Avatar
      Construction
      nov 18, 2019

      I like viewing web sites which comprehend the price of delivering the excellent useful resource free of charge. I truly adored reading your posting. Thank you! Construction

    • Avatar
      Construction
      nov 18, 2019

      Great post i must say and thanks for the information. Education is definitely a sticky subject. However, is still among the leading topics of our time. I appreciate your post and look forward to more. Construction

    • Avatar
      Construction
      nov 18, 2019

      Regular visits listed here are the easiest method to appreciate your energy, which is why why I am going to the website everyday, searching for new, interesting info. Many, thank you! Construction

    • Avatar
      Construction
      nov 18, 2019

      Nice post! This is a very nice blog that I will definitively come back to more times this year! Thanks for informative post. Construction

    • Avatar
      Sexy high waist yoga pants
      nov 23, 2019

      Very useful post. This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. Really its great article. Keep it up. Sexy high waist yoga pants

    • Avatar
      Pondicherry
      dic 11, 2019

      this blog is really inspired to me about MPR121 capacitive touch sensor tutorial thanks for sharing such a great information !!! Pondicherry

    • Avatar
      Gate 2020
      ene 6, 2020

      Gate 2020 Very interesting tutorial keep it up guys i liked it @@@

    • Avatar
      martwal
      ene 12, 2020

      I hope that there will be miracles, heal the broken heart is crying and sad. The sky is still divided night light right then we broke up already, so our love circle is like that. walmart near me

    • Avatar
      spin on event
      ene 20, 2020

      Thanks for sharing this amazing and interesting content. You have shared something which I never have seen anywhere. I learn too much from your content. Keep sharing like that I loved it. Again thanks a lot. Exhibition In Delhi

    • Avatar
      Massive male plus
      ene 24, 2020

      Whenever I become familiar with a weblog, I trust that it doesn’t frustrate me as much as this one. That is to say, I do realize it was my decision to peruse, anyway I really thought you have something eye catching to state. All I hear is a lot of whimpering about something that you could fix for the individuals who weren’t excessively occupied looking for consideration. eHealtHow Massive male plus

    • Avatar
      Leptitox
      ene 25, 2020

      Going to graduate school was a positive decision for me. I enjoyed the coursework, the presentations, the fellow students, and the professors. And since my company reimbursed 100% of the tuition, the only cost that I had to pay on my own was for books and supplies. Otherwise, I received a free master’s degree. All that I had to invest was my time. Business

      • Avatar
        Leptitox
        ene 25, 2020

        Going to graduate school was a positive decision for me. I enjoyed the coursework, the presentations, the fellow students, and the professors. And since my company reimbursed 100% of the tuition, the only cost that I had to pay on my own was for books and supplies. Otherwise, I received a free master’s degree. All that I had to invest was my time. Business Leptitox

    • Avatar
      Marcos
      ene 27, 2020

      Tu código no funciona

    • Avatar
      Massive male plus reviews
      ene 31, 2020

      I am impressed by the information that you have on this blog. It shows how well you understand this subject.

    • Avatar
      Leptitox supplement reviews
      ene 31, 2020

      I curious more interest in some of them hope you will give more information on this topics in your next articles. Duron Williamson Tree Service

    • Avatar
      Blood sugar premier Supplement
      feb 3, 2020

      Today students need to juggle up assignments, tests, social life and family time altogether. It has turned out extremely tough to get so much handled with perfection. Since college professors tend to establish high demands for their classes, with a belief that students can easily cope with all those requirements. However, students for coming up with the entire home assignment, need to either sacrifice their leisure time for studying harder or finish the work recklessly.

    • Avatar
      Blood sugar premier Supplement
      feb 4, 2020

      I am impressed by the information that you have on this blog. It shows how well you understand this subject.

    • Avatar
      The Huge Male Secret Reviews
      feb 7, 2020

      Post writing is also a fun, if you be familiar with afterward you can write if not it is difficult to write. Huge Male Secret Review

    • Avatar
      Huge Male Secret Reviews,
      feb 7, 2020

      No matter if some one searches for his necessary thing, thus he/she desires to be available that in detail, therefore that thing is maintained over here.Huge Male Secret Supplement

    • Avatar
      Vinayaga
      feb 9, 2020

      Where to follow this post? From the starting paragraph or from the ending paragraph? Every stage is created perfectly to use. I wonder on the admins work. buy votes

    • Avatar
      Murugan
      feb 9, 2020

      I just changed the way I look for good contents. Tutorial sensor is connected well on this article. Keep posting more posts on this topic. I love to read. how to cure candida

    • Avatar
      Grow Extra Inches Reviews
      feb 9, 2020

      Good day! I could have sworn I've been to this website before but after reading through some of the post I realized it's new to me. Nonetheless, I'm definitely delighted I found it and I'll be book-marking and checking back often! Grow Extra Inches Review

    • Avatar
      Huge Male Secret
      feb 10, 2020

      Do you mind if I quote a couple of your posts as long as I provide credit and sources back to your webpage? My website is in the very same niche as yours and my visitors would truly benefit from a lot of the information you provide here. Please let me know if this ok with you. Thank you! Huge Male Secret Review

    • Avatar
      Huge Male Secret Supplement
      feb 10, 2020

      With havin so much written content do you ever run into any problems of plagorism or copyright infringement? My site has a lot of completely unique content I've either written myself or outsourced but it looks like a lot of it is popping it up all over the internet without my permission. Do you know any techniques to help prevent content from being ripped off? I'd certainly appreciate it. Huge Male Secret Review

    • Avatar
      Leptitox Supplement Reviews
      feb 11, 2020

      Hi would you mind sharing which blog platform you're using? I'm looking to start my own blog soon but I'm having a difficult time making a decision between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design seems different then most blogs and I'm looking for something completely unique. P.S Apologies for getting off-topic but I had to ask! Leptitox Supplement

    • Avatar
      Leptitox Supplement
      feb 11, 2020

      I seriously love your site.. Great colors they will get advantage from it I am sure. Leptitox Review

    • Avatar
      Instahard Ingredients
      feb 12, 2020

      It is the best time to make some plans for the future and it's time to be happy. I have read this post and if I could I wish to suggest you some interesting things or advice. Maybe you can write next articles referring to this article. I desire to read more things about it! Instahard Review

    • Avatar
      Instahard Reviews
      feb 12, 2020

      It's appropriate time to make a few plans for the longer term and it's time to be happy. I have read this submit and if I may just I desire to recommend you some fascinating things or suggestions. Maybe you can write next articles referring to this article. I want to learn even more things about it! Instahard Supplement

    • Avatar
      Steve JONES
      feb 12, 2020

      The star value for this content is 4 out of 5. I found this useful to secure my place as a master on this topic. I like this tutorial very much. buy votes

    • Avatar
      Grow Extra Inches
      feb 12, 2020

      If some one desires expert view regarding running a blog afterward i propose him/her to go to see this weblog, Keep up the good work. Grow Extra Inches

    • Avatar
      Massive Male Plus Reviews
      feb 12, 2020

      Magnificent goods from you, man. I've understand your stuff previous to and you're just too great. I really like what you've acquired here, really like what you're saying and the way in which you say it. You make it enjoyable and you still take care of to keep it wise. I can't wait to read much more from you. This is really a tremendous website. Massive Male Plus Supplement Reviews

    • Avatar
      Longevity Activator Reviews
      feb 13, 2020

      I was recommended this website via my cousin. I am no longer sure whether or not this post is written by means of him as no one else know such detailed about my problem. You're amazing! Thanks! Longevity Activator Review

    • Avatar
      Barbarian XL Supplement
      feb 13, 2020

      Hello There. I found your blog using msn. This is a really well written article. I will be sure to bookmark it and return to read more of your useful information. Thanks for the post. I'll certainly return. Barbarian XL Review

    • Avatar
      BP Optimizer Ingredients
      feb 14, 2020

      Normally I don't read article on blogs, however I would like to say that this write-up very compelled me to check out and do it! Your writing taste has been amazed me. Thanks, very nice post. BP Optimizer Review

    • Avatar
      Hair Revital X Reviews
      feb 14, 2020

      I was recommended this website via my cousin. I am no longer sure whether or not this post is written by means of him as no one else know such detailed about my problem. You're amazing! Thanks! Hair Revital X Review

    • Avatar
      Longevity Activator
      feb 15, 2020

      Everyone loves what you guys tend to be up too. This type of clever work and coverage! Keep up the awesome works guys I've included you guys to my personal blogroll. Longevity Activator

    • Avatar
      Barbarian XL Ingredients
      feb 15, 2020

      Howdy! Someone in my Myspace group shared this site with us so I came to check it out. I'm definitely loving the information. I'm book-marking and will be tweeting this to my followers! Outstanding blog and great style and design. Barbarian XL Review

    • Avatar
      BP Optimizer Supplement Reviews
      feb 15, 2020

      Magnificent goods from you, man. I've understand your stuff previous to and you're just too great. I really like what you've acquired here, really like what you're saying and the way in which you say it. You make it enjoyable and you still take care of to keep it wise. I can't wait to read much more from you. This is really a tremendous website. BP Optimizer Review

    • Avatar
      Barbarian XL Supplement
      feb 15, 2020

      Excellent beat ! I wish to apprentice even as you amend your website, how can i subscribe for a blog site? The account helped me a appropriate deal. I were tiny bit acquainted of this your broadcast provided brilliant transparent idea Barbarian XL Review

    • Avatar
      Vision 20 20 protocol Reviews
      feb 17, 2020

      I have read so many articles or reviews about the blogger lovers however this post is truly a good piece of writing, keep it up. Vision 20 20 protocol Review

    • Avatar
      Man Tea Rock Hard Formula Supplement
      feb 17, 2020

      Good web site you've got here.. It's hard to find quality writing like yours these days. I seriously appreciate people like you! Take care!! Man Tea Rock Hard Formula Review

    • Avatar
      Zenith Labs Zenith Pure Greens Reviews
      feb 17, 2020

      Very good blog! Do you have any hints for aspiring writers? I'm hoping to start my own website soon but I'm a little lost on everything. Would you recommend starting with a free platform like Wordpress or go for a paid option? There are so many options out there that I'm totally confused .. Any tips? Thank you! Zenith labs Zenith Pure Greens

    • Avatar
      Kined
      feb 21, 2020

      The smart people do more researches on this topic. You are rocking at the moment with great results. I love your work and I want to share this with my working mates. how to cure diabetes

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment: