Мазмұны:
- 1 -қадам: 1 -қадам: Схеманы дәнекерлеу
- 2 -қадам: 2 -қадам: Кодты жазыңыз
- 3 -қадам: 3 -қадам: Абажур сатып алу
- 4 -қадам: 4 -қадам: Барлығын бірге тартыңыз
- 5 -қадам: 5 -қадам: Ойын карталарын жасау
Бейне: Нағыз сынақ: 5 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:24
Қазіргі әлем адамдардан физикалық өмірден кетуді және сандық жүйеде өмір сүруді талап етеді.
Al -дің пайда болуымен және технологияның таралуымен адамдар машинаға тым көп сенеді және оны әрқашан дұрыс деп санайды.
«Шынында» жалған детекторлық тест құру арқылы бұл жалған сенімді жоюға арналған. Адамдар шынымен де жұмыс істейтініне оңай сенеді, бірақ егер жалған жауаптар берілсе, бұл олардың технологияға деген сенімін жоғалтады.
1 -қадам: 1 -қадам: Схеманы дәнекерлеу
Өйткені менің туындыларымда тек бір ғана жарық бар, сондықтан оны дәнекерлеу өте оңай. Негізгі мәселе - басында, мен екі жарықты дәнекерлеймін, бірақ мен экспозиция бөлігін бірден жаппадым. Осылайша, екі сым бір -біріне тиіп тұрғанда. Қысқа.
2 -қадам: 2 -қадам: Кодты жазыңыз
p.p1 {маржа: 0.0px 0.0px 0.0px 0.0px; сызық биіктігі: 15,0 пиксель; қаріп: 12.0px Times; түсі: #000000; өң түсі: #ffffff}
p.p2 {маржа: 0.0px 0.0px 0.0px 0.0px; сызық биіктігі: 15,0 пиксель; қаріп: 12.0px Times; түсі: #000000; өң түсі: #ffffff; мин биіктігі: 14.0px} span.s1 {қаріп-кернинг: жоқ}
2 -қадам: кодты жазыңыз
/*********************************************************************
Бұл біздің nRF52 негізіндегі Bluefruit LE модульдерінің үлгісі
Адафрут дүкенінен бүгін біреуін алыңыз!
Adafruit осы ашық бастапқы кодты қамтамасыз ететін уақыт пен ресурстарды инвестициялайды, сатып алу арқылы Adafruit пен ашық коды бар жабдықты қолдаңыз
Adafruit өнімдері!
MIT лицензиясы, қосымша ақпарат алу үшін LICENSE тексеріңіз
Жоғарыдағы барлық мәтінді және төмендегі экранды енгізу керек
кез келген қайта бөлу
*********************************************************************
/ Бұл эскиз NeoPixel басқаруымен қолдануға арналған
// беті Adafruit's Bluefruit LE Connect мобильді қосымшасында.
/
/ - Бұл эскизді nRF52 қауырсынға құрастырып, жыпылықтаңыз
// - Bluefruit LE Connect қосымшасын ашыңыз
// - NeoPixel утилитасына ауысыңыз
// - Байланыс орнату үшін 'қосылу' түймесін басыңыз
// пиксель орналасуы туралы мета-деректерді жіберу
// - құрылғыдағы пикселдерді жаңарту үшін NeoPixel утилитасын пайдаланыңыз
/* ЕСКЕРТУ: Бұл эскизге Adafruit_Neopixel 1.1.0 нұсқасы қажет болды !!! */
#қосу
#қосу
#қосу
#depine NEOPIXEL_VERSION_STRING «Neopixel v2.0»
#define PIN 16 / * NeoPixels жүргізуге арналған түйреуіш * /
#MAXCOMPONENTS анықтаңыз 4
uint8_t *pixelBuffer = NULL;
uint8_t ені = 0;
uint8_t биіктігі = 0;
uint8_t қадам;
uint8_t компоненттерінің мәні;
бол - 400 Гц;
uint8_t компоненттері = 3; // тек 3 және 4 - жарамды мәндер
Adafruit_NeoPixel неопикселі = Adafruit_NeoPixel ();
// BLE қызметі
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
жарамсыз орнату ()
{
Serial.begin (115200);
while (! Сериялық) кешіктіру (10); // жергілікті usb көмегімен nrf52840 үшін
Serial.println («Adafruit Bluefruit Neopixel Test»);
Serial.println («--------------------------------»);
Serial.println ();
Serial.println («Bluefruit Connect LE қосымшасын пайдаланып қосылыңыз»);
// Неопиксельдерді конфигурациялау
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // bluefruit.h қолдайтын мәндерді тексеріңіз
Bluefruit.setName («Bluefruit52»);
Bluefruit. Periph.setConnectCallback (connect_callback);
// Тұрақты болу үшін OTA DFU, егер ол бар болса, алдымен қосылуы керек
bledfu.begin ();
// Құрылғы туралы ақпаратты конфигурациялау және іске қосу
bledis.setMan Manufacturer («Adafruit Industries»);
bledis.setModel («Bluefruit Feather52»);
bledis.begin ();
// BLE UART қызметін теңшеңіз және іске қосыңыз
bleuart.begin ();
// Жарнаманы орнатыңыз және бастаңыз
startAdv ();
}
void startAdv (жарамсыз)
{
// Жарнама пакеті
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 секунд
* - Тайм -аутпен = 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};
байланыс-> getPeerName (орталық_атау, өлшемі (орталық_атау));
Serial.print («Қосылды»);
Serial.println (central_name);
Serial.println («» Неопиксельдер «қойындысын таңдаңыз,» Қосылу «түймесін басып, көңіл көтеріңіз»);
}
бос цикл ()
{
// Деректер жаңғырығы
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int пәрмені = bleuart.read ();
ауысу (команда) {
case 'V': {// Нұсқасын алу
commandVersion ();
үзіліс;
}
case 'S': {// Орнату өлшемдері, компоненттері, қадамы…
commandSetup ();
үзіліс;
}
корпус 'С': {// Түспен тазалау
commandClearColor ();
үзіліс;
}
'B' жағдайы: {// Жарықтықты орнатыңыз
commandSetBrightness ();
үзіліс;
}
'P' жағдайы: {// Pixel орнату
commandSetPixel ();
үзіліс;
}
case 'I': {// Жаңа кескін алу
commandImage ();
үзіліс;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
үшін (int j = 0; j <биіктік; j ++)
{
үшін (int i = 0; i <ені; 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 («Пәрмен: Орнату»));
ені = bleuart.read ();
биіктік = bleuart.read ();
stride = bleuart.read ();
componentValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponent = 3: 4;
Serial.printf («\ tsize: %dx %d / n», ені, биіктігі);
Serial.printf («\ tstride: %d / n», қадам);
Serial.printf («\ tpixelType %d / n», pixelType);
Serial.printf («\ t компоненттері: %d / n», компоненттер);
егер (pixelBuffer! = NULL) {
жою pixelBuffer;
}
uint32_t өлшемі = ені*биіктігі;
pixelBuffer = жаңа uint8_t [size*компоненттері];
neopixel.updateLength (өлшем);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Орындалды
sendResponse («Жарайды»);
}
void commandSetBrightness () {
Serial.println (F («Command: SetBrightness»)));
// Мәнді оқу
uint8_t жарықтығы = bleuart.read ();
// Жарықтықты орнатыңыз
neopixel.setBrightness (жарықтық);
// пикселдерді жаңарту
swapBuffers ();
// Орындалды
sendResponse («Жарайды»);
}
void commandClearColor () {
Serial.println (F («Command: ClearColor»));
// Түсті оқу
uint8_t түсі [MAXCOMPONENTS];
for (int j = 0; j <компоненттер;) {
if (bleuart.available ()) {
түс [j] = bleuart.read ();
j ++;
}
}
// Барлық жарықдиодты түске орнатыңыз
int өлшемі = ені * биіктігі;
uint8_t *base_addr = pixelBuffer;
for (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 («\ tclear (%d, %d, %d, %d) n», түс [0], түс [1], түс [2], түс [3]);
}
// Орындалды
sendResponse («Жарайды»);
}
жарамсыз commandSetPixel () {
Serial.println (F («Команда: 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;
for (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 («Жарайды»);
}
void commandImage () {
Serial.printf («Пәрмен: %dx %d, %d, %d / n», ені, биіктігі, компоненттер, қадам);
// Жаңа пиксель буферін алу
int өлшемі = ені * биіктігі;
uint8_t *base_addr = pixelBuffer;
for (int i = 0; i <size; i ++) {
for (int j = 0; j <компоненттер;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
if (компоненттер == 3) {
uint32_t индексі = 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 (жауап, strlen (жауап)*sizeof (char));
}
3 -қадам: 3 -қадам: Абажур сатып алу
4 -қадам: 4 -қадам: Барлығын бірге тартыңыз
Ұсынылған:
Жарықдиодты снайпер: Мүмкін сіз жасай алатын сынақ жабдықтарының ең негізгі бөлігі: 3 қадам
Жарықдиодты қондырғы: Мүмкін сіз жасай алатын сынақ жабдықтарының ең негізгі бөлігі: Сізге LED сөндіргішін таныстыруға рұқсат етіңіз. Электроника жобаларын жөндеуге көмектесу үшін құрастыруға болатын қарапайым, бірақ өте пайдалы сынақ жабдықтары. Жарықдиодты Snapper - бұл оңай қосуға мүмкіндік беретін ашық көзі бар баспа схемасы
Роботтық сынақ стенді: 8 қадам (суреттермен)
Роботтық сынақ стенді: маған YAAR роботымның дөңгелектерін (YAAR нұсқаулығын қараңыз) сынау үшін жерден түсірмеу керек болды
Сынақ компоненттерін кеңейту тақтасы: 3 қадам
Компоненттерді тексеруші кеңейту тақтасы: Бұл жоба арзан электронды компоненттерді тексеруге арналған ПХД кеңейту тақтасы. Ali Express -те бұл құрылғының көптеген нұсқалары бар. Мен осы тақтаны негізге алдым: GM328A V1.11 кеңейту тақтасының ерекшеліктері: Li-PO батареясы 9В батареяны ауыстырады. 1 ұяшық Li
Сынақ және қате бойынша дауыс зорайтқыштың дизайны: 11 қадам (суреттермен)
Сынақ пен қателік бойынша дауыс зорайтқыштың дизайны: " Енді маған өз дауыс зорайтқыштар жұбын жасау керек! &Quot; Мен ойладым, менің күшейткішімді аяқтағаннан кейін. " Егер мен лайықты күшейткіш жасай алсам, мен мұны міндетті түрде жасай аламын. " Мен динамиктің дизайны мен құрылысы әлеміне секірдім, бұл жақсы болады деп күттім
Arduino жобасы: GPS қадағалау шешімі үшін RF1276 LoRa модулінің сынақ диапазоны: 9 қадам (суреттермен)
Arduino жобасы: GPS қадағалауға арналған RF1276 сынақ диапазоны LoRa модулі Шешім: Байланыс: USB - SerialNeed: Chrome браузері қажет: 1 X Arduino Mega қажеттілігі: 1 X GPS қажет: 1 X SD картасы қажет: 2 X LoRa модем RF1276 Функция: Arduino GPS мәнін жіберу негізгі базаға - Dataino Server Lora модуліндегі деректердің негізгі базасы: Ультра ұзақ қашықтық