创客项目秀|基于XIAO SAMD21的多功能笔筒

news2024/11/15 17:25:26

作者:Arnov Sharma

来自:MIT

发表日期: 2024年6月17日

这个多功能笔筒项目是使用3D打印零件进行搭建的,在笔筒的前端添加了XIAO扩展板,给这个笔筒添加一个显示器,可以在显示器上显示许多内容,例如两个眼睛,文本等等,这些使得这个笔筒更加有趣。

在这里,我们使用XIAO SAMD21微控制器来驱动扩展板显示。同时,我们使用1200mAh的3.7V锂电池为整个装置供电。

所需材料:

  • XIAO扩展板
  • XIAO SAMD21 M0 微控制器版
  • 3D打印零件
  • 3.7V,1200mAh锂电池
  • 控制开关
  • M2螺丝

项目核心:

本项目的核心是使用Seeed Studio制造的XIAO扩展板并搭配XIAO SAMD21 M0开发板。它拥有丰富的外围设备,包括OLED显示器、RTC实时时钟、SD卡插槽、被动蜂鸣器、复位/用户按钮、5V伺服连接器以及Grove连接器,可以将多个Grove设备与XIAO配对使用。我们将使用Li-ion 18650电池为整个设备供电。

扩展板上集成了OLED显示器,可以用来显示眼睛以及一些文字,给笔筒带来更丰富的功能。

外观设计:

这个项目的模型一共由四个部分组成:前置支架部分,设计用于容纳小物品如USB驱动器、硬币等。上盖部分覆盖锂电池并将摇杆开关固定在其位置。最后,一个带有作者特色的标有项目标题“OverEngineered”的名牌位于支架的左侧。

使用三个M2螺丝将上盖安装在支架部分中的螺柱上。使用位于支架部分正面的四个螺柱对XIAO扩展板进行安装。这些螺柱允许XIAO扩展板略微突出于前面板之外,保持前面板和板的底部之间的小间隙。

在Fusion 360中创建模型后,我们导出网格文件,以便进行3D打印。

我们使用了透明PLA打印支架部分,橙色PLA打印上盖部分,而PLA则用于打印前置支架部分。为了在名牌上打印字母,我们先打印出白色PLA基板,然后在打印中间切换至橙色PLA。

笔筒主体安装:

扩展板1

接线11

接线22

接线33

接线44

现在我们将扩展板与笔筒3D打印件进行配对。

  • 首先,我们将扩展板的电池端口连接到锂离子电池。
  • 我们用电烙铁将锂离子电池的正极和负极连接到扩展板的电池端口上。
  • 将XIAO扩展板固定在机箱正面,用4颗M2螺钉将电路版与支架固定在一起。
  • 最后,我们用4颗M2螺钉将铭牌固定在合适的位置。

组装完成!

眨眼程序:

眼睛显示1

眼睛显示2

在首次测试设置,我们添加了一个基于简单动画的程序,这个程序是通过向CHAT GPT输入以下内容生成的:“编写一个程序,瞳孔会扩大,两只眼睛变得可见。在此草图中,使用Adafruit的SSD1306库来控制SSD1306显示屏。“

Chatgpt生成的代码效果十分出色,具体代码内容如下:

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128  // OLED display width, in pixels
#define SCREEN_HEIGHT 64  // OLED display height, in pixels

// Declaration for SSD1306 display connected using I2C
#define OLED_RESET    -1  // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// Define eye parameters
const int eyeCenterX1 = 40; // X position for left eye
const int eyeCenterX2 = 88; // X position for right eye
const int eyeCenterY = 32;  // Y position for both eyes
const int eyeRadius = 20;   // Radius of the eye
const int minPupilRadius = 5;   // Minimum radius of the pupil
const int maxPupilRadius = 10;  // Maximum radius of the pupil
const int animationSpeed = 10;  // Speed of the animation

void setup() {
  // Initialize the display
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  display.display();
  delay(2000); // Pause for 2 seconds

  // Clear the buffer
  display.clearDisplay();
}

void loop() {
  for (int i = minPupilRadius; i <= maxPupilRadius; i++) {
    drawCatEyes(i);
    delay(animationSpeed);
  }
  for (int i = maxPupilRadius; i >= minPupilRadius; i--) {
    drawCatEyes(i);
    delay(animationSpeed);
  }
}

// Function to draw the cat eyes with dilating pupils
void drawCatEyes(int pupilRadius) {
  display.clearDisplay();

  // Draw left eye
  display.drawCircle(eyeCenterX1, eyeCenterY, eyeRadius, SSD1306_WHITE);  // Eye outline
  display.fillCircle(eyeCenterX1, eyeCenterY, pupilRadius, SSD1306_WHITE); // Pupil

  // Draw right eye
  display.drawCircle(eyeCenterX2, eyeCenterY, eyeRadius, SSD1306_WHITE);  // Eye outline
  display.fillCircle(eyeCenterX2, eyeCenterY, pupilRadius, SSD1306_WHITE); // Pupil

  display.display();
}

这段代码将在OLED显示屏上模拟瞳孔扩大的效果,使猫眼动画变得更加逼真。如果需要,可以调整眼睛中心坐标(eyeCenterX1、eyeCenterX2和eyeCenterY)以及半径(radius)参数,以使其适合显示屏。

文本显示程序:

句子显示

在最后面,我们测试了”文本显示“的程序。

我们首先从ChatGPT生成了一堆巧妙的“带屏幕的电子笔筒”的文本。

然后,我们选择了其中的几个,例如“I hold pens and your secrets.””We are going digital, so hold onto your pencils!”、“Shhh!”等等。对于SSD1306显示屏,我们创建了一个基本的文本显示程序,并将所有引语输入其中,使每个文本间隔两秒出现。

具体代码如下:

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>

#define OLED_WIDTH 128
#define OLED_HEIGHT 64

#define OLED_ADDR   0x3C

Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);

void setup() {
  display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
  display.clearDisplay();
}

void loop() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("I hold pens and your secrets. Shhh!");   //QUOTE01
  display.display();
  delay(2000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("Hold onto your pens, we are going digital!");  //QUOTE02
  display.display();
  delay(2000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("Penning down ideas, one byte at a time!"); //QUOTE03
  display.display();
  delay(2000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 20);
  display.println("Who needs a diary when you have a pen holder with a screen?!"); //QUOTE04
  display.display();
  delay(2000);


}

结论:

最终结果是一个可编程显示屏的笔筒,对于管理笔和其他物品非常有帮助。

由于有显示屏,这里可以尝试无数不同的概念。为了显示时间,我们可以在XIAO上添加一个Internet Watch Sketch。或者,我们可以添加一个使用SD卡、显示屏和蜂鸣器的旋律播放器Sketch。最后,我们可以在XIAO上添加类似Flappy Bird的游戏,可以使用内置按钮进行游戏。

电路图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Devops】CertD 完全免费、自动申请、自动部署SSL证书一站式管理工具 | 自动化HTTPS | 3个月SSL自动轮换

CertD CertD 是一个免费全自动申请和自动部署更新SSL证书的工具。 后缀D取自linux守护进程的命名风格&#xff0c;意为证书守护进程。 关键字&#xff1a;证书自动申请、证书自动更新、证书自动续期、证书自动续签 一、特性 本项目不仅支持证书申请过程自动化&#xff0c;还…

P2048 [NOI2010] 超级钢琴(纪念紫题)

原题 题面 具体实现讲解 首先想到用 s u m sum sum记录 a a a数组的前缀和&#xff0c;把每种和弦都试一遍&#xff0c;很明显会超时。 定义 c a l ( s , l , r ) cal(s,l,r) cal(s,l,r)代表以 s s s为左端点&#xff0c;右端点在 l l l到 r r r的范围内&#xff0c;能得到的…

css:grid的使用(部分)

一&#xff1a;grid的使用&#xff08; 平分宽度 &#xff09; <template><view class""><view class"main"><view class"main-item">1</view><view class"main-item">2</view><view cl…

Can ‘t connect to local MySQL server through socket ‘/tmp/mysql.sock ‘(2) “;

Can t connect to local MySQL server through socket /tmp/mysql.sock (2) "; 目录 Can t connect to local MySQL server through socket /tmp/mysql.sock (2) "; 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到…

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#xff08;含分析过程&#xff09; 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#x…

118页|2023大模型落地应用案例集

大语言模型开放平台旨在为大语言模型技术的研究和应用提供一个开放、可扩展、可协作的环境。该平台不仅为开发者提供大型语言模型、大规模数据集、模型微调工具以及大型语言模型应用开发工具等资源&#xff0c;还加速了大型语言模型的训练过程&#xff0c;促进了大型语言模型在…

论文复现丨带时间窗和服务顺序的多车辆路径问题:联合优化遗传算法

路径优化系列文章&#xff1a; 1、路径优化历史文章2、路径优化丨带时间窗和载重约束的CVRPTW问题-改进遗传算法&#xff1a;算例RC1083、路径优化丨带时间窗和载重约束的CVRPTW问题-改进和声搜索算法&#xff1a;算例RC1084、路径优化丨复现论文-网约拼车出行的乘客车辆匹配及…

Linux命令行 复制模式/扩展模式 调用系统功能切换

问题背景 公司软件需要从window 适配国产操作系统&#xff0c;目前使用wine方案。在我们软件有个切换屏幕模式的功能&#xff0c;需要支持用户在我们软件内&#xff0c;切换复制模式/扩展模式。 在linux 下 uos/deepin 等系统。如果要从复制模式设置为扩展模式使用命令行时&a…

零基础入门转录组数据分析——机器学习算法之SVM-RFE(筛选特征基因)

零基础入门转录组数据分析——机器学习算法之SVM-RFE&#xff08;筛选特征基因&#xff09; 目录 零基础入门转录组数据分析——机器学习算法之SVM-RFE&#xff08;筛选特征基因&#xff09;1. SVM-RFE基础知识2. SVM-RFE&#xff08;Rstudio&#xff09;——代码实操2. 1 数据…

从零到一:用Go语言构建你的第一个Web服务

使用Go语言从零开始搭建一个Web服务&#xff0c;包括环境搭建、路由处理、中间件使用、JSON和表单数据处理等关键步骤&#xff0c;提供丰富的代码示例。 关注TechLead&#xff0c;复旦博士&#xff0c;分享云服务领域全维度开发技术。拥有10年互联网服务架构、AI产品研发经验、…

【Git-驯化】一文搞懂git中rm命令的使用技巧

【Git-驯化】一文搞懂git中rm命令的使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xff1a;微信公…

Day12--Servlet实现前后端交互(案例:学生信息管理系统登录页面)

&#xff08;在一个完整的项目架构中&#xff0c;servlet的角色和位置&#xff09; Servlet、GenericServlet和HttpServlet三者之间的关系是Java Web开发中的一个重要概念&#xff0c;它们共同构成了基于Java的服务器端程序的基础。以下是具体分析&#xff1a; 1. Servlet接口…

Windows下nmap命令及Zenmap工具的使用方法

一、Nmap简介 nmap是一个网络连接端扫描软件&#xff0c;用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端&#xff0c;并且推断计算机运行哪个操作系统&#xff08;这是亦称 fingerprinting&#xff09;。它是网络管理员必用的软件之一&#xff0c;以及用以评…

算法-DFS-树形DP

题目一 解题思路 比较标准的深搜&#xff0c;难点主要在题目的理解&#xff0c;通俗的说就是要找到一个树结构中的点&#xff0c;使之在去掉该点后剩余数的结构最均等&#xff08;剩余连接节点的最大值最小&#xff09;。 无向图邻接表 使用代码实现需要一个数组存储数值、一…

速看!2024年5月软考通过率解析

根据湖南省工业和信息化厅最新发布的《2024年上半年软考湖南考区工作总结报告》及《考试安全顺利完成的通报》&#xff0c;我们了解到湖南地区在2024年上半年度的软件与信息技术专业人才考试&#xff08;简称“软考”&#xff09;中&#xff0c;报名人数达到了13,762人&#xf…

无人机1公里WiFi图传遥控模组,飞睿智能无延迟传输方案,高效稳定告别卡顿

在信息众多的时代&#xff0c;我们享受着科技带来的便利&#xff0c;同时也期待着更多前沿技术的出现。今天&#xff0c;就让我们一起走进一个充满神秘与可能性的领域——飞睿智能1公里WiFi图传遥控模组。这个看似简单的设备&#xff0c;却蕴含着巨大的能量&#xff0c;它正在悄…

深度学习-感知机

目录 感知机训练感知机感知机模型感知机学习算法 收敛定理XOR问题总结 多层感知机学习XOR隐藏层单隐藏层---单分类激活函数Sigmoid激活函数Tanh 激活函数ReLU 激活函数 多类分类---单隐藏层多类分类---多隐藏层总结 多层感知机从零开始多层感知机的简洁实现总结 感知机 给定输…

智慧通信|IEEE Trans. Commun. 论文解读:延迟敏感的能量收集无线传感器的最佳调度、结构特性和近似分析

原文信息 Sharma, Nikhilesh, Nicholas Mastronarde, and Jacob Chakareski. “Delay-sensitive energy-harvesting wireless sensors: Optimal scheduling, structural properties, and approximation analysis.” IEEE Transactions on Communications 68.4 (2019): 2509-25…

OZON如何查询销量,OZON查销量哪里可以看

在竞争激烈的电商市场中&#xff0c;了解商品销量是每位卖家优化销售策略、提升竞争力的关键。作为俄罗斯领先的跨境电商平台&#xff0c;Ozon为卖家提供了丰富的数据支持&#xff0c;帮助卖家更好地掌握市场动态。然而&#xff0c;对于新手卖家来说&#xff0c;如何在Ozon上查…

1、爬⾍概述

1. 什么是爬虫&#xff1f; 爬虫&#xff08;Web Crawler&#xff09;是一种通过编写程序自动访问并提取互联网上数据的技术。爬虫可以帮助我们在浏览网页时自动收集和保存一些有用的数据&#xff0c;例如图片、视频和文本信息。简单来说&#xff0c;爬虫就是自动化的浏览器。…