1.8 TFT LCD magnetic field - mcworkshop

Vai ai contenuti

1.8 TFT LCD magnetic field

Technical Pages
1.8 TFT LCD magnetic field




click sulle immagini per ingrandire

Il circuito si basa sul classico ingresso analogico appeso o flottante. Viene utilizzato un partitore in modo che la tensione si attesti a 2.5V max. La R da 3.3M può essere sostituita con un valore più basso. Il circuito è in sperimentazione. Dalle prime prove effettuate reagisce bene all'elettricità statica prodotta dallo sfilamento di un maglione sintetico, l'avvicinamento di un phone in accensione... Lo sketch è pronto per sostituire l'antenna e il partitore con un DHT 11 o 22. Memorizza il valore minimo e massimo della fluttuazione su A0 oppure dei valori forniti da un DHT.


click per ingrandire

Lo sketch lo trovate qui (click sulla scritta)

/* Attività elettromagnetica TFT 1.8
25 aprile 2021 by MCWorkshop.
This example code is in the public domain.
fare partitore di tensione in A0
da +5 R da 10K
da GND R da 10K
l'estremità dei due resistori va insieme e si collega R da 3.3M
dall'altra parte della R da 3.3 M antenna e ingresso PIN
utilizzabile DHT 11 o DHT 22
lunghezza antenna 20cm
*/
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#include <EEPROM.h>
//#include "DHT.h"
//#define DHTPIN A0
//#define DHTTYPE DHT11
//DHT dht(DHTPIN, DHTTYPE);
#define TFT_CS        10
#define TFT_RST        8
#define TFT_DC         9
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
int tmax;
int tmin = 40;
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
void setup() {
// initialize the display
//  dht.begin();
 tft.initR(INITR_BLACKTAB);
 tft.setRotation(0);
 tft.fillScreen(ST77XX_BLACK);
 pinMode(A0, INPUT);
}
void loop(void)
{
 int sensorValue = analogRead(A0);
 sensorValue = map(sensorValue, 0, 1023, 0, 100); //map(value, fromLow, fromHigh, toLow, toHigh)
// int h = dht.readHumidity();
// int t = dht.readTemperature();
 delay (100);
 tft.setCursor(25, 30);
 tft.setTextColor(CYAN);
 tft.setTextSize(1);
 tft.println("magnetic field");
 tft.setCursor(45, 50);
 tft.setTextColor(WHITE, BLACK);
 tft.setTextSize(3);
 tft.println(sensorValue);
 /*
   tft.setCursor(40,60);
   tft.setTextColor(CYAN);
   tft.setTextSize(1);
   tft.println("Umidita'");
   tft.setCursor(50,75);
   tft.setTextColor(WHITE, BLACK);
   tft.setTextSize(3);
   tft.println(sensorValue);
 */
 tft.fillRect(0, 100, 128, 1, CYAN); // (origine,altezza, 128,spessore, RED);
 if (sensorValue > tmax) {
   tmax = sensorValue;
   EEPROM.write(0, sensorValue);
 }
 if (sensorValue < tmin) {
   tmin = sensorValue;
   EEPROM.write(2, sensorValue);
 }
 tft.setCursor(10, 125);
 tft.setTextColor(CYAN);
 tft.setTextSize(1);
 tft.println("V. Max");
 tft.setCursor(15, 137);
 tft.setTextColor(WHITE, BLACK);
 tft.setTextSize(2);
 tft.println(tmax);
 //***************
 tft.setCursor(85, 125);
 tft.setTextColor(CYAN);
 tft.setTextSize(1);
 tft.println("V. Min");
 tft.setCursor(90, 137);
 tft.setTextColor(WHITE, BLACK);
 tft.setTextSize(2);
 tft.println(tmin);
 //***************
 if (tmin <= 38 || tmax >= 62) // || shift \ si chiama pipe
 {
   tft.setCursor(25, 10);
   tft.setTextColor(RED);
   tft.setTextSize(2);
   tft.print("ALLARM");
 }
}

Questo sketch utilizza un modo un pò particolare di lettura.
//https://github.com/klauscam/Arduino-Lightning-Detector
// aprile 2021
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#include <EEPROM.h>
//#include "DHT.h"
//#define DHTPIN A0
//#define DHTTYPE DHT11
//DHT dht(DHTPIN, DHTTYPE);
#define TFT_CS        10
#define TFT_RST        8
#define TFT_DC         9
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
//int tmax;
int tmin = 40;
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
#define FASTADC 1
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
int data = 512;
int storage[512];
long batchStarted;
long batchEnded;
int reading;
int count;
int maximum;
int minimum;
bool toSend;
void setup() {
#if FASTADC
 sbi(ADCSRA, ADPS2) ;
 cbi(ADCSRA, ADPS1) ;
 cbi(ADCSRA, ADPS0) ;
#endif
 Serial.begin(115200);
 pinMode(A0, INPUT);
 Serial.println(micros());
 batchStarted = 0;
 batchEnded = 0;
 reading = 0;
 count = 0;
 maximum = 0;
 minimum = 1023;
 toSend = false;
 tft.initR(INITR_BLACKTAB);
 tft.setRotation(0);
 tft.fillScreen(ST77XX_BLACK);
}
void loop() {
// int maximum;
//int minimum;
 reading = (analogRead(A0));
 reading = map(reading, 0, 1023, 0, 100); //map(value, fromLow, fromHigh, toLow, toHigh)
 storage[count] = reading;
 if (reading > maximum) {
  maximum = reading;
   EEPROM.write(0, reading);
 }
 if (reading < minimum) {
   minimum = reading;
   EEPROM.write(2, reading);
 }
 if ((!toSend) && (count != 0) && ((reading > storage[count - 1] + 10) || (reading < storage[count - 1] - 10))) {
   toSend = true;
 }
 count = count + 1;
 if ((count == 512) && (toSend))
 {
   count = 0;
   batchEnded = millis();
   sendData();
   batchStarted = millis();
 }
 else if (count == 512) {
   count = 0;
   batchEnded = millis();
   //sendData();
   batchStarted = millis();
   //****************************
    tft.setCursor(25, 30);
 tft.setTextColor(CYAN);
 tft.setTextSize(1);
 tft.println("magnetic field");
 tft.setCursor(45, 50);
 tft.setTextColor(WHITE, BLACK);
 tft.setTextSize(3);
 tft.println();
 tft.fillRect(0, 100, 128, 1, CYAN); // (origine,altezza, 128,spessore, RED);
  tft.setCursor(10, 125);
 tft.setTextColor(CYAN);
 tft.setTextSize(1);
 tft.println("V. Max");
 tft.setCursor(15, 137);
 tft.setTextColor(WHITE, BLACK);
 tft.setTextSize(2);
 tft.println(maximum);
 //***************
 tft.setCursor(85, 125);
 tft.setTextColor(CYAN);
 tft.setTextSize(1);
 tft.println("V. Min");
 tft.setCursor(90, 137);
 tft.setTextColor(WHITE, BLACK);
 tft.setTextSize(2);
 tft.println(minimum);
 }
}
void sendData()
{
 Serial.print(">>>");
 Serial.println(batchStarted);
 for (int i = 0; i < data; i++) {
   Serial.println(storage[i]);
 }
 Serial.print("<<<");
 Serial.println(batchEnded);
 Serial.println("END");
 toSend = false;
}
Sito non a scopo di lucro /sito didattico, hobbistico / no pubblicità / no aggiornamento periodico / schemi e codici di pubblico dominio
ultimo aggiornamento: 12/09/21
Privacy Policy
Cookie Policy
Clicca sulle scritte!
Torna ai contenuti