جدول المحتويات:
- الخطوة 1: الخطوة 1: لحام الدائرة
- الخطوة 2: الخطوة 2: اكتب الكود
- الخطوة 3: الخطوة 3: شراء عاكس الضوء
- الخطوة 4: Step4: اسحبها جميعًا معًا
- الخطوة 5: الخطوة 5: صنع أوراق اللعب
فيديو: التحدي الحقيقي: 5 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:38
يتطلب العالم الحديث من البشر الخروج من الواقع والعيش داخل العالم الرقمي.
مع ظهور Al وانتشار التكنولوجيا ، وضع الناس ثقة كبيرة في الماكينة ويعتقدون أنها صحيحة دائمًا.
يهدف "Really" إلى زعزعة هذه الثقة الزائفة من خلال إنشاء اختبار وهمي لكشف الكذب. سوف يعتقد الناس بسهولة أن Really تعمل ولكن عندما يتم تقديم إجابات خاطئة ، فإنها ستهز ثقتهم العمياء في التكنولوجيا.
الخطوة 1: الخطوة 1: لحام الدائرة
لأن أعمالي بها ضوء واحد فقط ، لذلك من السهل جدًا لحامها. تكمن المشكلة الرئيسية في البداية ، فقد جندت مصباحين ، لكنني لم أغطي جزء التعرض على الفور. لذلك عندما يتلامس الجزءان من الأسلاك معًا. انها قصيرة خارج.
الخطوة 2: الخطوة 2: اكتب الكود
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px؛ ارتفاع الخط: 15.0 بكسل ؛ الخط: 12.0 بكسل تايمز ؛ اللون: # 000000 ؛ لون الخلفية: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px؛ ارتفاع الخط: 15.0 بكسل ؛ الخط: 12.0 بكسل تايمز ؛ اللون: # 000000 ؛ لون الخلفية: #ffffff ؛ الحد الأدنى للارتفاع: 14.0 بكسل} span.s1 {font-kerning: none}
الخطوة الثانية: اكتب الكود
/*********************************************************************
هذا مثال على وحدات Bluefruit LE المستندة إلى nRF52
اختر واحدة اليوم في متجر Adafruit!
تستثمر Adafruit الوقت والموارد في توفير هذا الكود مفتوح المصدر ،
يرجى دعم Adafruit والأجهزة مفتوحة المصدر عن طريق الشراء
منتجات من Adafruit!
ترخيص MIT ، تحقق من LICENSE لمزيد من المعلومات
يجب تضمين كل النص أعلاه وشاشة البداية أدناه في
أي إعادة توزيع
*********************************************************************
/ هذا الرسم التخطيطي مخصص للاستخدام مع عنصر التحكم NeoPixel
// السطح في تطبيق الهاتف المحمول Bluefruit LE Connect الخاص بـ Adafruit.
/
/ - قم بتجميع هذا الرسم التخطيطي وميضه إلى nRF52 Feather
// - افتح تطبيق Bluefruit LE Connect
// - قم بالتبديل إلى الأداة المساعدة NeoPixel
// - انقر فوق الزر "اتصال" لإنشاء اتصال و
// إرسال البيانات الوصفية حول تخطيط البكسل
// - استخدم الأداة المساعدة NeoPixel لتحديث وحدات البكسل على جهازك
/ * ملاحظة: هذا الرسم التخطيطي مطلوب على الأقل الإصدار 1.1.0 من Adafruit_Neopixel !!! * /
#يشمل
#يشمل
#يشمل
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * رقم التعريف الشخصي المستخدم لقيادة NeoPixels * /
# تعريف ماكس المكونات 4
uint8_t * pixelBuffer = NULL ؛
uint8_t العرض = 0 ؛
ارتفاع uint8_t = 0 ؛
uint8_t خطوة.
مكونات uint8_tValue ؛
منطقي هو 400 هرتز ؛
مكونات uint8_t = 3 ؛ // فقط 3 و 4 قيمتان صالحتان
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel () ؛
// خدمة BLE
بليدفو بليدفو
بليديس بليديس
بليوارت بليوارت
الإعداد باطل()
{
Serial.begin (115200) ؛
بينما (! المسلسل) تأخير (10) ؛ // لـ nrf52840 مع USB أصلي
Serial.println ("اختبار Adafruit Bluefruit Neopixel") ؛
Serial.println ("--------------------------------") ؛
Serial.println () ،
Serial.println ("الرجاء الاتصال باستخدام تطبيق Bluefruit Connect LE") ؛
// تكوين Neopixels
neopixel.begin () ،
// التهيئة Bluefruit
Bluefruit.begin () ؛
Bluefruit.setTxPower (4) ؛ // تحقق من bluefruit.h لمعرفة القيم المدعومة
Bluefruit.setName ("Bluefruit52") ؛
Bluefruit. Periph.setConnectCallback (connect_callback) ؛
// لكي تكون متسقة ، يجب إضافة OTA DFU أولاً إذا كانت موجودة
bledfu.begin () ،
// تكوين وبدء تشغيل خدمة معلومات الجهاز
bledis.setManufacturer ("Adafruit Industries") ؛
bledis.setModel ("Bluefruit Feather52") ؛
bledis.begin () ،
// تكوين وبدء خدمة BLE UART
bleuart.begin () ،
// إعداد وابدأ الإعلان
startAdv () ،
}
بداية باطلة
{
// حزمة إعلانية
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE) ؛
Bluefruit. Advertising.addTxPower () ،
// تضمين uuid 128 بت لـ bleuart
Bluefruit. Advertising.addService (بليوارت) ؛
// حزمة استجابة المسح الثانوي (اختياري)
// نظرًا لعدم وجود مساحة لـ "الاسم" في حزمة الإعلان
Bluefruit. ScanResponse.addName () ،
/ * ابدأ الإعلان
* - تمكين الإعلان التلقائي في حالة قطع الاتصال
* - الفاصل الزمني: الوضع السريع = 20 مللي ثانية ، الوضع البطيء = 152.5 مللي ثانية
* - مهلة الوضع السريع 30 ثانية
* - البدء (المهلة) مع انتهاء المهلة = 0 سيتم الإعلان إلى الأبد (حتى يتم الاتصال)
*
* لفترة الإعلان الموصى بها
*
*/
Bluefruit. Advertising.restartOnDisconnect (صحيح) ؛
Bluefruit. Advertising.setInterval (32 ، 244) ؛ // في وحدة 0.625 مللي ثانية
Bluefruit. Advertising.setFastTimeout (30) ؛ // عدد الثواني في الوضع السريع
Bluefruit. Advertising.start (0) ؛ // 0 = لا تتوقف عن الإعلان بعد n ثانية
}
connect_callback باطل (uint16_t conn_handle)
{
// احصل على المرجع للاتصال الحالي
BLEConnection * connection = Bluefruit. Connection (conn_handle) ؛
char central_name [32] = {0} ؛
connect-> getPeerName (اسم_المركز ، sizeof (اسم_المركز)) ؛
Serial.print ("متصل بـ") ؛
Serial.println (اسم_المركزية) ؛
Serial.println ("الرجاء تحديد علامة التبويب" Neopixels "، انقر فوق" اتصال "واستمتع بوقتك") ؛
}
حلقة فارغة()
{
// تلقى صدى البيانات
إذا (Bluefruit.connected () && bleuart.notifyEnabled ())
{
الأمر int = bleuart.read () ؛
التبديل (الأمر) {
الحالة "V": {// Get Version
commandVersion () ؛
استراحة؛
}
الحالة 'S': {// أبعاد الإعداد ، المكونات ، الخطوة …
commandSetup () ،
استراحة؛
}
الحالة "C": {// مسح باللون
commandClearColor () ،
استراحة؛
}
الحالة "ب": {// ضبط السطوع
commandSetBrightness () ،
استراحة؛
}
الحالة "P": {// Set Pixel
commandSetPixel () ؛
استراحة؛
}
الحالة 'I': {// Receive new image
commandImage () ؛
استراحة؛
}
}
}
}
مقايضة باطلة
{
uint8_t * base_addr = pixelBuffer ؛
int pixelIndex = 0 ؛
لـ (int j = 0 ؛ j <ارتفاع ؛ j ++)
{
لـ (int i = 0 ؛ i <width ؛ i ++) {
إذا (المكونات == 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 () ،
}
إصدار أمر باطل () {
Serial.println (F ("الأمر: التحقق من الإصدار")) ؛
sendResponse (NEOPIXEL_VERSION_STRING) ،
}
أمر باطل الإعداد () {
Serial.println (F ("Command: Setup")) ؛
العرض = bleuart.read () ؛
الارتفاع = bleuart.read () ؛
stride = bleuart.read () ؛
المكوناتValue = bleuart.read () ،
is400Hz = bleuart.read () ،
neoPixelType pixelType ؛
pixelType = مكونات القيمة + (is400Hz؟ NEO_KHZ400: NEO_KHZ800) ؛
المكونات = (مكونات القيمة == NEO_RGB || مكونات القيمة == NEO_RBG || مكونات القيمة == NEO_GRB || قيمة المكونات == NEO_GBR || قيمة المكونات == NEO_BRG || المكونات القيمة == NEO_BGR)؟ 3: 4
Serial.printf ("\ t الحجم:٪ dx٪ d / n" ، العرض ، الارتفاع) ؛
Serial.printf ("\ tstride:٪ d / n"، خطوة)؛
Serial.printf ("\ tpixelType٪ d / n" ، نوع البكسل) ؛
Serial.printf ("\ t المكونات:٪ d / n" ، مكونات) ؛
إذا (pixelBuffer! = NULL) {
حذف pixelBuffer ؛
}
uint32_t size = العرض * الارتفاع ؛
pixelBuffer = uint8_t جديدة [الحجم * المكونات] ؛
neopixel.updateLength (الحجم) ؛
neopixel.updateType (pixelType) ،
neopixel.setPin (PIN) ؛
// منتهي
sendResponse ("موافق") ؛
}
أمر باطل SetBrightness () {
Serial.println (F ("Command: SetBrightness")) ؛
// قراءة القيمة
uint8_t السطوع = bleuart.read () ،
// ضبط السطوع
neopixel.setBrightness (السطوع) ؛
// تحديث البكسل
swapBuffers () ،
// منتهي
sendResponse ("موافق") ؛
}
أمر باطل ClearColor () {
Serial.println (F ("Command: ClearColor")) ؛
// اقرأ اللون
uint8_t color [MAXCOMPONENTS] ؛
لـ (int j = 0 ؛ j <المكونات ؛) {
إذا (bleuart.available ()) {
color [j] = bleuart.read () ؛
ي ++ ؛
}
}
// ضبط كل المصابيح على اللون
حجم int = العرض * الارتفاع ؛
uint8_t * base_addr = pixelBuffer ؛
لـ (int i = 0 ؛ i <size ؛ i ++) {
لـ (int j = 0 ؛ j <المكونات ؛ j ++) {
* base_addr = color [j] ؛
Base_addr ++ ؛
}
}
// تبديل المخازن المؤقتة
Serial.println (F ("ClearColor مكتمل")) ؛
swapBuffers () ،
إذا (المكونات == 3) {
Serial.printf ("\ tclear (٪ d،٪ d،٪ d) n"، color [0]، color [1]، color [2])؛
}
آخر {
Serial.printf ("\ t Clear (٪ d،٪ d،٪ d،٪ d) n"، color [0]، color [1]، color [2]، color [3])؛
}
// منتهي
sendResponse ("موافق") ؛
}
أمر باطل SetPixel () {
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 <المكونات ؛) {
إذا (bleuart.available ()) {
* base_addr = bleuart.read () ؛
Base_addr ++ ؛
ي ++ ؛
}
}
// تعيين الألوان
uint32_t neopixelIndex = y * stride + x ؛
uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset ؛
لون uint32_t ؛
إذا (المكونات == 3) {
اللون = neopixel. Color (* pixelBufferPointer ، * (pixelBufferPointer + 1) ، * (pixelBufferPointer + 2)) ؛
Serial.printf ("\ t اللون (٪ d ،٪ d ،٪ d) n" ، * pixelBufferPointer ، * (pixelBufferPointer + 1) ، * (pixelBufferPointer + 2)) ؛
}
آخر {
اللون = neopixel. Color (* pixelBufferPointer ، * (pixelBufferPointer + 1) ، * (pixelBufferPointer + 2) ، * (pixelBufferPointer + 3)) ؛
Serial.printf ("\ t color (٪ d،٪ d،٪ d،٪ d) n"، * pixelBufferPointer ، * (pixelBufferPointer + 1) ، * (pixelBufferPointer + 2) ، * (pixelBufferPointer + 3)) ؛
}
neopixel.setPixelColor (neopixelIndex ، اللون) ؛
neopixel.show () ،
// منتهي
sendResponse ("موافق") ؛
}
أمر باطلالصورة () {
Serial.printf ("الأمر: الصورة٪ dx٪ d ،٪ d ،٪ d / n" ، العرض ، الارتفاع ، المكونات ، الخطوة) ؛
// تلقي عازلة بكسل جديدة
حجم int = العرض * الارتفاع ؛
uint8_t * base_addr = pixelBuffer ؛
لـ (int i = 0 ؛ i <size ؛ i ++) {
لـ (int j = 0 ؛ j <المكونات ؛) {
إذا (bleuart.available ()) {
* base_addr = bleuart.read () ؛
Base_addr ++ ؛
ي ++ ؛
}
}
/*
إذا (المكونات == 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 ("موافق") ؛
}
sendResponse باطلة (استجابة char const *) {
Serial.printf ("إرسال استجابة:٪ s / n" ، استجابة) ؛
bleuart.write (response ، strlen (response) * sizeof (char)) ؛
}
الخطوة 3: الخطوة 3: شراء عاكس الضوء
الخطوة 4: Step4: اسحبها جميعًا معًا
موصى به:
مكعب روبيك في الوقت الحقيقي معصوب العينين باستخدام Raspberry Pi و OpenCV: 4 خطوات
مكعب روبيك في الوقت الحقيقي معصوب العينين باستخدام Raspberry Pi و OpenCV: هذا هو الإصدار الثاني من أداة مكعب روبيك المصممة لحل معصوب العينين. تم تطوير الإصدار الأول بواسطة javascript ، يمكنك رؤية المشروع RubiksCubeBlindfolded1 على عكس الإصدار السابق ، يستخدم هذا الإصدار مكتبة OpenCV لاكتشاف الألوان و e
Renegade-i (جهاز اختبار IC قابل للبرمجة يبدو وكأنه الشيء الحقيقي): 3 خطوات (بالصور)
Renegade-i (جهاز اختبار IC قابل للبرمجة يبدو وكأنه شيء حقيقي): الحلم المليون دولار ، هل حلمت يومًا بوجود جهاز اختبار IC في المنزل؟ ليست مجرد أداة يمكنها اختبار IC ، ولكنها آلة "قابلة للبرمجة" تبدو وكأنها أحد المنتجات الرئيسية لأكبر اللاعبين في صناعة اختبار أشباه الموصلات ، وهكذا
مقياس مستوى مياه الآبار في الوقت الحقيقي: 6 خطوات (بالصور)
مقياس مستوى مياه الآبار في الوقت الفعلي: تصف هذه التعليمات كيفية إنشاء مقياس مستوى المياه في الوقت الفعلي ومنخفض التكلفة لاستخدامه في الآبار المحفورة. تم تصميم عداد مستوى المياه للتعليق داخل بئر محفور ، وقياس مستوى المياه مرة واحدة في اليوم ، وإرسال البيانات عبر شبكة WiFi أو اتصال خلوي
مقياس درجة حرارة مياه الآبار وموصلية المياه ومستوى المياه في الوقت الحقيقي: 6 خطوات (بالصور)
مقياس درجة حرارة مياه الآبار وموصلية المياه ومستوى المياه في الوقت الفعلي: تصف هذه التعليمات كيفية إنشاء عداد مياه منخفض التكلفة وفي الوقت الفعلي لمراقبة درجة الحرارة والتوصيل الكهربائي (EC) ومستويات المياه في الآبار المحفورة. تم تصميم العداد للتعليق داخل بئر محفور ، وقياس درجة حرارة الماء ، و EC و
3D KEVA التحدي 2: السرير: 3 خطوات
3D KEVA Challenge 2: Bed: مرحبًا بكم في 3D KEVA Challenge! هل أنت مستعد لذلك؟ كل تحدي 3D KEVA سيقدم للمتعلم مجموعة من 3 طرق عرض (علوي ، أمامي ، يمين). باستخدام هذه الآراء وحدها ، يكمن التحدي في وضع KEVA Planks بطريقة تتوافق مع الآراء