硬核DIY|创客的硬通货,居然长这样
2020年初,新型冠状病毒肺炎疫情爆发,全国大部分民众过了一个史上最宅的春节。
从“劝爸妈戴口罩”引发的两代人之间的口罩之争,到全国大范围鼓励戴口罩,口罩脱销限购,口罩也成了这场全民战疫中,稀缺的硬通货。
今天,柴火菌将在全球创客社区中,为大家介绍1个硬核DIY面罩项目,希望大家在云上办公之余,感受创客们天马行空的脑洞,体验开源科技之光。
赛博朋克面罩Cyberpunk Mask by Linter
这个酷炫上天的赛博朋克面罩,极具未来感。它由一个3M防护面罩改造而成,运用Seeduino xiao主控,连接LED灯条、舵机、空气质量传感器、继电器、小风扇。
面罩上的空气质量传感器可实时检测所处环境空气质量。当空气质量适合呼吸的时候:呼吸通风口打开,这时状态灯显示绿色;当空气质量轻微污染时,仍然适合呼吸,这时呼吸通风口仍会打开,状态灯显示黄色,我们依旧可以直接呼吸空气;当空气质量是中度污染时,不适合直接呼吸,这时状态灯显示红色,舵机转动,通风口关闭,空气只能通过过滤盒,同时风扇开启,加速空气流动;
项目创作者 Linter认为,目前市面上的3M防护面罩佩戴之后很闷,用户体验不佳。而且他也希望自己这个面罩,可以实现空气质量监测并防护的功能。
步骤1:准备项目所用开源硬件,清单如下:
1 x Seeduino xiao主控板
1 x WS2813B Digital RGB LED Flexi-Strip 60 LED - 1 MeterLED灯条
1 x Servo舵机
1 x Grove - Air quality sensor v1.3空气质量传感器
1 x Grove - Relay继电器
1 x 小风扇
1 x 电池
步骤2:用CAD绘制特制结构件儿——通风口挡板
这个步骤也可以用3D Model建模然后打印,制作特制结构件。
步骤3:激光切割绘制好的结构件
步骤4:焊接Seeduino xiao主控板
将Seeduino xiao主控板背面的地线和VIN引脚焊接出一个电源端口,方便后面与电池相接。
步骤5:灯条焊接(参见下图)
步骤6:软件编程(相关代码,见下)
CyberpuckMaskXiao.ino
kMaskXiao.inoC/C++
#include <Arduino.h>
#include <Servo.h>
#include "s_timer.h"
#include "Adafruit_NeoPixel.h"
#include "Air_Quality_Sensor.h"
#define PIN 6
#define NUMPIXELS 11
#define BRIGHTNESS 255
AirQualitySensor sensor(A0);
Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800);
Servo servo_2;
int delayval = 500; // delay for half a second
int stateflag = 0;
int Secondcount = 0;
void setup() {
// put your setup code here, to run once:
servo_2.attach(5);
servo_2.write(90);
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
// End of trinket special code
strip.setBrightness(BRIGHTNESS);
strip.begin();
strip.show(); // Initialize all pixels to 'off'
colorWipe(strip.Color(255, 255, 255), 50); // Green
pinMode(4, OUTPUT);
Serial.begin(115200);
// while (!Serial);
Serial.println("Waiting sensor to init...");
delay(5000);
if (sensor.init()) {
Serial.println("Sensor ready.");
}
else {
Serial.println("Sensor ERROR!");
}
colorWipe(strip.Color(0, 255, 0), 50); // Green
s_timer::set(Timer4Callback0);
s_timer::start();
}
void loop() {
// put your main code here, to run repeatedly:
if (stateflag == 1) {
air_test();
stateflag = 0;
}
}
void air_test() {
Serial.print("Sensor value: ");
servo_2.detach();
int data=sensor.getValue();
Serial.println(data);
int quality = sensor.slope();
if (quality == AirQualitySensor::FORCE_SIGNAL) {
Serial.println("High pollution! Force signal active.");
colorWipe(strip.Color(255, 0, 0), 50); // Red
digitalWrite(4, HIGH);
servo_2.attach(5);
servo_2.write(0);
delay(2000);
} else if (quality == AirQualitySensor::HIGH_POLLUTION) {
Serial.println("High pollution!");
colorWipe(strip.Color(255, 0, 0), 50); // Red
digitalWrite(4, HIGH);//fan
servo_2.attach(5);
servo_2.write(0);
delay(2000);
} else if (quality == AirQualitySensor::LOW_POLLUTION) {
Serial.println("Low pollution!");
colorWipe(strip.Color(255, 255, 0), 50); // yellow
digitalWrite(4, HIGH);
servo_2.attach(5);
servo_2.write(90);
delay(2000);
} else if (quality == AirQualitySensor::FRESH_AIR) {
Serial.println("Fresh air.");
colorWipe(strip.Color(0, 255, 0), 50); // Green
digitalWrite(4, LOW);
servo_2.attach(5);
servo_2.write(90);
}
}
volatile uint16_t dacout = 0;
void Timer4Callback0()
{
stateflag = 1;
}
void colorWipe(uint32_t c, uint8_t wait) {
for (uint16_t i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, c);
strip.show();
// delay(wait);
}
}
步骤7:按照下图将硬件进行连接
步骤8:结构搭建组装
步骤9:完工啦
项目演示视频
文末点击阅读原文,可前往该项目英文教程页面
🤖️🤖️🤖️
文末互动话题
上面这个硬核口罩你喜欢吗?留言区见
如果你有在家DIY更硬核的口罩
欢迎分享,保证让你上墙
写在最后-文末小广告
接下来,柴火将基于开源硬件套件(包含部分硬核面罩项目所用的技术模块)定期开设课程,该课程将涉及(但不限于)以下节点:硬件基础原理;传感器应用;基本结构搭建;软件编程与硬件结合;原型搭建;创客马拉松等。
如果你也想玩转开源硬件,
用科技赋能创新落地,
欢迎扫码填写课程意向报名哟!
----END----
Chaihuo x.factory|深圳,河北