Arduino Giga Development Platform
We calculate the final price from your selected file. You review and accept it before payment.
Saved on this device.
This is an Arduino Development platform, the possibilities are endless. Let the work begin.
- Rating
- 0 / 5
- Likes
- 5
- Downloads
- 31
- Makes
- 0
- Views
- 218
- Reviews
- 0
Updated at source:
Model information
- Source
- Printables
- Category
- Other Gadgets
- License
- 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
