电子计数跳绳原型V1.2

引子

继续前面的改造 

电子计数跳绳原型V1.1-CSDN博客文章浏览阅读416次,点赞4次,收藏10次。基于Arduino Nano的智能跳绳计数器开发实践 摘要:作者在原霍尔传感器方案基础上,新增OLED屏幕显示功能,完成了跳绳计数器的功能原型。系统采用双霍尔传感器(A0/A1)检测旋转,通过阈值比较和去抖动处理实现精确计数(阈值410,消抖5ms)。使用U8g2库驱动128x64 OLED屏,以32号字体实时显示圈数。尽管当前方案体积较大,但验证了核心功能可行性。后续计划升级至ESP32-C3平台,利用其WiFi/蓝牙能力拓展智能应用场景。(149字) https://blog.csdn.net/zfive5/article/details/149081992?spm=1001.2014.3001.5501

电子计数跳绳原型-CSDN博客文章浏览阅读443次,点赞3次,收藏8次。摘要:作者尝试用3D打印和编程实现跳绳计数功能,采用Arduino Nano和两个霍尔传感器搭建原型系统。通过调试程序(含去抖动处理)和万用表检测,最终成功实现旋转计数。实验发现AI生成的初版代码仍需人工优化,并总结了老款Nano需选旧Bootloader的上传问题。未来计划改用ESP32-C3开发板,并进一步研究PCB设计,最终实现完整的跳绳手柄定制开发。(149字) https://blog.csdn.net/zfive5/article/details/149004730?spm=1001.2014.3001.5501

这次主要改进了两点:

1、之前3D打印的跳绳轴承支架放在面包板,实验起来有些不牢固,使用过程中还的扶着

2、把ariduino nano改成了esp32 c3,

    a)nano板子有些大,将来塞入跳绳手柄里尺寸有些尴尬。esp32 c3 supper mini的板子+led在尺寸上看好解决了接下来的尺寸的问题,如果不行将来独立设计PCB也完全可行。

    b)esp32 c3 有蓝牙和WiFi功能,将来产品和手机APP互动成为可能。

    c)支持一下国产芯片,比较我们这个也不输入外国的芯片。

本次改造结果图:

正文

问题1:跳绳轴承支架加固

就是把之前的卡着的设计 ,改成面包插入的设计。

跳绳轴承支架的3D打印图如下:

也终于把我去年剩下的绿色+蓝色的料都完美用完了

卡着面包板上,真的挺合适的。也买了一本freecad的书再系统的学习一下。

问题2:替代为esp32C3

通过aridiuno的IDE编写esp32C3的程序大费周章。的确没有直接用aridiuno nano 容易,而且搭出电路后,又彻夜未眠(记得2个月前写AI应用的时候搞了一个通宵)

esp32c3 的板子分有串口和没有串口上传的能力,我选用的supper mini版就是没有的,所有必须

1) 按Boot ->按 Reset  ->松 Reset-> 松 boot的方式才能上传程序

2)led的操作,之前的一直显示不出来,最后只能使用上开发版的例子程序改了一下才可以,到现在我都不知道是怎样操作的,只能后续再仔细研究了。

3)用esp32c3的模拟接口读霍尔传感器简直就是噩梦,

     同样的位置,一会800,一会1200,简直了,最后把5V的输入,直接改成3V的输入,一切都立马变成一马平川顺利。

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

#define led 8

// IIC OLED 初始化(适用于 ESP32-C3)
U8G2_SSD1306_72X40_ER_1_SW_I2C u8g2(U8G2_R0, 6, 5, U8X8_PIN_NONE);

// 模拟引脚定义(两个传感器平分圆,相距180度)
const int hallA = 0;   // 使用 ESP32-C3 的 ADC 引脚 A0 -> GPIO0
const int hallB = 1;   // 使用 ESP32-C3 的 ADC 引脚 A1 -> GPIO1

// 参数设置
const int threshold = 1640;      // 磁场阈值(根据实际校准)
const int debounceDelay = 5;    // 去抖动时间(毫秒)

// 变量声明
long totalRevolutions = 0;       // 总圈数(整数)
int lastTriggered = 0;           // 上次触发的传感器(0: 无,1: A,2: B)

void setup() {
  pinMode(hallA, INPUT);
  pinMode(hallB, INPUT);

  u8g2.setContrast(250);         // 设置对比度
  u8g2.begin();
  u8g2.setFont(u8g2_font_ncenB18_tr); // 更适合小屏的字体
}

void loop() {
  static long lastRev = -1;

  if (totalRevolutions != lastRev) {
    char buffer[16];
    sprintf(buffer, "%ld", totalRevolutions);

    u8g2.clearBuffer();
    u8g2.firstPage();
    do {
      u8g2.drawStr(2,30,buffer);
    } while ( u8g2.nextPage() );     
    u8g2.sendBuffer();
    lastRev = totalRevolutions;
  }

  checkHall();  // 检测并更新状态
  delay(5);     // 控制刷新频率
}

// 获取当前状态(转换为高低电平)
int getState(int pin) {
  int val = readMedian(pin);
  return (val < threshold) ? LOW : HIGH;
}

// 防抖读取数据
int readMedian(int pin) {
  int values[5];
  for (int i = 0; i < 5; i++) {
    values[i] = analogRead(pin);
    delay(2);
  }

  // 排序
  for (int i = 0; i < 4; i++) {
    for (int j = i + 1; j < 5; j++) {
      if (values[i] > values[j]) {
        int temp = values[i];
        values[i] = values[j];
        values[j] = temp;
      }
    }
  }
  return values[2]; // 返回中位数
}

// 检测并处理触发事件
void checkHall() {
  static unsigned long lastTime = 0;
  unsigned long now = millis();

  if (now - lastTime < debounceDelay) return;
  lastTime = now;

  int stateA = getState(hallA);
  int stateB = getState(hallB);

  // 判断是哪一个传感器被触发
  if (stateA == LOW && stateB == HIGH) {
    // A 被触发
    if (lastTriggered == 2) {
      // B → A = 完成一圈
      totalRevolutions++;
    }
    lastTriggered = 1;
  } else if (stateA == HIGH && stateB == LOW) {
    // B 被触发
    if (lastTriggered == 1) {
      // A → B = 半圈(暂不计数)
    }
    lastTriggered = 2;
  } else if (stateA == LOW && stateB == LOW) {
    // A 和 B 同时触发 -> 中间位置,忽略
    lastTriggered = 0;
  }
}

再来一张原型图

感受

1、freecad继续学习,尤其是在删改约束时,找起来有些不方便

2、esp32c3 super mini版已经成功迈入了使用的大门

     上传程序时:需要  按Boot ->按 Reset  ->松 Reset-> 松 boot的方式才能编译上传

     esp32C3 super mini 的模拟读入的最大电压一定控制再3.3V以内,要不度数会出现飘的。

3、焊接技术还得在练习。焊点多了密了,对于700度眼镜的我有些费力。看看有什么简易设备能让它变的容易些。

下次版本里,加入锂电充电模块,这个之前已经有经验了,估计没有难度。对了也得开始学习PCB设计的书,再下一个要攻克的山头就是它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值