本帖最后由 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等接口连接更复杂的外部设备,进一步扩展其功能。
四、积木程序
屏显示程序:

传感器采集程序:

姿态传感器程序: 
串口发送RGB,点亮LED程序: 
按键程序: 
驱动电机与舵机程序:

五,代码:
- /*!
- * MindPlus
- * esp32s3bit
- *
- */
- #include "unihiker_k10.h"
- #include "AIRecognition.h"
-
- // 动态变量
- volatile float mind_n_ChuanKouShuJu;
- // 函数声明
- void onButtonAPressed();
- void onButtonAUnPressed();
- void onButtonBUnPressed();
- void onButtonBPressed();
- void onButtonABPressed();
- void onButtonABUnPressed();
- // 创建对象
- UNIHIKER_K10 k10;
- uint8_t screen_dir=2;
- AIRecognition ai;
- AHT20 aht20;
-
-
- // 主程序开始
- void setup() {
- k10.begin();
- k10.initScreen(screen_dir);
- ai.initAi();
- k10.initBgCamerImage();
- k10.setBgCamerImage(false);
- k10.creatCanvas();
- ai.switchAiMode(ai.NoMode);
- k10.buttonA->setPressedCallback(onButtonAPressed);
- k10.buttonA->setUnPressedCallback(onButtonAUnPressed);
- k10.buttonB->setUnPressedCallback(onButtonBUnPressed);
- k10.buttonB->setPressedCallback(onButtonBPressed);
- k10.buttonAB->setPressedCallback(onButtonABPressed);
- k10.buttonAB->setUnPressedCallback(onButtonABUnPressed);
- k10.setBgCamerImage(true);
- ai.switchAiMode(ai.Face);
- Serial.begin(9600);
- pinMode(P0, OUTPUT);
- pinMode(P1, OUTPUT);
- }
- void loop() {
- delay(1000);
- if (ai.isDetectContent(AIRecognition::Face)) {
- k10.canvas->canvasText((String("人脸长") + String(ai.getFaceData(AIRecognition::Length))), 120, 120, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
- k10.canvas->canvasText((String("人脸宽") + String(ai.getFaceData(AIRecognition::Width))), 120, 120, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
- k10.canvas->canvasText((String("人脸中心坐标x:") + String(ai.getFaceData(AIRecognition::CenterX))), 220, 120, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
- k10.canvas->canvasText((String("人脸中心坐标y:") + String(ai.getFaceData(AIRecognition::CenterY))), 200, 220, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
- k10.canvas->updateCanvas();
- }
- k10.setScreenBackground(0xFFFFFF);
- k10.canvas->canvasText("行空板", 80, 5, 0xFF0000, k10.canvas->eCNAndENFont24, 3, true);
- k10.canvas->canvasText((String("温度") + String(aht20.getData(AHT20::eAHT20TempC))), 2, 0x0000FF);
- k10.canvas->canvasText((String("湿度") + String(aht20.getData(AHT20::eAHT20HumiRH))), 3, 0x0000FF);
- k10.canvas->canvasText((String("光线") + String(k10.readALS())), 4, 0x0000FF);
- k10.canvas->canvasText((String("加速度") + String((k10.getAccelerometerX()))), 5, 0x0000FF);
- k10.canvas->updateCanvas();
- delay(1000);
- if ((k10.isGesture(TiltRight))) {
- k10.canvas->canvasText(" 右 ", 100, 130, 0x0000FF, k10.canvas->eCNAndENFont24, 2, true);
- k10.canvas->updateCanvas();
- }
- else {
- k10.canvas->canvasText("", 100, 130, 0x0000FF, k10.canvas->eCNAndENFont24, 2, true);
- k10.canvas->updateCanvas();
- }
- if ((k10.isGesture(TiltLeft))) {
- k10.canvas->canvasText("左", 10, 130, 0x0000FF, k10.canvas->eCNAndENFont24, 2, true);
- k10.canvas->updateCanvas();
- }
- else {
- k10.canvas->canvasText("", 10, 130, 0xFFFFFF, k10.canvas->eCNAndENFont24, 2, true);
- k10.canvas->updateCanvas();
- delay(1000);
- }
- if ((Serial.available())) {
- mind_n_ChuanKouShuJu = Serial.read();
- if ((Serial.available())) {
- Serial.println("");
- if ((mind_n_ChuanKouShuJu==(toascii('R')))) {
- k10.rgb->write(-1, 0xFF0000);
- }
- if ((mind_n_ChuanKouShuJu==(toascii('G')))) {
- k10.rgb->write(-1, 0x00FF00);
- }
- if ((mind_n_ChuanKouShuJu==(toascii('B')))) {
- k10.rgb->write(-1, 0x0000FF);
- }
- if ((mind_n_ChuanKouShuJu==(toascii('0')))) {
- k10.rgb->write(-1, 0x000000);
- }
- }
- k10.canvas->updateCanvas();
- }
- }
-
-
- // 事件回调函数
- void onButtonAPressed() {
- k10.rgb->write(0, 0x0000FF);
- }
- void onButtonAUnPressed() {
- k10.rgb->write(0, 0x000000);
- }
- void onButtonBUnPressed() {
- k10.rgb->write(1, 0x000000);
- }
- void onButtonBPressed() {
- k10.rgb->write(1, 0xFF0000);
- }
- void onButtonABPressed() {
- analogWrite(P0, map(512, 0, 1023, 0, 255));
- digitalWrite(P1, HIGH);
- k10.rgb->write(-1, 0x00FF00);
- }
- void onButtonABUnPressed() {
- analogWrite(P0, map(0, 0, 1023, 0, 255));
- digitalWrite(P1, LOW);
- k10.rgb->write(-1, 0x000000);
- }
复制代码
六,模块图
MOS电机驱动板:

2.0与2.54转接板:

七,示意图
 
八,视频
https://www.bilibili.com/video/BV1dqKTepEdy/
|