Cronometro Automático Para Robots Seguidores De Línea - Automatic Timer For Line Follower Robots
Obliczymy ostateczną cenę na podstawie wybranego pliku. Sprawdzisz ją i zaakceptujesz przed płatnością.
Zapisane na tym urządzeniu.
Cronometro automático para robots seguidores de línea desarrollado con ESP32-C3 mini, sensor óptico y oled de 0.96".
- Ocena
- 0 / 5
- Polubienia
- 15
- Pobrania
- 175
- Wydruki
- 0
- Wyświetlenia
- 1717
- Oceny
- 0
Aktualizacja u źródła:
Informacje o modelu
- Źródło
- Printables
- Kategoria
- RC & Robotics
- Licencja
- Creative Commons — Attribution
Cronometro automático para robots seguidores de línea desarrollado con ESP32-C3 super mini C3, sensor óptico E18-D80NK, pantalla oled de 0.96" y modulo de carga TP4056 para batería lipo 1S 300mAh.
Especificaciones
- El cronometro necesita de una barrera la cual esta fabricada en PLA negro, en donde se agrego fomi de color negro en la parte frontal con el objetivo de absorber la luz ambiente de manera mas eficiente y evitar falsas detecciones.
- Para ayudar a disminuir la exposición de la luz ambiente se realizo un protector que se ajusta a una de las tuercas del sensor óptico y cubre la parte frontal del mismo.
- La tapa del cronometro cuenta con un mecanismo de clics a presión para realizar el cierre de la caja.
- El grosor de las paredes de la caja son 2mm.
- La visualización del tiempo se hace con una pantalla oled de 0.96" con I2C.
- El circuito cuenta con un buzzer que da una alarma de sonido para saber si se detecto el robot correctamente.
Nota
- Se adjunta un archivo .zip que incluye, el diseño de la PCB en formato GERBER y PDF y el código de Arduino.
Esquemático Cronometro Automático Para Robots Seguidores De Línea

Diseño PCB Cronometro Automático Para Robots Seguidores De Línea

Código en Arduino Cronometro Automático Para Robots Seguidores De Línea
// Programa desarrollado por RACBOTS INDUSTRIES#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> // Libreria para Pantalla oled 0.96
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int UMS=0; // Unidades milesima de segundo
int DMS=0; // Decenas milesima de segundo
int US=0; // Unidades segundo
int DS=0; // Decimas segundo
int UM=0; // Unidades minuto
int DM=0; // Decimas Minuto
int S1=3; // Sensor De proximidad
int P1=0; // Pulsador Verde
int P2=1; // Pulsador rojo
int Bz=2; // Buzzer
int C1=0; // Variable de contador para iniciar o detener cronometro
unsigned long previousMillis = 0; // Variale para Milis previos 1
const long interval1 = 100; // intervalo para aumentar milecimas
unsigned long previousMillis2 = 0; // Variale para Milis previos 2
const long interval2 = 2500; // intervalo para iniciar cronometro
void setup() {
// put your setup code here, to run once:
pinMode(S1,INPUT); // Se declara el sensor de proximidad como entrada
pinMode(P1,INPUT_PULLUP); // Se declara el pulsador 1 con configuracion PULLUP
pinMode(P2,INPUT_PULLUP); // Se declara el pulsador 2 con configuracion PULLUP
pinMode(Bz,OUTPUT); // Se declara el buzzer como salida
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { // se Inicializa la pantalla oled
}
display.clearDisplay(); // se limpria la pantalla oled
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,10); // Start at top-left corner
display.println(" RACBOTS ");
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0,30); // Start at top-left corner
display.println("INDUSTRIES");
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(30,55); // Start at top-left corner
display.println("ANDRES CARO");
display.display();
delay(2500); // Pausa por 2.5 segundos
display.clearDisplay(); // se limpria la pantalla oled
}
void loop() {
unsigned long currentMillis = millis();
if(digitalRead(S1)== HIGH || digitalRead(P1)==LOW ){ // Condicional para iniciar cronometro
if (currentMillis - previousMillis2 >= interval2) { // Guarda el tiempo pasado para el intervalo 2
previousMillis2 = currentMillis;
digitalWrite(Bz,HIGH);
delay(100);
digitalWrite(Bz,LOW);
C1=C1+1;}}
if(C1>1){ // Contador para iniciar cronometro
C1=0;}
if(C1==1){ // Condicional para realizar el conteo del cronometro
if (currentMillis - previousMillis >= interval1) { // Guarda el tiempo pasado para el intervalo 1
previousMillis = currentMillis;
UMS== UMS++; // Aumenta las unidades de milesimas de segundo
}
if(UMS>9){ // Aumenta las unidades de segundo
UMS= 0;
US= US+1;}
if(US>9){ // Aumenta las decenas de segundos
US= 0;
DS= DS+1;}
if(DS>5){ // Aumenta las unidades de minuto
DS= 0;
UM= UM+1;}
if(UM>9){ // Aumenta las decenas de minuto
UM= 0;
DM= DM+1;}
}
if(C1==0){ // Condicional para detener cronometro
UMS== UMS;}
if(digitalRead(P2)==LOW){ // Condicional para detener cronometro
UMS=0;
DMS=0;
US=0;
DS=0;
UM=0;
DM=0;
C1=0;
digitalWrite(Bz,HIGH);
delay(1000);
digitalWrite(Bz,LOW);}
display.setTextSize(3); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(10,5); // Start at top-left corner
display.println("TIEMPO");
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(100,45); // Start at top-left corner
display.println(UMS);
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(85,45); // Start at top-left corner
display.println(":");
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(70,45); // Start at top-left corner
display.println(US);
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(55,45); // Start at top-left corner
display.println(DS);
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(40,45); // Start at top-left corner
display.println(":");
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(25,45); // Start at top-left corner
display.println(UM);
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(10,45); // Start at top-left corner
display.println(DM);
display.display();
display.clearDisplay();
}
