Control de Servomotor con Potenciómetro y Display OLED 128x32 en Arduino | MechatronicStore

Control de Servomotor con Potenciómetro y Display OLED 128x32 en Arduino | MechatronicStore

Código, explicación por partes: #include <Arduino.h> #include <U8g2lib.h> #include <Servo.h> Arduino.h : Es la biblioteca principal de Arduino y proporciona funciones básicas para programar en Arduino. U8g2lib.h : Esta biblioteca es utilizada para controlar pantallas OLED, en este caso, un SSD1306 de 128×32 píxeles. Servo.h : Es la biblioteca para controlar servomotores en Arduino. U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); Se crea un objeto u8g2 de la clase U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C para controlar la pantalla OLED. int ServoPin = 9; int Ang = 0; int PotPin = A3; int PotValor; Servo XServo; Se definen variables para los pines del servo ( ServoPin ), el ángulo del servo ( Ang ), el pin del potenciómetro ( PotPin ), y el valor leído del potenciómetro ( PotValor ). Además, se crea un objeto XServo de la clase Servo . void setup() { u8g2.begin(); XServo.attach(ServoPin); XServo.write(Ang); Serial.begin(9600); } u8g2.begin() : Inicia la comunicación con la pantalla OLED. XServo.attach(ServoPin) : Asocia el objeto XServo al pin del servo. XServo.write(Ang) : Establece la posición inicial del servo en el ángulo Ang . Serial.begin(9600) : Inicia la comunicación serial a una velocidad de 9600 baudios para la depuración a través del puerto serial. void loop() { PotValor = analogRead(PotPin); Ang = map(PotValor, 0, 1023, 0, 180); XServo.write(Ang); delay(100); Serial.println(PotValor); } analogRead(PotPin) : Lee el valor analógico del potenciómetro y lo almacena en PotValor . map(PotValor, 0, 1023, 0, 180) : Mapea el valor leído del potenciómetro al rango de 0 a 180 grados y lo almacena en Ang . XServo.write(Ang) : Actualiza la posición del servo según el nuevo ángulo. delay(100) : Espera 100 milisegundos para evitar lecturas rápidas del potenciómetro. Serial.println(PotValor) : Imprime el valor del potenciómetro en el monitor serial. u8g2.drawStr(0,10,"Mechatronics"); u8g2.sendBuffer(); u8g2.drawStr(0,10,"Mechatronics") : Dibuja el texto «Mechatronics» en la pantalla OLED en la posición (0, 10). u8g2.sendBuffer() : Envía el contenido del búfer a la pantalla para que sea visible. char buffer[20]; sprintf(buffer, "PotValor: %d", PotValor); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB08_tr); u8g2.drawStr(0, 20, buffer); sprintf(buffer, "Angulo: %d", Ang); u8g2.drawStr(0, 30, buffer); Se utiliza un buffer ( char buffer[20] ) para formatear las cadenas que se mostrarán en la pantalla. (En char buffer[20] , el «20» significa que buffer puede guardar hasta 20 letras o caracteres. Se usa para almacenar información, como palabras de hasta 20 letras.) sprintf(buffer, "PotValor: %d", PotValor) : Formatea la cadena con el valor del potenciómetro y la almacena en buffer . (Un buffer en general es un trozo de memoria que sirve de «colchón» para los datos, la función sprintf formatea una cadena con los valores que le pasemos, y escribe el resultado en un búfer.) u8g2.clearBuffer() : Borra el contenido del búfer de la pantalla OLED. u8g2.setFont(u8g2_font_ncenB08_tr) : Selecciona la fuente para el texto en la pantalla. u8g2.drawStr(0, 20, buffer) : Dibuja la cadena formateada en la posición (0, 20) de la pantalla. sprintf(buffer, "Angulo: %d", Ang) : Formatea la cadena con el valor del ángulo y la almacena en buffer . u8g2.drawStr(0, 30, buffer) : Dibuja la cadena formateada en la posición (0, 30) de la pantalla. En el siguiente video se comprueba el correcto funcionamiento del circuito, además de visualizar de forma óptima los resultados:

Código, explicación por partes: #include <Arduino.h> #include <U8g2lib.h> #include <Servo.h> Arduino.h : Es la biblioteca principal de Arduino y proporciona funciones básicas para programar en Arduino. U8g2lib.h : Esta biblioteca es utilizada para controlar pantallas OLED, en este caso, un SSD1306 de 128×32 píxeles. Servo.h : Es la biblioteca para controlar servomotores en Arduino. U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); Se crea un objeto u8g2 de la clase U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C para controlar la pantalla OLED. int ServoPin = 9; int Ang = 0; int PotPin = A3; int PotValor; Servo XServo; Se definen variables para los pines del servo ( ServoPin ), el ángulo del servo ( Ang ), el pin del potenciómetro ( PotPin ), y el valor leído del potenciómetro ( PotValor ). Además, se crea un objeto XServo de la clase Servo . void setup() { u8g2.begin(); XServo.attach(ServoPin); XServo.write(Ang); Serial.begin(9600); } u8g2.begin() : Inicia la comunicación con la pantalla OLED. XServo.attach(ServoPin) : Asocia el objeto XServo al pin del servo. XServo.write(Ang) : Establece la posición inicial del servo en el ángulo Ang . Serial.begin(9600) : Inicia la comunicación serial a una velocidad de 9600 baudios para la depuración a través del puerto serial. void loop() { PotValor = analogRead(PotPin); Ang = map(PotValor, 0, 1023, 0, 180); XServo.write(Ang); delay(100); Serial.println(PotValor); } analogRead(PotPin) : Lee el valor analógico del potenciómetro y lo almacena en PotValor . map(PotValor, 0, 1023, 0, 180) : Mapea el valor leído del potenciómetro al rango de 0 a 180 grados y lo almacena en Ang . XServo.write(Ang) : Actualiza la posición del servo según el nuevo ángulo. delay(100) : Espera 100 milisegundos para evitar lecturas rápidas del potenciómetro. Serial.println(PotValor) : Imprime el valor del potenciómetro en el monitor serial. u8g2.drawStr(0,10,"Mechatronics"); u8g2.sendBuffer(); u8g2.drawStr(0,10,"Mechatronics") : Dibuja el texto «Mechatronics» en la pantalla OLED en la posición (0, 10). u8g2.sendBuffer() : Envía el contenido del búfer a la pantalla para que sea visible. char buffer[20]; sprintf(buffer, "PotValor: %d", PotValor); u8g2.clearBuffer(); u8g2.setFont(u8g2_font_ncenB08_tr); u8g2.drawStr(0, 20, buffer); sprintf(buffer, "Angulo: %d", Ang); u8g2.drawStr(0, 30, buffer); Se utiliza un buffer ( char buffer[20] ) para formatear las cadenas que se mostrarán en la pantalla. (En char buffer[20] , el «20» significa que buffer puede guardar hasta 20 letras o caracteres. Se usa para almacenar información, como palabras de hasta 20 letras.) sprintf(buffer, "PotValor: %d", PotValor) : Formatea la cadena con el valor del potenciómetro y la almacena en buffer . (Un buffer en general es un trozo de memoria que sirve de «colchón» para los datos, la función sprintf formatea una cadena con los valores que le pasemos, y escribe el resultado en un búfer.) u8g2.clearBuffer() : Borra el contenido del búfer de la pantalla OLED. u8g2.setFont(u8g2_font_ncenB08_tr) : Selecciona la fuente para el texto en la pantalla. u8g2.drawStr(0, 20, buffer) : Dibuja la cadena formateada en la posición (0, 20) de la pantalla. sprintf(buffer, "Angulo: %d", Ang) : Formatea la cadena con el valor del ángulo y la almacena en buffer . u8g2.drawStr(0, 30, buffer) : Dibuja la cadena formateada en la posición (0, 30) de la pantalla.

Arduino.h : Es la biblioteca principal de Arduino y proporciona funciones básicas para programar en Arduino.

U8g2lib.h : Esta biblioteca es utilizada para controlar pantallas OLED, en este caso, un SSD1306 de 128×32 píxeles.

Servo.h : Es la biblioteca para controlar servomotores en Arduino.

Se crea un objeto u8g2 de la clase U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C para controlar la pantalla OLED.

Se definen variables para los pines del servo ( ServoPin ), el ángulo del servo ( Ang ), el pin del potenciómetro ( PotPin ), y el valor leído del potenciómetro ( PotValor ). Además, se crea un objeto XServo de la clase Servo .

u8g2.begin() : Inicia la comunicación con la pantalla OLED.

XServo.attach(ServoPin) : Asocia el objeto XServo al pin del servo.

XServo.write(Ang) : Establece la posición inicial del servo en el ángulo Ang .

Serial.begin(9600) : Inicia la comunicación serial a una velocidad de 9600 baudios para la depuración a través del puerto serial.

analogRead(PotPin) : Lee el valor analógico del potenciómetro y lo almacena en PotValor .

map(PotValor, 0, 1023, 0, 180) : Mapea el valor leído del potenciómetro al rango de 0 a 180 grados y lo almacena en Ang .

XServo.write(Ang) : Actualiza la posición del servo según el nuevo ángulo.

delay(100) : Espera 100 milisegundos para evitar lecturas rápidas del potenciómetro.

Serial.println(PotValor) : Imprime el valor del potenciómetro en el monitor serial.

u8g2.drawStr(0,10,"Mechatronics") : Dibuja el texto «Mechatronics» en la pantalla OLED en la posición (0, 10).

u8g2.sendBuffer() : Envía el contenido del búfer a la pantalla para que sea visible.

Se utiliza un buffer ( char buffer[20] ) para formatear las cadenas que se mostrarán en la pantalla. (En char buffer[20] , el «20» significa que buffer puede guardar hasta 20 letras o caracteres. Se usa para almacenar información, como palabras de hasta 20 letras.)

sprintf(buffer, "PotValor: %d", PotValor) : Formatea la cadena con el valor del potenciómetro y la almacena en buffer . (Un buffer en general es un trozo de memoria que sirve de «colchón» para los datos, la función sprintf formatea una cadena con los valores que le pasemos, y escribe el resultado en un búfer.)

u8g2.clearBuffer() : Borra el contenido del búfer de la pantalla OLED.

u8g2.setFont(u8g2_font_ncenB08_tr) : Selecciona la fuente para el texto en la pantalla.

u8g2.drawStr(0, 20, buffer) : Dibuja la cadena formateada en la posición (0, 20) de la pantalla.

sprintf(buffer, "Angulo: %d", Ang) : Formatea la cadena con el valor del ángulo y la almacena en buffer .

u8g2.drawStr(0, 30, buffer) : Dibuja la cadena formateada en la posición (0, 30) de la pantalla.

En conclusión, este proyecto integra un Servomotor controlado por un Arduino y un Potenciómetro, con resultados visibles en una Pantalla OLED. Las conexiones detalladas y el código explicado facilitan la comprensión y aplicación práctica, ofreciendo una experiencia completa para aquellos interesados en la mecatrónica. El video complementario valida el funcionamiento eficiente de este circuito.

Recommended articles