1 / 6
Cronometro Automático Para Robots Seguidores De Línea - Automatic Timer For Line Follower Robots — zdjęcie 1
1 / 6

Cronometro Automático Para Robots Seguidores De Línea - Automatic Timer For Line Follower Robots

Zamów wydruk tego modelu

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(); }

 

Tagi