Sadržaj:
- Korak 1: Korak 1: Lemljenje kruga
- Korak 2: Korak 2: Napišite kôd
- Korak 3: Korak 3: Kupnja sjenila
- Korak 4: Korak 4: Povucite sve zajedno
- Korak 5: Korak 5: Izrada karata za igru
Video: Zaista izazov: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:34
Suvremeni svijet zahtijeva od ljudi da izađu iz fizičkog i žive unutar digitalnog.
Pojavom Al i širenjem tehnologije ljudi previše vjeruju stroju i vjeruju da je uvijek ispravan.
"Stvarno" namjerava poljuljati ovo lažno povjerenje stvaranjem lažnog testa detektora laži. Ljudi će lako povjerovati da Doista djeluje, ali ako se dobiju lažni odgovori, poljuljat će njihovo slijepo povjerenje u tehnologiju.
Korak 1: Korak 1: Lemljenje kruga
Budući da moji radovi imaju samo jedno svjetlo, pa ih je vrlo lako lemiti. Glavni problem je na početku, lemio sam dva svjetla, ali nisam odmah pokrio dio ekspozicije. Dakle, kad se dvije žice dijele zajedno. Kratko je ispalo.
Korak 2: Korak 2: Napišite kôd
p.p1 {margina: 0.0px 0.0px 0.0px 0.0px; linija-visina: 15,0px; font: 12,0px puta; boja: #000000; boja pozadine: #ffffff}
p.p2 {margina: 0.0px 0.0px 0.0px 0.0px; linija-visina: 15,0px; font: 12,0px puta; boja: #000000; background-color: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Korak 2: Napišite kôd
/*********************************************************************
Ovo je primjer za naše module Bluefruit LE zasnovane na nRF52
Odaberite jednu danas u trgovini adafruit!
Adafruit ulaže vrijeme i resurse pružajući ovaj otvoreni kod, molimo vas da kupnjom podržite Adafruit i hardver otvorenog koda
proizvodi iz Adafruta!
MIT licencu, provjerite LICENCE za više informacija
Sav gornji tekst i donji ekran ispod moraju biti uključeni u
svaku preraspodjelu
*********************************************************************
/ Ova skica namjerava se koristiti s NeoPixel kontrolom
// površina u mobilnoj aplikaciji Bluefruit LE Connect tvrtke Adafruit.
/
/ - Sastavite i bljesnite ovu skicu na nRF52 pero
// - Otvorite aplikaciju Bluefruit LE Connect
// - Prebacite se na uslužni program NeoPixel
// - Pritisnite gumb 'poveži se' za uspostavu veze i
// šalje metapodatke o rasporedu piksela
// - Pomoću uslužnog programa NeoPixel ažurirajte piksele na svom uređaju
/* NAPOMENA: Ova skica je zahtijevala barem verziju 1.1.0 Adafruit_Neopixela !!! */
#uključi
#uključi
#uključi
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * Pin koji se koristi za pogon NeoPixela * /
#definirajte MAXKOMPONENTE 4
uint8_t *pixelBuffer = NULL;
uint8_t širina = 0;
uint8_t visina = 0;
uint8_t korak;
uint8_t componentsValue;
bool je 400Hz;
uint8_t komponente = 3; // samo su 3 i 4 valjane vrijednosti
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// BLE usluga
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
void setup ()
{
Serial.begin (115200);
while (! Serijsko) kašnjenje (10); // za nrf52840 s izvornim USB -om
Serial.println ("Neopixel test Adafruit Bluefruit");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Molimo vas da se povežete pomoću aplikacije Bluefruit Connect LE");
// Konfiguriranje neopiksela
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Provjerite podržavaju li bluefruit.h vrijednosti
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// OTA DFU treba dodati ako postoji ako postoji
bledfu.begin ();
// Konfiguriranje i pokretanje informacijske usluge uređaja
bledis.setManufacturer ("Adafruit Industries");
bledis.setModel ("Perje plavog voća52");
bledis.begin ();
// Konfigurirajte i pokrenite BLE UART uslugu
bleuart.begin ();
// Postavljanje i početak oglašavanja
startAdv ();
}
void startAdv (void)
{
// Reklamni paket
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Uključuje bleuart 128-bitni uuid
Bluefruit. Advertising.addService (bleuart);
// Sekundarni paket odgovora na skeniranje (izborno)
// Budući da u oglasnom paketu nema mjesta za 'Ime'
Bluefruit. ScanResponse.addName ();
/* Počnite se oglašavati
* - Omogućite automatsko oglašavanje ako je isključeno
* - Interval: brzi način = 20 ms, spori način = 152,5 ms
* - Vrijeme čekanja za brzi način rada je 30 sekundi
* - Start (timeout) s timeout = 0 će se oglašavati zauvijek (dok se ne poveže)
*
* Za preporučeni interval oglašavanja
*
*/
Bluefruit. Advertising.restartOnDisconnect (istina);
Bluefruit. Advertising.setInterval (32, 244); // u jedinici od 0,625 ms
Bluefruit. Advertising.setFastTimeout (30); // broj sekundi u brzom načinu rada
Bluefruit. Advertising.start (0); // 0 = Ne prekidajte oglašavanje nakon n sekundi
}
void connect_callback (uint16_t conn_handle)
{
// Dobivanje reference na trenutnu vezu
BLEConnection* connection = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
veza-> getPeerName (centralno_ime, veličinaof (središnje_ime));
Serial.print ("Povezano s");
Serial.println (centralno_ime);
Serial.println ("Molimo odaberite karticu" Neopikseli ", kliknite" Poveži se "i zabavite se");
}
void loop ()
{
// Odjek primljenih podataka
if (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int naredba = bleuart.read ();
switch (naredba) {
case 'V': {// Preuzmi verziju
commandVersion ();
pauza;
}
case 'S': {// Postavke dimenzija, komponente, korak …
commandSetup ();
pauza;
}
slučaj 'C': {// Očisti bojom
commandClearColor ();
pauza;
}
slučaj 'B': {// Postavi svjetlinu
commandSetBrightness ();
pauza;
}
case 'P': {// Postavi Pixel
commandSetPixel ();
pauza;
}
case 'I': {// Primite novu sliku
commandImage ();
pauza;
}
}
}
}
void swapBuffers ()
{
uint8_t *base_addr = pixelBuffer;
int pixelIndex = 0;
za (int j = 0; j <visina; j ++)
{
za (int i = 0; i <širina; i ++) {
if (komponente == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2)));
}
drugo {
neopixel.setPixelColor (pixelIndex, neopixel. Color (*base_addr, *(base_addr+1), *(base_addr+2), *(base_addr+3)));
}
base_addr+= komponente;
pixelIndex ++;
}
pixelIndex += stride - width; // Premještanje pixelIndex u sljedeći redak (uzmite u obzir korak)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Naredba: provjera verzije"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Naredba: Postavljanje"));
width = bleuart.read ();
visina = bleuart.read ();
stride = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (is400Hz? NEO_KHZ400: NEO_KHZ800);
komponente = (komponenteVrijednost == NEO_RGB || komponenteVrijednost == NEO_RBG || komponenteVrijednost == NEO_GRB || komponenteVrijednost == NEO_GBR || komponenteVrijednost == NEO_BRG || komponenteVrijednost == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize: %dx %d / n", širina, visina);
Serial.printf ("\ tstride: %d / n", stride);
Serial.printf ("\ tpixelType %d / n", pixelType);
Serial.printf ("\ tkomponente: %d / n", komponente);
if (pixelBuffer! = NULL) {
delete pixelBuffer;
}
uint32_t veličina = širina*visina;
pixelBuffer = novi uint8_t [veličina*komponente];
neopixel.updateLength (veličina);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Gotovo
sendResponse ("U redu");
}
void commandSetBrightness () {
Serial.println (F ("Naredba: SetBrightness"));
// Očitana vrijednost
uint8_t svjetlina = bleuart.read ();
// Postavljanje svjetline
neopixel.setBrightness (svjetlina);
// Osvježavanje piksela
swapBuffers ();
// Gotovo
sendResponse ("U redu");
}
void commandClearColor () {
Serial.println (F ("Naredba: ClearColor"));
// Čitanje boje
uint8_t boja [MAXCOMPONENTS];
za (int j = 0; j <komponente;) {
if (bleuart.available ()) {
boja [j] = bleuart.read ();
j ++;
}
}
// Postavi sve LED diode u boju
int veličina = širina * visina;
uint8_t *base_addr = pixelBuffer;
za (int i = 0; i <veličina; i ++) {
za (int j = 0; j <komponente; j ++) {
*base_addr = boja [j];
base_addr ++;
}
}
// Zamijenite međuspremnike
Serial.println (F ("ClearColor dovršeno"));
swapBuffers ();
if (komponente == 3) {
Serial.printf ("\ tclear (%d, %d, %d) n", boja [0], boja [1], boja [2]);
}
drugo {
Serial.printf ("\ tclear (%d, %d, %d, %d) n", boja [0], boja [1], boja [2], boja [3]);
}
// Gotovo
sendResponse ("U redu");
}
void commandSetPixel () {
Serial.println (F ("Naredba: SetPixel"));
// Očitajte položaj
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Čitanje boja
uint32_t pixelOffset = y*širina+x;
uint32_t pixelDataOffset = pixelOffset*komponente;
uint8_t *base_addr = pixelBuffer+pixelDataOffset;
za (int j = 0; j <komponente;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Postavljanje boja
uint32_t neopixelIndex = y*korak+x;
uint8_t *pixelBufferPointer = pixelBuffer + pixelDataOffset;
boja uint32_t;
if (komponente == 3) {
color = neopixel. Color (*pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
Serial.printf ("\ tcolor (%d, %d, %d) n", *pixelBufferPointer, *(pixelBufferPointer+1), *(pixelBufferPointer+2));
}
drugo {
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, boja);
neopixel.show ();
// Gotovo
sendResponse ("U redu");
}
void commandImage () {
Serial.printf ("Naredba: Slika %dx %d, %d, %d / n", širina, visina, komponente, korak);
// Primanje novog međuspremnika piksela
int veličina = širina * visina;
uint8_t *base_addr = pixelBuffer;
za (int i = 0; i <veličina; i ++) {
za (int j = 0; j <komponente;) {
if (bleuart.available ()) {
*base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
if (komponente == 3) {
uint32_t indeks = i*komponente;
Serial.printf ("\ tp %d (%d, %d, %d) n", i, pixelBuffer [indeks], pixelBuffer [indeks+1], pixelBuffer [indeks+2]);
}
*/
}
// Zamijenite međuspremnike
Serial.println (F ("Slika je primljena"));
swapBuffers ();
// Gotovo
sendResponse ("U redu");
}
void sendResponse (char const *odgovor) {
Serial.printf ("Pošalji odgovor: %s / n", odgovor);
bleuart.write (odgovor, strlen (odgovor)*veličinaof (char));
}
Korak 3: Korak 3: Kupnja sjenila
Korak 4: Korak 4: Povucite sve zajedno
Preporučeni:
Kako napraviti zaista jeftine senzore tlaka: 6 koraka (sa slikama)
Kako napraviti zaista jeftine senzore tlaka: U posljednje vrijeme naviknut sam na prebacivanje s uobičajenih kućanskih potrepština i odlučio sam napraviti svoj vlastiti senzor tlaka s ograničenim proračunom od nekoliko spužvi koje sam ležao. Razlog zašto se ovo razlikuje od ostalih verzija proračunskih senzora tlaka je taj
Zaista WiFi Extender: 5 koraka
Zaista WiFi Extender: UvodTruly WiFi Extender je WiFi repetitor baziran na Raspberry Pi Zero W. To je lijepa alternativa komercijalnom WiFi repetitoru koji kombinira jeftine (ispod 10 USD) i visoko prilagodljiv softver. Također može pokrenuti neka rješenja za blokiranje oglasa
Izazov Mummybot Circuits: 6 koraka (sa slikama)
Mummybot Circuits Challenge: U mojem tečaju Uvod u robotiku učili smo o električnoj energiji i krugovima. Za predstavljanje aktivnosti napravio sam vrlo kratki slideshow (u privitku) koji uzima JessyRatFinkov Mummybot i dodaje osnovne sklopove. Učenicima sam dao izazov
3D KEVA izazov 2: Krevet: 3 koraka
3D KEVA izazov 2: Krevet: Dobro došli u 3D KEVA izazov! Jeste li spremni za to? Svaki 3D KEVA izazov predstavit će polazniku skup od 3 prikaza (gore, sprijeda i desno). Korištenje samo ovih pogleda izazov je postaviti vaše KEVA daske na način koji odgovara pogledima
Staza za boćanje 4 stope za izazov robotike: 4 koraka
4 Foot Bowling Lane for Robotics Challenge: Za naš ljetni program robotike radim na ažuriranju nekih izazova koje smo radili prije nekoliko godina i predstavljanju novih ideja. Ovaj prvi smo već radili, ali ne ovako. Ranije smo koristili drvene igle za kuglanje što se pokazalo i