Архив рубрики ‘Микроконтроллеры’

На AliExpress продается маленький и недорогой модуль радиоуправления с четырьмя каналами. Называется он IC 2262/2272

80071-IC-2262-2272-315MHZ-4-Channel-Wireless-Remote-Control-Kits-4-key-For-Arduino-Free

Такой модуль идеально подойдет для машинки на радиоуправлении. Один канал пойдет на левые колеса, один на правые, один на фары и один на сигнал. Управлять моторчиками нужно будет, естественно, через транзисторы. Причем можно сигнал зашифровать, чтобы он случайно не управлял соседским модулем, если сосед тоже себе такой закажет.

Хочется ли вам сделать свой дом немного умнее? Всем привет! Есть простая вещь, дающая почувствовать, что вы живете в мире высоких технологий, а именно — управление бытовыми приборами через смартфоны. Делается это с помощью микроконтроллеров и, в нашем случаем, реле. Создадим простой скетч в Протеусе, где будем моделировать управление обычной лампой, питающейся из розетки 220В, с помощью Ардуино.

dispenser

Реле старо как мир, принцип его работы основан на магните, но он все так же хорошо делает свое дело — отделяет силовую часть от логической. Скетч чрезвычайно прост, сейчас я его немного поясню. Здесь в качестве смартфона выступает виртуальный терминал. В реальной жизни можно написать программку для айфона или андроида, которая будет подключаться к bluetooth модулю Ардуино и посылать команды. Команды могут быть любыми, в данном случае у меня «1» для включения, «2» для выключения. Программа просто слушает последовательный порт и посылает сигнал на транзистор, который открывается и подает напряжение на реле, которое в свою очередь срабатывает и включает/выключает лампу.

#define RELAY_PIN 13
int m_state = -1;

void setup() {
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);

  Serial.begin(9600);
}

void loop() {
   while(m_state == -1){
    m_state = Serial.read();
  }
  switch(m_state){
    case '1' : 
      digitalWrite(RELAY_PIN, HIGH);
      break;
    case '2' : 
      digitalWrite(RELAY_PIN, LOW);
      break;
    default:
      break;
  }
 
  m_state = -1;
}

Напишем простенькое приложение, которое будет показывать нам температуру в комнате. В качестве аппаратной платформы возьмем Arduino и датчик влажности DHT11. Подключим библиотеку DHT и накидаем такой скетч

#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  delay(2000);
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  Serial.println(t);
}

Он шлет температуру на последовательный порт. Теперь надо бы как-нибудь ее считывать и отображать. Но что-то не хочется ставить тяжеловесное решение вроде Visual Studio, писать программу на каком-нибудь WPF или еще круче — поднять веб сервер и отображать данные на сайте в реальном времени с помощью каких-нибудь веб сокетов… К счастью, существует замечательная платформа Processing. Более того, IDE для Arduino безбожно передирался с этого самого процессинга. В двух словах, это еще один С-образный язык, который позволяет легко делать несложные графики и анимации. Но самая интересная для нас фишка — это возможность взаимодействия с COM-портом. Можно сделать так, что цвет фона будет меняться в зависимости от температуры, но так как комнатная температура у меня не подвержена большим скачкам, что я решил просто выводить показание температуры на черном фоне. А вот и сама программа

import processing.serial.*; 

Serial port; 
float temperature =0; 

void setup() 
{ 
  size (200,200); 
  port = new Serial(this, "COM3", 9600); 
  port.bufferUntil('\n');
}

void draw () 
{ 
  background(0, 0, 0);  
  textSize(32);
  text(nf(temperature, 2, 1), 60, 100); 
} 

void serialEvent (Serial port) 
{ 
  temperature = float(port.readStringUntil('\n')); 
  println(temperature);
}

В конце увидим что-то похожее на это

Безымянный