فهرست مطالب:
- مرحله 1: مرحله 1: مدار را لحیم کنید
- مرحله 2: مرحله 2: کد را بنویسید
- مرحله 3: مرحله 3: خرید آباژور
- مرحله 4: مرحله 4: همه را با هم بکشید
- مرحله 5: مرحله 5: ساخت کارت های بازی
تصویری: واقعا چالش برانگیز: 5 قدم
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
دنیای مدرن از انسانها می خواهد که از حالت فیزیکی خارج شوند و در محیط دیجیتال زندگی کنند.
با ظهور آل و گسترش فناوری ، مردم بیش از حد به دستگاه اعتماد می کنند و معتقدند که همیشه درست است.
هدف "واقعاً" این است که با ایجاد یک آزمایش دروغ سنج دروغین ، این اعتماد کاذب را متزلزل کند. مردم به راحتی باور خواهند کرد که واقعاً کار می کند اما وقتی پاسخ های غلط ارائه شود ، اعتماد کور آنها به فناوری را از بین می برد.
مرحله 1: مرحله 1: مدار را لحیم کنید
از آنجا که آثار من فقط یک چراغ دارند ، بنابراین لحیم کاری آنها بسیار آسان است. مشکل اصلی در ابتدا است ، من دو چراغ را لحیم کردم ، اما بلافاصله قسمت نوردهی را نپوشاندم. بنابراین وقتی دو سیم به هم متصل می شوند. کوتاه شد
مرحله 2: مرحله 2: کد را بنویسید
p.p1 {حاشیه: 0.0 پیکسل 0.0 پیکسل 0.0 پیکسل 0.0 پیکسل؛ ارتفاع خط: 15.0 پیکسل؛ font: 12.0px بار؛ رنگ: #000000؛ background-color: #ffffff}
p.p2 {حاشیه: 0.0 پیکسل 0.0 پیکسل 0.0 پیکسل 0.0 پیکسل؛ ارتفاع خط: 15.0 پیکسل؛ font: 12.0px بار؛ رنگ: #000000؛ background-color: #ffffff؛ حداقل ارتفاع: 14.0px} span.s1 {font-kerning: none}
مرحله 2: کد را بنویسید
/*********************************************************************
این یک مثال برای ماژول های Bluefruit LE مبتنی بر nRF52 است
امروز یکی را در مغازه adafruit تهیه کنید!
Adafruit با ارائه این کد منبع باز زمان و منابع خود را سرمایه گذاری می کند ،
لطفاً با خرید از Adafruit و سخت افزار منبع باز پشتیبانی کنید
محصولات Adafruit!
مجوز MIT ، برای اطلاعات بیشتر LICENSE را بررسی کنید
تمام متن بالا ، و صفحه چلپ چلوپ زیر باید در آن گنجانده شود
هرگونه توزیع مجدد
*********************************************************************
/ این طرح برای استفاده با کنترل NeoPixel در نظر گرفته شده است
// در برنامه تلفن همراه Adafruit's Bluefruit LE Connect ظاهر شوید.
/
/ - این طرح را کاملاً گردآوری کرده و روی پر nRF52 پر کنید
// - برنامه Bluefruit LE Connect را باز کنید
// - به ابزار NeoPixel بروید
// - برای ایجاد اتصال و "اتصال" را فشار دهید
// ارسال متا داده ها در مورد طرح پیکسل
// - از ابزار NeoPixel برای به روزرسانی پیکسل های دستگاه خود استفاده کنید
/* توجه: این طرح حداقل به نسخه 1.1.0 Adafruit_Neopixel نیاز دارد !!! */
#عبارتند از
#عبارتند از
#عبارتند از
#تعریف NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#تعریف PIN 16 / * پین مورد استفاده برای رانندگی NeoPixels * /
#تعریف MAXCOMPONENTS 4
uint8_t *pixelBuffer = NULL؛
uint8_t عرض = 0؛
uint8_t ارتفاع = 0؛
uint8_t گام؛
uint8_t componentValue؛
bool is400Hz؛
اجزای uint8_t = 3 ؛ // فقط 3 و 4 مقادیر معتبر هستند
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ()؛
// سرویس BLE
BLEDfu bledfu؛
BLEDis bledis؛
BLEUart bleuart؛
void setup ()
{
Serial.begin (115200) ؛
در حالی که (! سریال) تاخیر (10) ؛ // برای nrf52840 با usb بومی
Serial.println ("تست نئوپیکسل آدافروت بلوفروت") ؛
Serial.println ("--------------------------------") ؛
Serial.println ()؛
Serial.println ("لطفاً با استفاده از برنامه Bluefruit Connect LE متصل شوید") ؛
// پیکربندی Neopixels
neopixel.begin ()؛
// Init Bluefruit
Bluefruit.begin ()؛
Bluefruit.setTxPower (4) ؛ // bluefruit.h را برای مقادیر پشتیبانی شده بررسی کنید
Bluefruit.setName ("Bluefruit52") ؛
Bluefruit. Periph.setConnectCallback (connect_callback) ؛
// برای سازگاری OTA DFU ابتدا باید در صورت وجود اضافه شود
bledfu.begin ()؛
// پیکربندی و راه اندازی سرویس اطلاعات دستگاه
bledis.setManufacturer ("صنایع Adafruit") ؛
bledis.setModel ("Bluefruit Feather52") ؛
bledis.begin ()؛
// سرویس BLE UART را پیکربندی و راه اندازی کنید
bleuart.begin ()؛
// تبلیغات را راه اندازی و شروع کنید
startAdv ()؛
}
void startAdv (void)
{
// بسته تبلیغاتی
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE) ؛
Bluefruit. Advertising.addTxPower ()؛
// شامل bleuart 128 بیتی uuid
Bluefruit. Advertising.addService (bleuart) ؛
// بسته پاسخ اسکن ثانویه (اختیاری)
// از آنجا که در بسته تبلیغات جایی برای "Name" وجود ندارد
Bluefruit. ScanResponse.addName ()؛
/* شروع به تبلیغات کنید
* - در صورت قطع ارتباط ، تبلیغات خودکار را فعال کنید
* - فاصله: حالت سریع = 20 میلی ثانیه ، حالت آهسته = 152.5 میلی ثانیه
* - مهلت زمانی برای حالت سریع 30 ثانیه است
* - شروع (مهلت زمانی) با timeout = 0 برای همیشه تبلیغ می شود (تا زمان اتصال)
*
* برای فاصله تبلیغات توصیه شده
*
*/
Bluefruit. Advertising.restartOnDisconnect (درست) ؛
Bluefruit. Advertising.setInterval (32 ، 244) ؛ // در واحد 0.625 میلی ثانیه
Bluefruit. Advertising.setFastTimeout (30)؛ // تعداد ثانیه در حالت سریع
Bluefruit. Advertising.start (0)؛ // 0 = بعد از n ثانیه تبلیغات را متوقف نکنید
}
void connect_callback (uint16_t conn_handle)
{
// مرجع اتصال فعلی را دریافت کنید
BLEConnection* اتصال = Bluefruit. Connection (conn_handle) ؛
char central_name [32] = {0}؛
connection-> getPeerName (نام مرکزی ، اندازه (نام مرکزی)) ؛
Serial.print ("متصل به") ؛
Serial.println (central_name)؛
Serial.println ("لطفاً برگه" Neopixels "را انتخاب کنید ، روی" Connect "کلیک کنید و از آن لذت ببرید))؛
}
حلقه خالی ()
{
// اکو داده ها را دریافت کرد
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
دستور int = bleuart.read ()؛
تغییر (فرمان) {
مورد 'V': {// دریافت نسخه
commandVersion ()؛
زنگ تفريح؛
}
case 'S': {// تنظیم ابعاد ، اجزاء ، گام…
commandSetup ()؛
زنگ تفريح؛
}
مورد 'C': {// پاک کردن با رنگ
commandClearColor ()؛
زنگ تفريح؛
}
مورد 'B': {// Brightness را تنظیم کنید
commandSetBrightness ()؛
زنگ تفريح؛
}
مورد 'P': {// تنظیم پیکسل
commandSetPixel ()؛
زنگ تفريح؛
}
case 'I': {// دریافت تصویر جدید
commandImage ()؛
زنگ تفريح؛
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer؛
int pixelIndex = 0؛
برای (int j = 0 ؛ j <ارتفاع ؛ j ++)
{
برای (int i = 0؛ i <width؛ i ++) {
if (اجزا == 3) {
neopixel.setPixelColor (pixelIndex ، neopixel. Color (*base_addr ، *(base_addr+1) ، *(base_addr+2))) ؛
}
دیگری {
neopixel.setPixelColor (pixelIndex ، neopixel. Color (*base_addr ، *(base_addr+1) ، *(base_addr+2) ، *(base_addr+3))) ؛
}
base_addr+= اجزا ؛
pixelIndex ++ ؛
}
pixelIndex += گام - عرض ؛ // انتقال pixelIndex به ردیف بعدی (گام برداشتن را در نظر بگیرید)
}
neopixel.show ()؛
}
void commandVersion () {
Serial.println (F ("فرمان: بررسی نسخه")) ؛
sendResponse (NEOPIXEL_VERSION_STRING) ؛
}
void commandSetup () {
Serial.println (F ("Command: Setup")) ؛
width = bleuart.read ()؛
height = bleuart.read ()؛
stride = bleuart.read ()؛
componentValue = bleuart.read ()؛
is400Hz = bleuart.read ()؛
neoPixelType pixelType؛
pixelType = componentsValue + (is400Hz؟ NEO_KHZ400: NEO_KHZ800) ؛
جزء = (componentsValue == NEO_RGB || اجزای ارزش == NEO_RBG || اجزای ارزش == NEO_GRB || اجزای ارزش == NEO_GBR || اجزای ارزش == NEO_BRG || اجزای ارزش == NEO_BGR)؟ 3: 4 ؛
Serial.printf ("\ tsize:٪ dx٪ d / n" ، عرض ، ارتفاع)؛
Serial.printf ("\ tstride:٪ d / n" ، گام به گام) ؛
Serial.printf ("\ tpixelType٪ d / n"، pixelType)؛
Serial.printf ("\ tcomponents:٪ d / n" ، اجزاء) ؛
if (pixelBuffer! = NULL) {
حذف pixelBuffer؛
}
uint32_t اندازه = عرض*ارتفاع؛
pixelBuffer = uint8_t جدید [اندازه*اجزا] ؛
neopixel.updateLength (اندازه) ؛
neopixel.updateType (pixelType) ؛
neopixel.setPin (PIN) ؛
// انجام شده
sendResponse ("OK") ؛
}
void commandSetBrightness () {
Serial.println (F ("Command: SetBrightness")) ؛
// خواندن مقدار
uint8_t brightness = bleuart.read ()؛
// تنظیم روشنایی
neopixel.setBrightness (روشنایی) ؛
// پیکسل ها را تازه کنید
swapBuffers ()؛
// انجام شده
sendResponse ("OK") ؛
}
void commandClearColor () {
Serial.println (F ("Command: ClearColor")) ؛
// رنگ را بخوانید
uint8_t رنگ [MAXCOMPONENTS] ؛
برای (int j = 0 ؛ j <اجزای ؛) {
if (bleuart.available ()) {
رنگ [j] = bleuart.read ()؛
j ++ ؛
}
}
// همه led ها را روی رنگ تنظیم کنید
int اندازه = عرض * ارتفاع؛
uint8_t *base_addr = pixelBuffer؛
برای (int i = 0؛ i <size؛ i ++) {
برای (int j = 0 ؛ j <اجزای ؛ j ++) {
*base_addr = رنگ [j] ؛
base_addr ++؛
}
}
// تعویض بافرها
Serial.println (F ("ClearColor کامل شد")) ؛
swapBuffers ()؛
if (اجزا == 3) {
Serial.printf ("\ tclear (٪ d،٪ d،٪ d) n"، رنگ [0]، رنگ [1]، رنگ [2])؛
}
دیگری {
Serial.printf ("\ t روشن (٪ d ،٪ d ،٪ d ،٪ d) n" ، رنگ [0] ، رنگ [1] ، رنگ [2] ، رنگ [3]) ؛
}
// انجام شده
sendResponse ("OK") ؛
}
void commandSetPixel () {
Serial.println (F ("Command: SetPixel")) ؛
// موقعیت خواندن
uint8_t x = bleuart.read ()؛
uint8_t y = bleuart.read ()؛
// رنگها را بخوانید
uint32_t pixelOffset = y*عرض+x؛
uint32_t pixelDataOffset = pixelOffset*اجزا ؛
uint8_t *base_addr = pixelBuffer+pixelDataOffset؛
برای (int j = 0 ؛ j <اجزای ؛) {
if (bleuart.available ()) {
*base_addr = bleuart.read ()؛
base_addr ++؛
j ++ ؛
}
}
// تنظیم رنگ ها
uint32_t neopixelIndex = y*گام+x ؛
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset؛
رنگ uint32_t ؛
if (اجزا == 3) {
color = neopixel. Color (*pixelBufferPointer ، *(pixelBufferPointer+1) ، *(pixelBufferPointer+2)) ؛
Serial.printf ("\ tcolor (٪ d،٪ d،٪ d) n"، *pixelBufferPointer، *(pixelBufferPointer+1)، *(pixelBufferPointer+2))؛
}
دیگری {
color = neopixel. Color (*pixelBufferPointer ، *(pixelBufferPointer+1) ، *(pixelBufferPointer+2) ، *(pixelBufferPointer+3)) ؛
Serial.printf ("\ tcolor (٪ d،٪ d،٪ d،٪ d) n"، *pixelBufferPointer، *(pixelBufferPointer+1)، *(pixelBufferPointer+2)، *(pixelBufferPointer+3))؛
}
neopixel.setPixelColor (neopixelIndex ، رنگ) ؛
neopixel.show ()؛
// انجام شده
sendResponse ("OK") ؛
}
void commandImage () {
Serial.printf ("فرمان: تصویر٪ dx٪ d ،٪ d ،٪ d / n" ، عرض ، ارتفاع ، اجزا ، گام)؛
// دریافت بافر پیکسل جدید
int اندازه = عرض * ارتفاع؛
uint8_t *base_addr = pixelBuffer؛
برای (int i = 0؛ i <size؛ i ++) {
برای (int j = 0 ؛ j <اجزای ؛) {
if (bleuart.available ()) {
*base_addr = bleuart.read ()؛
base_addr ++؛
j ++ ؛
}
}
/*
if (اجزا == 3) {
uint32_t index = i*اجزا ؛
Serial.printf ("\ tp٪ d (٪ d،٪ d،٪ d) n"، i، pixelBuffer [index]، pixelBuffer [index+1]، pixelBuffer [index+2])؛
}
*/
}
// تعویض بافرها
Serial.println (F ("تصویر دریافت شده")) ؛
swapBuffers ()؛
// انجام شده
sendResponse ("OK") ؛
}
void sendResponse (char const *respond) {
Serial.printf ("ارسال پاسخ:٪ s / n" ، پاسخ) ؛
bleuart.write (reply، strlen (reply)*sizeof (char))؛
}
مرحله 3: مرحله 3: خرید آباژور
مرحله 4: مرحله 4: همه را با هم بکشید
توصیه شده:
چالش مدارهای Mummybot: 6 مرحله (همراه با تصاویر)
چالش مدارهای Mummybot: در کلاس مقدمه ای بر روباتیک ما در مورد برق و مدارها آموختیم. برای معرفی فعالیت ، من یک نمایش اسلاید بسیار کوتاه (ضمیمه) کردم که Mummybot JessyRatFink را گرفته و مدارهای اساسی را اضافه می کند. من به دانش آموزان چالش دادم
4 خط بولینگ 4 پا برای چالش روباتیک: 4 مرحله
4 Foot Bowling Lane for Robotics Challenge: برای برنامه روباتیک تابستانی ما ، من روی به روزرسانی برخی چالش های چندین سال پیش و معرفی ایده های جدید کار می کنم. این اولین موردی است که قبلاً انجام داده بودیم ، اما نه به این شکل. قبلاً از پین های بولینگ چوبی استفاده می کردیم که ثابت شد
چگونه چالش های طراحی منبع تغذیه توسط فناوری های DC-DC برطرف می شود: 3 مرحله
چگونه چالش های طراحی منبع تغذیه توسط فناوری های DC-DC برطرف می شود: من تجزیه و تحلیل می کنم که چگونه چالش طراحی منبع تغذیه توسط فناوری های DC-DC برآورده می شود. طراحان سیستم های قدرت با فشار مداوم بازار روبرو هستند تا راه هایی را برای استفاده بیشتر از منابع موجود بیابند قدرت. در دستگاه های قابل حمل ، راندمان بالاتری
واقعاً ، واقعاً آسان موتور USB!: 3 مرحله
واقعاً ، واقعاً موتور USB آسان !: بالاخره ، دومین آموزش من !!! این دستگاه برای شما یا رایانه شما دارای هر پورت USB قابل دسترس است. من آن را برای مبتدیان به لوازم الکترونیکی ، تا حرفه ای ها توصیه می کنم. این آسان و سرگرم کننده است ، شما می توانید به معنای واقعی کلمه در پنج دقیقه ایجاد کنید !!! واقعی
روشی واقعاً ساده/آسان/بدون عارضه که باعث می شود مردم/انسان/حیوانات/روبات ها به نظر برسند که واقعاً بینایی گرمایی دارند (رنگ دلخواه شما) با استفاده از GIMP: 4 مرحله
روشی بسیار ساده/آسان/بدون عارضه برای اینکه مردم/انسانها/حیوانات/روباتها را شبیه به دید واقعی گرما/نور گرم (با انتخاب شما) با استفاده از GIMP: … عنوان