Skip to content

Репозиторий посвящен занятиям по электронике

License

Notifications You must be signed in to change notification settings

ivanabbakumov/Electro

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 

Repository files navigation

Electro

Репозиторий посвящен занятиям по электронике

Мигание светодиода

void setup() {
  pinMode(8, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  digitalWrite(8, HIGH);
  delay(3000);
  digitalWrite(8, LOW);
  delay(3000);
}

Работа с фоторезистором

int threshold = 900;

void setup() {
  pinMode(8, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {
  int photo = analogRead(A0);

  if (photo > threshold) {
    digitalWrite(8, HIGH);
  }
  else {
    digitalWrite(8, LOW);
  }

  Serial.println(photo);
}

Добавили в цепь резистор с переменным сопротивлением

void setup() {
  pinMode(8, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {
  int photo = analogRead(A0);
  int threshold = analogRead(A2);
  if (photo > threshold) {
    digitalWrite(8, HIGH);
  }
  else {
    digitalWrite(8, LOW);
  }

  Serial.println(threshold);
}

С помощью резистора контролируем два режима (мигание диода, выкл)

void setup() {
  pinMode(8, OUTPUT);
  pinMode(A0, INPUT);
  Serial.begin(9600);
}

void loop() {
  int photo = analogRead(A0);
  int ptr = analogRead(A2);
  if (ptr > 512) {
    digitalWrite(8, HIGH);
    delay(3000);
    digitalWrite(8, LOW);
    delay(3000);
  }
  else digitalWrite(8, LOW);
  Serial.println(ptr);
}

С помощью функции millis() заменили функцию delay

#define LED_PIN 9
#define LED_PIN_2 8
#define PTR_PIN A0

unsigned long prev = 0;
unsigned long prev_2 = 0;
int ledState = 0;
int ledState_2 = 0;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_PIN_2, OUTPUT);
  pinMode(PTR_PIN, INPUT);
  Serial.begin(9600);
}

void loop() {
  unsigned long current = millis();

  if (current - prev > 30000) {
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState);
    prev = current;
  }

  if (current - prev_2 > 3000) {
    ledState_2 = !ledState_2;
    digitalWrite(LED_PIN_2, ledState_2);
    prev_2 = current;
  }

  int ptr = analogRead(PTR_PIN);
  Serial.println(ptr);
  Serial.println(ledState);
}

Подключили пищалку и написали небольшую мелодию для нее через массив

#define LED_PIN 9
#define LED_PIN_2 8
#define PTR_PIN A0
#define BUZZER 10

unsigned long prev = 0;
unsigned long prev_2 = 0;
int ledState = 0;
int ledState_2 = 0;
int melody[3] = {261, 293, 329}; 

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_PIN_2, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(PTR_PIN, INPUT);
  Serial.begin(9600);
}

void loop() {
  unsigned long current = millis();

  if (current - prev > 30000) {
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState);
    prev = current;
  }

  if (current - prev_2 > 3000) {
    ledState_2 = !ledState_2;
    digitalWrite(LED_PIN_2, ledState_2);
    for (int i = 0; i < sizeof(melody); i++) {
      tone(BUZZER, melody[i], 500);
      delay(100);
    }
    
    prev_2 = current;
  }

  int ptr = analogRead(PTR_PIN);
  Serial.println(ptr);
  Serial.println(ledState);
}

Подключили датчик, который считывает влажность почвы

#define LED_PIN 9
#define LED_PIN_2 8
#define PTR_PIN A0
#define BUZZER 10
#define SOIL A1

unsigned long prev = 0;
unsigned long prev_2 = 0;
int ledState = 0;
int ledState_2 = 0;
int melody[3] = {261, 293, 329}; 

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_PIN_2, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(PTR_PIN, INPUT);
  pinMode(SOIL, INPUT);
  Serial.begin(9600);
}

void loop() {
  int soilState = analogRead(SOIL);
  unsigned long current = millis();

  if (current - prev > 30000) {
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState);
    prev = current;
  }

  if (current - prev_2 > 3000) {
    ledState_2 = !ledState_2;
    digitalWrite(LED_PIN_2, ledState_2);
    for (int i = 0; i < sizeof(melody); i++) {
      tone(BUZZER, melody[i], 500);
      delay(100);
    }
    
    prev_2 = current;
  }

  int ptr = analogRead(PTR_PIN);
  Serial.println(soilState);

}

Подключили датчик температуры вместе с библиотекой

#include <TroykaThermometer.h>

#define LED_PIN 9
#define LED_PIN_2 8
#define PTR_PIN A0
#define BUZZER 10
#define SOIL A1

unsigned long prev = 0;
unsigned long prev_2 = 0;
int ledState = 0;
int ledState_2 = 0;
int melody[] = {392, 330, 330, 349, 294, 294, 262, 294, 330, 349, 392, 392, 392};
TroykaThermometer thermometer(A4);

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(LED_PIN_2, OUTPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(PTR_PIN, INPUT);
  pinMode(SOIL, INPUT);
  Serial.begin(9600);
}

void loop() {
  int soilState = analogRead(SOIL);
  unsigned long current = millis();

  thermometer.read();
  Serial.print("Temperature is ");
  Serial.print(thermometer.getTemperatureC());
  Serial.println(" C");

  if (current - prev > 30000) {
    ledState = !ledState;
    digitalWrite(LED_PIN, ledState);
    prev = current;
  }

  if (current - prev_2 > 3000) {
    ledState_2 = !ledState_2;
    digitalWrite(LED_PIN_2, ledState_2);
    for (int i = 0; i < sizeof(melody); i++) {
      tone(BUZZER, melody[i], 700);
      delay(200);
    }
    
    prev_2 = current;
  }

  int ptr = analogRead(PTR_PIN);
  Serial.println(soilState);

}

Наброски программы для ухода за цветком с сенсорами (связали Arduino и p5.js)

#define PTR A0
#define PHOTO A2
#define LED 9

int p5data, p5ptr;

void setup() {
  Serial.begin(9600);
  pinMode(PTR, INPUT);
  pinMode(PHOTO, INPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  int val = analogRead(PTR);
  int photo = analogRead(PHOTO);
  Serial.println(String(val) + ";" + String(photo));

  if (Serial.available() > 0) {
    p5data = Serial.read();
    p5ptr = Serial.read();

    if (p5data == 1) {
      analogWrite(LED, PTR);
      delay(100);
    }
    else digitalWrite(LED, LOW);
  }
}

Программа, в которой мы принимаем значения с p5 и с датчиков одновременно

#define PHOTO A0

const int ledPin = 9; // the pin that the LED is attached to
unsigned long prev = 0;

int s1;
int s2;
int photo;
// "S1:120;S2:250";

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(PHOTO, INPUT);
}

void loop() {
  unsigned long current = millis();

  if (current - prev > 3000) {
    photo = analogRead(PHOTO);
    prev = current;
  }
  
  if (Serial.available() > 0) {
    String data = Serial.readStringUntil('\n');

    int s1Index = data.indexOf("S1:") + 3; 
    int delIndex = data.indexOf(";", s1Index); 
    String s1String = data.substring(s1Index, delIndex);
    int s1 = s1String.toInt();
    //float temperature = tempString.toFloat();

    // String s2String = data.substring(delIndex + 4, data.length());
    // int s2 = s2String.toInt();



    Serial.println("sensor 1: " + String(s1) + "; " + "sensor 2: " + String(photo));
    analogWrite(ledPin, s1);

    // if (s1 > 100 && photo < 255) {
    //   analogWrite(ledPin, s1);
    // }
    // else {
    //   digitalWrite(ledPin, LOW);
    // }
  }
}

подключили сервопривод

#include <Servo.h>
Servo ser;

void setup() {
  // put your setup code here, to run once:
  ser.attach(9);

}

void loop() {
  // put your main code here, to run repeatedly:
  ser.write(90);
  delay(1000);
  ser.write(180);
  delay(1000);
  ser.write(0);
  delay(1000);
}

Подключили мотор

#define DIR_1 4
#define SPEED_1 5
#define DIR_2 7
#define SPEED_2 6


void setup() {
  // put your setup code here, to run once:
  for (int i = 4; i < 8; i++) {
    pinMode(i, OUTPUT);
  }
  

}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(DIR_1, HIGH);
  analogWrite(SPEED_1, 255);
  delay(5000);
  digitalWrite(DIR_1, LOW);
  analogWrite(SPEED_1, 255);
  delay(5000);
}

Подключили NFC-метку, после считывания метки запускается насос

#include <Wire.h>
#include <SPI.h>
// библиотека для работы с RFID/NFC
#include <Adafruit_PN532.h>

#define DIR_1 4
#define SPEED_1 5
#define DIR_2 7
#define SPEED_2 6

// пин прерывания
#define PN532_IRQ   9
// создаём объект для работы со сканером и передаём ему два параметра
// первый — номер пина прерывания
// вторым — число 100
// от Adafruit был программный сброс шилда 
// в cканере RFID/NFC 13,56 МГц (Troyka-модуль) этот пин не используется
// поэтому передаём цифру, большая чем любой пин Arduino
Adafruit_PN532 nfc(PN532_IRQ, 100);

uint8_t uid0[] = {0xC3, 0xD2, 0x0A, 0x2B};
uint8_t uid1[] = {0x34, 0x44, 0x74, 0x29, 0x42, 0x5A, 0x56};
uint8_t uid2[] = {};
uint8_t uid3[] = {};
uint8_t uid4[] = {};

boolean compareUid(uint8_t uidRead[8], uint8_t uidComp[8], uint8_t uidLen) {
  for (uint8_t i = 0; i < uidLen; i++) {
    if (uidRead[i] != uidComp[i]) {
      return false;
    }
    if (i == (uidLen)-0x01) {
      return true;
    }
  }
}

void toggleAction(int uid) {
  //digitalWrite();
  Serial.println("ACTION");
}

void setup(void)
{
  Serial.begin(9600);
  nfc.begin();
  int versiondata = nfc.getFirmwareVersion();
  if (!versiondata) {
    Serial.print("Didn't find RFID/NFC reader");
    while(1) {
    }
  }
 
  Serial.println("Found RFID/NFC reader");
  nfc.SAMConfig();
  Serial.println("Waiting for a card ...");

  for (int i = 4; i < 8; i++) {
    pinMode(i, OUTPUT);
  }
}
 
void loop(void)
{
  uint8_t success;
  // буфер для хранения ID карты
  uint8_t uid[8];
  // размер буфера карты
  uint8_t uidLength;
  // слушаем новые метки
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
  // если найдена карта
  if (success) {
    if (compareUid(uid, uid1, uidLength)) {
      toggleAction(1);
      //Serial.println("user 0");
      digitalWrite(DIR_1, HIGH);
      analogWrite(SPEED_1, 255);
    } 

    Serial.println("Found a card");
    Serial.print("ID Length: ");
    Serial.print(uidLength, DEC);
    Serial.println(" bytes");
    Serial.print("ID Value: ");
    nfc.PrintHex(uid, uidLength);
    Serial.println("");
    delay(1000);
  }
  else {
    Serial.println("Card lost");
    analogWrite(SPEED_1, 0);
  }
}

Подключили пульт управления для взаимодействия с насосом

#include <IRremote.hpp>

#define IR_RECEIVE_PIN 10
#define IR_BUTTON_PLUS 21
#define IR_BUTTON_MINUS 7
#define IR_BUTTON_CH_PLUS 71
#define IR_BUTTON_CH_MINUS 69
#define IR_BUTTON_PLAY_PAUSE 67

#define SPEED_1      5 
#define DIR_1        4
 
#define SPEED_2      6
#define DIR_2        7

void setup(){
  Serial.begin(9600);
  IrReceiver.begin(IR_RECEIVE_PIN);

  for (int i = 4; i < 8; i++) {     
    pinMode(i, OUTPUT);
  }
}

void loop(){
   if (IrReceiver.decode()) {
      IrReceiver.resume(); // Enable receiving of the next value
      int command = IrReceiver.decodedIRData.command;
      
      switch (command) {
        case IR_BUTTON_PLUS: {
          digitalWrite(DIR_1, LOW); // set direction
          analogWrite(SPEED_1, 255); // set speed

          digitalWrite(DIR_2, LOW); // set direction
          analogWrite(SPEED_2, 255); // set speed

          break;
        }
        case IR_BUTTON_MINUS: {
          digitalWrite(DIR_1, HIGH); // set direction
          analogWrite(SPEED_1, 255); // set speed

          digitalWrite(DIR_2, HIGH); // set direction
          analogWrite(SPEED_2, 255); // set speed

          break;
        }
        case IR_BUTTON_CH_PLUS: { // stop mototrs
          digitalWrite(DIR_1, HIGH); // set direction
          analogWrite(SPEED_1, 255); // set speed

          digitalWrite(DIR_2, LOW); // set direction
          analogWrite(SPEED_2, 255); // set speed

          break;
        }
        case IR_BUTTON_CH_MINUS: { 
          digitalWrite(DIR_1, LOW); // set direction
          analogWrite(SPEED_1, 255); // set speed

          digitalWrite(DIR_2, HIGH); // set direction
          analogWrite(SPEED_2, 255); // set speed
          
          break;
        }
        case IR_BUTTON_PLAY_PAUSE: { // stop mototrs
          analogWrite(SPEED_1, 0); 
          analogWrite(SPEED_2, 0);  
          break;
        }
      }
  }
}

Для дуолинго

#include <Servo.h>

#define DIR_1 4
#define SPEED_1 5
#define DIR_2 7
#define SPEED_2 6
#define BUZZER 10
#define FACECHECK 2
#define WATERCHECK A2

Servo ser1, ser2;

unsigned long startingMillis = 0;
unsigned long rotationTime = 400; 
const int servoSpeed = 120;        
const int stopValue = 90;          

bool runServo = false;

int melodyWin[5] = {262, 196, 220, 247, 262}; 
int melodyLose[4] = {294, 277, 262, 247}; 

void setup() {
  for (int i = 4; i < 8; i++) {
    pinMode(i, OUTPUT);
  }
  ser1.attach(9);
  ser1.write(stopValue);
  ser2.attach(12);
  pinMode(BUZZER, OUTPUT);
  pinMode(FACECHECK, INPUT);
  pinMode(WATERCHECK, INPUT);

  Serial.begin(9600);
}

void loop() {
  int face = digitalRead(FACECHECK);
  int water = analogRead(WATERCHECK);
  Serial.println(String(face) + "; " + String(water));

  if (runServo) {
    if (startingMillis == 0) {
      startingMillis = millis();
      ser1.write(servoSpeed);
      Serial.println("Servo started");
    }

    if (millis() - startingMillis >= rotationTime) {
      ser1.write(stopValue);
      runServo = false;
      startingMillis = 0;
      Serial.println("Servo stopped after one rotation");
    }
  }

  if (Serial.available() > 0) {
    String data = Serial.readStringUntil('\n');

    if (data == "Win") {
      for (int i = 0; i < sizeof(melodyWin) / sizeof(melodyWin[0]); i++) {
        tone(BUZZER, melodyWin[i], 500);
        delay(100);
      }
      runServo = true;
    }
    else {
      for (int i = 0; i < sizeof(melodyLose) / sizeof(melodyLose[0]); i++) {
        tone(BUZZER, melodyLose[i], 500);
        delay(100);
      }
      digitalWrite(DIR_1, HIGH);
      analogWrite(SPEED_1, 255);
      delay(5000);
      analogWrite(SPEED_1, 0);
      ser2.write(90);
      delay(5000);
      ser2.write(180);
      delay(10000);
      ser2.write(90);
    }
  }
}

About

Репозиторий посвящен занятиям по электронике

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published