419浏览
查看: 419|回复: 0

[K10项目分享] 行空板K10驱动摄像头与板载传感器驱动舵机电机

[复制链接]
本帖最后由 meiyao 于 2025-2-15 11:06 编辑

行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,其驱动摄像头与板载传感器驱动舵机电机的相关信息如下:

一、行空板K10的硬件特性
核心处理器:采用ESP32-S3 N16R8处理器,Xtensa LX7双核32位,主频达到240MHz。
板载元件:集成2.8寸彩色LCD屏幕、WiFi蓝牙模块、200W像素摄像头、MEMS麦克风(x2)、扬声器、RGB指示灯、多种传感器(温湿度传感器AHT20、环境光传感器LTR303ALS、三轴加速度传感器SC7A20H)等。
扩展接口:提供Type-C供电&烧录接口、2Pin PH2.0电池供电接口、3Pin PH2.0全功能IO接口(x2)、4Pin PH2.0 I2C接口、自弹式TF卡槽、金手指扩展口等。

二、驱动摄像头
功能:行空板K10集成的摄像头支持200W像素,可进行离线图像检测。通过编程,用户可以轻松实现拍照、录像、图像识别等功能。
驱动方式:利用行空板K10的摄像头接口和相关的编程库,用户可以编写代码来驱动摄像头。使用积木,通过行空板K10的API接口来控制摄像头的拍摄、图像传输和处理等功能。

三、板载传感器驱动舵机电机
板载传感器:行空板K10配备了多种传感器,温湿度传感器、环境光传感器、三轴加速度传感器等。这些传感器可以实时监测环境参数,并将数据传输给行空板K10进行处理。
舵机电机驱动:行空板K10可以通过PWM(脉冲宽度调制)信号来驱动舵机电机。用户可以通过编程来设置PWM信号的频率和占空比,从而控制舵机的转动角度和速度。
实现方式:在编程时,用户可以利用行空板K10的GPIO(通用输入输出)引脚来输出PWM信号。通过调整PWM信号的参数,用户可以实现对舵机的精确控制。同时,行空板K10还支持通过I2C、SPI等接口连接更复杂的外部设备,进一步扩展其功能。

四、积木程序

屏显示程序:

行空板K10驱动摄像头与板载传感器驱动舵机电机图1

传感器采集程序:

行空板K10驱动摄像头与板载传感器驱动舵机电机图2

姿态传感器程序:
行空板K10驱动摄像头与板载传感器驱动舵机电机图3

串口发送RGB,点亮LED程序:
行空板K10驱动摄像头与板载传感器驱动舵机电机图4

按键程序:
行空板K10驱动摄像头与板载传感器驱动舵机电机图5

驱动电机与舵机程序:

行空板K10驱动摄像头与板载传感器驱动舵机电机图6

五,代码:
  1. /*!
  2. * MindPlus
  3. * esp32s3bit
  4. *
  5. */
  6. #include "unihiker_k10.h"
  7. #include "AIRecognition.h"
  8. // 动态变量
  9. volatile float mind_n_ChuanKouShuJu;
  10. // 函数声明
  11. void onButtonAPressed();
  12. void onButtonAUnPressed();
  13. void onButtonBUnPressed();
  14. void onButtonBPressed();
  15. void onButtonABPressed();
  16. void onButtonABUnPressed();
  17. // 创建对象
  18. UNIHIKER_K10  k10;
  19. uint8_t       screen_dir=2;
  20. AIRecognition ai;
  21. AHT20         aht20;
  22. // 主程序开始
  23. void setup() {
  24.         k10.begin();
  25.         k10.initScreen(screen_dir);
  26.         ai.initAi();
  27.         k10.initBgCamerImage();
  28.         k10.setBgCamerImage(false);
  29.         k10.creatCanvas();
  30.         ai.switchAiMode(ai.NoMode);
  31.         k10.buttonA->setPressedCallback(onButtonAPressed);
  32.         k10.buttonA->setUnPressedCallback(onButtonAUnPressed);
  33.         k10.buttonB->setUnPressedCallback(onButtonBUnPressed);
  34.         k10.buttonB->setPressedCallback(onButtonBPressed);
  35.         k10.buttonAB->setPressedCallback(onButtonABPressed);
  36.         k10.buttonAB->setUnPressedCallback(onButtonABUnPressed);
  37.         k10.setBgCamerImage(true);
  38.         ai.switchAiMode(ai.Face);
  39.         Serial.begin(9600);
  40.         pinMode(P0, OUTPUT);
  41.         pinMode(P1, OUTPUT);
  42. }
  43. void loop() {
  44.         delay(1000);
  45.         if (ai.isDetectContent(AIRecognition::Face)) {
  46.                 k10.canvas->canvasText((String("人脸长") + String(ai.getFaceData(AIRecognition::Length))), 120, 120, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
  47.                 k10.canvas->canvasText((String("人脸宽") + String(ai.getFaceData(AIRecognition::Width))), 120, 120, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
  48.                 k10.canvas->canvasText((String("人脸中心坐标x:") + String(ai.getFaceData(AIRecognition::CenterX))), 220, 120, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
  49.                 k10.canvas->canvasText((String("人脸中心坐标y:") + String(ai.getFaceData(AIRecognition::CenterY))), 200, 220, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
  50.                 k10.canvas->updateCanvas();
  51.         }
  52.         k10.setScreenBackground(0xFFFFFF);
  53.         k10.canvas->canvasText("行空板", 80, 5, 0xFF0000, k10.canvas->eCNAndENFont24, 3, true);
  54.         k10.canvas->canvasText((String("温度") + String(aht20.getData(AHT20::eAHT20TempC))), 2, 0x0000FF);
  55.         k10.canvas->canvasText((String("湿度") + String(aht20.getData(AHT20::eAHT20HumiRH))), 3, 0x0000FF);
  56.         k10.canvas->canvasText((String("光线") + String(k10.readALS())), 4, 0x0000FF);
  57.         k10.canvas->canvasText((String("加速度") + String((k10.getAccelerometerX()))), 5, 0x0000FF);
  58.         k10.canvas->updateCanvas();
  59.         delay(1000);
  60.         if ((k10.isGesture(TiltRight))) {
  61.                 k10.canvas->canvasText(" 右 ", 100, 130, 0x0000FF, k10.canvas->eCNAndENFont24, 2, true);
  62.                 k10.canvas->updateCanvas();
  63.         }
  64.         else {
  65.                 k10.canvas->canvasText("", 100, 130, 0x0000FF, k10.canvas->eCNAndENFont24, 2, true);
  66.                 k10.canvas->updateCanvas();
  67.         }
  68.         if ((k10.isGesture(TiltLeft))) {
  69.                 k10.canvas->canvasText("左", 10, 130, 0x0000FF, k10.canvas->eCNAndENFont24, 2, true);
  70.                 k10.canvas->updateCanvas();
  71.         }
  72.         else {
  73.                 k10.canvas->canvasText("", 10, 130, 0xFFFFFF, k10.canvas->eCNAndENFont24, 2, true);
  74.                 k10.canvas->updateCanvas();
  75.                 delay(1000);
  76.         }
  77.         if ((Serial.available())) {
  78.                 mind_n_ChuanKouShuJu = Serial.read();
  79.                 if ((Serial.available())) {
  80.                         Serial.println("");
  81.                         if ((mind_n_ChuanKouShuJu==(toascii('R')))) {
  82.                                 k10.rgb->write(-1, 0xFF0000);
  83.                         }
  84.                         if ((mind_n_ChuanKouShuJu==(toascii('G')))) {
  85.                                 k10.rgb->write(-1, 0x00FF00);
  86.                         }
  87.                         if ((mind_n_ChuanKouShuJu==(toascii('B')))) {
  88.                                 k10.rgb->write(-1, 0x0000FF);
  89.                         }
  90.                         if ((mind_n_ChuanKouShuJu==(toascii('0')))) {
  91.                                 k10.rgb->write(-1, 0x000000);
  92.                         }
  93.                 }
  94.                 k10.canvas->updateCanvas();
  95.         }
  96. }
  97. // 事件回调函数
  98. void onButtonAPressed() {
  99.         k10.rgb->write(0, 0x0000FF);
  100. }
  101. void onButtonAUnPressed() {
  102.         k10.rgb->write(0, 0x000000);
  103. }
  104. void onButtonBUnPressed() {
  105.         k10.rgb->write(1, 0x000000);
  106. }
  107. void onButtonBPressed() {
  108.         k10.rgb->write(1, 0xFF0000);
  109. }
  110. void onButtonABPressed() {
  111.         analogWrite(P0, map(512, 0, 1023, 0, 255));
  112.         digitalWrite(P1, HIGH);
  113.         k10.rgb->write(-1, 0x00FF00);
  114. }
  115. void onButtonABUnPressed() {
  116.         analogWrite(P0, map(0, 0, 1023, 0, 255));
  117.         digitalWrite(P1, LOW);
  118.         k10.rgb->write(-1, 0x000000);
  119. }
复制代码
六,模块图
MOS电机驱动板:

行空板K10驱动摄像头与板载传感器驱动舵机电机图7


2.0与2.54转接板:
行空板K10驱动摄像头与板载传感器驱动舵机电机图8



七,示意图
行空板K10驱动摄像头与板载传感器驱动舵机电机图9行空板K10驱动摄像头与板载传感器驱动舵机电机图10


八,视频

https://www.bilibili.com/video/BV1dqKTepEdy/

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail