Talaan ng mga Nilalaman:
- Hakbang 1: Hakbang 1: Maghinang sa Circuit
- Hakbang 2: Hakbang 2: Isulat ang Code
- Hakbang 3: Hakbang 3: Pagbili ng Lampshade
- Hakbang 4: Hakbang4: Hilahin Lahat Ito
- Hakbang 5: Hakbang 5: Paggawa ng Mga Card sa Paglalaro
Video: Talagang Hamon: 5 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:12
Kinakailangan ng modernong mundo ang mga tao na lumabas sa pisikal at mabuhay sa loob ng digital.
Sa paglitaw ng Al at ang paglaganap ng teknolohiya ang mga tao ay labis na nagtiwala sa makina at naniniwala na palaging tama.
Inilaan ang "Totoong" upang alugin ang maling tiwala sa pamamagitan ng paglikha ng isang pekeng pagsubok ng lie detector. Madaling maniwala ang mga tao na gumagana talaga ang Totoo ngunit kapag ibinigay ang maling sagot ay makakalog ng kanilang bulag na pagtitiwala sa teknolohiya.
Hakbang 1: Hakbang 1: Maghinang sa Circuit
Dahil ang aking mga gawa ay mayroon lamang isang ilaw, kaya napakadaling maghinang. Ang pangunahing problema ay sa simula, maghinang ako ng dalawang ilaw, ngunit hindi ko agad sinakop ang bahagi ng pagkakalantad. Kaya't kapag ang dalawang bahagi ng wires ay magkadikit. Maikli ito.
Hakbang 2: Hakbang 2: Isulat ang Code
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; taas ng linya: 15.0px; font: 12.0px Times; kulay: # 000000; background-color: #ffffff}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; taas ng linya: 15.0px; font: 12.0px Times; kulay: # 000000; background-color: #ffffff; min-taas: 14.0px} span.s1 {font-kerning: none}
Hakbang 2: Isulat ang Code
/*********************************************************************
Ito ay isang halimbawa para sa aming nRF52 batay sa mga module ng Bluefruit LE
Pumili ng isa ngayon sa adafruit shop!
Namumuhunan ang adafruit ng oras at mga mapagkukunan na nagbibigay ng bukas na source code na ito, mangyaring suportahan ang Adafruit at open-source hardware sa pamamagitan ng pagbili
mga produkto mula sa Adafruit!
Lisensya ng MIT, suriin ang LICENSE para sa karagdagang impormasyon
Lahat ng teksto sa itaas, at ang splash screen sa ibaba ay dapat na isama sa
anumang muling pamamahagi
*********************************************************************
/ Ang sketch na ito ay inilaan upang magamit sa kontrol ng NeoPixel
// sa ibabaw ng BlueFuit LE Connect mobile application ng Adafruit.
/
/ - Compile at flash ang sketch na ito sa nRF52 Feather
// - Buksan ang Bluefruit LE Connect app
// - Lumipat sa NeoPixel utility
// - I-click ang pindutang 'kumonekta' upang magtaguyod ng isang koneksyon at
// ipadala ang meta-data tungkol sa layout ng pixel
// - Gamitin ang NeoPixel utility upang mai-update ang mga pixel sa iyong aparato
/ * TANDAAN: Ang sketch na ito ay kinakailangan ng hindi bababa sa bersyon 1.1.0 ng Adafruit_Neopixel !!! * /
# isama
# isama
# isama
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
# tukuyin ang PIN 16 / * Pin ang ginamit upang himukin ang NeoPixels * /
# tukuyin ang MAXCOMPONENTS 4
uint8_t * pixelBuffer = NULL;
uint8_t lapad = 0;
uint8_t taas = 0;
uint8_t stride;
uint8_t mga bahagiValue;
bool ay 400Hz;
uint8_t mga bahagi = 3; // 3 at 4 lamang ang may wastong halaga
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE Serbisyo
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
walang bisa ang pag-setup ()
{
Serial.begin (115200);
habang (! Serial) pagkaantala (10); // para sa nrf52840 kasama ang katutubong usb
Serial.println ("Adafruit Bluefruit Neopixel Test");
Serial.println ("-----------------");
Serial.println ();
Serial.println ("Mangyaring kumonekta gamit ang application na Bluefruit Connect LE");
// Config Neopixels
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Suriin ang bluefruit.h para sa mga sinusuportahang halaga
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Upang maging pare-pareho ang OTA DFU dapat idagdag muna kung mayroon ito
bledfu.begin ();
// Configure and Start Device Information Service
bledis.setManufaktur ("Adafruit Industries");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// I-configure at simulan ang serbisyo ng BLE UART
bleuart.begin ();
// I-set up at simulan ang advertising
startAdv ();
}
void startAdv (walang bisa)
{
// Advertising packet
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Isama ang bluart ng 128-bit uuid
Bluefruit. Advertising.addService (bleuart);
// Secondary Scan Response packet (opsyonal)
// Dahil walang puwang para sa 'Pangalan' sa Advertising packet
Bluefruit. ScanResponse.addName ();
/ * Simulan ang Advertising
* - Paganahin ang auto advertising kung naka-disconnect
* - Agwat: mabilis na mode = 20 ms, mabagal na mode = 152.5 ms
* - Ang timeout para sa mabilis na mode ay 30 segundo
* - Start (timeout) na may timeout = 0 ay mag-a-advertise magpakailanman (hanggang sa konektado)
*
* Para sa inirekumendang agwat ng advertising
*
*/
Bluefruit. Advertising.restartOnDisconnect (totoo);
Bluefruit. Advertising.setInterval (32, 244); // sa yunit ng 0.625 ms
Bluefruit. Advertising.setFastTimeout (30); // bilang ng mga segundo sa mabilis na mode
Bluefruit. Advertising.start (0); // 0 = Huwag itigil ang advertising pagkatapos ng segundo
}
void connect_callback (uint16_t conn_handle)
{
// Kunin ang sanggunian sa kasalukuyang koneksyon
BLEConnection * koneksyon = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
koneksyon-> getPeerName (central_name, sizeof (central_name));
Serial.print ("Nakakonekta sa");
Serial.println (central_name);
Serial.println ("Mangyaring piliin ang tab na 'Neopixels', i-click ang 'Connect' at magsaya");
}
walang bisa loop ()
{
// Nakatanggap ng data ang echo
kung (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int command = bleuart.read ();
lumipat (utos) {
case 'V': {// Kumuha ng Bersyon
commandVersion ();
pahinga;
}
case 'S': {// Mga sukat ng pag-set up, mga bahagi, hakbang-hakbang…
commandSetup ();
pahinga;
}
case 'C': {// Malinaw na may kulay
commandClearColor ();
pahinga;
}
case 'B': {// Itakda ang Liwanag
commandSetBightness ();
pahinga;
}
case 'P': {// Itakda ang Pixel
commandSetPixel ();
pahinga;
}
case 'I': {// Tumanggap ng bagong imahe
commandImage ();
pahinga;
}
}
}
}
void swapBuffers ()
{
uint8_t * base_addr = pixelBuffer;
int pixelIndex = 0;
para sa (int j = 0; j <taas; j ++)
{
para sa (int i = 0; i <lapad; i ++) {
kung (mga sangkap == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2)));
}
iba pa {
neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2), * (base_addr + 3)));
}
base_addr + = mga bahagi;
pixelIndex ++;
}
pixelIndex + = stride - lapad; // Ilipat ang pixelIndex sa susunod na hilera (isinasaalang-alang ang hakbang)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Command: Bersyon na suriin"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Command: Setup"));
lapad = bleuart.read ();
taas = bleuart.read ();
stride = bleuart.read ();
mga sangkapValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
mga sangkap = (mga sangkapValue == NEO_RGB || mga sangkapValue == NEO_RBG || mga sangkapValue == NEO_GRB || mga sangkapValue == NEO_GBR || mga sangkapValue == NEO_BRG || mga sangkapValue == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize:% dx% d / n", lapad, taas);
Serial.printf ("\ tstride:% d / n", stride);
Serial.printf ("\ tpixelType% d / n", pixelType);
Serial.printf ("\ tcomponents:% d / n", mga bahagi);
kung (pixelBuffer! = NULL) {
tanggalin ang pixelBuffer;
}
laki ng uint32_t = lapad * taas;
pixelBuffer = bagong uint8_t [laki * ng mga sangkap];
neopixel.updateLength (laki);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Tapos Na
sendResponse ("OK");
}
walang bisa ang commandSetBightness () {
Serial.println (F ("Command: SetBrightness"));
// Basahin ang halaga
uint8_t brightness = bleuart.read ();
// Itakda ang ningning
neopixel.setBightness (ningning);
// Refresh pixel
swapBuffers ();
// Tapos Na
sendResponse ("OK");
}
walang bisa ang commandClearColor () {
Serial.println (F ("Command: ClearColor"));
// Basahin ang kulay
uint8_t kulay [MAXCOMPONENTS];
para sa (int j = 0; j <mga bahagi;) {
kung (bleuart.available ()) {
kulay [j] = bleuart.read ();
j ++;
}
}
// Itakda ang lahat ng mga leds sa kulay
int laki = lapad * taas;
uint8_t * base_addr = pixelBuffer;
para sa (int i = 0; i <size; i ++) {
para sa (int j = 0; j <mga bahagi; j ++) {
* base_addr = kulay [j];
base_addr ++;
}
}
// Ipagpalit ang mga buffer
Serial.println (F ("Nakumpleto ang ClearColor"));
swapBuffers ();
kung (mga sangkap == 3) {
Serial.printf ("\ tclear (% d,% d,% d) n", kulay [0], kulay [1], kulay [2]);
}
iba pa {
Serial.printf ("\ tclear (% d,% d,% d,% d) n", color [0], color [1], color [2], color [3]);
}
// Tapos Na
sendResponse ("OK");
}
walang bisa ang commandSetPixel () {
Serial.println (F ("Command: SetPixel"));
// Basahin ang posisyon
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Basahin ang mga kulay
uint32_t pixelOffset = y * lapad + x;
uint32_t pixelDataOffset = pixelOffset * na mga bahagi;
uint8_t * base_addr = pixelBuffer + pixelDataOffset;
para sa (int j = 0; j <mga bahagi;) {
kung (bleuart.available ()) {
* base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Magtakda ng mga kulay
uint32_t neopixelIndex = y * stride + x;
uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t kulay;
kung (mga sangkap == 3) {
kulay = neopixel. Color (* pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));
Serial.printf ("\ tcolor (% d,% d,% d) n", * pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));
}
iba pa {
kulay = 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, kulay);
neopixel.show ();
// Tapos Na
sendResponse ("OK");
}
void commandImage () {
Serial.printf ("Command: Larawan% dx% d,% d,% d / n", lapad, taas, mga bahagi, hakbang);
// Tumanggap ng bagong buffer ng pixel
int laki = lapad * taas;
uint8_t * base_addr = pixelBuffer;
para sa (int i = 0; i <size; i ++) {
para sa (int j = 0; j <mga bahagi;) {
kung (bleuart.available ()) {
* base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
kung (mga sangkap == 3) {
uint32_t index = i * mga bahagi;
Serial.printf ("\ tp% d (% d,% d,% d) n", i, pixelBuffer [index], pixelBuffer [index + 1], pixelBuffer [index + 2]);
}
*/
}
// Ipagpalit ang mga buffer
Serial.println (F ("Natanggap ang imahe"));
swapBuffers ();
// Tapos Na
sendResponse ("OK");
}
walang bisa ang sendResponse (char const * tugon) {
Serial.printf ("Magpadala ng Tugon:% s / n", tugon);
bleuart.write (tugon, strlen (tugon) * laki ng (char));
}
Hakbang 3: Hakbang 3: Pagbili ng Lampshade
Hakbang 4: Hakbang4: Hilahin Lahat Ito
Inirerekumendang:
Paano Gumawa Talagang Murang Mga Sensor ng Presyon: 6 Hakbang (na may Mga Larawan)
Paano Gumawa ng Tunay na Murang Mga Sensor ng Presyon: Na-hook ako sa paggawa ng mga switch mula sa karaniwang mga item sa sambahayan kani-kanina lamang, at nagpasya akong gumawa ng aking sariling sensor ng presyon sa isang badyet mula sa ilang mga espongha na nahiga ako. Ang dahilan na ito ay naiiba kaysa sa iba pang mga bersyon ng mga sensor ng presyon ng badyet na ika
Gumawa ng isang Talagang Cool Matrix sa Python !: 6 Mga Hakbang
Gumawa ng isang Talagang Cool Matrix sa Python !: Kumusta guys! Ang itinuturo na ito ay magtuturo sa iyo kung paano gumawa ng isang matrix sa Python! Karaniwan, ang mga tao ay gagawa ng isang matrix sa Batch dahil madali ito. Ngunit sa oras na ito, ipapakita ko sa iyo kung paano gumawa ng isang Matrix sa isa sa mga makapangyarihang wika ng computer
Mummybot Circuits Hamon: 6 na Hakbang (na may Mga Larawan)
Mummybot Circuits Hamon: Sa aking Panimula sa klase ng Robotics natutunan namin ang tungkol sa elektrisidad at mga circuit. Upang ipakilala ang aktibidad na ginawa ko ng isang napakaikling slideshow (naka-attach) na tumatagal ng JessyRatFink's Mummybot at nagdaragdag ng mga pangunahing circuit. Binigyan ko ang mga mag-aaral ng hamon
3D KEVA Hamon 2: Kama: 3 Hakbang
3D KEVA Hamon 2: Kama: Maligayang Pagdating sa 3D KEVA Hamon! Handa ka ba para dito? Ang bawat 3D KEVA Hamon ay ipapakita sa mag-aaral ang isang hanay ng 3 mga pagtingin (Itaas, Harap, at Kanan). Gamit lamang ang mga pananaw na ito ang hamon ay iposisyon ang iyong KEVA Planks sa paraang tumutugma sa mga panonood. Isang
4 Foot Bowling Lane para sa Hamon ng Robotics: 4 Mga Hakbang
4 Foot Bowling Lane para sa Hamon ng Robotics: Para sa aming programa ng robotics sa tag-init nagtatrabaho ako sa pag-update ng ilang mga hamon na ginawa namin maraming taon na ang nakalilipas at nagpapakilala ng ilang mga bagong ideya. Ang unang ito ay isa na nagawa natin dati, ngunit hindi ganito. Dati, gumamit kami ng mga sahig na bowling pin na napatunayan din