数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 7490|回复: 54

[播放] 拆颗脑袋研究研究:打令小宝机器人

[复制链接]
发表于 2023-6-16 11:58:58 | 显示全部楼层 |阅读模式
正主:打令小宝机器人,之前看论坛有人玩激光投影,说是打令小宝上的激光模块,就某鱼上搜了下,模块价格基本上就是150左右,然后看到一个卖脑袋的,记得原价199,过了两天又刷到了,降到160,讲价150搞定,其实也单卖模块120,担心研究资料麻烦,再点不亮,索性直接搞一套,点不亮上逻辑分析仪抓个包就是了。
sony激光投影模组改装成品投影仪 - 创意DIY 数码之家 (mydigit.cn)



正题:上电

开颅,之前就被拆过,噶了些东西,左右耳是俩喇叭,深圳良音的,4Ω5w,带灯效。图片上下反了,底部是头顶,四个咪头,中间是触摸,正中间的板子实际上是个下位机,和上位机usb通信,一开始没细看,还以为这个是上位机,还纳闷咋接hub输出了

USB线下边的黑色排线就是接投影模块的,12V、GND、IR、SDA、SCL,有时间逻辑分析仪抓下数据备份

左下角耳机插口是上位机到下位机的音频线,还过了音频变压器

清理下排线,总貌图

STM32F103ZCT6,这要是按照前段时间的价格,这一片直接回本了吧

这个是做语音识别的吧,没查到资料,音频输入经过ADC后进了这里

4片LC549C,8位ADC,mic经过LM386放大进入ADC,用来采集音频输入的;右边是Zigbee物联网模块

XFM10211,搜了下是科大讯飞的麦克风阵列模块,这里的硬件被上家噶了,没看到,不知道跟上边的Voice功能上有啥区分

LJ245A电机驱动,不知道是不是驱动脖子的

然后就是脸了,上位机,安卓4.0,8核1.2G+2G+16G,具体型号散热盖住了,打胶了,就不看了
USB输出接下位机,Micro外接,miniHDMI输出接投影模块,四个角是四个触摸

屏幕,分辨率还行,应该是1920*1080的吧



GSL3680电容屏触摸驱动

SSD2828QN4 RGB转MIPI,这么看的话是不是这个屏还有希望玩起来

ap6330 双频WIFI+蓝牙模块


最后是正菜,索尼的CXN0102激光投影模块+龙讯的lt8619b驱动板





投影效果,


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 7家元 +252 收起 理由
menwawork + 30 優秀文章
家睦 + 90
miqi328 + 30 謝謝分享
海上生明月丶 + 30
qrut + 30 優秀文章
亚历山大 + 12
hideaway + 30

查看全部打赏

 楼主| 发表于 2023-6-16 12:30:19 | 显示全部楼层

投影效果看顶部超链接吧,坛友已经搞成很漂亮的成品了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-16 12:33:25 | 显示全部楼层
aacyxjz 发表于 2023-6-16 12:10
挺厉害的,白给我都玩不转

能不能玩得转,得看运气说了算
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-17 10:30:20 来自手机浏览器 | 显示全部楼层
zhaoge001 发表于 2023-6-16 16:25
这么复杂,白给我也折腾不好啊,流下了没技术的泪水

实际上结构也简单,一个安卓系统充当大脑,usb连接stm32控制其他外设
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-17 10:31:33 来自手机浏览器 | 显示全部楼层
雨点5123 发表于 2023-6-16 18:56
这么复杂,看来楼主的技术不凡啊。

要是我设计出来的那你这话会说的我很骄傲,可惜不是
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-17 10:33:58 来自手机浏览器 | 显示全部楼层
qrut 发表于 2023-6-16 19:12
这是开颅了亮度还是差点儿~

亮度确实差点意思,
拉窗帘遮光凑合能用,大白天是没戏
刚到手rgb有点错位,研究了下可以微调,调整后色彩效果还算可以
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-22 15:53:35 | 显示全部楼层
menwawork 发表于 2023-9-22 15:42
楼主能传授一下经验吗?我也买了一个模组和控制板,RGB也是错位。但是控制板菜单光标走到“光轴校正”上 ...

按不下去是什么意思,错位调整是分布进行的,可以看下这个文件,这是I2C控制调整的,页面调整步骤也一样,需要的话可以发你一份程序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-22 17:17:01 | 显示全部楼层
menwawork 发表于 2023-9-22 16:07
就是按菜单往下走,走到梯形校正那里就走不下去光轴校正那里了。如果可以,麻烦发我邮箱,我试试,非常感 ...

你是买的这个啊,我记得这个是开源的,你直接找卖家要源码就行,我手里的代码是8266的,不适合这个
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-25 08:36:19 | 显示全部楼层
menwawork 发表于 2023-9-22 17:31
这个店家太忙了,问三句隔一天才有空答一句。

程序发你参考下,8266或者esp32

  1. // QQ2220807252,欢迎交流改进
  2. // 小白一个,写的时候各种崩溃,但是软件用起来还没啥毛病。如果各位用的开心还请多多赞助,谢谢!!
  3. #include "Arduino.h"
  4. #include <WiFi.h>
  5. #include <WebServer.h>
  6. #include <Wire.h>

  7. #define cxn010x (0x77)
  8. WebServer server(80);

  9. const char *ssid = "***********"; // 这边要修改!!!!!!!!!!!!!!!!!!!!!!!
  10. const char *password = "**********";

  11. String htmlPage;

  12. void buildHtmlPage();
  13. void buildHtmlPage2();
  14. void buildHtmlPage3();
  15. void buildHtmlPage4();
  16. void OptiAdjust();
  17. void OptiPlus();
  18. void OptiMinus();
  19. void OptiNoSave();
  20. void OptiSave();
  21. void BipiAdjust();
  22. void BipiPlus();
  23. void BipiMinus();
  24. void BipiNoSave();
  25. void BipiSave();
  26. void On();
  27. void Off();
  28. void Shutdown();
  29. void Reboot();
  30. void handleNotFound();
  31. void handleRoot();
  32. void Return();
  33. void Power();
  34. void Adjust();
  35. void Control();
  36. void handlePostForm();

  37. void setup()
  38. {
  39.     Serial.begin(9600);
  40.     Wire.begin();

  41.     Serial.println();
  42.     Serial.println();
  43.     Serial.print("Connecting to WiFi...");
  44.     WiFi.mode(WIFI_STA);
  45.     WiFi.disconnect();
  46.     delay(100);
  47.     WiFi.begin(ssid, password);
  48.     while (WiFi.status() != WL_CONNECTED)
  49.     {
  50.         delay(500);
  51.         Serial.print(".");
  52.     }
  53.     Serial.println();
  54.     Serial.println("WiFi connected.");
  55.     Serial.print("IP: ");
  56.     Serial.println(WiFi.localIP());

  57.     server.on("/", handleRoot);
  58.     server.onNotFound(handleNotFound);
  59.     server.on("/postForm", handlePostForm);
  60.     server.on("/Power", Power);
  61.     server.on("/OptiAdjust", OptiAdjust);
  62.     server.on("/OptiPlus", OptiPlus);
  63.     server.on("/OptiMinus", OptiMinus);
  64.     server.on("/OptiNoSave", OptiNoSave);
  65.     server.on("/OptiSave", OptiSave);
  66.     server.on("/BipiAdjust", BipiAdjust);
  67.     server.on("/BipiPlus", BipiPlus);
  68.     server.on("/BipiMinus", BipiMinus);
  69.     server.on("/BipiNoSave", BipiNoSave);
  70.     server.on("/BipiSave", BipiSave);
  71.     server.on("/On", On);
  72.     server.on("/Off", Off);
  73.     server.on("/Shutdown", Shutdown);
  74.     server.on("/Reboot", Reboot);
  75.     server.on("/Adjust", Adjust);
  76.     server.on("/Return", Return);
  77.     server.on("/Control", Control);

  78.     server.begin();
  79.     Serial.println("HTTP server started");

  80.     On();
  81. }

  82. void loop(void)
  83. {
  84.     server.handleClient();
  85. }

  86. void buildHtmlPage()
  87. {
  88.     htmlPage = "<!DOCTYPE html>";
  89.     htmlPage += "<html>";
  90.     htmlPage += "<head>";
  91.     htmlPage += "<title>CXN010X ADJUSTMENTS</title>";
  92.     htmlPage += "</head>";

  93.     htmlPage += "<BODY bgcolor='#FFFFFF'>";
  94.     htmlPage += "<style>html { font-family: Helvetica; font-size: 28px; display: inline-block; margin: 0px auto; text-align: center} button { font-family: Helvetica; font-size: 30px; background-color: #195B6A; border: none; color: white; padding: 45px 90px}</style>";

  95.     htmlPage += "<p>CXN010X Optical and Bi-phase Adjustment Tool<br/>QQ2220807252<br/></p>";
  96.     htmlPage += "<p>Optical Aligment Options</p>";
  97.     htmlPage += "<a href="/Power"><button>Projector Power Controls</button></a>";
  98.     htmlPage += "<p> </p>";
  99.     htmlPage += "<a href="/Control"><button>Projector Basic Controls</button></a>";
  100.     htmlPage += "<p> </p>";
  101.     htmlPage += "<a href="/Adjust"><button>Optical and Bi-phase Alignments</button></a>";

  102.     htmlPage += "</body>";
  103.     htmlPage += "</html>";
  104. }

  105. void buildHtmlPage2()
  106. {
  107.     htmlPage = "<!DOCTYPE html>";
  108.     htmlPage += "<html>";
  109.     htmlPage += "<head>";
  110.     htmlPage += "<title>Basic Controls</title>";
  111.     htmlPage += "</head>";

  112.     htmlPage += "<BODY bgcolor='#FFFFFF'>";
  113.     htmlPage += "<style>html { font-family: Helvetica; font-size: 28px; display: inline-block; margin: 0px auto; text-align: center} button { font-family: Helvetica; font-size: 30px; background-color: #195B6A; border: none; color: white; padding: 45px 90px}</style>";

  114.     htmlPage += "<p>CXN010X Basic Controls<br/>QQ2220807252<br/></p>";
  115.     htmlPage += "<a href="/On"><button>启动视频输入</button></a>";
  116.     htmlPage += "<p> </p>";
  117.     htmlPage += "<a href="/Off"><button>关闭视频输入</button></a>";
  118.     htmlPage += "<p> </p>";
  119.     htmlPage += "<a href="/Reboot"><button>重启投影机</button></a>";
  120.     htmlPage += "<p> </p>";
  121.     htmlPage += "<a href="/Shutdown"><button>关闭投影机</button></a>";
  122.     htmlPage += "<p> </p>";
  123.     htmlPage += "<p> </p>";
  124.     htmlPage += "<a href="/Return"><button>返回主页</button></a>";

  125.     htmlPage += "</body>";
  126.     htmlPage += "</html>";
  127. }

  128. void buildHtmlPage3()
  129. {
  130.     htmlPage = "<!DOCTYPE html>";
  131.     htmlPage += "<html>";
  132.     htmlPage += "<head>";
  133.     htmlPage += "<title>CXN010X ADJUSTMENTS</title>";
  134.     htmlPage += "</head>";

  135.     htmlPage += "<BODY bgcolor='#FFFFFF'>";
  136.     htmlPage += "<style>html { font-family: Helvetica; font-size: 28px; display: inline-block; margin: 0px auto; text-align: center} button { font-family: Helvetica; font-size: 30px; background-color: #195B6A; border: none; color: white; padding: 45px 90px}</style>";

  137.     htmlPage += "<p>CXN010X Optical and Bi-phase Adjustment Tool<br/>QQ2220807252<br/></p>";
  138.     htmlPage += "<p>Optical Aligment Options</p>";
  139.     htmlPage += "<a href="/OptiAdjust"><button>Optical Adjustment Menu</button></a>";
  140.     htmlPage += "<p> </p>";
  141.     htmlPage += "<a href="/OptiPlus"><button>++Plus Direction++</button></a>";
  142.     htmlPage += "<p> </p>";
  143.     htmlPage += "<a href="/OptiMinus"><button>--Minus Direction--</button></a>";
  144.     htmlPage += "<p> </p>";
  145.     htmlPage += "<a href="/OptiNoSave"><button>Quit Without Saving</button></a>";
  146.     htmlPage += "<p> </p>";
  147.     htmlPage += "<a href="/OptiSave"><button>Quit And Save</button></a>";
  148.     htmlPage += "<p>Bi-phase Aligment Options</p>";
  149.     htmlPage += "<a href="/BipiAdjust"><button>Biphase Adjustment Menu</button></a>";
  150.     htmlPage += "<p> </p>";
  151.     htmlPage += "<a href="/BipiPlus"><button>++Plus Direction++</button></a>";
  152.     htmlPage += "<p> </p>";
  153.     htmlPage += "<a href="/BipiMinus"><button>--Minus Direction--</button></a>";
  154.     htmlPage += "<p> </p>";
  155.     htmlPage += "<a href="/BipiNoSave"><button>Quit Without Saving</button></a>";
  156.     htmlPage += "<p> </p>";
  157.     htmlPage += "<a href="/BipiSave"><button>Quit And Save Changes</button></a>";
  158.     htmlPage += "<p> </p>";
  159.     htmlPage += "<p> </p>";
  160.     htmlPage += "<a href="/Return"><button>Return to Mainpage</button></a>";

  161.     htmlPage += "</body>";
  162.     htmlPage += "</html>";
  163. }

  164. void buildHtmlPage4()
  165. {
  166.     htmlPage = "<!DOCTYPE html>";
  167.     htmlPage += "<html>";
  168.     htmlPage += "<head>";
  169.     htmlPage += "<title>CXN010X ADJUSTMENTS</title>";
  170.     htmlPage += "</head>";

  171.     htmlPage += "<BODY bgcolor='#FFFFFF'>";
  172.     htmlPage += "<style>html { font-family: Helvetica; font-size: 28px; display: inline-block; margin: 0px auto; text-align: center} button { font-family: Helvetica; font-size: 30px; background-color: #195B6A; border: none; color: white; padding: 45px 90px}</style>";

  173.     htmlPage += "<p>CXN010X Optical and Bi-phase Adjustment Tool<br/>QQ2220807252<br/></p>";
  174.     htmlPage += "<form method="post" action="/postForm"><input type="value" name="Text1" value=""><input type="value" name="Text2" value=""><input type="submit" value="Submit Changes"></form>";
  175.     htmlPage += "<p> </p>";
  176.     htmlPage += "<p> </p>";
  177.     htmlPage += "<a href="/Return"><button>Return to Mainpage</button></a>";

  178.     htmlPage += "</body>";
  179.     htmlPage += "</html>";
  180. }

  181. void OptiAdjust()
  182. {
  183.     Serial.println("OptiAdjust");
  184.     Wire.beginTransmission(cxn010x);
  185.     uint8_t cmd[] = {0x32, 0x00};
  186.     Wire.write(cmd, sizeof(cmd));
  187.     Wire.endTransmission();
  188.     server.sendHeader("Location", "Adjust");
  189.     server.send(303);
  190. }

  191. void OptiPlus()
  192. {
  193.     Serial.println("OptiPlus");
  194.     Wire.beginTransmission(cxn010x);
  195.     uint8_t cmd[] = {0x33, 0x00};
  196.     Wire.write(cmd, sizeof(cmd));
  197.     Wire.endTransmission();
  198.     server.sendHeader("Location", "Adjust");
  199.     server.send(303);
  200. }

  201. void OptiMinus()
  202. {
  203.     Serial.println("OptiMinus");
  204.     Wire.beginTransmission(cxn010x);
  205.     uint8_t cmd[] = {0x34, 0x00};
  206.     Wire.write(cmd, sizeof(cmd));
  207.     Wire.endTransmission();
  208.     server.sendHeader("Location", "Adjust");
  209.     server.send(303);
  210. }

  211. void OptiNoSave()
  212. {
  213.     Serial.println("OptiNoSave");
  214.     Wire.beginTransmission(cxn010x);
  215.     uint8_t cmd[] = {0x35, 0x01, 0x00};
  216.     Wire.write(cmd, sizeof(cmd));
  217.     Wire.endTransmission();
  218.     server.sendHeader("Location", "Adjust");
  219.     server.send(303);
  220. }

  221. void OptiSave()
  222. {
  223.     Serial.println("OptiSave");
  224.     Wire.beginTransmission(cxn010x);
  225.     uint8_t cmd[] = {0x35, 0x01, 0x01};
  226.     Wire.write(cmd, sizeof(cmd));
  227.     Wire.endTransmission();
  228.     server.sendHeader("Location", "Adjust");
  229.     server.send(303);
  230. }

  231. void BipiAdjust()
  232. {
  233.     Serial.println("BipiAdjust");
  234.     Wire.beginTransmission(cxn010x);
  235.     uint8_t cmd[] = {0x36, 0x00};
  236.     Wire.write(cmd, sizeof(cmd));
  237.     Wire.endTransmission();
  238.     server.sendHeader("Location", "Adjust");
  239.     server.send(303);
  240. }

  241. void BipiPlus()
  242. {
  243.     Serial.println("BipiPlus");
  244.     Wire.beginTransmission(cxn010x);
  245.     uint8_t cmd[] = {0x37, 0x00};
  246.     Wire.write(cmd, sizeof(cmd));
  247.     Wire.endTransmission();
  248.     server.sendHeader("Location", "Adjust");
  249.     server.send(303);
  250. }

  251. void BipiMinus()
  252. {
  253.     Serial.println("BipiMinus");
  254.     Wire.beginTransmission(cxn010x);
  255.     uint8_t cmd[] = {0x38, 0x00};
  256.     Wire.write(cmd, sizeof(cmd));
  257.     Wire.endTransmission();
  258.     server.sendHeader("Location", "Adjust");
  259.     server.send(303);
  260. }

  261. void BipiNoSave()
  262. {
  263.     Serial.println("BipiNoSave");
  264.     Wire.beginTransmission(cxn010x);
  265.     uint8_t cmd[] = {0x39, 0x01, 0x00};
  266.     Wire.write(cmd, sizeof(cmd));
  267.     Wire.endTransmission();
  268.     server.sendHeader("Location", "Adjust");
  269.     server.send(303);
  270. }

  271. void BipiSave()
  272. {
  273.     Serial.println("BipiSave");
  274.     Wire.beginTransmission(cxn010x);
  275.     uint8_t cmd[] = {0x39, 0x01, 0x01};
  276.     Wire.write(cmd, sizeof(cmd));
  277.     Wire.endTransmission();
  278.     server.sendHeader("Location", "Adjust");
  279.     server.send(303);
  280. }

  281. void On()
  282. {
  283.     Wire.beginTransmission(cxn010x);
  284.     uint8_t cmd[] = {0x01, 0x00};
  285.     Wire.write(cmd, sizeof(cmd));
  286.     Wire.endTransmission();
  287.     server.sendHeader("Location", "Power");
  288.     server.send(303);
  289. }

  290. void Off()
  291. {
  292.     Wire.beginTransmission(cxn010x);
  293.     uint8_t cmd[] = {0x02, 0x00};
  294.     Wire.write(cmd, sizeof(cmd));
  295.     Wire.endTransmission();
  296.     server.sendHeader("Location", "Power");
  297.     server.send(303);
  298. }

  299. void Shutdown()
  300. {
  301.     Wire.beginTransmission(cxn010x);
  302.     uint8_t cmd[] = {0x0B, 0x01, 0x00};
  303.     Wire.write(cmd, sizeof(cmd));
  304.     Wire.endTransmission();
  305.     server.sendHeader("Location", "Power");
  306.     server.send(303);
  307. }

  308. void Reboot()
  309. {
  310.     Wire.beginTransmission(cxn010x);
  311.     uint8_t cmd[] = {0x0B, 0x01, 0x01};
  312.     Wire.write(cmd, sizeof(cmd));
  313.     Wire.endTransmission();
  314.     server.sendHeader("Location", "Power");
  315.     server.send(303);
  316. }

  317. void handleNotFound()
  318. {
  319.     server.send(404, "text/plain", "404: Not found");
  320. }

  321. void handleRoot()
  322. {
  323.     buildHtmlPage();
  324.     server.send(200, "text/html", htmlPage);
  325. }

  326. void Return()
  327. {
  328.     Serial.println("Return");
  329.     buildHtmlPage();
  330.     server.send(200, "text/html", htmlPage);
  331. }

  332. void Power()
  333. {
  334.     buildHtmlPage2();
  335.     server.send(200, "text/html", htmlPage);
  336. }

  337. void Adjust()
  338. {
  339.     buildHtmlPage3();
  340.     server.send(200, "text/html", htmlPage);
  341. }

  342. void Control()
  343. {
  344.     buildHtmlPage4();
  345.     server.send(200, "text/html", htmlPage);
  346. }

  347. void handlePostForm()
  348. {
  349. #define val1 server.arg("Text1")
  350. #define val2 server.arg("Text2")
  351. #define st1 val1.toInt()
  352. #define st2 val2.toInt()

  353.     Wire.beginTransmission(cxn010x);
  354.     uint8_t cmd[] = {0x26, 0x09, st1, st2, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00};
  355.     Wire.write(cmd, sizeof(cmd));
  356.     Wire.endTransmission();
  357.     Serial.println(st1);
  358.     Serial.println(st2);
  359.     server.sendHeader("Location", "Control");
  360.     server.send(303);
  361. }
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-2 15:23 , Processed in 0.421200 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表