Arduino Giga Development Platform
Obliczymy ostateczną cenę na podstawie wybranego pliku. Sprawdzisz ją i zaakceptujesz przed płatnością.
Zapisane na tym urządzeniu.
This is an Arduino Development platform, the possibilities are endless. Let the work begin.
- Ocena
- 0 / 5
- Polubienia
- 5
- Pobrania
- 31
- Wydruki
- 0
- Wyświetlenia
- 218
- Oceny
- 0
Aktualizacja u źródła:
Informacje o modelu
- Źródło
- Printables
- Kategoria
- Other Gadgets
- Licencja
- Creative Commons — Attribution — Noncommercial
The Model is printed on a creality Ender v1 in white Pla, infill should be 40-50%. with support.
Components:
Arduino Giga R1 Wifi
Arduino Giga Display
Arduino Giga Camera. UC-A67
Micro SD Pmod Module
Rgb Module Digital 18x14mm
Wifi Antenna 40x14mm
Mini Breadboards 35*47*8,5 mm
4x m3 Heat insert D 4.5mm
4x m3 8mm
6x m2 8mm
CODE:
#include <WiFi.h>
#include <SdFat.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME680.h>
#include "Arduino_GigaDisplay_GFX.h"
// Pins
const int SD_CS = 10;
const int LED_R = 4; // Rød RGB PWM pin
const int LED_G = 3; // Grøn RGB PWM pin
const int LED_B = 6; // Blå RGB PWM pin
SdFat sd;
Adafruit_BME680 bme;
GigaDisplay_GFX tft;
// WiFi credentials (kan erstattes med konfigurationsfil)
const char* ssid = "";
const char* password = "";
// SPI-konfiguration
SdSpiConfig spiConfig(SD_CS, SHARED_SPI, SD_SCK_MHZ(25), &SPI1);
// Farver til displayet
#define COLOR_BLACK 0x0000
#define COLOR_WHITE 0xFFFF
#define COLOR_GREEN 0x07E0
#define COLOR_RED 0xF800
#define COLOR_BLUE 0x001F
// Global tilstand
bool sdInitialized = true;
bool bmeInitialized = true;
// Millis tidsmarkører og intervaller
unsigned long displayMillis = 0;
const long displayInterval = 4000; // Skift fra opstart til data efter 4 sekunder
unsigned long sensorMillis = 0;
const long sensorInterval = 60000; // Sensoropdatering hvert minut
unsigned long errorCheckMillis = 0;
const long errorCheckInterval = 30000; // Fejltjek hvert 30. sekund
bool showStartup = true; // Flag for opstartsvisning
// RGB LED kontrolfunktion
void RGB_color(int red, int green, int blue) {
analogWrite(LED_R, red);
analogWrite(LED_G, green);
analogWrite(LED_B, blue);
}
// Fejl-håndteringsfunktion
void handleError(const char* message) {
tft.setTextColor(COLOR_RED);
tft.println(message);
Serial.println(message);
RGB_color(0, 255, 0); // Rød for fejl
if (sdInitialized) {
File errorFile = sd.open("Error_Log.txt", FILE_WRITE);
if (errorFile) {
errorFile.println(message);
errorFile.close();
}
}
delay(5000);
}
// Forsøg at genoprette WiFi
void reconnectWiFi() {
tft.fillScreen(COLOR_BLACK);
tft.setTextColor(COLOR_WHITE);
tft.println("Forsøger at genoprette WiFi...");
Serial.println("Genopretter WiFi...");
RGB_color(0, 0, 255); // Blå for opstart
int attempts = 0;
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED && attempts < 10) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() != WL_CONNECTED) {
handleError("WiFi-forbindelse mislykkedes.");
} else {
tft.fillScreen(COLOR_BLACK);
tft.setTextColor(COLOR_GREEN);
tft.println("WiFi-forbindelse genoprettet!");
Serial.println("WiFi-forbindelse genoprettet.");
RGB_color(255, 0, 0); // Grøn for succes
}
}
// Kontroller SD-kortstatus
void checkSDCard() {
if (!sdInitialized && sd.begin(spiConfig)) {
tft.fillScreen(COLOR_BLACK);
tft.setTextColor(COLOR_GREEN);
tft.println("SD-kort genoprettet!");
Serial.println("SD-kort genoprettet.");
RGB_color(255, 0, 0); // Grøn for succes
sdInitialized = true;
} else if (!sdInitialized) {
handleError("SD-kort stadig utilgængeligt!");
}
}
// Kontroller BME680-status
void checkBME680() {
if (!bmeInitialized && bme.begin()) {
tft.fillScreen(COLOR_BLACK);
tft.setTextColor(COLOR_GREEN);
tft.println("BME680 genoprettet!");
Serial.println("BME680 genoprettet.");
RGB_color(255, 0, 0); // Grøn for succes
bmeInitialized = true;
} else if (!bmeInitialized) {
handleError("BME680 stadig utilgængelig!");
}
}
// Vis systemstatus på displayet
void displayStatus() {
tft.fillScreen(COLOR_BLACK);
tft.setTextColor(COLOR_WHITE);
tft.setCursor(0, 0);
tft.println("System Status:");
tft.print("WiFi: ");
if (WiFi.status() == WL_CONNECTED) {
tft.println("Tilsluttet");
tft.print("Signal: ");
tft.println(WiFi.RSSI());
} else {
tft.println("Ikke tilsluttet");
}
tft.print("SD-kort: ");
tft.println(sdInitialized ? "OK" : "Fejl");
tft.print("BME680: ");
tft.println(bmeInitialized ? "OK" : "Fejl");
}
// Initialisering af WiFi
void initWiFi() {
tft.println("Forbinder til WiFi...");
WiFi.begin(ssid, password);
int attempts = 0;
while (WiFi.status() != WL_CONNECTED && attempts < 20) {
delay(500);
Serial.print(".");
attempts++;
}
if (WiFi.status() != WL_CONNECTED) {
handleError("WiFi-forbindelse mislykkedes.");
} else {
tft.setTextColor(COLOR_GREEN);
tft.println("WiFi tilsluttet!");
Serial.print("IP-adresse: ");
Serial.println(WiFi.localIP());
RGB_color(255, 0, 0); // Grøn for succes
}
}
// Initialisering af SD-kort
void initSDCard() {
tft.println("Initialiserer SD-kort...");
if (!sd.begin(spiConfig)) {
handleError("SD-kort initialisering mislykkedes.");
sdInitialized = false;
} else {
tft.setTextColor(COLOR_GREEN);
tft.println("SD-kort OK!");
Serial.println("SD-kort initialiseret.");
RGB_color(255, 0, 0); // Grøn for succes
}
}
// Initialisering af BME680
void initBME680() {
tft.println("Initialiserer BME680...");
if (!bme.begin()) {
handleError("BME680 initialisering mislykkedes.");
bmeInitialized = false;
} else {
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setGasHeater(320, 150); // 320°C i 150 ms
tft.setTextColor(COLOR_GREEN);
tft.println("BME680 OK!");
Serial.println("BME680 initialiseret.");
}
}
// Gem sensor-data til SD-kort
void saveSensorDataToSD() {
if (sdInitialized) {
File dataFile = sd.open("sensor_data.txt", FILE_WRITE);
if (dataFile) {
dataFile.print("Temp: ");
dataFile.print(bme.temperature);
dataFile.print(" C, Fugt: ");
dataFile.print(bme.humidity);
dataFile.print(" %, Tryk: ");
dataFile.print(bme.pressure / 100.0);
dataFile.print(" hPa, Gas: ");
dataFile.print(bme.gas_resistance / 1000.0);
dataFile.println(" kOhm");
dataFile.close();
Serial.println("Data gemt på SD-kort.");
} else {
handleError("Kunne ikke skrive til SD-kortet.");
sdInitialized = false;
}
}
}
// Display sensor-data
void displaySensorData() {
tft.fillScreen(COLOR_BLACK);
tft.setTextColor(COLOR_WHITE);
tft.setTextSize(2);
tft.setCursor(10, 10);
tft.println("BME680 Data:");
tft.setCursor(10, 40);
tft.print("Temp: ");
tft.print(bme.temperature);
tft.println(" C");
tft.setCursor(10, 70);
tft.print("Fugt: ");
tft.print(bme.humidity);
tft.println(" %");
tft.setCursor(10, 100);
tft.print("Tryk: ");
tft.print(bme.pressure / 100.0);
tft.println(" hPa");
tft.setCursor(10, 130);
tft.print("Gas: ");
tft.print(bme.gas_resistance / 1000.0);
tft.println(" kOhm");
}
void setup() {
Serial.begin(9600);
while (!Serial) { ; }
tft.begin();
tft.setRotation(1);
tft.fillScreen(COLOR_BLACK);
tft.setTextSize(2);
tft.setTextColor(COLOR_WHITE);
tft.setCursor(0, 0);
tft.println("Starter system...");
delay(2000);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_B, OUTPUT);
RGB_color(0, 0, 255); // Blå for opstart
// Start tidsmarkører
displayMillis = millis();
sensorMillis = millis();
errorCheckMillis = millis();
initWiFi();
initSDCard();
initBME680();
// Udfør første måling ved opstart
if (bmeInitialized && bme.performReading()) {
displaySensorData();
saveSensorDataToSD();
}
if (sdInitialized && bmeInitialized) {
RGB_color(255, 0, 0); // Grøn for succes
}
}
void loop() {
unsigned long currentMillis = millis();
// Skift fra opstartsvisning til datavisning efter 4 sekunder
if (showStartup && currentMillis - displayMillis >= displayInterval) {
showStartup = false; // Slå opstartsvisning fra
tft.fillScreen(COLOR_BLACK); // Ryd skærmen
displaySensorData(); // Vis sensordata første gang
}
// Udfør sensormåling og gemning hvert minut
if (currentMillis - sensorMillis >= sensorInterval) {
sensorMillis = currentMillis;
if (bmeInitialized && bme.performReading()) {
displaySensorData();
saveSensorDataToSD();
}
}
// Udfør fejltjek hvert 30. sekund
if (currentMillis - errorCheckMillis >= errorCheckInterval) {
errorCheckMillis = currentMillis;
if (WiFi.status() != WL_CONNECTED) {
reconnectWiFi();
}
checkSDCard();
checkBME680();
}
}
Arduino Giga Development Platform © 2024 by Oscar Skovbo Steinmuller is licensed under Creative Commons Attribution-NonCommercial 4.0 International
