CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

Многоцелевая платформа (аналог Arduino)

В данной статье представлю опыт разработки многоцелевой платформы, аналогичной Arduino. Разработка платформы обеспечивала достижение следующих целей:
1. освоение редактора EAGLE CAD.
2. подготовка проекта к производству (учет особенностей при трассировке)
3. опыт монтажа компонентов.
4. вывод — наличие платформы с качествами Arduino и приятными дополнениями.

Состав платформы выбран следующий:
1. микроконтроллер Atmega48/8/168/328

2. линейный интегральный стабилизатор 7805

3. микросхема-календарь PCF8583P

4. драйвер двигателей L293D


Принципиальная схема очень простая, на первый взгляд бросаются очевидные вещи (отсутствие батарейки для часов).


Общий вид трассированной схемы.


Плата в сборе


Программируется микроконтроллер через разъем ISP.


Репозиторий с проектом
https://GlepFingerman@bitbucket.org/GlepFingerman/baseatmelboard.git
Репозиторий библиотеки для микросхемы PCF8583P
git@github.com:edebill/PCF8583.git


// Тестовый код управления платой
#include <Arduino.h>
#include <Wire.h>
#include <stdio.h>
#include <SoftwareSerial.h>
#include "PCF8583.h"
#include "DFPlayer_Mini_Mp3.h"
// директивы обозначения цифровых выводов управления двигателями
#define ML1 (PD7)
#define MR1 (PD5)
#define ML2 (PD6)
#define MR2 (PD4)
//директивы обозначения цифровых выводов для установленных кнопок
#define BT1 (PC3)
#define BT2 (PC2)
// директива обозначения вывода подключения температурного датчика
#define Tmp (PC0)
//
int correct_address = 0;
PCF8583 p (0xA0);

// движение вперед
void forward()
{
//
digitalWrite(ML1, HIGH);
digitalWrite(MR1, LOW);
//
digitalWrite(ML2, HIGH);
digitalWrite(MR2, LOW);
}
// поворот влево
void toLeft()
{
//
digitalWrite(ML1, LOW);
digitalWrite(MR1, HIGH);
//
digitalWrite(ML2, HIGH);
digitalWrite(MR2, LOW);
}
// поворот вправо
void toRigth()
{
//
digitalWrite(ML1, HIGH);
digitalWrite(MR1, LOW);
//
digitalWrite(ML2, LOW);
digitalWrite(MR2, HIGH);
}
// движение назад
void backward()
{
//
digitalWrite(ML1, LOW);
digitalWrite(MR1, HIGH);
//
digitalWrite(ML2, LOW);
digitalWrite(MR2, HIGH);
}

void Setup()
{
// активируем последовательный порт
Serial.begin(9600);
// выводим тестовое сообщение
Serial.print("booting...");
Serial.println(" done");
// устанавливаем режим работы цифровых выводов управления двигателями на "выход"
pinMode(ML1, OUTPUT);
pinMode(MR1, OUTPUT);
pinMode(ML2, OUTPUT);
pinMode(MR2, OUTPUT);
//
mp3_set_serial (Serial);    
mp3_set_volume (25);
delay (100);
mp3_play ();
delay (100);
}

void loop()
{
forward();
// настройка часов по последовательному порту
if(Serial.available() > 0){
       p.year = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48)) + 2000;
       p.month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.day = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));
       p.second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48));

       if(Serial.read() == ';'){
         Serial.println("setting date");
	 p.set_time();
       }
// получение даты/времени от PCF8583P
p.get_time();
char time[50];
sprintf(time, "%02d/%02d/%02d %02d:%02d:%02d", p.year, p.month, p.day, p.hour, p.minute, p.second);
Serial.println(time);
// чтение АЦП (термодатчик LM35CZ)
double tempC =  analogRead(Tmp);
// вывод в терминал температуры
Serial.print("Temp C = ");
Serial.println(tempC, DEC);
}
  • 0
  • 14 апреля 2017, 17:55
  • GLEP

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.