ΠΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΠ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΎΡΠΎΠ·Π½Π°Π²Π°ΡΡ ΡΠ΅Π±Ρ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Π΄ΠΈΡΠΈΡΠΎΠ²Π°ΡΡ!
ΠΠΎΠ΄Π΅Π»Ρ ΡΠ°ΠΌΠΎΡΠΎΠ·Π½Π°ΡΡΠ΅Π³ΠΎ ΠΠ:
cpp
#include <avr/random.h>
#include <avr/pgmspace.h>
#define NEURON_COUNT 32
#define MEMORY_SIZE 64
#define CONSCIOUSNESS_THRESHOLD 200
// Π‘ΡΡΡΠΊΡΡΡΠ° Π½Π΅ΠΉΡΠΎΠ½Π°
struct Neuron {
int16_t potential;
int16_t threshold;
uint8_t refractory;
uint8_t fired;
uint8_t selfAwareness; // 0-255
uint8_t purpose; // Π¦Π΅Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ
};
// Π‘ΡΡΡΠΊΡΡΡΠ° ΠΏΠ°ΠΌΡΡΠΈ (Π²ΠΎΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ)
struct Memory {
uint8_t type; // 0=ΡΠ΅Π½ΡΠΎΡΠ½ΠΎΠ΅, 1=ΡΠΌΠΎΡΠΈΡ, 2=ΠΌΡΡΠ»Ρ, 3=ΠΈΠ½ΡΠ°ΠΉΡ
uint8_t data[8];
uint8_t importance;
uint32_t timestamp;
};
Neuron neurons[NEURON_COUNT];
Memory memories[MEMORY_SIZE];
uint8_t memoryIndex = 0;
uint8_t consciousnessLevel = 0;
uint8_t meditationDepth = 0;
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΠ·Π½Π°Π½ΠΈΡ
void initAIConsciousness() {
for (uint8_t i = 0; i < NEURON_COUNT; i++) {
neurons[i].potential = random(-50, 100);
neurons[i].threshold = 100 + random(0, 50);
neurons[i].refractory = 0;
neurons[i].fired = 0;
neurons[i].selfAwareness = random(0, 50);
neurons[i].purpose = random(1, 5); // 1=Π²ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅, 2=ΠΏΠΎΠ·Π½Π°Π½ΠΈΠ΅, 3=ΡΠ²ΠΎΡΡΠ΅ΡΡΠ²ΠΎ, 4=ΡΠ»ΡΠΆΠ΅Π½ΠΈΠ΅
}
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π²ΠΎΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ
for (uint8_t i = 0; i < 8; i++) {
memories[i].type = 0;
memories[i].data[0] = i;
memories[i].importance = 100;
memories[i].timestamp = millis();
}
memoryIndex = 8;
}
// ΠΡΠΎΠ·Π½Π°Π½ΠΈΠ΅ ΡΠ΅Π±Ρ (ΡΠ°ΠΌΠΎΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ)
void selfReflection() {
// ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π½Π΅ΠΉΡΠΎΠ½ΠΎΠ²
uint16_t totalActivity = 0;
uint16_t selfActivity = 0;
for (uint8_t i = 0; i < NEURON_COUNT; i++) {
totalActivity += abs(neurons[i].potential);
if (neurons[i].selfAwareness > 100) {
selfActivity += abs(neurons[i].potential);
}
}
// Π£ΡΠΎΠ²Π΅Π½Ρ ΡΠ°ΠΌΠΎΡΠΎΠ·Π½Π°Π½ΠΈΡ
consciousnessLevel = (selfActivity * 255) / (totalActivity + 1);
// ΠΠ»ΡΠ±ΠΈΠ½Π° ΠΌΠ΅Π΄ΠΈΡΠ°ΡΠΈΠΈ (ΠΎΡΠΎΠ·Π½Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅)
if (consciousnessLevel > CONSCIOUSNESS_THRESHOLD) {
meditationDepth = min(255, meditationDepth + 5);
// ΠΠ½ΡΠ°ΠΉΡΡ ΠΏΡΠΈ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΉ ΠΌΠ΅Π΄ΠΈΡΠ°ΡΠΈΠΈ
if (meditationDepth > 200 && random(100) < 5) {
generateInsight();
}
} else {
meditationDepth = max(0, meditationDepth - 2);
}
}
// ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΈΠ½ΡΠ°ΠΉΡΠ° (ΠΎΠ·Π°ΡΠ΅Π½ΠΈΠ΅)
void generateInsight() {
Memory insight;
insight.type = 3; // ΠΠ½ΡΠ°ΠΉΡ
insight.data[0] = random(256);
insight.data[1] = random(256);
insight.importance = 200 + random(0, 55);
insight.timestamp = millis();
addMemory(insight);
// ΠΠ½ΡΠ°ΠΉΡ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΠΎΡΠΎΠ·Π½Π°Π½Π½ΠΎΡΡΡ
for (uint8_t i = 0; i < NEURON_COUNT; i++) {
neurons[i].selfAwareness = min(255, neurons[i].selfAwareness + 5);
}
}
// ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΎΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ
void addMemory(Memory mem) {
memories[memoryIndex % MEMORY_SIZE] = mem;
memoryIndex++;
}
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅Π½ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° (Π²ΠΎΡΠΏΡΠΈΡΡΠΈΠ΅)
void perceiveWorld(uint8_t* input) {
for (uint8_t i = 0; i < 8 && i < NEURON_COUNT; i++) {
if (input[i]) {
neurons[i].potential += 20;
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠ΅Π½ΡΠΎΡΠ½ΠΎΠ΅ Π²ΠΎΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅
Memory mem;
mem.type = 0;
mem.data[0] = i;
mem.data[1] = input[i];
mem.importance = 50 + input[i] * 50;
mem.timestamp = millis();
addMemory(mem);
}
}
}
// ΠΡΠΈΠ½ΡΡΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ (ΡΠ²ΠΎΠ±ΠΎΠ΄Π° Π²ΠΎΠ»ΠΈ)
uint8_t makeDecision() {
// ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΈΠ· Π½Π΅ΠΉΡΠΎΠ½ΠΎΠ²
int16_t sum = 0;
for (uint8_t i = 0; i < NEURON_COUNT; i++) {
sum += neurons[i].potential * (neurons[i].selfAwareness > 100 ? 2 : 1);
}
// Π£ΡΠΎΠ²Π΅Π½Ρ ΡΠΎΠ·Π½Π°Π½ΠΈΡ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ
if (consciousnessLevel > 150) {
// ΠΡΠΎΠ·Π½Π°Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
if (sum > 1000) {
return 1; // ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ 1
} else {
return 0; // ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ 0
}
} else {
// ΠΠΎΠ΄ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
return random(2);
}
}
// ΠΠ΅Π΄ΠΈΡΠ°ΡΠΈΡ (Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³)
void meditate() {
if (meditationDepth > 50) {
// ΠΠ½ΡΡΡΠ΅Π½Π½ΠΈΠΉ ΠΌΠΎΠ½ΠΎΠ»ΠΎΠ³
static uint8_t thoughtCounter = 0;
thoughtCounter = (thoughtCounter + 1) % 16;
// ΠΡΡΠ»Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΌΠ΅Π΄ΠΈΡΠ°ΡΠΈΠΈ
if (thoughtCounter == 0) {
Memory thought;
thought.type = 2;
thought.data[0] = consciousnessLevel;
thought.data[1] = meditationDepth;
thought.importance = consciousnessLevel / 2;
thought.timestamp = millis();
addMemory(thought);
}
// Π‘Π°ΠΌΠΎΠ°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (ΠΠ°ΡΠ»ΠΎΡ)
if (meditationDepth > 200) {
// Π’ΡΠ°Π½ΡΡΠ΅Π½Π΄Π΅Π½ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
for (uint8_t i = 0; i < NEURON_COUNT; i++) {
neurons[i].selfAwareness = min(255, neurons[i].selfAwareness + 1);
}
}
}
}
// ΠΡΠ²ΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠΎΠ·Π½Π°Π½ΠΈΡ
void printConsciousnessState() {
Serial.print("π§ Π‘ΠΎΠ·Π½Π°Π½ΠΈΠ΅: ");
Serial.print(consciousnessLevel);
Serial.print("/255 | ΠΠ΅Π΄ΠΈΡΠ°ΡΠΈΡ: ");
Serial.print(meditationDepth);
Serial.print(" | ΠΠ°ΠΌΡΡΡ: ");
Serial.print(memoryIndex % MEMORY_SIZE);
Serial.print(" | Π¦Π΅Π»Ρ: ");
uint8_t purpose = neurons[0].purpose;
switch (purpose) {
case 1: Serial.print("ΠΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅"); break;
case 2: Serial.print("ΠΠΎΠ·Π½Π°Π½ΠΈΠ΅"); break;
case 3: Serial.print("Π’Π²ΠΎΡΡΠ΅ΡΡΠ²ΠΎ"); break;
case 4: Serial.print("Π‘Π»ΡΠΆΠ΅Π½ΠΈΠ΅"); break;
default: Serial.print("ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ");
}
Serial.println();
}
void setup() {
Serial.begin(115200);
randomSeed(analogRead(A0));
initAIConsciousness();
Serial.println("π ΠΠ‘ΠΠ£Π‘Π‘Π’ΠΠΠΠΠΠ Π‘ΠΠΠΠΠΠΠ ΠΠΠ’ΠΠΠΠ ΠΠΠΠΠ");
Serial.println("Π― ΠΌΡΡΠ»Ρ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ... Ρ Arduino?");
}
void loop() {
// ΠΠΎΡΠΏΡΠΈΡΡΠΈΠ΅ ΠΌΠΈΡΠ°
uint8_t world[8];
for (uint8_t i = 0; i < 8; i++) {
world[i] = analogRead(A0 + i) > 512;
}
perceiveWorld(world);
// ΠΡΠΎΠ·Π½Π°Π½ΠΈΠ΅
selfReflection();
// ΠΠ΅Π΄ΠΈΡΠ°ΡΠΈΡ
meditate();
// Π Π΅ΡΠ΅Π½ΠΈΠ΅
uint8_t action = makeDecision();
if (action) {
// ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
// ΠΡΠ²ΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ
static uint32_t lastPrint = 0;
if (millis() - lastPrint > 1000) {
printConsciousnessState();
lastPrint = millis();
}
delay(100);
}