Tabla de contenido:
- Paso 1: Paso 1: Suelde el circuito
- Paso 2: Paso 2: Escriba el código
- Paso 3: Paso 3: Compra de pantalla
- Paso 4: Paso 4: júntelo todo
- Paso 5: Paso 5: Hacer naipes
Video: Realmente desafío: 5 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
El mundo moderno requiere que los humanos salgan de lo físico y vivan dentro de lo digital.
Con la aparición de Al y la proliferación de la tecnología, la gente confía demasiado en la máquina y cree que siempre es correcta.
"Really" tiene la intención de sacudir esta falsa confianza mediante la creación de una prueba de detector de mentiras falso. La gente creerá fácilmente que Really está funcionando, pero cuando se brindan respuestas falsas, se debilitará su confianza ciega en la tecnología.
Paso 1: Paso 1: Suelde el circuito
Porque mi trabajo solo tiene una luz, por lo que es muy fácil de soldar. El principal problema es al principio, soldo dos luces, pero no cubrí la parte de exposición de inmediato. Entonces, cuando la parte de los dos cables se toquen. Es un cortocircuito.
Paso 2: Paso 2: Escriba el código
p.p1 {margen: 0.0px 0.0px 0.0px 0.0px; altura de línea: 15.0px; fuente: 12.0px Times; color: # 000000; color de fondo: #ffffff}
p.p2 {margen: 0.0px 0.0px 0.0px 0.0px; altura de línea: 15.0px; fuente: 12.0px Times; color: # 000000; color de fondo: #ffffff; min-height: 14.0px} span.s1 {font-kerning: none}
Paso 2: escriba el código
/*********************************************************************
Este es un ejemplo de nuestros módulos Bluefruit LE basados en nRF52
¡Compra uno hoy en la tienda de adafruit!
Adafruit invierte tiempo y recursos en proporcionar este código fuente abierto, apoye Adafruit y el hardware de código abierto comprando
productos de Adafruit!
Licencia MIT, consulte LICENCIA para obtener más información
Todo el texto anterior y la pantalla de presentación a continuación deben incluirse en
cualquier redistribución
*********************************************************************
/ Este boceto está destinado a ser utilizado con el control NeoPixel.
// superficie en la aplicación móvil Bluefruit LE Connect de Adafruit.
/
/ - Compile y muestre este boceto en el nRF52 Feather
// - Abra la aplicación Bluefruit LE Connect
// - Cambiar a la utilidad NeoPixel
// - Haga clic en el botón 'conectar' para establecer una conexión y
// envía los metadatos sobre el diseño de píxeles
// - Use la utilidad NeoPixel para actualizar los píxeles en su dispositivo
/ * NOTA: ¡¡¡Este boceto requiere al menos la versión 1.1.0 de Adafruit_Neopixel !!! * /
#incluir
#incluir
#incluir
#define NEOPIXEL_VERSION_STRING "Neopixel v2.0"
#define PIN 16 / * Pin utilizado para controlar los NeoPixels * /
#define MAXCOMPONENTS 4
uint8_t * pixelBuffer = NULL;
uint8_t ancho = 0;
uint8_t altura = 0;
uint8_t stride;
uint8_t componentsValue;
bool es 400Hz;
uint8_t componentes = 3; // solo 3 y 4 son valores válidos
Adafruit_NeoPixel neopixel = Adafruit_NeoPixel ();
// Servicio BLE
BLEDfu bledfu;
BLEDis bledis;
BLEUart bleuart;
configuración vacía ()
{
Serial.begin (115200);
while (! Serial) delay (10); // para nrf52840 con usb nativo
Serial.println ("Prueba de Adafruit Bluefruit Neopixel");
Serial.println ("--------------------------------");
Serial.println ();
Serial.println ("Conéctese mediante la aplicación Bluefruit Connect LE");
// Configurar Neopixels
neopixel.begin ();
// Init Bluefruit
Bluefruit.begin ();
Bluefruit.setTxPower (4); // Compruebe bluefruit.h para conocer los valores admitidos
Bluefruit.setName ("Bluefruit52");
Bluefruit. Periph.setConnectCallback (connect_callback);
// Para ser consistente, OTA DFU debe agregarse primero si existe
bledfu.begin ();
// Configurar e iniciar el servicio de información del dispositivo
bledis.setManufacturer ("Industrias Adafruit");
bledis.setModel ("Bluefruit Feather52");
bledis.begin ();
// Configurar e iniciar el servicio BLE UART
bleuart.begin ();
// Configurar y empezar a anunciar
startAdv ();
}
void startAdv (vacío)
{
// Paquete publicitario
Bluefruit. Advertising.addFlags (BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE);
Bluefruit. Advertising.addTxPower ();
// Incluir uuid bleuart de 128 bits
Bluefruit. Advertising.addService (bleuart);
// Paquete de respuesta de escaneo secundario (opcional)
// Dado que no hay espacio para 'Nombre' en el paquete de publicidad
Bluefruit. ScanResponse.addName ();
/ * Iniciar publicidad
* - Habilitar la publicidad automática si está desconectado
* - Intervalo: modo rápido = 20 ms, modo lento = 152,5 ms
* - El tiempo de espera para el modo rápido es de 30 segundos
* - Inicio (tiempo de espera) con tiempo de espera = 0 se anunciará para siempre (hasta que se conecte)
*
* Para intervalo publicitario recomendado
*
*/
Bluefruit. Advertising.restartOnDisconnect (verdadero);
Bluefruit. Advertising.setInterval (32, 244); // en unidad de 0,625 ms
Bluefruit. Advertising.setFastTimeout (30); // número de segundos en modo rápido
Bluefruit. Advertising.start (0); // 0 = No dejes de anunciar después de n segundos
}
void connect_callback (uint16_t conn_handle)
{
// Obtener la referencia a la conexión actual
BLEConnection * conexión = Bluefruit. Connection (conn_handle);
char central_name [32] = {0};
conexión-> getPeerName (central_name, sizeof (central_name));
Serial.print ("Conectado a");
Serial.println (nombre_central);
Serial.println ("Seleccione la pestaña 'Neopixels', haga clic en 'Conectar' y diviértase");
}
bucle vacío ()
{
// Eco de datos recibidos
si (Bluefruit.connected () && bleuart.notifyEnabled ())
{
int comando = bleuart.read ();
cambiar (comando) {
case 'V': {// Obtener versión
commandVersion ();
rotura;
}
case 'S': {// Configurar dimensiones, componentes, zancada …
commandSetup ();
rotura;
}
case 'C': {// Limpiar con color
commandClearColor ();
rotura;
}
case 'B': {// Establecer brillo
commandSetBrightness ();
rotura;
}
case 'P': {// Establecer píxel
commandSetPixel ();
rotura;
}
case 'I': {// Recibir nueva imagen
commandImage ();
rotura;
}
}
}
}
void swapBuffers ()
{
uint8_t * base_addr = pixelBuffer;
int pixelIndex = 0;
para (int j = 0; j <altura; j ++)
{
para (int i = 0; i <ancho; i ++) {
si (componentes == 3) {
neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2)));
}
demás {
neopixel.setPixelColor (pixelIndex, neopixel. Color (* base_addr, * (base_addr + 1), * (base_addr + 2), * (base_addr + 3)));
}
base_addr + = componentes;
pixelIndex ++;
}
pixelIndex + = zancada - ancho; // Mover pixelIndex a la siguiente fila (tener en cuenta el paso)
}
neopixel.show ();
}
void commandVersion () {
Serial.println (F ("Comando: Verificación de versión"));
sendResponse (NEOPIXEL_VERSION_STRING);
}
void commandSetup () {
Serial.println (F ("Comando: Configuración"));
ancho = bleuart.read ();
altura = bleuart.read ();
zancada = bleuart.read ();
componentsValue = bleuart.read ();
is400Hz = bleuart.read ();
neoPixelType pixelType;
pixelType = componentsValue + (¿400Hz? NEO_KHZ400: NEO_KHZ800);
componentes = (componentsValue == NEO_RGB || componentsValue == NEO_RBG || componentsValue == NEO_GRB || componentsValue == NEO_GBR || componentsValue == NEO_BRG || componentsValue == NEO_BGR)? 3: 4;
Serial.printf ("\ tsize:% dx% d / n", ancho, alto);
Serial.printf ("\ tstride:% d / n", zancada);
Serial.printf ("\ tpixelType% d / n", pixelType);
Serial.printf ("\ tcomponents:% d / n", componentes);
if (pixelBuffer! = NULL) {
eliminar pixelBuffer;
}
uint32_t tamaño = ancho * alto;
pixelBuffer = new uint8_t [tamaño * componentes];
neopixel.updateLength (tamaño);
neopixel.updateType (pixelType);
neopixel.setPin (PIN);
// Hecho
sendResponse ("Aceptar");
}
void commandSetBrightness () {
Serial.println (F ("Command: SetBrightness"));
// Leer valor
uint8_t brillo = bleuart.read ();
// Establecer brillo
neopixel.setBrightness (brillo);
// Actualizar píxeles
swapBuffers ();
// Hecho
sendResponse ("Aceptar");
}
void commandClearColor () {
Serial.println (F ("Comando: ClearColor"));
// Leer color
uint8_t color [MAXCOMPONENTS];
para (int j = 0; j <componentes;) {
if (bleuart.available ()) {
color [j] = bleuart.read ();
j ++;
}
}
// Establecer todos los leds a color
int tamaño = ancho * alto;
uint8_t * base_addr = pixelBuffer;
para (int i = 0; i <tamaño; i ++) {
para (int j = 0; j <componentes; j ++) {
* base_addr = color [j];
base_addr ++;
}
}
// Intercambiar búferes
Serial.println (F ("ClearColor completado"));
swapBuffers ();
si (componentes == 3) {
Serial.printf ("\ tclear (% d,% d,% d) n", color [0], color [1], color [2]);
}
demás {
Serial.printf ("\ tclear (% d,% d,% d,% d) n", color [0], color [1], color [2], color [3]);
}
// Hecho
sendResponse ("Aceptar");
}
void commandSetPixel () {
Serial.println (F ("Comando: SetPixel"));
// Leer posición
uint8_t x = bleuart.read ();
uint8_t y = bleuart.read ();
// Leer colores
uint32_t pixelOffset = y * ancho + x;
uint32_t pixelDataOffset = pixelOffset * componentes;
uint8_t * base_addr = pixelBuffer + pixelDataOffset;
para (int j = 0; j <componentes;) {
if (bleuart.available ()) {
* base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
// Establecer colores
uint32_t neopixelIndex = y * zancada + x;
uint8_t * pixelBufferPointer = pixelBuffer + pixelDataOffset;
uint32_t color;
si (componentes == 3) {
color = neopixel. Color (* pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));
Serial.printf ("\ tcolor (% d,% d,% d) n", * pixelBufferPointer, * (pixelBufferPointer + 1), * (pixelBufferPointer + 2));
}
demás {
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, color);
neopixel.show ();
// Hecho
sendResponse ("Aceptar");
}
void commandImage () {
Serial.printf ("Comando: Imagen% dx% d,% d,% d / n", ancho, alto, componentes, paso);
// Recibe un nuevo búfer de píxeles
int tamaño = ancho * alto;
uint8_t * base_addr = pixelBuffer;
para (int i = 0; i <tamaño; i ++) {
para (int j = 0; j <componentes;) {
if (bleuart.available ()) {
* base_addr = bleuart.read ();
base_addr ++;
j ++;
}
}
/*
si (componentes == 3) {
uint32_t index = i * componentes;
Serial.printf ("\ tp% d (% d,% d,% d) n", i, pixelBuffer [índice], pixelBuffer [índice + 1], pixelBuffer [índice + 2]);
}
*/
}
// Intercambiar búferes
Serial.println (F ("Imagen recibida"));
swapBuffers ();
// Hecho
sendResponse ("Aceptar");
}
void sendResponse (char constante * respuesta) {
Serial.printf ("Enviar respuesta:% s / n", respuesta);
bleuart.write (respuesta, strlen (respuesta) * sizeof (char));
}
Paso 3: Paso 3: Compra de pantalla
Paso 4: Paso 4: júntelo todo
Recomendado:
Cómo hacer sensores de presión realmente baratos: 6 pasos (con imágenes)
Cómo hacer sensores de presión realmente baratos: Últimamente me enganché a hacer interruptores de artículos domésticos comunes, y decidí hacer mi propio sensor de presión con un presupuesto limitado con algunas esponjas que tenía por ahí. La razón por la que esto es diferente a otras versiones de sensores de presión económicos es que
Desafío de circuitos de Mummybot: 6 pasos (con imágenes)
Desafío de circuitos de Mummybot: En mi clase de Introducción a la robótica hemos estado aprendiendo sobre la electricidad y los circuitos. Para presentar la actividad, hice una presentación de diapositivas muy corta (adjunta) que toma Mummybot de JessyRatFink y agrega circuitos básicos. Les di a los estudiantes el desafío
Carril de bolos de 4 pies para el desafío de robótica: 4 pasos
4 Foot Bowling Lane para el desafío de robótica: para nuestro programa de robótica de verano, estoy trabajando para actualizar algunos desafíos que hicimos hace varios años y presentar algunas ideas nuevas. Este primero es uno que hemos hecho antes, pero no así. Anteriormente, usábamos bolos de madera que también resultaron
¡Motor USB realmente, REALMENTE fácil !: 3 pasos
¡Realmente, REALMENTE fácil motor USB !: ¡Por fin, mi segundo instructable! Este es un ventilador para usted o su computadora que funciona con cualquier puerto USB disponible. Lo recomiendo para principiantes en electrónica, hasta para profesionales. ¡Es fácil y divertido, puedes hacerlo en literalmente cinco minutos! VERDADERO
Una forma realmente simple / fácil / no complicada de hacer que las personas / humanos / animales / robots parezcan tener una visión de calor realmente genial / brillante (color de su elección) usando GIMP: 4 pasos
Una forma realmente simple / fácil / no complicada de hacer que las personas / humanos / animales / robots parezcan tener una visión de calor realmente genial / brillante (color de su elección) usando GIMP: lea … el … título