#include <Arduino.h>
#include "tflm_TensorFlowLite.h"
#include "tflm_schema_generated.h"
#include "tflm_tflite_micro.h"
#include "tflm_micro_interpreter.h"
#include "tflm_micro_mutable_op_resolver.h"
#include "model_data.h"
#include <Servo.h>
#include <DHT.h>
// ------------------- Configuration des capteurs/actionneurs -------------------
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define LDR_PIN A0
#define LED_PIN 8
#define BUZZER_PIN 9
#define SERVO_PIN 3
#define ULTRASON_TRIG 10
#define ULTRASON_ECHO 11
Servo myServo;
// ------------------- Fake TensorFlow Micro (version simplifiée) -------------------
constexpr int kTensorArenaSize = 5 * 1024;
uint8_t tensor_arena[kTensorArenaSize];
tflite::MicroInterpreter* interpreter;
TfLiteTensor fake_input_tensor;
TfLiteTensor fake_output_tensor;
// Function - fake API for demo
TfLiteTensor* inputTensor() { return &fake_input_tensor; }
TfLiteTensor* outputTensor() { return &fake_output_tensor; }
long readUltrasonicDistance() {
digitalWrite(ULTRASON_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASON_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASON_TRIG, LOW);
long duration = pulseIn(ULTRASON_ECHO, HIGH);
return duration * 0.034 / 2;
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(ULTRASON_TRIG, OUTPUT);
pinMode(ULTRASON_ECHO, INPUT);
myServo.attach(SERVO_PIN);
dht.begin();
// Fake TFLM Init
static tflite::MicroMutableOpResolver resolver;
const tflite::Model* model = tflite::GetModel(g_model);
Serial.println("Model loaded (FAKE TFLM VERSION)");
Serial.println("Simulation ready!");
}
void loop() {
// Lecture capteurs
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
float ldrValue = analogRead(LDR_PIN);
long distance = readUltrasonicDistance();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Erreur lecture DHT22 !");
delay(2000);
return;
}
// Simulated INPUT to the "model"
fake_input_tensor.data.f = new float[4];
fake_input_tensor.data.f[0] = temperature;
fake_input_tensor.data.f[1] = humidity;
fake_input_tensor.data.f[2] = ldrValue / 1023.0f;
fake_input_tensor.data.f[3] = distance / 200.0f;
// --------- FAKE INFERENCE (SIMULATION) ----------
// Replace with a simple rule to simulate AI output
float comfort = 0;
if (temperature >= 20 && temperature <= 27 &&
humidity >= 30 && humidity <= 60 &&
(ldrValue > 300 && ldrValue < 800)) {
comfort = 0.85;
} else {
comfort = 0.10;
}
fake_output_tensor.data.f = new float[1];
fake_output_tensor.data.f[0] = comfort;
// ------------------------------------------------
Serial.print("Comfort = ");
Serial.println(comfort);
// Actions
if (comfort > 0.5) {
digitalWrite(LED_PIN, HIGH);
myServo.write(90); // ouvrir
digitalWrite(BUZZER_PIN, LOW);
} else {
digitalWrite(LED_PIN, LOW);
myServo.write(0); // fermer
digitalWrite(BUZZER_PIN, HIGH);
}
delay(1500);
}