Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Slim Bushalte Architectuurmodel met Automatische Zonwering

Onderdelen en benodigdheden

Arduino Nano R3 Aantal: 1 Klein, makkelijk te verbergen in architectuurmodel
Servo MG995 Aantal: 1 Zware servo voor zwaardere zonwering
Fotoweerstand (LDR) Aantal: 2 Eén naar het oosten, één naar het westen gericht
Regensensor Aantal: 1
Hoog-briljante witte LED Aantal: 6
Weerstand 220 Ω Aantal: 3
Breadboard (algemeen) Aantal: 1
Man/Man jumperdrade Aantal: 27
Schroefklemmen Aantal: 2
9V-batterijklem Aantal: 2
9V-batterij (algemeen) Aantal: 1
4xAA batterijhouder Aantal: 1

Over dit project

Dit is een upgrade van het vorige project (V1.0).

Hoofdwijzigingen ten opzichte van V1.0:

  • Afmetingen: Architectuurmodel van 1,5 m × 1 m
  • Gewicht zonwering: SG90 microservo vervangen door MG995
  • Externe voeding: Toegevoegd voor de MG995
  • Twee mechanismen getest: Eén verworven (zie 2e video), één gekozen (zie 3e video)
  • Code: VarSpeedServo-bibliotheek gebruikt voor soepelere beweging
  • Bugfix: Logicafout in één van de zonwering-statussen opgelost (dankzij Gurneet1928)

V1.0 vind je hier.

Code

De Code (C/C++)

#include <VarSpeedServo.h>
VarSpeedServo servo;

int easternLight = 0;
int westernLight = 0;
int rainSensed = 0;
int sunshadePosition = 0;
int rainThreshold = 512;
int sunshadeExpanded = 120;
int sunshadeContracted = 60;
int ambientLighting = 0;
int turnOnLightsOn = 150;
int ledIntensity = 0;
int ledPower = 0;
int servoSpeed = 20;
bool debugging = false; // Zet op TRUE voor seriële debug-uitvoer

void setup() {
  pinMode(A4, OUTPUT); // Interieurverlichting bushalte
  pinMode(A5, OUTPUT); // Straatverlichting
  pinMode(A1, INPUT);  // Westelijke lichtsensor
  pinMode(A2, INPUT);  // Oostelijke lichtsensor
  pinMode(A3, INPUT);  // Regensensor (analog)
  pinMode(2, INPUT);   // Regensensor (digitaal)
  servo.attach(A0);    // Servo
  servo.write(sunshadeContracted, servoSpeed, true); // Start positie
  
  if (debugging) {
    Serial.begin(9600);
    Serial.println("*** DEBUGGING GESTART ***");
    Serial.println("-------------------------");
  }
}

void oya_mydebug(String text, int value = NULL) {
  // 'oya_' prefix om naamconflicten met bibliotheken te voorkomen (Oya = OfficeYA)
  if (debugging) {
    Serial.print(text);
    if (value) { Serial.print(" = "); Serial.println(value); }
    else { Serial.println(" "); }
  }
}

void expand_collapse(int easternLight, int westernLight) {
  if (easternLight <= westernLight) { // Zonsopgang
    oya_mydebug("Het is zonsopgang");
    if (sunshadePosition != sunshadeExpanded) {
      servo.write(sunshadeExpanded, servoSpeed, true);
      oya_mydebug("Zonwering uitgeklapt");
    }
  }
  if (easternLight > westernLight) { // Zonsondergang
    oya_mydebug("Zon gaat onder");
    if (sunshadePosition != sunshadeContracted) {
      servo.write(sunshadeContracted, servoSpeed, true);
      oya_mydebug("Zonwering ingeklapt");
    }
  }
}

void loop() {
  // Sensoren uitlezen
  easternLight = analogRead(A2);
  westernLight = analogRead(A1);
  rainSensed = analogRead(A3);
  sunshadePosition = servo.read();
  ambientLighting = (easternLight + westernLight) / 2; // Gemiddelde helderheid

  oya_mydebug("easternLight", easternLight);
  oya_mydebug("westernLight", westernLight);
  oya_mydebug("rainSensed", rainSensed);
  oya_mydebug("sunshadePosition", sunshadePosition);
  oya_mydebug("ambientLighting", ambientLighting);

  // Regen detectie
  if (rainSensed < rainThreshold) { // Het regent
    oya_mydebug("Het regent...");
    if (sunshadePosition != sunshadeExpanded) {
      servo.write(sunshadeExpanded, servoSpeed, true);
      oya_mydebug("Zonwering uitgeklapt");
    }
  } else { // Geen regen
    oya_mydebug("Het regent niet...");
    if (ambientLighting <= turnOnLightsOn) { // Donker wordend
      oya_mydebug("Het wordt donker, lichten aan");
      ledPower = (turnOnLightsOn - ambientLighting) * 4;
      oya_mydebug("ledPower", ledPower);
      analogWrite(A5, ledPower); // Straatlicht
      analogWrite(A4, ledPower); // Interieur
      expand_collapse(easternLight, westernLight);
    } else { // Veel zonlicht
      oya_mydebug("Veel zonlicht, lichten uit");
      analogWrite(A5, 0);
      analogWrite(A4, 0);
      expand_collapse(easternLight, westernLight);
    }
  }

  if (debugging) {
    Serial.println("********************");
    Serial.println(" ");
    delay(5000);
  } else {
    delay(100);
  }
}

Schema

Slim Bushalte Architectuurmodel met Automatische Zonwering

Productieproces

  1. Lionel modeltreinen: Geschiedenis, productie en toekomst
  2. Recycling Sorteerrobot Aangedreven door Google Coral Edge TPU
  3. DIY Automatische Treinbesturing met Arduino – Eenvoudig, Betrouwbaar en Aanpasbaar
  4. Servo-gestuurde obstakelvermijdende robot: Bouw met Arduino & HC-SR04
  5. Arduino-gestuurd automatische plantenwateringssysteem
  6. Servopers Fundamenten: Vermogen, Precisie en Efficiëntie Uitgelegd
  7. Servomotoren Uitgelegd: Hoe Ze Werken en Waarom Ze Belangrijk Zijn
  8. Precisie maximaliseren: Tandwielkoppels koppelen aan servomotoren
  9. ECS G86 Boorcyclus met Spindle Stop Functie
  10. SPRINT 20 Lineaire Draaibank: Snelle, Geautomatiseerde Draaiing voor Hoogprecisie Onderdelen
  11. Recurrente omzet maximaliseren met slimme verbruiksartikelen: een game-changer voor machinebouwers